Mostrando entradas con la etiqueta MAVEN. Mostrar todas las entradas
Mostrando entradas con la etiqueta MAVEN. Mostrar todas las entradas

jueves, 17 de mayo de 2012

GENERADOR DE OBJETOS JAVA DESDE WSDL [MAVEN]


Hola chicos en esta oportunidad postearé, sobre un utilitario que manejo para el manejo de WebService. Todos sabrán que ahora el manejo de los Servicios Web esta muy de moda, sobre todo como una fuerte modalidad de INTEGRACION de sistemas legacy con otros tipos de sistemas, en IDEs de INTEGRACION como IBM Websphere Message Broker o el OSB de ORACLE. La cuestión es que en el mercado existen muchos Frameworks para la generación de WebService y Proxys (Clientes WS) tales como: AXIS, AXIS2, JAXRPC, JAXWS, uno mas antiguos que otros y otros mejores que otros. Por motivos de trabajo he tenido la necesidad que trabajar con todos y los conozco bien pero particularmente prefiero por motivos de mejor generación de objetos, mantenibilidad, etc JAXWS.

Una cosa que no me gusta es que por ejemplo las IDES como ECLIPSE, JDEVELOPER, etc no tienen el soporte a todas estos Frameworks y constantemente uno tiene que bajar un plugin o sino manejar varias herramientas por ejemplo ECLIPSE soporta WS embebido con AXIS solamente y si quiero trabajar con JAXWS me tengo que apoyar en por ejemplo el WID de IBM que lo tiene embebido y si quiero AXIS2 bajarme un plugin adicional. Algo similar pasa con JDeveloper. Por otro lado, el manejo de Wizards como que nunca me gusto mucho así que para mi la modalidad compartida a continuación es la mas optima.

Lo que manejo es un proyecto de tipo MAVEN, que solo lo utilizo como Generador de Objetos y clases JAVA en base al WSDL (en FISICO o URL) respectivamente. Esto lo hago mediante Plugins de MAVEN para cada tipo diferente de FRAMEWORK.

ESCENARIO #1:  "Tengo un WSDL y requiero hacer un WS o un PROXY". Que necesito GENERAR el WS o el PROXY (Independientemente de lo que necesite) en base al WSDL (esto es lo mejor osea tener ya creado el WSDL).

SOLUCION #1: Apoyarnos en una o varias IDEs dependiendo de que Framework querer usar y realizar dicha generación.
SOLUCION #2: Bajarnos los comprimidos de cada Framework, mapearlos en variables de entorno y ejecutar los comandos respectivos por tipo de Framework desde consola.
SOLUCION #3: Trabajar con la solución  planteada  WSDL_MavenGenerator_JaxWs_Axis1_Axis2.zip. Ya que solo requiere 2 cosas: Que tengas tu MAVEN configurado y cambiar el plugin del POM.xml en base al framework deseado, de donde de: resources/IMPORTANTE.txt y listo se genera el paquete de clases y objetos requeridos para que los cortes y lo lleves a tu proyecto JAVA donde trabajaras. Ya no necesitaras varias IDES ni nada en un PROYECTO MAVEN lo tienes todo para generar con: AXIS, AXIS2 y JAXWS.

Aqui les comparto los PLUGINs manejados (Por Motivos del BLOG, he cambiado los simbolos de MAYOR / MEJOR por corchetes):

  
     //------------------------------------------------------------------------//
     //----------------------- PLUGIN: JAXWS -----------------------//
     //------------------------------------------------------------------------//

     [!-- GENERACION DE CLASES .JAVA (JAXWS), EN BASE AL [.WSDL] --]
     [plugin]
        [groupId]:[/groupId]
        [artifactId]jaxws-maven-plugin[/artifactId]
        [executions]
           [execution]
              [goals]
                 [goal]wsimport[/goal]
              [/goals]
           [/execution]
        [/executions]
        [configuration]
           [!-- ASIGNACION DE [PAQUETE] DE CLASES GENERADAS --]
           [packageName]pe.com.javaman.dummy.jaxws[/packageName]
           [wsdlDirectory]src/main/webapp/wsdl[/wsdlDirectory]
           [sourceDestDir]src/main/java[/sourceDestDir]
           [!-- keep=true: MAVEN mantiene FUENTES. keep=false: MAVEN regenera FUENTES. --]
           [keep]false[/keep]
           [verbose]true[/verbose]
        [/configuration]
     [/plugin]
   
   
     [!-- GENERACION DE CLASES .JAVA (MAPPING JAXWS), EN BASE A LA [URL]  --]
     [plugin]
        [groupId]org.codehaus.mojo[/groupId]
        [artifactId]jaxws-maven-plugin[/artifactId]
        [executions]
            [execution]
                [goals]
                   [goal]wsimport[/goal]
                [/goals]
                [configuration]
                    [!-- ASIGNACION DE [PAQUETE] DE CLASES GENERADAS --]
                    [packageName]pe.com.javaman.dummy.jaxws[/packageName]
                    [wsdlUrls]
                      [wsdlUrl]http://localhost:8090/GestionDatosUsuarioWS/GestionDatosUsuarioWSService?wsdl[/wsdlUrl]
                    [/wsdlUrls]
                    [sourceDestDir]src/main/java[/sourceDestDir]
                    [!-- keep=true: MAVEN mantiene FUENTES. keep=false: MAVEN regenera FUENTES. --]
                    [keep]false[/keep]
                    [verbose]true[/verbose]
                [/configuration]
            [/execution]
        [/executions]
     [/plugin]

     //----------------------------------------------------------------------//
     //----------------------- PLUGIN: AXIS1 -----------------------//
     //----------------------------------------------------------------------//

     [!-- GENERACION DE CLASES .JAVA (AXIS1), EN BASE AL [.WSDL] --]
     [plugin]
        [groupId]org.codehaus.mojo[/groupId]
        [artifactId]axistools-maven-plugin[/artifactId]
        [version]1.4[/version]
        [executions]
          [execution]
            [goals]
              [goal]wsdl2java[/goal]
            [/goals]
          [/execution]
        [/executions]
        [configuration]
           [!-- ASIGNACION DE [PAQUETE] DE CLASES GENERADAS --]
           [packageSpace]pe.com.javaman.dummy.axis1[/packageSpace]
           [sourceDirectory]src/main/webapp/wsdl/[/sourceDirectory]
           [outputDirectory]src/main/java[/outputDirectory]
           [helperGen]true[/helperGen]
           [verbose]true[/verbose]
        [/configuration]
     [/plugin]
   
     [!-- GENERACION DE CLASES .JAVA (AXIS1), EN BASE AL [.URL] --]
     [plugin]
        [groupId]org.codehaus.mojo[/groupId]
        [artifactId]axistools-maven-plugin[/artifactId]
        [version]1.4[/version]
        [executions]
          [execution]
            [goals]
              [goal]wsdl2java[/goal]
            [/goals]
          [/execution]
        [/executions]
        [configuration]
           [!-- ASIGNACION DE [PAQUETE] DE CLASES GENERADAS --]
           [packageSpace]pe.com.javaman.dummy.axis1[/packageSpace]       
           [urls]
             [url]http://localhost:8090/GestionDatosUsuarioWS/GestionDatosUsuarioWSService?wsdl[/url]
           [/urls]
           [outputDirectory]src/main/java[/outputDirectory]
           [helperGen]true[/helperGen]
           [verbose]true[/verbose]
        [/configuration]
     [/plugin]

     //-----------------------------------------------------------------------//
     //----------------------- PLUGIN: AXIS2 -----------------------//
     //----------------------------------------------------------------------//
   
     [!-- GENERACION DE CLASES .JAVA (AXIS2), EN BASE AL [.WSDL] --]
     [plugin]
        [groupId]org.apache.axis2[/groupId]
        [artifactId]axis2-wsdl2code-maven-plugin[/artifactId]
        [version]1.5.4[/version]
        [executions]
            [execution]
                [goals]
                    [goal]wsdl2code[/goal]
                [/goals]
            [/execution]
        [/executions]
        [configuration]
            [!-- ASIGNACION DE [PAQUETE] DE CLASES GENERADAS --]
            [packageName]pe.com.javaman.generate.axis2[/packageName]
            [wsdlFile]src/main/webapp/wsdl/GestionDatosUsuarioWSService.wsdl[/wsdlFile]
            [outputDirectory]src/main/[/outputDirectory]
            [targetSourceFolderLocation]java[/targetSourceFolderLocation]
            [databindingName]xmlbeans[/databindingName] 
            [unpackClasses]true[/unpackClasses]
            [verbose]true[/verbose]     
            [options]
               [uwc]true[/uwc]
            [/options]        
        [/configuration]          
     [/plugin]

     [!-- GENERACION DE CLASES .JAVA (AXIS2), EN BASE AL [.URL] --]
     [plugin]
        [groupId]org.apache.axis2[/groupId]
        [artifactId]axis2-wsdl2code-maven-plugin[/artifactId]
        [version]1.5.4[/version]
        [executions]
            [execution]
                [goals]
                    [goal]wsdl2code[/goal]
                [/goals]
            [/execution]
        [/executions]
        [configuration]
            [!-- ASIGNACION DE [PAQUETE] DE CLASES GENERADAS --]
            [packageName]pe.com.javaman.generate.axis2[/packageName]
            [wsdlFile]http://localhost:8090/GestionDatosUsuarioWS/GestionDatosUsuarioWSService?wsdl[/wsdlFile]
            [outputDirectory]src/main/[/outputDirectory]
            [targetSourceFolderLocation]java[/targetSourceFolderLocation]
            [databindingName]xmlbeans[/databindingName] 
            [unpackClasses]true[/unpackClasses]
            [verbose]true[/verbose]     
            [options]
               [uwc]true[/uwc]
            [/options]        
        [/configuration]          
     [/plugin]


Para poder descargar el generador de WSDL pulsar: WSDL_MavenGenerator_JaxWs_Axis1_Axis2.zip


Saludos.



jueves, 5 de abril de 2012

INTEGRACION SPRING 3 + MONGODB + SERVLET + MAVEN

Hola en esta oportunidad mostrare una integración bien interesante se trata de la integración de Spring 3 con un Motor de datos No-Relacional osea Orientado a Objeto llamado MongoBD y todo administrado con el estándar maven .

Explicando un poco podemos decir que al maneja BD relacionales como Oracle, SQLServer, MySql, DB2 dentro de un App Web independientemente del lenguaje que te tenga la aplicación, uno sacrifica mucho tiempo al momento de realizar el Mapping de los Objetos (Beans) a sentencias SQL o JOINs para uno traer los datos respectivos. Una solución a esto es usar un Framework ORM que facilite este mapping y haga de tu persistencia que luzca como un seudo manejo orientado a objetos. Pero en si, si se desea ganar ese tiempo perdido en el mapping se lograría la usar Bases de datos no relacionales como MongoDB siguiendo la tendencia del NoSql que tan bien les ha ido a grandes como: Twitter, Facebook, etc.

Lo ORM relacionado a los CRUD y QUERYs de persistencia, nos ayuda a ya no tener que estar ejecutando SQL sino que de frente orientar todo a un pseudo manejo orientado a OBJETOS ya que tu programación si es que ya esta orientada a objetos es ilógico que lo tengas de transformar a: NO OBJETOS (DB Estructural) para guardar persistir en BD. Para eso son los ORM nos brindan una capa de mapping automática para poder persistir mas fácilmente COMO DEBE DE SER.

Al Integrar con BD Orientadas a Objetos aumentamos la rapidez de nuestros aplicativos, ya que nos olvidamos en si de la capa de ORM (Mapping) sino que de frente persistiremos nuestros objetos cargados.

Iniciaremos el post explicando un poco como descargar e instalar MongoDB en un ambiente WINDOWS XP:

1. DESCARGAR [MONDODB]: MongoDB., que es el servidor de BD.

2. DESCARGAR [MONGOVUE]: MongoVue., que es la herramienta por excelencia para administrar MongoDB .

INSTALACION MONGODB:
Luego de descargar el zipeado de MONGODB .

PASO #0: Configurar variables de entorno que apunten al directorio BIN en la ruta
del zipeado descargado de MONGODB .

DENTRO DE [PATH] EN VARIABLES DE ENTORNO APUNTAR:
C:\JAVA\MONGODB\mongodb_win32_v1.6.5\bin

PASO #1:
C:\> mkdir "C:\JAVA\MONGODB"

PASO #2:
C:\> cd "C:\JAVA\MONGODB\mongodb_win32_v1.6.5\bin"
C:\JAVA\MONGODB\mongodb_win32_v1.6.5\bin> mongod


PASO #3: CREAR DIRECTORIOS:

C:\> mkdir "C:\JAVA\MONGODB\mongodb_win32_v1.6.5\data"
C:\> mkdir "C:\JAVA\MONGODB\mongodb_win32_v1.6.5\data\db"
C:\> mkdir "C:\JAVA\MONGODB\mongodb_win32_v1.6.5\logs"
C:\> mkdir "C:\JAVA\MONGODB\mongodb_win32_v1.6.5\conf"


PASO #4: INICIAR EL SERVICIO [MongoDB]:

mongod --logpath "C:\JAVA\MONGODB\mongodb_win32_v1.6.5\logs\log.txt" --dbpath "C:\JAVA\MONGODB\mongodb_win32_v1.6.5\data" --install


PASO #5: INICIAR EL BD:

- OPCION #1 [DIRECTA]: C:\>net start "MongoDB"
- OPCION #2 [ADMNISTRADOR SERVICIOS]: C:\>services.msc , luego buscar el servicio "MongoDB" e iniciarlo.

PASO #6: PROBAR CONEXION DESDE CONSOLA:

C:\> mongo
> 10+10
6
> db
test
> db.foo.insert( { a : 1 } )
> db.foo.find(){ _id : ..., a : 1 }
> show dbs
...
> show collections
...
>exit
bye


PASO #[EXTRA]:

- 'REPARAR' SERVICIO [MongoDB]: mongod --repair
- 'ELIMINAR' SERVICIO [MongoDB]: mongod --remove

Ya tenemos instalados MongoDb ahora requerimos lo siguiente:

- Eclipse v3.6 (Plugin Maven).
- Tomcat 6 (Instalado).
- Maven (Ya configurado).


1. Iniciamos el cliente MONGOVUE y nos conectamos a la BD:



2. El Dummy al ser cargado en Eclipse y desplegado en Tomcat mostrara la siguiente interfaz:


3. Al procesar el APP se ejecutara el Servlet: ValidaMongoDbServlet, que probara los escenarios comunes que se pueden dar al trabajar con procesos transaccionales (CRUD y QUERYs), pero esta vez no apoyándonos en un ORM sino que persistiendo en un BD orientada a objetos [MongoDB]. Los procesos a testear son los siguientes:

- registrarUsuario
- loginUsuario
- actualizarUsuario
- obtenerUsuario
- obtenerListaUsuarios
- eliminarUsuario



Finalmente, veremos que el Dummy ha creado el esquema: DB_PLANTILLA en MongoDB y la Colleccion (Tabla): TB_USUARIOS, donde se registraron 2 registros que en el transcurso del Dummy se han creado y modificado. Lo intersante es que MongoDB al reliaza un persistencia de un Objeto aninado (AGREGACION o COMPOSICION), este lo guarda de forma directa en su propio registro de BD, esto se prueba apreciar mediante la herramienta cliente en la relacion USUARIO - PRODUCTO que hemos probado.




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

domingo, 11 de marzo de 2012

AUTOMATIZACIÒN DE PROCESOS CON 'QUARZ' + 'MAVEN'

En esta oportunidad mostrare una actualización que le he realizado a un DEMO. anterior que postee hace algún tiempo.

El demo muestra el manejo para la automatización de procesos de forma periódica manejando el Framework QUARZ, solo que esta vez mostraremos integrándolo con MAVEN.

Al correr el proyecto con Tomcat este mostrara un JSP de: “Bienvenida QUARZ”
Y verificamos la ejecución que se iniciaran en consola en base a un Servlet que iniciara dos procesos:

- PROCESO #1: Basado en SimpleTrigger, que recibirá una fechaInicio y una fechaFin del job.

- PROCESO #2: Basado en CronTrigger, que recibirá una expresionJob enviada desde el web.xml.

La impresión en consola será de esta manera:

*********************** DENTRO DE: [execute] *********************
- EJECUTANDO EL [JOB]: [JavaManJOB_02], A LAS: [Sun Mar 11 13:41:48 COT 2012]
- 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

*********************** DENTRO DE: [execute] *********************
- EJECUTANDO EL [JOB]: [JavaManJOB_01], A LAS: [Sun Mar 11 13:41:48 COT 2012]
- 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

*********************** DENTRO DE: [execute] *********************
- EJECUTANDO EL [JOB]: [JavaManJOB_01], A LAS: [Sun Mar 11 13:41:53 COT 2012]
- 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

*********************** DENTRO DE: [execute] *********************
- EJECUTANDO EL [JOB]: [JavaManJOB_02], A LAS: [Sun Mar 11 13:41:54 COT 2012]
- 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


(En realidad no se envía los emails, pero si se SIMULA el envío dentro de dicho método):

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

jueves, 8 de marzo de 2012

INTEGRACIÓN - SPRING 3 + HIBERNATE 3 + SERVLET + MAVEN

Que tal compañeros regreso a postear luego de algún tiempo y en esta oportunidad hablare y mostrare otra forma de cómo integrar el Framework HIBERNATE.

Si hablamos un poco de este Framework es uno de los Frameworks orientados a persistencia mas utilizados por las diferentes ventajas que nos brinda.

El ejemplo posteado esta principalmente orientado a mostrar la correcta integración de dicho Framework HIBERNATE 3, al ser integrado con otro framework SPRING 3. Para fines del Dummy la ejecución se realizara por medio de un SERVLET y la arquitectura del APP será construida mediante MAVEN.


Este proyecto demo esta orientado a Web y fue desarrollado en la IDE Spring Suite v2.5 que es en si un ECLIPSE con varios PLUGINs adicionales y la ejecución del proyecto en si esta controlado con MAVEN y soportado en la BD DB_PLANTILLA en MYSQL Script dentro del Resources .

EJECUCION:

La ejecución de los ejemplos se desencadenaran mediante la ejecución del SERVLET: ValidaHibernateServlet . Estos son los siguientes:

- obtenerUsuarioForma01
- obtenerListaUsuarios2
- obtenerListaUsuarios3
- obtenerObjetoUsuarios
- registarUsuarioProducto


Finalmente, se puede comentar que el Dummy muestra las diferentes formas de como manejar HIBERNATE ya en lo que respecta al manejo de Sesiones y el uso del popular Generic DAO .

Para descargar el ejemplo completo descargarlo de: AQUÌ.

martes, 28 de febrero de 2012

MANEJO MYBATIS GENERATOR

Buen día en esta oportunidad les mostrare el manejo de MYBATIS GENERATOR una muy buena herramienta para la generación del MAPPING de las tablas y/o objetos de BD cuando se maneja MYBATIS , ya que en si se pueden hacer a mano dicho MAPPING pero a veces es un poco engorroso y demora un tiempo por eso es mejor ya generar dicho MAPPING .

Para el DUMMY realizado, he preparado 2 formas de hacerlo.

I. Desde un APP DINAMIC WEB simple:

Para este manejo realizaremos los siguientes pasos:

1. Crear un APP Dinamic Web project desde ECLIPSE. (En mi caso MyBatisGenerator_SIMPLE )

2. Dentro de MyBatisGenerator_SIMPLE\WebContent\WEB-INF\lib poner la librerías:
- junit-4.8.jar
- ojdbc6-11.1.0.jar
- mybatis-3.0.6.jar
- mybatis-generator-core-1.3.1.jar
- mybatis-generator-core-1.3.1-sources.jar
- mybatis-generator-core-1.3.1-javadoc.jar


3. Crear el archivo de configuración de MYBATIS GENERATOR llamado generatorConfig.xml en mi caso en la ruta: MyBatisGenerator_SIMPLE\resources\pe\com\javaman\mybatis\mybatis

4. Dentro de este XML configuraremos las rutas de salida de: MAPPER, OBJETOS, MAPPING, CONEXIÓN, JAR JDBC, etc.

5. Creamos una clase JUnit Test llamada GeneradorMyBatis.java en mi caso en la ruta: MyBatisGenerator_SIMPLE\test\pe\com\javaman\mybatis\generador. Esta clase buscara la ruta del XML generatorConfig.xml y generara los MAPPINGs respectivos en las ruta definidas en el XML.

6. Al ejecutar la clase GeneradorMyBatis.java se genera lo siguiente:
- BEANs: MyBatisGenerator_SIMPLE\src\pe\com\javaman\mybatis\bean.
- MAPPERs: MyBatisGenerator_SIMPLE\src\pe\com\javaman\mybatis\mapper.
- MAPPINGs: MyBatisGenerator_SIMPLE\resources\pe\com\javaman\mybatis\mapping



II. Desde un APP WEB maven:

Para este manejo realizaremos los siguientes pasos:


1. Crear un APP MAVEN Web project desde ECLIPSE. (En mi caso MyBatisGenerator_MAVEN ).

2. Crear el POM.xml y dentro definir la DEPENDENCIAS de cada Librería (JAR) requerido.

3. Dentro de MyBatisGenerator_MAVEN\src\main\webapp\WEB-INF\lib poner la librerías:
- ojdbc6-11.1.0.jar (Solo para la GENERACION con MYBATIS GENERATOR ya que lo demás será controlado por MAVEN).

4. Crear el archivo de configuración de MYBATIS GENERATOR llamado generatorConfig.xml en mi caso en la ruta: MyBatisGenerator_MAVEN\src\main\resources\pe\com\javaman\mybatis\mybatis

5. Dentro de este XML configuraremos las rutas de salida de: MAPPER, OBJETOS, MAPPING, CONEXIÓN, JAR JDBC, etc.

6. Creamos una clase JUnit Test llamada GeneradorMyBatis.java en mi caso en la ruta: MyBatisGenerator_MAVEN\src\test\java\pe\com\javaman\mybatis\generador. Esta clase buscara la ruta del XML generatorConfig.xml y generara los MAPPINGs respectivos en las ruta definidas en el XML.

7. Al ejecutar la clase GeneradorMyBatis.java se genera lo siguiente:
- BEANs: MyBatisGenerator_MAVEN\src\main\java\pe\com\javaman\mybatis\bean.
- MAPPERs: MyBatisGenerator_MAVEN\src\main\java\pe\com\javaman\mybatis\mapper.
- MAPPINGs: MyBatisGenerator_MAVEN\src\main\resources\pe\com\javaman\mybatis\mapping.


El Dummy esta soportado por una BD ORACLE 11gR2 y el SCRIPT manejador se encuentra en la ruta: MyBatisGenerator_MAVEN\src\main\resources\ScriptBD.sql

Para mayor detalle descargar el Dummy completo pulsar: Aquí

lunes, 27 de febrero de 2012

INTEGRACIÓN: SPRING 3 + MYBATIS 3 + JAXWS 2.1.3 + MAVEN

En esta oportunidad postearé sobre una muy Buena integración basada en 3 FRAMEWORKs de últimos y conocidos:

- - SPRING 3 = Manejo de sesiones, factory, services.
- - MYBATIS 3.0.5 = Persistencia y Mapping.
- - JAXWS 2.1.3 = Servicio Web.

Adicionalmente, para la construcción del proyecto nos apoyaremos en MAVEN, para la generación de LOGs usaremos log4j y la base de datos esta en ORACLE 11g.

El Dummy preparado para ver el efecto de la integración es un WebService que tiene exponer datos de USUARIO para la consulta respectiva. Este WebService lo creo en base a una lógica de tipo TOP DOWN, osea generar el Servicio Web en base a un WSDL ya creado. Ese WSDL lo cree a mano en base a los estándares para WSDL y XSD existentes.







Las OPERACIONES soportadas por el WebService son:

1. consultaUsuarioForma_01:
INPUT:
Primitivos: codigo, dni
OUTPUT: Cadena concatenada con datos de usuario filtrado.

2. consultaUsuarioForma_02:
INPUT:
Primitivos: codigo, dni
OUTPUT: Objeto Usuario ya cargado y filtrado.

3. consultaUsuarioForma_03:
INPUT:
Objeto Usuario seteado.
OUTPUT: Objeto Usuario ya cargado y filtrado.

4. consultaUsuarioForma_04:
INPUT:
Objeto Usuario seteado.
OUTPUT: Lista de Objetos Usuario.


Lo bueno es que el JAXWS te brinda una mayor facilidad para el manejo de objetos y lista de objetos embebidos en dicho WebService que otros Framework como AXIS 1 y 2.

Descripción detallada del DUMMY:

- DummyWS\src\main\webapp\wsdl\DummyWS.wsdl : Interfaz en base a la cual se ha generado el proyecto J2EE.

- DummyWS\pom.xml: Archivo de configuracion de MAVEN. Aquí se declaran las DEPENDENCIAS, PLUGINs, etc.

- DummyWS\src\main\resources\pe\com\javaman\dummy\conexion\jdbc.properties: Archivo de configuración de los parámetros del Motor de Datos ORACLE.

- DummyWS\src\main\resources\pe\com\javaman\dummy\conexion\mybatis-config.xml: Archivo de configuración de MYBATIS. Aquí se configura los Alias a los objetos mapeados y las rutas respectivas de dichos objetos.

- DummyWS\src\main\resources\pe\com\javaman\dummy\mapping\Usuario.xml: Archivo de Mapping MYBATIS en base al Alias definidos y los parámetros de la tabla, Query o Procedure de base de datos.

- DummyWS\src\main\resources\Spring\applicationContext.xml: Spring aquí matriculamos los otros archivos de configuración manejados por Spring.

- DummyWS\src\main\resources\Spring\applicationDatasource.xml: Aquí amarramos la conexión a BD para que sea soportada por Spring.

- DummyWS\src\main\resources\Spring\applicationEntityBean.xml: Aquí matriculamos los objetos (Beans), que serán controlados por Spring.

- DummyWS\src\main\resources\Spring\applicationService.xml: Aquí matriculamos Servicios, Daos, Factory, Template, etc. Este es el Archivo de configuración más importante a mi parecer y donde usualmente aparecen los errores al no configurarlo bien.

- DummyWS\src\main\resources\log4j.properties: Archivo de configuración de LOG4J. Aquí definimos los niveles de salida en archive para INFO, DEBUG, ERROR.
- DummyWS\src\main\resources\Script_SQL.txt: String de creación de BD y objetos.

- DummyWS\src\main\java\pe\com\java\org\dummyws\DummySOAPService.java: Clase publica principal donde se definen las operaciones del WebService.

- DummyWS\src\main\java\pe\com\java\org\dummyws\service\UsuarioService.java: Clase Service donde se definen las operaciones del WebService.

- DummyWS\src\main\java\pe\com\java\org\dummyws\service\impl\UsuarioServiceImpl.java: Clase donde se implementa la clase UsuarioService.java.

- DummyWS\src\main\java\pe\com\java\org\dummyws\dao\UsuarioDao.java: Clase DAO donde se define la implementación de las operaciones de WebService.

- DummyWS\src\main\java\pe\com\java\org\dummyws\dao\impl\UsuarioDaoImpl.java: Clase DAO que implementa la clase UsuarioDao.java. Aquí se accede a la persistencia por medio de MYBATIS.

Para poder probar dicho Dummy es requerido manejar la IDE: Spring Suite v2.5 o un Eclipse Helios con el Plugin de MAVEN .


Para mayor detalle descargar el Dummy completo pulsar: Aquí

domingo, 21 de agosto de 2011

REPOSITORIOS REMOTOS MAVEN

Muchas veces cuando queremos realizar una aplicación JAVA, ya por costumbre y buenas practicas utilizamos MAVEN para la construcción de nuestro aplicativo y por desgracia nos encontramos trabajando en una PC nueva o simplemente no tenemos nuestro repositorio MAVEN local cargado como para que el POM.xml obtenga las librerías automáticamente de ahí.

En estos casos dependemos de forma obligatorio de los repositorios MAVEN remotos y mientras nuestro aplicativos requiera de mas versiones especificas o si esta integrando varios Frameworks, etc , etc, la necesidad y búsqueda de las librerías será mas tediosa y bueno eso de estar haciéndolo de forma manual es incomodo, así mejor que MAVEN lo haga por ti. Debido a eso aquí les comparto unos TAGs de MAVEN que mapean varios repositorios remotos ya sean RELEASE o SNAPSHOTS , con los cuales se podrán bajar rápidamente todas las versiones de librerías posibles (Hasta el momento nunca me ha fallado).

Para fines de visualización en el BLOG he cambiado los símbolos de Mayor y Menor por los Corchetes”.

[!-- ********************************************** --]
[!-- **** REPOSITORIOS DEL PROYECTO **** --]
[!-- ********************************************** --]

[repositories]

[!-- ****** RELEASE ****** --]
[repository]
[id]atlassian[/id]
[url]http://maven.atlassian.com/repository/public[/url]
[releases] [enabled] true[/enabled] [/releases]
[snapshots] [enabled] false [/enabled] [/snapshots]
[/repository]

[repository]
[id]maven.org.repo2[/id]
[name]Repository of Maven.org[/name]
[url]http://search.maven.org/#search[/url]
[/repository]

[repository]
[id]search.maven.org[/id]
[name]Repository of Maven.org[/name]
[url]http://search.maven.org[/url]
[/repository]

[repository]
[id]itextpdf.com[/id]
[name]Maven Repository for iText[/name]
[url]http://maven.itextpdf.com[/url]
[/repository]

[repository]
[id]repository.jboss.com[/id]
[name]Jboss Repository for Maven[/name]
[url]http://repository.jboss.com[/url]
[/repository]

[repository]
[id]snapshots.jboss.org[/id]
[name]Jboss Snapshot Repository for Maven[/name]
[url]http://snapshots.jboss.org/maven2[/url]
[/repository]

[repository]
[id]java.net[/id]
[name]Repository of Java.net[/name]
[url]http://download.java.net/maven/1[/url]
[/repository]

[repository]
[id]deltaset.org[/id]
[name]Repository of Deltaset[/name]
[url]http://deltaset.googlecode.com/svn/maven2[/url]
[/repository]

[repository]
[id]prime.com[/id]
[name]Repository of PrimeFaces[/name]
[url]http://repository.prime.com.tr/org[/url]
[/repository]

[repository]
[id]com.springsource.repository.maven.milestone[/id]
[name]Spring Framework Maven Milestone Releases (Maven Central Format)[/name]
[url]http://maven.springframework.org/milestone[/url]
[/repository]

[repository]
[id]maven-repository2.dev.java.net[/id]
[name]Java.net Repository for Maven 2[/name]
[url]http://download.java.net/maven/2[/url]
[/repository]

[repository]
[id]mvnrepository.com[/id]
[name]mvnrepository.com[/name]
[url]http://mvnrepository.com[/url]
[/repository]

[repository]
[id]www.mvnbrowser.com[/id]
[name]www.mvnbrowser.com[/name]
[url]http://www.mvnbrowser.com[/url]
[/repository]

[repository]
[id]objectweb[/id]
[name]Objectweb repository[/name]
[url]http://maven.objectweb.org/maven2[/url]
[/repository]

[repository]
[id]ops4j.repository[/id]
[name]OPS4J Repository[/name]
[url]http://repository.ops4j.org/maven2[/url]
[/repository]

[repository]
[id]Codehaus Snapshots[/id]
[url]http://snapshots.repository.codehaus.org/[/url]
[/repository]


[!-- **** SNAPSHOTS **** --]
[repository]
[id]apache-maven-snapshots[/id]
[name]Repository of Snapshots[/name]
[url]http://repository.apache.org/snapshots[/url]
[/repository]

[repository]
[id]apache.snapshots[/id]
[name]ASF Maven 2 Snapshot[/name]
[url]http://people.apache.org/builds/struts/2.1.8.1/m2-staging-repository[/url]
[/repository]

[repository] [id]com.springsource.repository.maven.snapshot[/id]
[name]SpringSource Enterprise Bundle Maven Repository - SpringSource Snapshot Releases[/name] [url]http://maven.springframework.org/snapshot[/url]
[/repository]

[/repositories]


BUSCADORES DE JARs

Alguna vez te has preguntado:

¿En que JAR esta cierta clase?, ¿Donde encuentro tal o cual JAR?, ¿En que repositorio MAVEN se encuentra tal o cual artefacto? o ¿Cuántas veces al ejecutar una aplicación Web, hemos obtenido esta muy conocida Excepcion: ‘ClassNotFoundException", debido a una falta de librería ya que la clase no es encontrada ?.

En esta oportunidad compartiré una serie de links de sitios Web que nos facilitan y solucionan de paso, de la manera más simple posible, el encontrar rápidamente dicha librería (.JAR) que con urgencia requerimos.

Estos son buscadores específicos de JARs que aceptan como filtro de consulta:

- Nombre de la clase.
- Fragmentos del nombre.
- Nombre del JAR.
- Etc.


La respuesta de las Webs es un listado de librerías para que selecciones por versión las librerías requeridas. Luego, te permite descargar dicho JAR, copia la clase y muchas veces te muestra hasta su decencia MAVEN, para que lo bajes si están utilizando MAVEN.

Aquí les comparto los links de estos buscadores de JARs que les facilitaran la vida realmente:

http://www.jarvana.com/jarvana
http://jarhalla.com
http://search.maven.org/#search
http://www.findjar.com
http://www.jarfinder.com
http://ebr.springsource.com/repository/app/search
http://jarsearch.com
http://www.mvnsearch.org



jueves, 11 de agosto de 2011

INTEGRACIÓN SPRING 3.0 + STRUTS 1.3

Hola en esta oportunidad mostrare un muy buen proyecto demo, que muestra el manejo integrado de estos dos muy buenos Framework JAVA.

El proyecto demo preparado esta basado en JAVA J2EE y consta del manejo de las siguientes tecnologías y herramientas:

- Spring Suite v2.5
- STRUST 1.3
- SPRING 3.0
- SPRING JDBC
- MAVEN 2.2
- MySQL 5.0
- JSP 1.2 ( con XHTML 1.0)
- Include.
- Internacionalización
- DisplayTags
- Log4j,
- etc

El demo preparado consta en si de un mantenimiento completo (CRUD) , desde el Login que genera la sesión, pasando por los típicos validators Struts, el motor de datos y la inyección de dependencias va por parte de Spring y la capa de persistencia es controlada por Spring JDBC.

En resumen:

- STRUST: CAPA VISTA.
- SPRING: CAPA NEGOCIO.
- SPRING JDBC: CAPA PERSISTECIA.

El demo esta bien detallado en lo que respecta al manejo por el lado de STRUT 1.3: Action, Form, MappingDispatchAction, ActionForward, ActionRedirect, HttpSession, ActionErrors (Parametrizado), Internacionalizacion, etc.

Y por el lado de SPRING 3.0: Inyección de dependencia, integración con Log4j y MySql, mapeo de Beans, JdbcTemplate, ParameterizedRowMapper, etc.









Para poder hacer funcionar el aplicativo será necesario que manejes una IDE con soporte para MAVEN, de recomendación ECLIPSE y en especial Spring Suite v2.5.

Sepa necesario que te descargues las librerías (JARs) requeridas por el aplicativo mediante MAVEN a tu repositorio local (En el POM.xml están especificadas todas) . Se pueden ayudar el tuto:
Manejo Maven desde STS

Para descargar el demo pulsar Aquí

Saludos.

viernes, 24 de diciembre de 2010

MANEJO SPRING JDBC

Que tal en esta oportunidad hablare sobre otra opción para el manejo de la persistencia que viene como aporte de SPRING , este es un módulo de SPRING que brinda conexión a múltiples motores de datos de una forma muy sencilla.

Spring JDBC simplifica el manejo del estándar JDBC, obviando partes importantes que comúnmente a un se le puede pasar como es la de abrir o cerrar sesiones y conexiones (DataSource) respectivas. Funciona para JDK 1.5 (+)

Desde Spring JDBC uno puede heredar de la clase JdbcDaoSupport y acceder a JdbcTemplate que brinda un soporte para un listado de métodos especializados (query, queryForObject, queryForList,etc) , así mismo uno puede manejar acceso a procedimientos almacenados mediante la clase SimpleJbcCall , entre varias otras funcionalidades.

El demo preparada esta bien detallada: Trabaja con Spring 3.0, Maven 2.2.1, Spring JDBC 2.5.6 (JdbcDaoSupport) y para la prueba respectiva hay un JUnit TestCase para un mantenimiento amarrado a: MySql 5.1 (Script en resources).

Para probarlo ejecutar la clase JUnit, descomentando previamente los procesos de cada mantenimiento: src/main/test/org/java/spring/test/TestSpringJDBC.java

Para descargar el demo pulsar Aquí

domingo, 19 de diciembre de 2010

MANEJO SPRING v3.0

Ahora que esta tan de moda el manejo del Framework SPRING mostrare un demo de su manejo, de una forma bien peculiar aplicada a la programación. Cabe recalcar que la idea base la cual me inspiro fue una muy similar que mostró en una exposición mi amigo Lennon Shimokawa de su demo TORTUGAS NINJA en su presentación sobre SpringCore.

El demo actual a mostrar, esta basado en la leyenda de la sobre la batalla MITOLOGICA de la TITANOMAQUIA que habla sobre batalla entre: "LOS DIOSES vs LOS TITANES". En aquella batalla los TITANES se revelan en contra de los OLIMPICOS conformados por los dioses que se reunían a debatir sus hazañas en el famoso monte OLIMPO.

DIOSES:
- ZEUS.
- POSEIDON.
- HELIOS/APOLO/ABEL
- HADES.

TITANES:
- CRONOS.
- REA.
- OCEANA.
- CRIO.

Programaticamente, se va a representar de forma dinámica la batalla mano a mano de c/u, mediante un JUnitTest:

org.java.spring.batalla.TestBatallaMitologica.java

Es importante decir que se utilizo MAVEN para la creación del proyecto JAVA y la IDE Spring Tools Suite v2.5.1 (STS) . Desde este LINK se puede verificar su manejo.

Finalmente, al ejecutar dicha clase se obtendrá una salida en consola similar a esta:

DATOS [DIOS]:
- NOMBRE: ZEUS
- ARMA: LANZA
- PODER: EL RAYO
- NIVEL: 100

DATOS [TITAN]:
- NOMBRE: OCEANA
- ARMA: NO TIENE
- PODER: SUPER FUERZA
- NIVEL: 80

INICIA LA BATALLA:
- EL DIOS: [ZEUS], UTILIZA SU PODER: [EL RAYO], CONTRA EL TITAN: [OCEANA]
- EL TITAN: [OCEANA], UTILIZA SU PODER: [SUPER FUERZA], CONTRA EL DIOS: [ZEUS]
- EL DIOS: [ZEUS], UTILIZA SU ARMA: [LANZA], CONTRA EL TITAN: [OCEANA]
- EL TITAN: [OCEANA], UTILIZA SU PODER: [SUPER FUERZA], CONTRA EL DIOS: [ZEUS]

FINAL:
- GANO EL DIOS: [ZEUS]

Para descargar el demo pulsar Aquí

MANEJO DE MAVEN DESDE (STS).

El tutorial mostrara una forma diferente de manejar MAVEN desde la IDE Spring Tools Suite v2.5.1 (STS), que es en realidad un ECLIPSE v3.6 con un mayor soporte de Plugins.

PASO #I:
Comenzaremos, configurando el MAVEN por defecto que viene con embebido en el Spring Source Tools Suite v2.5.1.

PASO #II:
Ingresamos en la barra de menú a:
Windows/preferences/maven/user preferentes, pulsamos el botón Browse y editamos el archivo:
settings.xml y mapeamos:

[localRepository>]C:\RepositorioMaven[/localRepository]

PASO #III:
Para un mejor control de nuestras librerías de JAVA, vamos a crear nuevo un Repositorio en la ruta:

C:\RepositorioMaven

Y lo registramos en la interfaz mostrada en el paso anterior.

PASO #IV:
Con la IDE ya configurada vamos a crear un nuevo proyecto MAVEN

File/new/other/Maven/Maven Project

PASO #V:
Ingresamos el WorkSpace donde será creado dicho proyecto MAVEN.

PASO #VI:
Filtramos por el archetype: que deseamos utilizar:

ARCHETYPE: maven-archetype-webapp.

PASO #VII:
Registramos datos importantes de lo que será el POM.xml, archivo de configuración del MAVEN.

- GOUPID: org.java.spring
- ARTIFACTID: PROYECT_DEMO_SPRING_XML
- VERSION: 1.0
- PACKAGE: org.java.spring.PROYECT_DEMO_SPRING_XML

PASO #VIII:
Al archivo de configuración POM.xml ingresamos las dependencias de las librerías (.JARs) Spring 3.0 que vamos a utilizar, para su descarga respectiva.

PASO #IX:
Limpiamos el previamente el proyecto MAVEN creado y luego ejecutamos el dicho proyecto, para la validación y descarga de sus dependencias registradas

PASO #X:
Verificamos la descarga de los .JARs realizada en MAVEN DEPENDENCIES dentro del menú izquierdo.

PASO #XI:
Registramos un PLUGIN en el POM.xml para el soporte de JAVA 1.6 al compilar.

PASO #XII:
Limpiamos el previamente y luego ejecutamos el Proyecto MAVEN creado, para la validación y descarga de sus dependencias registradas.

PASO #XIII:
Verificamos el proceso realizado.

PASO #XIV:
Agregamos el soporte de SPRING al proyecto.

PASO #XV:
Creamos los SourceFolder para TEST y para JAVA.

PASO #XVI:
Mapeamos la configuración realizada hasta el momento.

PASO #XVII:
Como se va a manejar Spring en el proyecto creado, creamos el archivo de configuración de Spring:

applicationContext.xml

PASO #XVIII:
Editamos el "applicationContext.xml" creado, y registramos los NameSpace y esquemas con los que Spring trabajara. Así mismo creamos un paquete donde comenzaremos a trabajar y mapeamos el acceso al archivo de configuración "application-entityBean.xml".

PASO #XIX:
Accedemos al archivo de configuración de BEANs de Spring "application-entityBean.xml", aquí se mapearan las entidades simples o anidadas de nuestra aplicación (Lo ingresado es simbólico).

Para un mayor detalle de lo explicado (CAPTURAS DE PANTALLA), descargar el Tutorial de MAVEN(STS) completo pulsar: Aquì

domingo, 10 de octubre de 2010

TUTORIAL MAVEN

Este completo tutorial explica todo lo mas resaltante sobre Maven, en esta oportunidad la versión 2.0.9.

Esta muy buena herramienta nos puede ayudar en el proceso de creación de nuestro proyecto Java. ¿Cómo lo logra?, mediante el uso de los arquetipos de Maven, que son estructuras de proyecto predefinidas y reconocidas en un archivo xml (Pom.xml), que se generan mediante los plugins de Maven (Cada plugin de arquetipo relacionado a un Jars necesario). Además, los principales proyectos Open Source en Java, están utilizando cada día más el uso de Maven para su desarrollo, por lo que cada vez es más frecuente encontrar plugins de arquetipos para el desarrollo de aplicaciones.

Maven, para ser compilado necesita de requerimiento el Internet ya que mediante unos comandos en consola (Posteriormente explicaremos), Maven lee los plugins de arquetipos escritos en el archivo Pom.xml y descarga las librerías necesarias en un repositorio predefinido para el almacenamiento de las librerías respectivas.

También, Maven permite generar y versionar un Proyecto dentro de un War, ordenar y comprimir las librerías (Jars) utilizadas dentro de un .Zip, generar un completo JavaDoc de la aplicación, etc. Todo mediante códigos en consola.

El tutorial expuesto acontinuacion toca los temas:

I.- REQUISITOS.
II.- CARACTERISTICAS.
III.- INSTALACION DE MAVEN.
IV.- CREACION DE UN PROYECTO JAVA CON MAVEN.
V.- PROCESOS QUE SE PUEDEN HACER CON MAVEN.
VI.- MANEJO DEL POM.XML.
VII.- EXCLUSIONES EN LAS DEPENDENCIES.
VIII.- PROYECTO MULTIMÓDULO.
VIII.- CICLO DE VIDA.
IX.- INSTALACION DEL PLUGIN DE MAVEN PARA ECLIPSE.
X.- REPOSITORIOS IMPORTANTES DE MAVEN.
XI.- DEFINICIONES RÀPIDAS E IMPORTANTES DE MAVEN.
XII.- HERRAMINETAS REALCIONADAS CON MAVEN.
XIII.- ENLACES RELACIONADOS DE MAVEN.


Para descargar el Tutorial de Maven completo pulsar Aquì




sábado, 28 de agosto de 2010

INTEGRACION: HIBERNATE + MAVEN + JDBC

Que tal compañeros regreso a postear luego de algún tiempo y en esta oportunidad hablare y mostrare un ejemplo de como manejar el Framework Hibernate .

Si hablamos un poco de este Framework es uno de los Frameworks orientados a persistencia mas utilizados por las diferentes ventajas que nos brinda.

Facilidad para el manejo transaccional de distintas bases de datos, ya que este Framework es de tipo ORM (Object Relational Mappin) , esto hace que el Framework realice un el mapeo completo de la base de datos relacional utilizada, en archivos XMLs (Uno por cada Bean creado) los mapeos y clases generadas expresan herencia y polimorfismo y creando una base de datos orientada a objetos. Esto hace que al momento de la creación de los Querys no nos preocupemos por la DB utilizada ya que dicho Query servirá para cualquier Base de datos ya que el acceso a los datos los puedes manejar de distintas formas utilizando ESQL y CRITERIA.

El ejemplo posteados esta principalmente orientado a mostrar el manejo del Framework Hibernate manejando un patrón DAO para facilitar el acceso a persistencia. Adicionalmente, el ejemplo realiza las mismas operaciones de persistencia realizadas con Hibernate con JDBC, a modo que se vea un comparativo del manejo de persistencia.

Este proyecto demo esta orientado a Web y fue desarrollado en la IDE JBOSS Developer Studio v2.0 que es en si un ECLIPSE con varios PLUGINs adicionales y la ejecución del proyecto en si esta controlado con Maven. (Para los que no conocen Maven entrar aquí: ) y soportado en la BD SAMPLE que viene cargada dentro de DERBY. (Una versión de Derby viene ya integrado con en al descarga de la IDE NetBeans) , facilitando la inicialización de la BD desde el mismo NetBeans.

EJECUCION:

La ejecución de los ejemplos preparados están realizados en JUnit-Test (Click derecho + Run ass + JUnit Test) y son los siguientes:

- TestConexionJdbc
- TestObjetoClienteJdbc
- TestListaObjetosClienteJdbc
- TestObjetoClienteHibernate
- TestListaObjetosClienteHibernate

Finalmente, en la clase pe.com.crga.framework.java.impl.ClienteDaoHibernate se muestra 3 formas distintas del manejo de Hibernate para las operaciones manejadas (Solo se descomenta la deseada) .

Para descargar el ejemplo completo descargarlo de: AQUÌ.

domingo, 28 de diciembre de 2008

Integrando Spring 3 + Hibernate 3 + JSF + MAVEN

Hola a todos, hace ya algun tiempo que ya no posteo nada, ya que he
estado bien ocupado ultimamente, por eso motivo regreso aqui para compartirles
una aplicación J2EE demo donde muestro la integración que he realizado de los Frameworks: Spring 3 + Hibernate 3 + JSF + MAVEN.

El entorno en la que he trabajo es similar al del demo que postee
hace ya algun tiempo:

La aplicaciòn demo esta dividida en 2 carpetas:

Demo_Spring_Hibernate_Jsf: Que contiene todo el Proyecto Web en las carpetas 'src' y 'WebContent'. ( Las cuales las reemplazaras en un proyecto dinamico que crearas desde Eclipse ).

La aplicacion muestra un simple login en donde se genera una sesion de usuario que redirecciona hacia una interfaz de bienvenida, pero lo realmente interesante es la arquitectura segmentada, que se esta manejando para realizar dicho proceso.

Para descargar el demo pulsar: AQUI..

Para descargar el PDF "SIMILITUD: HQL vs CRITERIA" pulsar: AQUI..