Está en la página 1de 16

Database Web Services

Jesús Robles
Oracle Ibérica
Jesus.robles@oracle.com

1
Agenda
• Database Web Services”.
• 9i cómo “Web Services Provider” .
• Cómo tratar con Tipos de Datos no
soportados.
• 9i cómo “Web Services Consumer”.

9i cómo “Web Services


Provider”
J2EE
(Business Logic)

Oracle9iAS
SOAP JDBC Web
PL/SQL Java
Web Service Services Data
Client Oracle9iiAS
Oracle9
Framework
SQL/DML Data Logic
XML

SQL/Query AQ/Streams

2
9i cómo “Web Services Consumer”

Oracle9iAS SOAP Message


Web PL/SQL
Services Web Service
Framework
SQL Java XML Data Provider
Data Logic
Batch
Jobs Service

WSDL

Agenda
? Motivos para los denominados “Database
Web Services”.
?9i cómo “Web Services Provider”

? Cómo tratar con Tipos de Datos no

soportados.
? 9i cómo “Web ServicesConsumer”

3
9i cómo “Web Services Provider”

? Capacidades de Oracle9i
• PL/SQL stored procedures
• Java classes
• SQL Queries and DML
• XML capabilities (XDB)
• Advanced Queuing (AQ) and Streams
? Acceso tradicional vía JDBC/JMS.
? A partir de ahora accesible a partir de Web

services

Web Services Provider


Oracle9iAS Containers for J2EE

SOAP
Decoding
Endpoint implicitly
specifies the type of OC4J
service provided by
the server Web Oracle
Services JPublisher
Servlet Generated
Java JDBC
SOAP SQLJ
Encoding Classes

SOAP
XML Parser
Libraries

4
Publicación de PL/SQL.
A través de Oracle9i JDeveloper
– Automático, Dirigido a través de
asistentes (Wizards)
Oracle9iAS Web Services Assembler
– Línea de comandos.

Publicacióncon via Oracle9i JDeveloper

5
?Publicació a través de WSA

? Web Services Assembler (WSA)


– Paquete PL/SQL expuesto.
– Informaci ón de Conexión para la generación de código
Java
– Nombre y paquete de la clase generada, nombre del
archivo EAR.
– Web context y URL

java -jar WebServicesAssembler.jar -config config.xml

? Enterprise Manager (EM) ó Control DCM


– Despliegue del EAR Generado.
– Seguridad.
– Publicación a través del Registro UDDI.

Web Service Assembler- Configuración


<web-service>
<destination-path>./myapp.ear</destination-path>
<context>/oow</context>
<stateless-stored-procedure -java -service>
<uri>/MyApp</uri>
<jar-generation>
<schema>scott/tiger</schema>
<db-url>jdbc:oracle:thin:@localhost:1521:orcl</db-url>
<db-pkg-name>MyApp</db-pkg-name>
<prefix>mypack</prefix>
</jar-generation>
<database -JNDI-name>jdbc/OracleDS</database -JNDI-name>
</stateless-stored-procedure -java-service>
</web-service>

6
Internamente.
PL/SQL -> SQLJ
jpub -sql=MYAPP:MyApp -package=mypack -user=scott/tiger \
-url=jdbc:oracle:thin:@host:1521:orcl

SQLJ -> Java


sqlj -d $HOME/classes MyApp.sqlj

Agenda
• Motivos para los denominados “Database
Web Services”.
• 9i cómo “Web Services Provider”
• Cómo Manejar Tipos de Datos no
soportados.
• 9i cómo “Web Services Consumer”.

7
Tipos de Datos no Soportados.

JPublisher Subclassing
– Cuando la clase generada por JPublisher puede ser
reescrita para resolver tipos de datos JDBC no
soportados en Servicios Web. (Resultset)

Conversión
– Se pueden convertir a distintos tipos PL/SQL or SQL
para resolver tipos de datos JDBC no soportados.

Aproximación a través de Jpublisher


Subclassing

1. JPublisher genera una cláse base inicial e


implementa una subclase.
2. Añadir código a la subclase que aporte un
comportamiento diferente.
3. Empaquetar el código generado por
JPublisher y usarlo en el archivo de
configuración de Web Services
(Normalmente a través de un interfaz)

8
Ejemplo de Subclassing
Argumentos REF CURSOR mapeados a ResultSet
no soportados cómo tipo serializable.
1. A través de JPublisher generar una clase/subclase
jpub -sql=MYAPP:MyAppBase:MyApp #MyAppInterf -package=mypack …

2. JPublisher genera Resultset a partir de REF CURSOR


public ResultSet getRefCursor(String arg1, Integer arg2) {…}

3. Añadir métodos en la subclase:


crear un String[] a partir de rs & devolverlo.

public String[] readRefCursorArray(String arg1, Integer arg2) {


java.sql.ResultSet rs = getRefCursor(arg1,arg2); … return ary; }

Ejemplo de Subclassing
Mapeo de la subclase en Web Services Assembler

<web-service>
<destination-path>./myapp.ear</destination-path>
<context>/oow</context>
<stateless-stored-procedure -java-service>
<uri>/MyApp</uri>
<class-name>mypack.MyApp</class-name>
<interface-name>mypack.MyAppInterf</interface -name>
<database -JNDI-name>jdbc/OracleDS</database -JNDI-name>
</stateless-stored-procedure -java -service>
</web-service>

9
Conversión

1. JPublisher genera código que usa funciones


de conversión en el servidor

Supported
Web Service SOAP JDBC Oracle9iAS
SQL Type
Client Oracle9iiAS
Oracle9 Web
Services
Conversion Functions
Framework
Unsupported
Type

Conversion Example: JPublisher


Mapeo PL/SQL BOOLEAN a SQL Integer
compatible with Java boolean
1. Crear función para mapear BOOLEAN a INTEGER
FUNCTION BOOL2INT(b BOOLEAN) RETURN INTEGER

2. Crear función para mapear INTEGER a BOOLEAN


FUNCTION INT2BOOL(i INTEGER) RETURN BOOLEAN

3. Proporcionar información de mapeo a JPublisher


jpub -addtypemap=BOOLEAN:boolean :INTEGER:INT2BOOL:BOOL2INT …

10
Agenda
• Motivos para los denominados “Database
Web Services”.
• 9i cómo “Web Services Provider” .
• Cómo tratar con Tipos de Datos no
soportados.
• 9i cómo “Web Services Consumer”.

9i cómo “Web Services


Consumer”
– Basado en Oracle9iAS Java SOAP
almacenado en Oracle JVM
– Proporciona Interoperabilidad entre WS J2EE
y .NET
– Soporta invocación dinámica basada en
WSDL
– Soporta invocación estática vía cliente proxy.

11
9i cómo “Web Services Consumer”.
– Carga del cliente SOAP en 9i
- Utilizar loadjava com
-synonym -grant public
- Grant java.net. SocketPermission a los usuarios de la
librería SOAP cliente .
– Utilización del proxy desde código Java dentro de
9i.
- Carga de la clase proxy cliente ó uso del API de
invocación dinámica.

9i cómo “Web Services


Consumer
“SQL over SOAP”
Hay que exponer los m étodos instancia cómo estáticos
public static String invokeWS(String custID ,float amount){
WebServiceStub stub = new WebServiceStub();
return stub.chargeCustomer(custID, new Float(amount));
}
Métodos estáticos pueden ser expuestos a SQL, PL/SQL
cómo Java Stored Procedures

CREATE OR REPLACE FUNCTION invokeWS(p1 IN VARCHAR2,


p2 IN NUMBER) RETURN VARCHAR2 AS
LANGUAGE JAVA NAME ’WebServiceClient.invokeWS(java.lang.String,
float) return java.lang.String'; /

12
9i cómo “Web Services
Consumer” - Function Call
Invocación al Web Service a través de una función
PL/SQL.
x:=invokeWS(..);

SELECT City, invokeWS(...) FROM ...

CREATE VIEW WSview AS SELECT City, invokeWS(...) FROM ...

http://otn.oracle.com/sample_code/tech/java/jsp/samples/wsclient/Readme.html

9i cómo “Web Services Consumer –


Tablas Virtuales
1. Función Table
– Permite exponer cualquier fuente de datos cómo
una un conjunto de filas a SQL.
– Permite “pipeline”, explotar paralelismo

2. Tabla de WS.
SELECT ...
FROM
TABLE(WS_TABFUN(CURSOR(SELECT ... FROM ...)))
WHERE ...

13
9i cómo “Web Services Consumer”.
Ejemplo de Función Table

SELECT city_name, temp, low_temp, high_temp FROM TABLE (Temp_TF)

Database Module
Table Function

(Web Service Client)

Web Service Client


Framework (SOAP)

Web Service Provider


HTTP Client

(e.g., Weather Service)


Stack

SOAP
Request/Response

http://otn.oracle.com/sample_code/tech/java/jsp/samples/tablefunction/Readme.html

Agenda
• Motivos para los denominados “Database
Web Services”.
• 9i cómo “Web Services Provider” .
• Cómo tratar con Tipos de Datos no
soportados.
• 9i cómo “Web Services Consumer
• Funcionalidades previstas.

14
Nuevas Funcionalidades
? SQL Query and DML
? Invocación Java-2-Java
? Operaciones AQ /Streams
? Operaciones XML(XDB)
? Ejecución Asíncrona/Diferida
(DBMS_JOB)

Resumen . Database WS
• Web Services Call-in
– Reutilización de PL/SQL y Java procedures
– Exponer datos : XML, relacionales, text, spatial, binarios
(LOB) y multimedia
– Basado en Oracle9iAS Web Services

? Web Services Call-out


? Datos Dinámicos.
? Integracion (EAIs)
? Basado en Oracle9iAS SOAP stack cargado en Oracle JVM

15
Programas de evolución tecnológica
Promueven el conocimiento de la plataforma middleware Oracle9iAS

Ÿ Simplificar la complejidad del middleware


– Consolidación Software
– Ahorro Costes (hasta del 50% en el soporte)
– Unificación de Soporte
Ÿ Alta disponibilidad efectiva
Ÿ Integraci ón entornos corporativos
Ÿ Mejora de su productividad
– Integración desarrollo & despliegue
Ÿ Ampliación y evolución de su plataforma
– Nuevos proyectos

BEA Switch&Save: Cambio por 9iAS Java Edition sin coste


(soporte reducido al 50%) y posibilidad de ayuda a la migración.

16