Tutorial Open ESB
-
Upload
joseph23166 -
Category
Documents
-
view
588 -
download
5
Transcript of Tutorial Open ESB
Tutorial: Comenzando con OpenESB Miguel Velasco (jvel)
Introduccin No es el objetivo de este tutorial entrar en la difcil discusin de qu es un ESB, por lo que aqu lo trataremos, simplificndolo lo ms posible, como una herramienta que permite la interaccin de diferentes tecnologas. Es decir, que un ESB nos proporciona los medios para leer ficheros, conectar a bases de datos, invocar Servicios Web... y para definir un procedimiento que trabaje con todos estos servicios. La herramienta OpenESB es la propuesta de Sun (ya Oracle) en el mbito de los ESBs. En este tutorial trabajaremos con la versin 2.2, que puede ser descargada desde la Web de la herramienta: https://open-esb.dev.java.net/Downloads.html. Existen dos distribuciones, una que incluye el servidor GlassFish 2.1.1 y el entorno de desarrollo NetBeans 6.7.1, y otra en la que viene OpenESB solito. Para hacerlo ms sencillo descargaremos e instalaremos la primera de ellas. Una vez que lo tengamos ...Glassfish/netbeans/bin/netbeans.exe. Un poco de teora Sin extendernos demasiado, vamos a ver algunas ideas interesantes para comprender lo que se va a hacer en este tutorial. Lo primero que tenemos que saber es que nuestro objetivo es poder acceder a servicios de todo tipo, hacindolo siempre de la misma forma: a travs de ficheros WSDL. Durante el desarrollo veremos que casi todo se reduce a colocar un WSDL por delante de cualquier cosa (bases de datos, ficheros, Bpels...) para poder utilizarla. Esta posiblidad nos la ofrece el ESB a travs de los Bindings Components, que son los encargados de realizar el trabajo sucio y, a partir de las peticiones descritas en el WSDL, traducir y ejecutar las llamadas al servicio concreto. Lo siguiente es saber que lo que vamos a hacer para definir una solucin de integracin es crear un proyecto dentro de NetBeans de tipo Bpel Module. Bpel es un lenguaje de orquestacin que nos permitir crear un proceso en el que se van realizando invocaciones a diferentes servicios. Como hemos dicho, todos estos servicios tendrn por delante un WSDL. Los Bpels que vamos a generar constan bsicamente de tres operaciones, cuyos nombres son ms que descriptivos: Receive.- recibe una peticin con sus datos. Invoke.- realiza una llamada a un servicio, enviando un mensaje, y pudiendo recibir otro como respuesta. arrancamos el IDE en la ruta
Assign.- realiza asignaciones entre variables.
Existen otras que iremos viendo ms adelante, adems de la posibilidad de incluir estructuras de control como iteradores, pero estas son las ms destacables. Dentro de los Bpels tendremos tambin Partner Links. Estos elementos representarn a los servicios invocados desde (o que invocan a) el Bpel y, bsicamente, tendrn un nombre y un conjunto de mtodos, segn lo descrito en el correspondiente WSDL. Cuando estemos trabqajando con el editor de NetBeans los Partner Links aparecern representados a izquierda y derecha del flujo del Bpel, que estar en el centro del editor, siguiendo la ejecucin desde arriba hacia abajo.
Los proyectos de tipo Bpel Module no pueden ser testeados dentro de NetBeans, ni desplegados en el servidor de aplicaciones. Para poder ejecutarlos es necesario crear para cada uno de ellos un proyecto de tipo Composite Application, como veremos durante el desarrollo. El problema Para ver las mltiples posibilidades que nos ofrece un ESB vamos a construir un ejemplo muy simple, pero en el que interactuaremos con distintos tipos de tecnologas. El punto de partida ser un fichero xml del que obtendremos registros de temperatura en grados Celsius correspondientes a distintos das. Los datos ledos del fichero sern procesados para transformar la informacin a grados Fahrenheit mediante un Servicio Web. Posteriormente se almacenar en una base de datos la informacin transformada, y se concluir el proceso enviando al supervisor un correo informando de que se ha cargado nueva informacin al sistema.
De esta forma veremos cmo con OpenESB podemos acceder al sistema de ficheros, invocar Servicios Web, interactuar con una base de datos, y enviar correos electrnicos sin escribir una sola lnea de cdigo. En marcha! Para comenzar a trabajar, vamos a crear en NetBeans un proyecto de tipo Bpel, que ser el que ponga en marcha nuestra solucin, leyendo el fichero xml. Para ello vamos a la opcin nuevo proyecto del IDE, y dentro de la categora SOA seleccionamos BPEL Module. Vamos a nombrarlo como MainBpelModule, y pulsar sobre finalizar. De esta forma obtenemos nuestro primer proyecto, y veremos que se abre automticamente el fichero Bpel, que aparece vaco. Al trabajar con el editor de Bpels se nos ir mostrando en un pequeo cuadro en la esquina superior derecha de cada componenete si hay advertencias o errores. Si pulsamos sobre el cuadro podemos ver el detalle. En este caso, al no haber puesto todava ninguna actividad, se indica que el proceso requiere al menos una actividad que cree la instancia.
Antes de empezar a modificar el Bpel, vamos a definir la estrucutura del fichero xml del que se tomarn los datos al inicio del proceso. En l encontraremos un nico elemento llamado Temperaturas, que se compone de una secuencia de elementos Temperatura. Cada Temperatura tendr un valor, y una fecha. El xsd que define esta estructura es el siguiente:
Por ejemplo, podemos tener un documento como el siguiente:
Creamos ambos elementos en nuestro proyecto. Primero accedemos al men New File XML XML Schema. Lo nombramos como inputSchema, y finalizamos. Se abrir el archivo en la vista Schema; cambiamos a la vista Source, y copiamos el contenido mostrado anteriormente.
Para generar el fichero xml podemos usar la opcin automtica del IDE. Botn derecho sobre el xsd, y elegimos Generate Sample XML.
Una vez generado podemos pegar directamente el xml mostrado anteriormente. Lo que queremos ahora es poder leer este fichero xml desde nuestro proceso de integracin. Para ello tenemos que definir un WSDL que nos proporcione acceso al mismo. Hacemos clic derecho sobre el proyecto, y elegimos New WSDL Document (si no aparece, vamos a Other..., y lo vemos dentro de la opcin XML). Vamos a nombrar el WSDL como readXMLWSDL, y vamos a indicarle que queremos que tenga un tipo concreto. Entonces el entorno nos preguntar qu Binding vamos a utilizar y, para cada uno de ellos, qu tipo concreto. Seleccionamos el Binding File, para acceso al sistema de ficheros. Como se puede ver en la siguiente imagen, para este Binding encontramos cuatro tipos distintos: Poll.- lee un fichero cada cierto tiempo. Poll and write back reply.- lee el fichero igual que el anterior, y posteriomente lo sobrescribe. Write.- escribe en un fichero. On demand read.- lee un fichero cuando se invoca (no hace lecturas a intervalos como poll).
Para nuestro ejemplo queremos leer el fichero, por lo que podramos utilizar las opciones Poll y On demand Read. Vamos a optar por la primera, de forma que cada vez que situemos el fichero xml en la ubicacin indicada el proceso se pondr en marcha de forma automtica. Si utilizsemos la opcin de lectura bajo demanda el funcionamiento sera el mismo, pero el lanzamiento del proceso tendramos que hacerlo nosotros. En la siguiente pantalla el entorno nos pide la informacin necesaria para la lectura del fichero: qu fichero vamos a leer, en qu ubicacin, cada cunto tiempo, qu formato tiene... Vamos a modificar el directorio de lectura para que sea c:\temp, y el tipo de mensaje a xml, indicando el xsd que creamos anteriormente, y que deberamos ver en el selector. Si no es as, posiblemente se solucione cerrndolo y volviendo a abrirlo.
Si utilizamos esta configuracin, la pantalla quedara como sigue:
Al pulsar sobre finalizar veremos el WSDL creado. Si le echamos un vistazo veremos que define un mensaje PollInputMessage. Este mensaje ser el que obtendremos en nuestro Bpel al leer el fichero, y se forma por un elemento Temperaturas, que tiene la forma definida en el xsd. Define tambin un elemento PortType con una operacin poll, que tiene como entrada el mensaje PollInputMessage.
Lo siguiente que vemos es la definicin del Binding. En ella podemos comprobar que es un binding a File, del tipo Poll, y por eso define una operacin con este nombre, que recibe los datos para acceder al fichero.
Y por ltimo tenemos el servicio, en el que se define la ubicacin en la que se buscar el fichero.
Una vez que tenemos el WSDL, podemos incluirlo en nuestro Bpel. Como ya hemos indicado, en el Bpel los servicios externos aparecern como Partner Links, y estarn a izquierda y derecha en el editor grfico. El lado en que estn indicar el rol que desempearn. Aquellos Partner Link que invocan o mandan informacin al Bpel irn en el lado izquierdo, y los que sean invocados por el Bpel irn en el derecho. Por tanto, arrastramos el WSDL hacia el lado izquierdo del Bpel para crear el primer PartnerLink. Automticamente aparecer la caja que lo representa. Si la seleccionamos se mostrarn arriba botones para editar sus propiedades, y acceder a su WSDL. Accedemos a la edicin, y le damos el nombre readXmlPartnerLink. El Partner Link creado suministrar informacin a nuestro Bpel, por lo que tenemos que aadir una actividad Receive para recogerla. La arrastramos desde la paleta, y la situamos dentro del proceso. Igual que antes, si la seleccionamos podremos acceder a sus propiedades. Le damos el nombre ReceiveXML. Adems, nos pide el Partner Link y la operacin que le proporcionar la informacin. Al seleccionar el Partner Link se mostrarn las operaciones que tiene disponible; en nuestro caso, como vimos en el WSDL, slo existe una operacin Poll. Necesitamos tambin una variable que recoja la informacin. Si pulsamos el botn Create... el entorno la crear por nosotros, de acuerdo al tipo de mensaje que tiene que recibir la operacin indicada (poll). La marca create instance indica si al ejecutar la actividad se debe instanciar el Bpel. La marcaremos al ser la primera actividad del proceso.
De esta forma completamos el primer paso del proceso, en el que leeremos la informacin del fichero XML y la cargaremos en la variable denominada PollIn. Tal como se ha definido, la informacin que contendr ser un elemento Temperaturas, que a su vez se compone de elementos Temperatura. Por tanto, ahora nos interesa ver cmo podemos iterar sobre las temperaturas obtenidas para ir procesando cada una de forma independiente. Para ello usaremos una actividad ForEach, que situaremos tras el Receive en el Bpel, y nombraremos como ForEachTemperatura. En la siguiente imagen vemos las propiedades de la actividad.
La segunda propiedad es el nombre del contador que se utilizar en el iterador, y podemos renombrarla tambin como ForEachTemperaturaCounter. Tambin tendremos que asignar valores para las propiedades valor de inicio y fin del contador, pero lo haremos ms adelante. Lo primero que haremos dentro del bucle ser incluir una actividad Assign, para ir iterando sobre los elementos. La arrastramos al interior del ForEach, y la renombramos como AssignTemperatura. Al incluir una actividad en el bucle se crear de forma automtica un Scope sobre ella, tal como se ve en la siguiente imagen. Lo renombramos tambin como Scope.
Vamos ahora a definir las asignaciones de la actividad AssignTemperatura. Hacemos doble clic sobre ella, con lo que accederemos a la vista de mapeo. En esta vista tenemos a ambos lados de la pantalla un rbol en el que vemos las distintas variables y partner links existentes hasta el momento en nuestro bpel. Podemos realizar asignaciones de valores enlazando las variables de la izquierda con las de la derecha. Tambin tenemos disponibles en la barra de botones operaciones bsicas de transformacin y creacin de distintos tipos de datos. Si desplegamos el rbol del lado izquierda, deberamos ver algo as.
En la variable PollIn se representa un nico elemento Temperatura, cuando en realidad lo que tendremos ser una secuencia de ellos. De modo que para poder ir accedindolos tenemos que realizar la siguiente operacin. Hacemos clic derecho sobre Temperatura y seleccionamos addPredicate(). Se abre una nueva ventana, muy similar a la de mapeo, en la que tenemos que asignar un valor al predicate, que est representado en el lado derecho. En este caso asignaremos la propiedad ForEachTemperaturaCounter, que es el contador del bucle, al predicado.
Una vez que aceptamos y volvemos al mapeador anterior, vemos un nuevo elemento Temperatura[$ForEachTemperaturaCounter]. En este ser en el que tengamos un valor nuevo por cada iteracin del bucle. Por tanto, de l tomaremos los valores para posteriores procesamientos. Por el momento no realizamos ninguna asignacin en la actividad. Volvemos a la actividad forEach del Bpel, para completar los valores de inicio y fin del contador. Como inicio pondremos el valor 1, y como fin la expresin count($PollIn.part1/ns0:Temperatura), que nos dar el nmero de temperaturas obtenidas. Esa misma expresin la usamos tambin para la propiedad Completion Condition. De esta forma lo tenemos todo preparado para empezar a procesar temperaturas. Lo primero que haremos con los valores obtenidos ser transformarlos de grados Celcius a Fahrenheit utilizando un Servicio Web disponible en Internet en la siguiente direccin:http://webservices.daehosting.com/services/TemperatureConversions.wso?wsdl.
Es importante tener en cuenta que el objetivo es poder utilizar un Servicio Web provisto por un tercero, del que no tenemos ms informacin que su wsdl. En caso de que el servicio deje de estar disponible por cualquier motivo, podis continuar con el tutorial perfectamente utilizando cualquiera Servicio Web que reciba como entrada un nmero, y devuelva otro. Da igual si el servicio est desarrollado por vosotros, o publicado en Internet. En caso de que los parmetros de entrada o el valor devuelto por el mtodo cambien (en tipo, cantidad...), slo tendris que hacer pequeos cambios a la hora de invocarlo. Para continuar, perfectamente podramos incluir directamente en nuestro Bpel una llamada a este WS, pero lo que vamos a hacer es crear un nuevo Bpel que recoger un valor, lo transformar utilizando el Web Service, y devolver la transformacin. El objetivo principal es ver cmo se pueden hacer llamadas entre distintos procesos de orquestacin, y cmo depurarlos en el entorno. As pues, creamos un nuevo proyecto de tipo Bpel, y lo nombramos como TemperaturaConversionsBpelModule. Lo primero que aadiremos al proyecto ser el wsdl del WS. Accedemos a la opcin new external WSDL (si no aparece en el listado rpido, vamos a Other... - XML External WSDL Document(s)). En from URL escribimos la ruta del WSDL en Internet.
Al pulsar sobre finalizar podemos ver que se ha agregado a nuestro proyecto una carpeta Referenced Resources, que contiene una referencia al WSDL, as como una carpeta webservices.daehosting.com.services, en la que se encuentra el propio WSDL.
ste ltimo podemos arrastralo hacia la seccin derecha de nuestro Bpel para crear un PartnerLink que nos dar acceso al Servicio Web. Automticamente se abrir la ventana para indicar el nombre y dems propiedades.
El nuevo PartnerLink se representa en el Bpel, mostrando las cuatro operaciones que provee. Vamos a arrastrar al proceso una actividad invoke para hacer la llamada. Al editar sus propiedades indicamos que vamos a llamar al mtodo CelsiusToFahrenheit, y creamos las variables de entrada y salida.
En s el Bpel no hace ms que esta llamada, por lo que casi lo podramos dar por terminado. Sin embargo, vamos a querer que este proceso sea llamado va SOAP y reciba el valor Celsius a transformar. Por tanto, vamos a crear un PartnerLink a travs del que se lanzar el Bpel. Para ello accedemos a new WSDL Document, lo nombramos como InvokeTemperaturaConversionsWSDL, y seleccionamos como WSDL concreto SOAP RPC Literal.
En la siguiente pantalla tendremos la oportunidad de definir los parmetros de entrada y la salida. Por defecto se recibe y devuelve un String. Aceptamos esta configuracin, pero damos nombres ms intuitivos a los mensajes, como se ve en la imagen.
En la siguiente pantalla aceptamos los valores por defecto, y finalizamos. Una vez hemos creado un documento WSDL, en este caso para invocar mediante SOAP un servicio que recibir y devolver un String, y al que hemos llamado InvokeTemperaturaConversionsWSDL. Ese servicio ser nuestro Bpel. Arrastramos el nuevo WSDL al lado izquierdo del Bpel, accedemos a la ventana de edicin, y renombramos el PartnerLink.
Este PartnerLink ser el que pondr en marcha el proceso. Arrastramos una actividad Receive delante del Invoke que ya tenamos, para obtener los valores de entrada. Creamos una variable para almacenar esa entrada.
Ahora tenemos que asignar el valor recibido en la llamada al que se enviar al invocar al Servicio Web. Para ello utilizamos una actividad Assign, que llamamos AssignCelsius, con la siguiente configuracin.
Si vemos el estado actual del Bpel, el entorno nos est mostrando el siguiente error en la actividad invoke.
Este mensaje nos est indicando que hemos definido una peticin de entrada/salida, pero que todava no hemos indicado cul ser la salida del proceso. Para definirla utilizamos una actividad Reply, que arrastramos al final del Bpel.
Al aadir esta actividad desaparece el error. No obstante, nos queda asignar el valor devuelto en la llamada al Web Service al que devolveremos como resultado de la ejecucin de nuestro Bpel. Arrastramos un nuevo Assign antes del Reply, que configuramos as.
Con lo que habremos completado el proceso, que debera tener el siguiente aspecto.
Lo que queremos ahora es poder ejecutar el proceso para comprobar que funciona correctamente, pero como ya dijimos, no podemos ejecutar directamente el Bpel. Lo que tenemos que hacer es crear un nuevo proyecto de tipo Composite Application (dentro de SOA, en el men new Project...). La nombramos como TemperaturaConversionsCA. El nuevo proyecto tendr un fichero Service Assembly, que veremos vaco, y una carpeta JBI Modules. Sobre esta ltima, con el botn derecho, accederemos al men Add JBI Module..., y en l seleccionaremos el proyecto TemperatureConversionsBpelModule. El nuevo mdulo se ver en el fichero Service Assembly con una interrogacin. Tenemos que pulsar el botn Build Project, y entonces se recargar el diagrama.
Con esto la Composite Application est completa, y podemos desplegarla en el servidor de aplicaciones. Hacemos clic derecho sobre el proyecto, y seleccionamos Deploy. Esto
arrancar el servidor Glassfish, y desplegar en l la aplicacin. El arranque tardar normalmente unos minutos, y podremos ver que sigue en curso por la barra de progreso situada en la seccin inferior derecha de NetBeans.
Ahora vamos a definir un Test para poder probar el mdulo de conversin de temperaturas. En el proyecto de la Composite Application hay un carpeta Test, que est vaca. Hacemos clic derecho y seleccionamos New Test Case. Lo nombramos como TestCase, y en la siguiente pantalla seleccionamos el WSDL que queremos testear, que es el que da acceso al Bpel: InvokeTemperaturaConversionWSDL.
En el siguiente paso elegimos la nica operacin del WSDL, y finalizamos. Podremos ver en el navegador de proyecto que se ha creado un elemento TestCase, que contiene dos hijos, Input y Output. El elemento Input, que tendremos abierto en el IDE, es el mensaje SOAP que se enviar en la llamada. El elemento Output debera contener la respuesta esperada tras la llamada. Si examinamos el Input, veremos que tenemos un elemento inputCelsius que, si recordamos, es el nombre que le dimos al parmetro de entrada cuando creamos el WSDL para invocar al Bpel. Por tanto, le damos aqu valor, indicando cualquier nmero.
En cuanto a la salida, veremos que est vaca. Somos nosotros los que tenemos que indicarle al IDE cul es la respuesta que se considerar correcta. Cuando ejecutemos por primera vez el test, si la salida est vaca, el IDE nos indicar que el test es incorrecto, pero se dar cuenta de este hecho, y nos preguntar si queremos establecer el resultado del primer test como respuesta correcta. De esta forma no tendremos que generar a mano el fichero de respuesta, aunque esto sera bastante divertido. Hacemos clic derecho sobre el test, y seleccionamos Run. Se abrir una nueva vista Test Results, en la que veremos el progreso de la ejecucin. Una vez terminado, el IDE nos dir, como hemos comentado, que el fichero de salida est vaco, y que podemos asignar la obtenida en el test como correcta. Le decimos que s, y vemos que bajo el elemento TestCase hay un nuevo elemento, que es el resultado de la ejecucin.
Si lo abrimos, deberamos ver un mensaje SOA con un elemento outputFahrenheit, que contiene el resultado de la transformacin pedida al Web Service, en nuestro caso:
Insisto en que el IDE indica que el test ha fallado, porque lo que hace es comparar el resultado obtenido con el fichero Output. Si ahora que lo hemos rellenado volvemos a ejecutar el test, el IDE indicar que el resultado es correcto. Eso s, en nuestro caso, como si modificamos la entrada tambin cambiar la salida, esta forma de chequear el resultado no es muy acertada. Lo mejor es comprobar directamente lo devuelto por el test para determinar si es correcto. Pues bien, hasta aqu hemos desarrollado un Bpel completo, includa su Composite Application que nos ha permitido depurarlo. Ahora volvemos sobre el Bpel original, MainBpelModule, para continuar con l. Lo ltimo que habamos hecho es aadir las actividades que se encargaran de recorrer los elementos ledos como entrada del proceso. Vamos ahora a efectuar llamadas al Servicio Web para obtener la transformacin de las temperaturas. Tenemos que crear un nuevo PartnerLink, cuyo WSDL ser el que nos permite invocar al Servicio Web, que denominamos InvokeTemperaturaConversionsWSDL, dentro del proyecto TemperatureConversionsBpelModule. Copiamos dicho WSDL y lo pegamos en la carpeta Process Files del proyecto MainBpelModule. Posteriormente lo arrastramos desde ah hasta el lado derecho del proceso bpel, para crear el nuevo ParnetLink, que nombramos InvokeTemperatureConversionsPartnerLink.
Ahora creamos una nueva actividad InvokeTemperatureConversions dentro del Scope del bucle forEach.
As creamos las variables de entrada y salida para la llamada al Servicio Web. Lgicamente, antes de realizar la llamada tenemos que asignar el valor de entrada. Para ello usaremos la actividad AssignTemperatura que ya habamos creado. Accedemos al
mapeador para modificarla, y asignamos el campo temperatura del predicado al parmetro inputCelsius de entrada al Web Service.
Ya tenemos en la variable de respuesta de la invocacin al Web Service (InvokeTemperaturaConversionWSDLOperationOut) la temperatura transformada. El siguiente paso es almacenar ese dato en una base de datos. Vamos a trabajar con una base de datos Oracle Express 10, saltndonos todo lo relativo a la instalacin. Tenemos que crear un esquema adecuado a nuestras necesidades, para lo que nos conectamos con un usuario administrador, y ejecutamos el siguiente script (adaptando las rutas o lo que sea necesario a los datos de vuestra instalacin).
Posteriormente ejecutamos este otro script para crear una nica tabla, en la que se guardarn los datos ledos del xml, previamente transformados.
Ahora vamos a crear una conexin a la base de datos desde NetBeans por si necesitamos hacer cualquier consulta. Vamos a la pestaa Services, y desplegamos en el rbol Databases. Lo normal es que no tengamos el driver Oracle, por lo que tendremos que aadirlo. Pulsamos con el botn derecho sobre la carpeta Drivers, y elegimos new driver. Pulsamos el botn Add, y elegimos el driver que se encuentra en la instalacin de OracleXE, en la ruta que se ve a continuacin.
Elegimos el fichero ojdbc14.jar, y aceptamos todo. Al volver al IDE deberamos ver entre los drivers Oracle Thin.
Ahora s, sobre Databases, pulsamos con el botn derecho y elegimos New Connection... Seleccionamos la siguiente configuracin.
Al pulsar OK nos pedir que elijamos un esquema. Seleccionamos Temperaturas, y aceptamos. Desplegando el rbol podemos llegar hasta la tabla que creamos, y con clic derecho ver sus datos. Volvemos al Bpel para crear un nuevo PartnerLink que nos dar acceso a esta base de datos. Sobre el proyecto accedemos a New WSDL Document. Lo nombramos como insertTemperatureWSDL, y en el tipo concreto seleccionamos Database y Table.
En la siguiente pantalla seleccionamos la conexin a la base de datos que acabamos de crear, y posteriormente la tabla temperaturas, que es la nica que tenemos. Nos aparece una nueva pantalla para configurar la forma en que vamos a acceder a la tabla. En la seccin inferior podemos elegir qu operaciones vamos a querer que estn disponibles en el WSDL. Dejamos slo la de insercin, que es la que nos interesa, para reducir cdigo. Si pulsamos en Advanced, en la tabla superior, podemos incluir otros detalles como parmetros para las consultas, pero no lo necesitamos en nuestro caso. Pasamos a la siguiente pantalla, y se pide el nombre JNDI de la fuente de datos que utilizar el proceso. Elegimos jdbc/TemperaturasDS. A continuacin tendremos, por tanto, que crear una fuente de datos en el servidor de aplicaciones accesible a travs de ese nombre, que nos permita conectar con el esquema de temperaturas. Al finalizar el proceso hemos obtenido un nuevo WSDL que podemos arrastrar para crear un PartnerLink al lado derecho del Bpel. Lo llamamos InsertDBPartnerLink, y creamos una actividad para invocarlo, como se ve.
Una vez ms, lo siguiente es realizar una asignacin previa a esta invocacin para dar valor a la variable de entrada. Creamos una nueva actividad, dejando el Bpel como sigue.
En el mapeador realizamos la siguiente asignacin.
Puede verse que la entrada para la operacin de insercin requiere la fecha y la temperatura (las dos columnas de la tabla). Cogemos los valores del resultado de la llamada al Web Service (la temperatura), y de lo ledo del xml (la fecha). Para que la operacin sobre la base de datos pueda ejecutarse tenemos que crear el DataSource en el servidor de aplicaciones. Accedemos a travs de la interfaz Web, conectndonos al puerto 4848 de nuestra mquina local (o al que se especificase durante la instalacin). Nos logamos con el usuario configurado igualmente al instalar, que por defecto es admin/adminadmin. En el men lateral, desplegamos el nodo Resources, y dentro JDBC.
Vamos a crear un pool de conexiones, y luego un recurso JDBC sobre l. Pulsamos en Connection Pools, y en la pantalla principal seleccionamos New.
Insertamos la siguiente informacin en la primera pantalla.
En la segunda pgina slo tendremos que modificar las propiedades, que se muestran al final de la pantalla. Las nicas que necesitamos son User, Password y URL.
Para probar la conexin accedemos al pool, y en la pestaa general, pulsamos el botn Ping. Deberamos ver el siguiente mensaje.
Vamos ahora a la opcin JDBC Resources, y pulsamos el botn New. Tenemos que darle al recurso el nombre que indicamos cuando creamos el binding para acceder a la base de datos, jdbc/TemperaturasDS.
De esta forma tenemos configurada la fuente de datos. A continuacin vamos a probar lo que llevamos desarrollado. Para ello crearemos una Composite Applicattion con la que desplegaremos el Bpel. El proceso es exactamente el mismo que seguimos para el proyecto TemperaturaConversionsCA. Accedemos al men New Project, y elegimos SOA Composite Application. La nombramos MainCA, y finalizamos. Ahora arrastramos el proyecto MainBpelModule al fichero MainCA.casa, y pulsamos el icono del martillo, Build Project, para que se actualice la representacin. Obtenemos el siguiente resultado.
Y ya tenemos una aplicacin que desplegar. Hacemos clic derecho sobre el proyecto, y seleccionamos Deploy. Si todo va bien, veremos en la salida de GlassFish el siguiente mensaje.
Anteriormente, para probar el Bpel de conversin de temperaturas, creamos un fichero de test, en el que invocbamos al servicio. Para este caso no es necesario, ya que el MainBpel arranca leyendo el fichero xml, y la lectura no se hace bajo peticin, sino mediante poll. Esto significa que la aplicacin va comprobando a intervalos de tiempo (segn lo que definimos al crear el Binding), si el fichero existe para consumirlo. As pues, para arrancar el proceso vamos a ubicar el fichero de entrada en la ubicacin adecuada. Este fichero ya lo creamos al comienzo del tutorial, y lo tenemos en la carpeta src del proyecto, con el nombre inputSchema.xml. Vamos a copiarlo a la carpeta C:\temp, que es en la que est leyendo el proceso. Para que el Bpel lo consuma tendremos que renombrarlo como input.xml. En ese momento el proceso se lanzar, y el fichero ser eliminado de la carpeta. En el momento en que veamos que el fichero ha desaparecido significar que el Bpel se ha ejecutado. Para comprobar si ha habido errores revisamos el log del servidor dentro en el Output de NetBeans. Si hemos seguido todos los pasos, nos encontraremos lo siguiente.
El proceso ha fallado, y se muestra una excepcin SQL que dice El literal no coincide con la cadena de formato. Esto se debe a que a la hora de insertar la fecha, no hemos indicado cmo debe formatearse, y el IDE gener el xml con las fechas en formato yyyymm-dd. Para solucionar este problema vamos a ver cmo modificar la consulta SQL ejecutada para insertar los datos. Abrimos el Bpel, y sobre el ParnerLink InsertDB, pulsamos el botn Open, que se encuentra encima. As accedemos al fichero WSDL. En l
localizamos el elemento jdbc:input, y vemos que el ltimo atributo es sql. Ah podemos modificar la consulta, aadindole el formateo de la fecha, como se ve en la siguiente imagen.
Una vez efectuado el cambio, podemos volver a desplegar la Composite Application. Antes de hacerlo el IDE recompilar todos los ficheros necesarios. Volvemos a poner el fichero input.xml en C:\temp para lanzar el proceso, y revisarmos el log. El mensaje en este caso es el siguiente.
Vemos que no hay ningn error, as que podemos comprobar que los datos se han insertado correctamente. Para ello usaremos la conexin a la base de datos que creamos en NetBeans. Vamos desplegando nodos hasta llegar a la tabla Temperaturas, y con clic derecho elegimos View Data... Veremos que se han insertado las 5 filas, con los datos del xml.
Vamos a completar ahora el proceso aadiendo el envo de un mensaje de correo electrnico cada vez que se almacenan nuevas temperaturas en la base de datos. Crearemos un Binding para el envo de correo directamente en el proyecto MainBpelModule, por lo que nos vamos a la opcin New WSDL Document. En este caso vamos a elegir el Binding Email, y el tipo envo de email utilizando SMTP.
En la siguiente pantalla tenemos que proporcionar la informacin para el envo del mensaje. Todos los datos estarn fijados puesto que siempre realizaremos el envo a la misma direccin. Vamos a utilizar el servidor smtp de Gmail, ubicado en smtp.gmail.com. Necesitaremos una cuenta de correo como origen, para la que podis utilizar cualquier cuenta personal que tengis, indicando el password. sta aparecer como remitente. Como destino podis poner la misma cuenta. Marcamos la opcin para que se utilice SSL, y pulsamos el botn para testear las credenciales. Deber aparecer un mensaje indicando que el test ha sido correcto.
Finalizamos la creacin del WSDL, y lo arrastramos al Bpel, creando un PartnerLink que nombraremos SendEmailPartnerLink. Generamos una tarea para invocarlo al final del proceso, fuera del bucle.
Tenemos que rellenar los datos del mensaje. Arrastramos una tarea de asignacin delante de la de invocacin, y la denominamos assignEmail. En el mapeador desplegamos en la columna derecha el nodo SendEmailIn, y veremos que tenemos los atributos origen, destino, asunto y mensaje. En este caso vamos a crear los valores a asignar, en lugar de obtenerlos de otras variables. En la barra superior del mapeador tenemos iconos para los distintos tipos de dato. Dentro de String, seleccionamos StringLiteral, y arrastramos hacia la seccin central, a la altura de cada uno de los cuatro atributos. Para from y to asignamos como valor la direccin de correo electrnico. En asunto y mensaje escribimos Recordatorio y Se han obtenido nuevas temperaturas, por ejemplo. Tenemos que conectar cada uno de los literales con sus respectivos atributos.
Guardamos todos los cambios, y ya podemos volver a probar el proceso. Para ello primero desplegamos la aplicacin compuesta MainCA, y volvemos a poner el fichero input.xml en la carpeta C:\temp. Si hemos seguido todos los pasos nos llegar un correo electrnico, y los datos se insertarn en la base de datos.