3.3 Casos de estudio - tic.udc.es · n ¿ Cómo se puede parsear un fichero XML ? n El pequeño...

21
3.3 Casos de estudio

Transcript of 3.3 Casos de estudio - tic.udc.es · n ¿ Cómo se puede parsear un fichero XML ? n El pequeño...

3.3 Casos de estudio

Introducción

n Objetivon Estudiar casos de estudio que ilustren escenarios típicos de

aplicación de XMLn Indicar las APIs apropiadas en cada caso

n Casos de estudion Configuración de aplicacionesn Generación de aspecto visualn Integración de aplicaciones heterogéneas

Configuración de aplicaciones (1)

n En el tema anterior, se ha sugerido el uso de ficheros .properties como mecanismo de configuración de aplicacionesn Ventaja: sencillezn Desventaja: no permite especificar cómodamente

configuraciones complejas

n Cuando la configuración es compleja, el uso de XML se presenta como una buena alternativan Como se ha sugerido en el tema anterior, se deberían

ofrecer un conjunto de clases que permitan acceder fácilmente a la información de configuración, ocultando el uso de XML

Configuración de aplicaciones (2)

n Ejemplo...

<data-sources>

<data-source name="Catalog"

driverClassName="org.postgresql.Driver"

url="jdbc:postgresql://localhost/catalog" user="catalog"

password="">

</data-source>

<data-source name="OrderManagement"

driverClassName="oracle.jdbc.driver.OracleDriver"

url="jdbc:oracle:oci8:@orders" user="orders"

password="">

</data-source>

</data-sources>

...

Configuración de aplicaciones (3)

n ¿ Cómo se puede parsear un fichero XML ?n El pequeño conjunto de normas que define XML y la

posibilidad de definir reglas (ej.: vía DTDs) para especificar los tags válidos, permiten construir parsers genéricos que son capaces de comprobar que el documento XML está “bien formado” y es “válido”n ¡ Los parsers ya están hechos !n Existen parsers para los lenguajes más usuales, conformes a

varias APIs estándaresn DOMn SAX

Configuración de aplicaciones (4)

n Parsers SAXn Simple API for XMLn Es un pequeño framework basado en eventosn El programador proporciona uno o varios objetos callback a

los que el parser llamará cada vez que ocurra un evento de interés (apertura de un tag, cierre de un tag, un error, etc.)

n Parsers DOMn Document Object Modeln Construye una representación (un árbol) en memoria del

documenton El programador puede acceder a los datos del documento

recorriendo el árbol

Configuración de aplicaciones (5)

n Parsers SAX vs DOMn SAX

n Es secuencialn Consumo mínimo de memoria => eficiencian No es fácil acceder a elementos anteriores, hermanos, etc.

n DOMn Construye un árbol en memorian Máximo consumo de memorian Permite acceder fácilmente a todos los detalles del documenton Más sencillo que SAXn Permite construir y/o modificar árboles, y generar XML

Configuración de aplicaciones (6)n APIs Java básicas para parsing

n J2SE incluye JAXP (Java API for XML Parsing)n javax.xml.parsers y familia javax.xml.transform

n Formaba parte de J2EE, pero se movió a J2SE a partir de la versión 1.4 de J2SE

n javax.xml.parsers incluye dos factorías abstractas para obtener instancias de parsers SAX (familia org.xml.sax) y DOM (org.w3c.dom)n J2SE incluye una implementación por defecto de JAXPn Se puede usar otra si se desea

n APIs Java de más alto nivel para parsingn JAXB (Java Architecture for XML Binding)

n Permite generar clases Java a partir de un esquema XMLn Permite serializar a XML y viceversan Formará parte de J2EE

n Jakarta Commons Digestern http://jakarta.apache.org/commons/digester.htmln Permite definir reglas en XML para dar valores a JavaBeans a partir de

un fichero XML

Configuración de aplicaciones (7)

n J2EE ofrece un soporte estándar que usa XML para especificar la información de configuración de las aplicaciones web y los componentes EJBn web.xml y ejb-jar.xmln Permiten configurar aspectos de los contenedores

(servidores) de aplicaciones web y componentes EJB, así como configuración específica a la aplicación

n El programador accede a la información de configuración específica de la aplicación mediante en API de J2EEn La mayor parte se accede mediante JNDI

n Los contenedores de aplicaciones web y componentes EJB también suelen usar XML para su propia configuración

Configuración de aplicaciones (y 8)

n Más información sobre SAX, DOM y JAXBn Libro Java and XML (bibliografía recomendada)n http://java.sun.com/xmln The Java Web Services Tutorial

n http://java.sun.com/webservices

n http://www.tic.udc.es/~fbellas/teaching/is-2001-2002

Generación de aspecto visual (1)

n Situaciónn Queremos construir una tienda de comercio electrónicon Cada producto tiene asociado los siguientes atributos:

n Identificador de producto, nombre, breve descripción, fecha y precio

n También se desea almacenar la “estructura” del producton Si es un libro, su estructura es su índice (división en capítulos y

apartados)n Si es un CD, su estructura es la lista de canciones (indicando

para cada una de ellas, su nombre y duración)n Se podrán hacer consultas con condiciones sobre los valores

de cualquier atributo (ej.: obtener los libros con precio > X), excepto su estructuran Sólo interesa recuperar su estructura a partir del identificador

del producton Cuando el usuario desea visualizar los detalles de un

producto, deberán mostrarse los datos del producto, incluyendo su estructura

Generación de aspecto visual (2)

n Opciones de diseñon Modelar la estructura de libros y CDs como tablas

n Incómodon Son estructuras jerárquicas => requerirán varias tablasn Se necesitan tablas distintas para cada tipo de producto

n Añadir un atributo de tipo String a la tabla Producto que represente su estructura en HTMLn ¿ Y si quisiésemos mostrarlo en otro lenguaje visual (ej.: WML)

?n ¿ Y si queremos cambiar el formato HTML (ej.: un tipo de letra)

?n Necesitamos cambiarlo en todos los productos

Generación de aspecto visual (3)

n Opciones de diseño (cont)n Añadir un atributo de tipo String a la tabla Producto que

represente su estructura en XMLn Generamos el aspecto visual dinámicamenten ¿ Cómo ?

n Una posible solución sería usar un parser DOM o SAX para acceder a los datos y generar dinámicamente HTML

n Sin embargo, y dado que es un caso muy habitual, existen soluciones más sencillas: XSL y los tags de XML de JSTL

n Transformaciones XSL (XSLT)n Un fichero XSL (eXtensible Stylesheet Language) permite

expresar reglas para transformar un documento XML en otro formato (ej.: HTML, otro documento XML, PDF, etc.)

Generación de aspecto visual (4)

n Transformaciones XSL (cont)n APIs Java

n Familia de paquetes javax.xml.transformn Forman parte de JAXP

n Proporciona una factoría abstracta que permite obtener un transformador para la realizar la transformación de un documento XML a partir de un documento XSL

Generación de aspecto visual (y 5)

n Tags de XML proporcionados por JSTLn JSTL (parte de J2EE) se comentará en el tema 4n Ofrece un tag para realizar una transformación en una

página JSPn También ofrece tags para parsear un documento XML y

acceder a su información de una manera bastante parecida a XSLn Estos tags representan una alternativa (menos potente) a XSL

n Más información sobre XSL y los tags de XML de JSTLn Libros XML in a nutshell y JavaServer Pages 2nd edition

(bibliografía recomendada)n http://java.sun.com/xmln The Java Web Services Tutorial

n http://java.sun.com/webservices

Integración de aplicaciones heterogéneas (1)

n El ejemplo de las películas ...

BD

cine.acme.com

Nuestra empresa

BD InternetPetición

Respuesta en XML

Ap. web

Ap. cliente

Integración de aplicaciones heterogéneas (2)

n En el ejemplo anterior, cliente y servidor pueden estar escritos en distintos lenguajes y corriendo en distintas plataformas (hardware y sistema operativo)

n Cuando la comunicación es vía Internet, normalmente se usa HTTPn Todos los firewalls reconocen HTTPn El servidor se suele implementar como una sencilla

aplicación webn El cliente sólo necesita conectarse a una URL, leer su

respuesta, parsearla e introducirla en su BD n Ej.:

http://cine.acme.com/services/MovieInformationProvider/findMovieReleases?day=19&month=10&year=2001

n En Java, basta usar la clase java.net.URL

Integración de aplicaciones heterogéneas (3)

n Servicios Webn SOAP: Protocolo basado en XML para el intercambio de información

en un entorno distribuidon Conceptualmente permite enviar peticiones/respuestas en XML

(normalmente por HTTP)n Un Servicio Web es un servicio ofrecido a través del web que envía

la información mediante SOAPn Existen APIs, para los lenguajes más usuales, que permiten

implementar clientes y servidores que usan SOAPn Clientes y servidores pueden estar escritos en lenguajes distintosn Tanto J2EE como .NET proporcionan soporte para servicios web

n Existen APIs basadas en RPCs (ej.: JAX-RPC en J2EE), que permiten implementar un Servicio Web como un objeto cuyos métodos se pueden invocar remotamente, como si de un objeto local se tratasen Ocultan el uso de XMLn El intercambio de información mostrado en el anterior ejemplo se

podría haber programado sin necesidad de parsear XML

Integración de aplicaciones heterogéneas (4)

n Otro ejemplon Como parte de una aplicación web que estamos

desarrollando, queremos ofrecer un servicio que permite visualizar las cotizaciones de valores bursátiles

n Contratamos con una empresa de contenidos que nos pase esta información

n La información está cambiando constantementen No tiene sentido almacenarla en nuestra BD

n Sólo queremos mostrar la informaciónn Podríamos modelar esta solución con Servicios Web

n La empresa de contenidos implementa un servicio web que ofrece una operación para consultar las cotizaciones del conjunto de valores bursátiles pasados como parámetro

n Nuestra aplicación web invoca esta operación cada vez que tiene que mostrar información de cotizaciones y genera HTML dinámicamente

Integración de aplicaciones heterogéneas (5)

n Otro ejemplo (cont)n En este caso, el uso de XML/XSL constituiría una solución

más sencillan La empresa de contenidos proporciona una URL para obtener

los valores del conjunto de valores bursátiles que pasamos como parámetro, que devuelve dicha información en XML

n Implementamos la consulta de cotizaciones en nuestra aplicación web leyendo de esta URL y transformando dinámicamente a HTML mediante un documento XSL

Integración de aplicaciones heterogéneas (y 6)

n CORBA permite afrontar integraciones más complejas entre aplicaciones heterogéneas (normalmente en intranets)n Seguridad, transacciones, eventos, etc.

n Más información sobre Servicios Webn http://www.webservices.orgn The Java Web Services Tutorial

n http://java.sun.com/webservices

n http://www.tic.udc.es/~fbellas/teaching/adoo