Diferencia entre revisiones de «Web Services Con Oracle»

De Dos Ideas.
Saltar a: navegación, buscar
(Como ejecutar un web service deployado en un Application Server desde Oracle SQL o PL/SQL.)
 
 
(No se muestran 5 ediciones intermedias de otro usuario)
Línea 1: Línea 1:
 
+
[[Category:Web Service]]
 +
[[Category:Oracle]]
 
Vamos a ver como ejecutar un web service deployado en un Application Server desde Oracle SQL o PL/SQL.
 
Vamos a ver como ejecutar un web service deployado en un Application Server desde Oracle SQL o PL/SQL.
  
Línea 5: Línea 6:
 
En primer lugar vamos a crear y deployar un Web Service sencillo utilizando el IDE NetBeans 6.5.
 
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:
 
Para realizar esto, seguir los pasos indicados en el siguiente tutorial:
[http://www.netbeans.org/kb/docs/websvc/jax-ws.html]
+
[http://www.netbeans.org/kb/docs/websvc/jax-ws.html Getting Started with JAX-WS Web Services]
  
 
Como resultado obtendremos el Web Service CalculatorWS con la operacion Add,
 
Como resultado obtendremos el Web Service CalculatorWS con la operacion Add,
Línea 12: Línea 13:
 
'''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.
 
'''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 ==
+
== Verificar JVM Oracle ==
 
En segundo lugar vamos a verificar si Oracle esta preparado para ejecutar un Web Service.
 
En segundo lugar vamos a verificar si Oracle esta preparado para ejecutar un Web Service.
  
Línea 29: Línea 30:
  
 
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'''
  
 
Bajar JPublisher 10.2 desde la siguiente URL:
 
Bajar JPublisher 10.2 desde la siguiente URL:
[http://www.oracle.com/technology/software/tech/java/sqlj_jdbc/index.html]
+
[http://www.oracle.com/technology/software/tech/java/sqlj_jdbc/index.html JDBC, SQLJ, Oracle JPublisher and Universal Connection Pool (UCP)]
  
 
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 74:
  
 
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 81:
 
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 115:
  
 
   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 actual del 18:06 26 ago 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 JVM 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: JDBC, SQLJ, Oracle JPublisher and Universal Connection Pool (UCP)

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