Diferencia entre revisiones de «Web Services Con Oracle»

De Dos Ideas.
Saltar a: navegación, buscar
(Crear un Web Service)
(En Oracle Database 10g)
Línea 29: Línea 29:
  
 
Bajar Oracle DBWS Callout Utility 10.1.3.1 desde la siguiente URL:
 
Bajar Oracle DBWS Callout Utility 10.1.3.1 desde la siguiente URL:
[http://www.oracle.com/technology/sample_code/tech/java/jsp/dbwebservices.html]
+
[http://www.oracle.com/technology/sample_code/tech/java/jsp/dbwebservices.html Database Web Services Samples and How-To]
  
 
Deszipear el archivo de la siguiente manera:
 
Deszipear el archivo de la siguiente manera:
 
+
  unzip dbws-callout-utility-10131.zip sqlj/* -d $ORACLE_HOME
% unzip dbws-callout-utility-10131.zip sqlj/* -d $ORACLE_HOME
+
  unzip dbws-callout-utility-10131.zip samples/* -d $ORACLE_HOME/sqlj
% unzip dbws-callout-utility-10131.zip samples/* -d $ORACLE_HOME/sqlj
+
  unzip dbws-callout-utility-10131.zip README* -d $ORACLE_HOME/sqlj
% unzip dbws-callout-utility-10131.zip README* -d $ORACLE_HOME/sqlj
 
  
 
'''Oracle JPublisher 10.2'''
 
'''Oracle JPublisher 10.2'''
Línea 43: Línea 42:
  
 
Deszipear el archivo de la siguiente manera:
 
Deszipear el archivo de la siguiente manera:
% unzip jpub_102.zip sqlj/* -d $ORACLE_HOME
+
  unzip jpub_102.zip sqlj/* -d $ORACLE_HOME
  
 
En Unix modificar el CLASSPATH en el script $ORACLE_HOME/sqlj/bin/jpub de la siguiente manera:
 
En Unix modificar el CLASSPATH en el script $ORACLE_HOME/sqlj/bin/jpub de la siguiente manera:
 
+
  TMPCLASSPATH=$ORACLE_HOME/sqlj/lib/dbwsa.jar:$ORACLE_HOME/jdk/lib/dt.jar:\
TMPCLASSPATH=$ORACLE_HOME/sqlj/lib/dbwsa.jar:$ORACLE_HOME/jdk/lib/dt.jar:\
+
  $ORACLE_HOME/jdk/lib/tools.jar:$ORACLE_HOME/jlib/javax-ssl-1_2.jar:\
$ORACLE_HOME/jdk/lib/tools.jar:$ORACLE_HOME/jlib/javax-ssl-1_2.jar:\
+
  $ORACLE_HOME/jlib/jssl-1_2.jar:$ORACLE_HOME/jdbc/lib/ojdbc14.jar:\
$ORACLE_HOME/jlib/jssl-1_2.jar:$ORACLE_HOME/jdbc/lib/ojdbc14.jar:\
+
  $ORACLE_HOME/sqlj/lib/runtime12.jar:$ORACLE_HOME/jlib/orai18n.jar:\
$ORACLE_HOME/sqlj/lib/runtime12.jar:$ORACLE_HOME/jlib/orai18n.jar:\
+
  $ORACLE_HOME/sqlj/lib/translator.jar:$ORACLE_HOME/javavm/lib/aurora.zip:\
$ORACLE_HOME/sqlj/lib/translator.jar:$ORACLE_HOME/javavm/lib/aurora.zip:\
+
  $ORACLE_HOME/rdbms/jlib/xdb.jar:\
$ORACLE_HOME/rdbms/jlib/xdb.jar:\
+
  $ORACLE_HOME/lib/xsu12.jar:$ORACLE_HOME/rdbms/jlib/jndi.jar:\
$ORACLE_HOME/lib/xsu12.jar:$ORACLE_HOME/rdbms/jlib/jndi.jar:\
+
  $ORACLE_HOME/rdbms/jlib/aqapi.jar:$ORACLE_HOME/rdbms/jlib/jmscommon.jar:\
$ORACLE_HOME/rdbms/jlib/aqapi.jar:$ORACLE_HOME/rdbms/jlib/jmscommon.jar:\
+
  $ORACLE_HOME/lib/xmlparserv2.jar:$CLASSPATH
$ORACLE_HOME/lib/xmlparserv2.jar:$CLASSPATH
+
  export TMPCLASSPATH
export TMPCLASSPATH
 
  
 
En Windows agregar a la variable de ambiente CLASSPATH lo siguiente:
 
En Windows agregar a la variable de ambiente CLASSPATH lo siguiente:
  
set CLASSPATH=%ORACLE_HOME%\sqlj\lib\dbwsa.jar;%ORACLE_HOME%\jdk\lib\dt.jar;
+
  set CLASSPATH=%ORACLE_HOME%\sqlj\lib\dbwsa.jar;%ORACLE_HOME%\jdk\lib\dt.jar;
%ORACLE_HOME%\jdk\lib\tools.jar;%ORACLE_HOME%\jlib\javax-ssl-1_2.jar;
+
  %ORACLE_HOME%\jdk\lib\tools.jar;%ORACLE_HOME%\jlib\javax-ssl-1_2.jar;
%ORACLE_HOME%\jlib\jssl-1_2.jar;%ORACLE_HOME%\jdbc\lib\ojdbc14.jar;
+
  %ORACLE_HOME%\jlib\jssl-1_2.jar;%ORACLE_HOME%\jdbc\lib\ojdbc14.jar;
%ORACLE_HOME%\sqlj\lib\runtime12.jar;%ORACLE_HOME%\jlib\orai18n.jar;
+
  %ORACLE_HOME%\sqlj\lib\runtime12.jar;%ORACLE_HOME%\jlib\orai18n.jar;
%ORACLE_HOME%\sqlj\lib\translator.jar;%ORACLE_HOME%\javavm\lib\aurora.zip;
+
  %ORACLE_HOME%\sqlj\lib\translator.jar;%ORACLE_HOME%\javavm\lib\aurora.zip;
%ORACLE_HOME%\rdbms\jlib\xdb.jar;
+
  %ORACLE_HOME%\rdbms\jlib\xdb.jar;
%ORACLE_HOME%\lib\xsu12.jar:%ORACLE_HOME%\rdbms\jlib\jndi.jar;
+
  %ORACLE_HOME%\lib\xsu12.jar:%ORACLE_HOME%\rdbms\jlib\jndi.jar;
%ORACLE_HOME%\rdbms\jlib\aqapi.jar;%ORACLE_HOME%\rdbms\jlib\jmscommon.jar;
+
  %ORACLE_HOME%\rdbms\jlib\aqapi.jar;%ORACLE_HOME%\rdbms\jlib\jmscommon.jar;
%ORACLE_HOME%\lib\xmlparserv2.jar:%CLASSPATH%
+
  %ORACLE_HOME%\lib\xmlparserv2.jar:%CLASSPATH%
  
 
'''Version de Java'''
 
'''Version de Java'''
Línea 75: Línea 73:
  
 
Por lo tanto antes de continuar aseguremonos que esta version es la que esta en el PATH:
 
Por lo tanto antes de continuar aseguremonos que esta version es la que esta en el PATH:
% export PATH=$ORACLE_HOME/jdk/bin:$ORACLE_HOME/sqlj/bin:$PATH
+
  % export PATH=$ORACLE_HOME/jdk/bin:$ORACLE_HOME/sqlj/bin:$PATH
  
  
Línea 82: Línea 80:
 
Si estamos en Oracle Database Server 10g Release 1 (10.1)
 
Si estamos en Oracle Database Server 10g Release 1 (10.1)
  
% loadjava -u usuario/password -r -v -f -genmissing -s -grant public dbwsclientws.jar dbwsclientdb101.jar
+
  % loadjava -u usuario/password -r -v -f -genmissing -s -grant public dbwsclientws.jar dbwsclientdb101.jar
  
 
Si estamos en Oracle Database Server 10g Release 2 (10.2)
 
Si estamos en Oracle Database Server 10g Release 2 (10.2)
  
% loadjava -u usuario/password -r -v -f -genmissing -s -grant public dbwsclientws.jar dbwsclientdb102.jar  
+
  % loadjava -u usuario/password -r -v -f -genmissing -s -grant public dbwsclientws.jar dbwsclientdb102.jar  
  
 
'''NOTA''': usuario/password
 
'''NOTA''': usuario/password
Línea 116: Línea 114:
  
 
   sqlplus scott/tiger
 
   sqlplus scott/tiger
 
 
   SQL> select jpub_plsql_wrapper.suma(37,30) from dual;
 
   SQL> select jpub_plsql_wrapper.suma(37,30) from dual;
 
 
   Resultado: 67
 
   Resultado: 67

Revisión del 19:19 17 abr 2009

Vamos a ver como ejecutar un web service deployado en un Application Server desde Oracle SQL o PL/SQL.

Crear un Web Service

En primer lugar vamos a crear y deployar un Web Service sencillo utilizando el IDE NetBeans 6.5. Para realizar esto, seguir los pasos indicados en el siguiente tutorial: Getting Started with JAX-WS Web Services

Como resultado obtendremos el Web Service CalculatorWS con la operacion Add, que recibe 2 parametros numericos y devuelve como resultado la suma de ambos numeros.

NOTA: Renombrar la operacion Add por Suma, porque ADD es una palabra reservada en Oracle y luego hay problemas al intentar ejecutar el Web Service desde la base de datos.

Verificar Oracle

En segundo lugar vamos a verificar si Oracle esta preparado para ejecutar un Web Service.

Como primer medida tenemos que verificar que la JVM este instalada dentro de la base de datos con la que vamos a trabajar.

Conectarse a la base de datos como un usuario DBA (puede ser SYS o SYSTEM) y realizar la siguiente consulta.

SQL> SELECT status, count(*) 
       FROM DBA_OBJECTS
      WHERE OBJECT_TYPE='JAVA CLASS'
      GROUP BY status; 

Como resultado deben estar todos los objetos VALID y la cantidad ser mayor que 0.

En Oracle Database 10g

Oracle DBWS Callout Utility

Bajar Oracle DBWS Callout Utility 10.1.3.1 desde la siguiente URL: Database Web Services Samples and How-To

Deszipear el archivo de la siguiente manera:

 unzip dbws-callout-utility-10131.zip sqlj/* -d $ORACLE_HOME
 unzip dbws-callout-utility-10131.zip samples/* -d $ORACLE_HOME/sqlj
 unzip dbws-callout-utility-10131.zip README* -d $ORACLE_HOME/sqlj

Oracle JPublisher 10.2

Bajar JPublisher 10.2 desde la siguiente URL: [1]

Deszipear el archivo de la siguiente manera:

 unzip jpub_102.zip sqlj/* -d $ORACLE_HOME

En Unix modificar el CLASSPATH en el script $ORACLE_HOME/sqlj/bin/jpub de la siguiente manera:

 TMPCLASSPATH=$ORACLE_HOME/sqlj/lib/dbwsa.jar:$ORACLE_HOME/jdk/lib/dt.jar:\
 $ORACLE_HOME/jdk/lib/tools.jar:$ORACLE_HOME/jlib/javax-ssl-1_2.jar:\
 $ORACLE_HOME/jlib/jssl-1_2.jar:$ORACLE_HOME/jdbc/lib/ojdbc14.jar:\
 $ORACLE_HOME/sqlj/lib/runtime12.jar:$ORACLE_HOME/jlib/orai18n.jar:\
 $ORACLE_HOME/sqlj/lib/translator.jar:$ORACLE_HOME/javavm/lib/aurora.zip:\
 $ORACLE_HOME/rdbms/jlib/xdb.jar:\
 $ORACLE_HOME/lib/xsu12.jar:$ORACLE_HOME/rdbms/jlib/jndi.jar:\
 $ORACLE_HOME/rdbms/jlib/aqapi.jar:$ORACLE_HOME/rdbms/jlib/jmscommon.jar:\
 $ORACLE_HOME/lib/xmlparserv2.jar:$CLASSPATH
 export TMPCLASSPATH

En Windows agregar a la variable de ambiente CLASSPATH lo siguiente:

 set CLASSPATH=%ORACLE_HOME%\sqlj\lib\dbwsa.jar;%ORACLE_HOME%\jdk\lib\dt.jar;
 %ORACLE_HOME%\jdk\lib\tools.jar;%ORACLE_HOME%\jlib\javax-ssl-1_2.jar;
 %ORACLE_HOME%\jlib\jssl-1_2.jar;%ORACLE_HOME%\jdbc\lib\ojdbc14.jar;
 %ORACLE_HOME%\sqlj\lib\runtime12.jar;%ORACLE_HOME%\jlib\orai18n.jar;
 %ORACLE_HOME%\sqlj\lib\translator.jar;%ORACLE_HOME%\javavm\lib\aurora.zip;
 %ORACLE_HOME%\rdbms\jlib\xdb.jar;
 %ORACLE_HOME%\lib\xsu12.jar:%ORACLE_HOME%\rdbms\jlib\jndi.jar;
 %ORACLE_HOME%\rdbms\jlib\aqapi.jar;%ORACLE_HOME%\rdbms\jlib\jmscommon.jar;
 %ORACLE_HOME%\lib\xmlparserv2.jar:%CLASSPATH%

Version de Java

La base de datos Oracle 10g tiene embebida una JVM version 1.4, por lo tanto todas las clases que carguemos en la base de datos deben ser compiladas con JDK 1.4

Por lo tanto antes de continuar aseguremonos que esta version es la que esta en el PATH:

 % export PATH=$ORACLE_HOME/jdk/bin:$ORACLE_HOME/sqlj/bin:$PATH


Load WebService Client en la Base

Si estamos en Oracle Database Server 10g Release 1 (10.1)

 % loadjava -u usuario/password -r -v -f -genmissing -s -grant public dbwsclientws.jar dbwsclientdb101.jar

Si estamos en Oracle Database Server 10g Release 2 (10.2)

 % loadjava -u usuario/password -r -v -f -genmissing -s -grant public dbwsclientws.jar dbwsclientdb102.jar 

NOTA: usuario/password Podríamos cargar el WebService Client en el usuario SYS, pero si en algun momento queremos borrarlo, nos conviene que este separado en otro esquema, por ejemplo DBWSCLI.


Permisos

Con SQL*Plus dar los privilegios necesarios con un usuario DBA:

 SQL> call dbms_java.grant_permission( 'SCOTT', 'SYS:java.lang.RuntimePermission', 'shutdownHooks',  );
 SQL> call dbms_java.grant_permission( 'SCOTT', 'SYS:java.util.logging.LoggingPermission', 'control',  );
 SQL> call dbms_java.grant_permission( 'SCOTT', 'SYS:java.lang.RuntimePermission', 'setFactory',  ); 

Si al ejecutar el JPublisher da error, mirar los trace de la base de datos para ver como solucionarlo. En el caso del ejemplo que vamos a ejecutar, dio un error, y tuve que agregar el siguiente privilegio:

 SQL> call dbms_java.grant_permission( 'SCOTT', 'SYS:oracle.aurora.security.JServerPermission', 'LoadClassInPackage.java.lang.StringBuilder',  );

Usando el JPublisher

Tener seteadas las variables de ambiente. ORACLE_HOME; ORACLE_SID; PATH; CLASSPATH segun se detallo mas arriba.

 jpub -u scott/tiger -sysuser system/****** -proxywsdl=http://localhost:8080/CalculatorWSApplication/CalculatorWSService?WSDL -endpoint=http://localhost:8080/CalculatorWSApplication/CalculatorWSService -package=prueba -dir=prueba

NOTA: si con localhost no funciona reemplazar por el hostname.

Ejecutando el Test

 sqlplus scott/tiger
 SQL> select jpub_plsql_wrapper.suma(37,30) from dual;
 Resultado: 67