lunes, 1 de junio de 2009

MANEJO DE 'WEB SERVICE' CON 'AXIS1'.

Ultimamente en mi nuevo trabajo me solicitaron la integracion de dos sistemas que trabajaban por separado y analizando decidi aplicar 'Web Service'(WS), asi que buscando decidi aplicar este muy buen Framework para manejo en JAVA de Web Service 'AXIS1'. El ejemplo presentado acontinuaciòn consiste en dos proyectos JAVA:

1.- Ejemplo_ServidorWS_AXIS1:
- Posee clases de conexion a MySql.
- Posee un Patròn DAO y las Interfaces respectivas.
- Posee Servicios de acceso.
- Aqui se genarara el 'WSDL'(Que es un XML mapeado con los paràmetros que accederàn de un sistema al otro), mediante la herramienta que brinda Eclipse.

2.- Ejemplo_ClienteWS_AXIS1:
- Posee dos ejemplos de Cliente 'Web Service', el primero generado mediante la herramienta del Eclipse para generar un 'Cliente WS' en base al 'WSDL' ya creado, y el segundo cliente es en base varias clases que brinda 'AXIS' para el acceso automàtico en base a solo el nombre de la ruta del 'WSDL' en String.

Datos Importante (Sobre el Ejemplo a Descargar):
- El ejemplo del manejo de Web Service esta preparado para correr con platformas JAVA v1.5 y v1.6 (Aqui se debe quitar de a carpeta 'lib': jsp-api.jar y servlet.jar ya que vienen dentro del 'JDK-1.6' sino crea conflicto y no levantar la aplicaciòn), trabaja con una conexion a MySql (El Stript se encuentra dentro del Aplicativo Servidor) y fue desarrollado en Eclipse v3.3.

- Para levantar el 'Web Service', se tiene que tener ya un proyecto Java listo con las conexion a MySql, que trabajara como 'Servidor' y en base a la Implementacion de una Interface 'DAO' o la de un 'Servicio' se generara el 'WSDL', donde se mapearan los datos de entrada y salida para la interconexion de los sistemas. (Al correr la aplicaciòn con el Tomcat, se levanta junto con la aplicacion el servicio 'WSDL'). Ver imagenes:

Se muestra el arbol de la aplicaciòn que servirà de Servidor para el 'WS'.

Comenzamos a generar el 'WS' con la herramienta de Eclipse.

Seguir pasos que se muestran en la imagen.

Chequear los mètodos que serviràn para la generaciòn del 'WS'
(Seran mapeados en el XML).

Iniciar el Servidor y pulsar finalizar.

Se levantarà la aplicaciòn y se mostrarà una pàgina 'JSP'.

Del 'WDSL' generado obtendremos la ruta del del 'WSDL' para probar si el servicio esta iniciado.

A la vez que se levanta el servidor se inicia el Servicio del 'WS'. Observemos el 'WSDL' generado agregando al link el '?wsdl'.

Luego de esto, para generar el cliente con la herramienta que facilita el Eclipse
copiamos la carpeta 'WSDL' con todo su contenido del Proyecto Java que sirve de 'Servidor' al proyecto que servirà de 'Cliente' y del 'UsuarioDaoImpl.wsdl' generar las clases base.


Dar los cheks respectivos que se muestran en la imagen.

Se muestra la ubicaciòn donde se generà las clases de apoyo al 'WS' (org.java.dao) en la aplicacion 'Cliente'.

Se muestran las clases generadas en el proyecto Cliente 'WS'.

Luego de estos pasos, ya podemos trabajar con el cliente 'WS'. Mostrarè dos formas de realizar un cliente 'WS' para realizar un mantenimiento via 'WS', los procesos seràn los siguientes y se ejecutaràn en base al orden que sean descomentados:

/********** PROCESOS 'WS' **********/
clienteWS.registrarUsuario( accesoWS );
//clienteWS.modificarUsuario( accesoWS );
//clienteWS.eliminarUsuario( accesoWS );
//clienteWS.obtenerObjetoUsuario( accesoWS );
//clienteWS.obtenerListaObjetosUsuario( accesoWS );
/**************************************/

1.- Cliente 'WS' en base a las clases generadas:'src.org.java.client.ClienteWS_Generado.java', utiliza las clases generadas por Eclipse para conectarse al 'WSDL'.

2.- Cliente 'WS' de acceso automàtico sin utilizar ninguna clase generada:'src.org.java.client.ClienteWS.java', no necesita ninguna clase sino que utiliza las Clases que brinda AXIS para el acceso automàtico, necesitando simplemente la ruta del 'WSDL' en String.

Para mayor detalle descargar el ejemplo completo: AQUI.

AUTOMATIZACIÒN DE PROCESOS CON 'QUARZ'

Hace tiempo estaba buscando alguna forma de como realizar 'Procesos Automàticos', que estos se ejecuten periodicamente, que a la vez la configuracion de estos Procesos Automaticos conocidos como (JOBs) sean totalmente personalizables y los importante que sea hecho en JAVA. Indagando encontre este muy buen 'Framework' 'QUARZ', que permite todo lo anterior dicho y màs. Aquì muestro el manejo de este muy buen Framework:

Configuraciòn:
1.-Configuramos el Web.xml, ingresando el acceso al servlet:

[servlet]
[servlet-name]QuartzInitializer[/servlet-name]
[display-name]Quartz Initializer Servlet[/display-name]
[servlet-class]org.quartz.ee.servlet.QuartzInitializerServlet
[/servlet-class]
[load-on-startup]1[/load-on-startup]
[/servlet]

[servlet]
[servlet-name]QuarzMB[/servlet-name]
[display-name]Quartz Servlet[/display-name]
[servlet-class]org.java.manageBean.QuarzMB[/servlet-class]
[load-on-startup]2[/load-on-startup]
[/servlet]


2.- Este al ejecutarce la aplicaciòn accedera automaticamente a:
'org.java.manageBean.QuarzMB' y a su metodo:

public void init( ServletConfig config ) throws ServletException{
System.out.println( "DENTRO DE 'init( ServletConfig config )' " );

super.init( config );

try{
this.IniciarQuarz();
}
catch( IOException e ){
e.printStackTrace();
}
}

3.-En el metodo 'IniciarQuarz()' descomentaremos el ejemplo de los tres ejemplos que he preparado para la demostracion de este Framework:

public void IniciarQuarz() throws ServletException, IOException{
System.out.println( "DENTRO DE 'IniciarQuarz()' " );

try{
this.fechaInicio = new Date();
this.fechaFin = null;

QuarzMB job = new QuarzMB();
job.iniciarEjemploJob_01( this.fechaInicio, this.fechaFin );
//job.iniciarEjemploJob_02( this.fechaFin );
//job.iniciarEjemploJob_03( this.fechaInicio, this.fechaFin );
}
catch( Exception e ){
e.printStackTrace();
}
}

4.- Por ejemplo la salida al ejecutarce el Ejemplo #1 se darìa cada 5 segundos y serìa la siguiente (En realidad no se envìa los emails, pero si dentro de dicho mètodo se hace una funcionalidad de envìo de emails funcionarà sin problema):


------------- ['2009-06-01 23:19:20'] JOB Ejecutado ------------
******* DENTRO DE 'envioAlertaProceso_01()' *******
Enviando Email...#0 [cesarricardo_guerra19@hotmail.com] a Cesar Ricardo
Enviando Email...#1 [magaly_027@hotmail.com] a Catherine Magaly
Enviando Email...#2 [i220051@cibertec.edu.pe] a Milko Samame

------------- ['2009-06-01 23:19:25'] JOB Ejecutado ------------
******* DENTRO DE 'envioAlertaProceso_01()' *******
Enviando Email...#0 [cesarricardo_guerra19@hotmail.com] a Cesar Ricardo
Enviando Email...#1 [magaly_027@hotmail.com] a Catherine Magaly
Enviando Email...#2 [i220051@cibertec.edu.pe] a Milko Samame

------------- ['2009-06-01 23:19:30'] JOB Ejecutado ------------
******* DENTRO DE 'envioAlertaProceso_01()' *******
Enviando Email...#0 [cesarricardo_guerra19@hotmail.com] a Cesar Ricardo
Enviando Email...#1 [magaly_027@hotmail.com] a Catherine Magaly
Enviando Email...#2 [i220051@cibertec.edu.pe] a Milko Samame


Para un mejor entendimiento del manejo de este Framework, puedes descargar el proyecto 'Eclipse' completo: AQUI.