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, 17 de octubre de 2010

MANEJO FRAMEWORK "AJAX TAGs v1.5.1"

Luego de postear anteriormente sobre el manejo de AJAX de forma NATIVA, esta vez les mostrare un ejemplo de como manejar este Framework que facilita el manejo de AJAX mediante una serie de TAGs que brinda el acceso al servidor sin la necesidad del clasico PostBack. Esta librería permite la aplicación de funcionalidad AJAX en el desarrollo de componentes como:

- COMBOBOX.
- LISTAS.
- CALLOUT.
- PORLET.
- TOGGLE.
- EDITOR.
- TREE.
- Etc.

La logica de este Framework esta basado al manejo de un Servlet especial que extiende de la clase: BaseAjaxServlet

Aqui el mapeo respectivo en el web.xml: (Ojo por motivos de Visualización he cambiado '<' por '[' & ']' por '>')


[servlet][display-name]AjaxServlet[/display-name]
[servlet-name]AjaxServlet[/servlet-name]
[servlet-class]org.java.servlet.AjaxServlet[/servlet-class]
[load-on-startup]2[/load-on-startup][/servlet]

[servlet-mapping]
[servlet-name]AjaxServlet[/servlet-name]
[url-pattern]/AjaxServlet[/url-pattern]
[/servlet-mapping]

[!-- **** SERVLET: CARGA LAS LIBRERIS DEL 'JAR' **** --]
[servlet]
[servlet-name]sourceloader[/servlet-name]
[servlet-class]net.sourceforge.ajaxtags.servlets.SourceLoader[/servlet-class]
[init-param]
[param-name]prefix[/param-name]
[param-value]/ajaxtags[/param-value]
[/init-param]
[/servlet]

[servlet-mapping]
[servlet-name]sourceloader[/servlet-name]
[url-pattern]/ajaxtags/js/*[/url-pattern]
[/servlet-mapping]

[servlet-mapping]
[servlet-name]sourceloader[/servlet-name]
[url-pattern]/img/*[/url-pattern]
[/servlet-mapping]

[servlet-mapping]
[servlet-name]sourceloader[/servlet-name]
[url-pattern]/css/*[/url-pattern]
[/servlet-mapping]
[!-- ************************************** --]


Para descargar el ejemplo completo, descargarlo de: AQUÌ.

MANEJO DE "AJAX" (FORMA NATIVA)

En esta oportunidad mostrare el manejo de AJAX (Asynchronous JavaScript And XML) de la forma Nativa, pero en dos formas distintas de realizar. Al decir forma Nativa, hago referencia a que no utilizare ningún Framework especializado, sino que me apoyare en funciones JavaScript o mediante un simple fichero .JS.

Lo más resaltante es el diseño del fichero .JS que permitirá el acceso al servidor de forma directa sin la realización de un Post Back, el fichero es el siguiente:

var vAJAX;

/*** GLOBALES ***/
var Id_OBJETO;
var URL_Redirec;
var Id_Mostrar;

function PROCESAR_AJAX( Id_OBJETO2, URL_Redirec2, Id_Mostrar2 ){

this.Id_OBJETO = Id_OBJETO2;
this.URL_Redirec = URL_Redirec2;
this.Id_Mostrar = Id_Mostrar2;

recuperaAjax();
}

function recuperaAjax(){

//CREAMOS EL CONTROL 'XMLHttpRequest', SEGÚN EL NAVEGADOR UTILIZADO:
if( window.XMLHttpRequest ){
vAJAX = new XMLHttpRequest(); //SI NO ES 'INTERNET EXPLORER'
}
else{
vAJAX = new ActiveXObject( "Microsoft.XMLHTTP" ); //SI ES 'INTERNET EXPLORER'
}

//ALMACENAMOS EN EL CONTROL, LA FUNCION QUE INVOCARA CUANDO LA PETICION CAMBIE DE ESTADO
vAJAX.onreadystatechange = funcionCallback; //IMPORTANTE LOS LLAMADOS A LOS METODOS SE HACEN SIN PONER '()'

//ENVIAMOS LA PETICION...
vAJAX.open( "GET", URL_Redirec + "?PERSONA=" + Id_OBJETO , true );
vAJAX.send( "" );
}

function funcionCallback(){
//alert(Id_OBJETO);
alert(URL_Redirec);
//alert(Id_Mostrar);

//COMPROBAMOS SI LA PETICION SE HA COMPROBADO: (TIENE QUE COINCIDIR CON EL ESTADO #4)
if( vAJAX.readyState == 4 ){

//COMPROBAMOS SI LA RESPUESTA HA SIDO CORRECTA: (TIENE QUE COINCIDIR CON 'HTTP 200')
if( vAJAX.status == 200 ){

//ESCRIBIMOS EL RESULTADO DE LA PAGINA 'HTML' MEDIANTE 'DHTML'
if( Id_Mostrar == "IMPRIMIR" ){
document.all.IMPRIMIR.innerHTML = "" + vAJAX.responseText + "";
}
else{
alert("");
}
}
}
}






Para descargar el ejemplo completo, descargarlo de: AQUÌ.

domingo, 10 de octubre de 2010

MANEJO DE 'WEB SERVICE' CON 'JAX-WS'.

Que tal amigos después de un tiempo regreso para postear sobre este tema interesante relacionado a WebService. En esta oportunidad hablare sobre el Framework JAX-WS, este Framework en comparación de otros Frameworks, te facilita la generación WebService vía un simple Servlet y algo muy bueno es que permite a diferencia de otros Frameworks para WS, el manejo de colecciones (ArrayList, List, Vector) como INPUT & OUTPUT de cada una de las operaciones que se declaren en dichos WS.

Los pasos para poder levantar un WS vía JAX-WS son los siguientes:

- Descargar las fuentes Core del JAX-WS pulsando: AQUÌ..

- Ubicar las fuentes descomprimirlas y ubicarlas en la ruta: C:\JAVA\JAX-WS\JAXWS2.a.2.
- Crea la variable de entorno: JAXWS_HOME, que apunte a la ruta donde estaba las fuentes de JAX-WS descargadas: C:\JAVA\JAX-WS\JAXWS2.1.2\jaxws-ri
- Crea un Servlet similar a este:

package org.java.ws.servlet;

import static org.java.ws.util.Constantes.URL_WEBSERVICE;
import java.io.Serializable;
import javax.servlet.GenericServlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import org.java.ws.servidor.UsuarioDAOImpl;

/**
* @author cguerra.
* @clase: InicialiadorJAXServlet.java
* @descripción descripción de la clase.
* @author_web: http://frameworksjava2008.blogspot.com
http://viviendoconjavaynomoririntentandolo.blogspot.com
* @author_email: nombre del email del autor.
* @author_company: nombre de la compañía del autor.
* @fecha_de_creación: dd-mm-yyyy.
* @fecha_de_ultima_actualización: dd-mm-yyyy.
* @versión 1.0
*/
public class InicialiadorJAXServlet extends GenericServlet implements Serializable{

private static final long serialVersionUID = -2482469492687227649L;

/**
* Constructor.
*/
public InicialiadorJAXServlet(){
}

/**
* init mètodo que se carga al iniciar el sistema y accede al método que manda a iniciar el Proceso.
* @throws ServletException
*
*/
public void init( ServletConfig configuracion ) throws ServletException{
System.out.println( "DENTRO DE 'init( ServletConfig configuracion )' " );

super.init( configuracion );

try{
this.IniciarWebService();
}
catch( Exception e ){
e.printStackTrace();
}
}

/**
* IniciarWebService, Mètodo que manda a iniciar el WebService.
*/
public void IniciarWebService(){
System.out.println( "DENTRO DE 'IniciarWebService()' " );

try{
String webService = URL_WEBSERVICE;

UsuarioDAOImpl daoImpl = new UsuarioDAOImpl();
daoImpl.inicializaWebService( webService );
}
catch( Exception e ){
e.printStackTrace();
}
}

/**
* service
* @param request
* @param response
*/
public void service( ServletRequest request, ServletResponse response ){
System.out.println( "DENTRO DE 'service( ServletRequest request, ServletResponse response )' " );
}

}


- Crear la Interfase y su clase que Implemente el WS. Además, para la generación en si del WS se puede realizar de 2 formas a continuación detalladas:


GENERAR WEBSERVICE DESDE UNA CLASE 'JAVA'
--------------------------------------------------------------------------


I.- UBICARSE DESDE LA RUTA 'SRC' DEL PROYECTO EN DOS:

Ejecutar en Orden:

(FORMA MANUAL)
A.- javac org/java/ws/bean/Usuario.java
B.- javac org/java/ws/servidor/UsuarioDAO.java
C.- javac org/java/ws/servidor/UsuarioDAOImpl.java

(FORMA DINAMICA)
set RAIZ_SRC= .
set JAVA_SRC=%RAIZ_SRC%\org\java\ws\bean\*.java
set JAVA_SRC=%JAVA_SRC%%RAIZ_SRC%\org\java\ws\servidor\*.java
set JAVA_SRC=%JAVA_SRC%%RAIZ_SRC%\org\java\ws\util\*.java
javac %JAVA_SRC%


D.- %JAXWS_HOME%/bin/wsgen -cp . org.java.ws.servidor.UsuarioDAOImpl -s . -verbose -r ..\WebContent\wsdl -wsdl
E.- Ejecutar esta linea de Comandos o desplegar desde el Servidor:
java org.java.ws.servidor.UsuarioDAOImpl
F.- Actualizar el nombre del 'WebService' en el WSDL, ya que luego de generarce no aparece.


GENERAR WEBSERVICE DESDE UN 'WSDL'
--------------------------------------------------------------


I.- UBICARSE DESDE LA RUTA 'RAIZ' DEL PROYECTO EN DOS:
- FORMA#1: wsimport WebContent\WEB-INF\wsdl\music.wsdl -s src -verbose
- FORMA#2: %JAXWS_HOME%/bin/wsimport WebContent\WEB-INF\wsdl\music.wsdl -s src -verbose

II.- UBICARSE DESDE LA RUTA 'SRC' DEL PROYECTO EN DOS:
- FORMA#1: wsimport ..\WebContent\WEB-INF\wsdl\music.wsdl -s . -verbose
- FORMA#2: %JAXWS_HOME%/bin/wsimport ..\WebContent\WEB-INF\wsdl\WEB-INF\music.wsdl -s . -verbose

Luego de esto se habrá generado el WS y se apreciaría un mensaje similar a este, al ingresar una URL similar a esta, que significa que el WS esta activo:

http://localhost:8099/ServidorWS_JAXWS_Generado/UsuarioDAOImpl
Web Services
No JAX-WS context information available.

Para el consumo del dicho WS ya desplegado, nos podemos apoyar también con JAX-WS, para ello realizamos lo siguiente:

GENERAR CLIENTE 'WEBSERVICE'
--------------------------------------------------


UBICARSE DESDE LA RUTA 'SRC' DEL PROYECTO EN DOS:

I.- GENERACION DE CLASES:

A.- DESDE 'URL':
%JAXWS_HOME%/bin/wsimport http://localhost:8090/servidorJaxWs/UsuarioDAOImpl?wsdl -s . -verbose

B.- DESDE 'FICHERO':
%JAXWS_HOME%/bin/wsimport ..\WebContent\wsdl\UsuarioDAOImplService.wsdl -s . -verbose


II.- COMPILACION & EJECUCION DE CLIENTE 'WS':

A.- Ejecución desde Consola 'DOS':
- javac org/java/ws/test/ClienteWS.java
- java org/java/ws/test/ClienteWS PARAMETRO

B.- Ejecución desde Clase JAVA:
- Ejecutar desde 'Java Aplication'.

Al ejecutar la clase: ClienteWS se probara dicho WS.

Para descargar el ejemplo completo, descargarlo de: AQUÌ.

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ì




MANEJO API JAVAMAIL

Que tal amigos, luego de un largo receso regreso con muchas ganas para postear algo que en estos días es muy útil en el desarrollo de nuestras aplicaciones (Según se requiera), es el manejo de la API que Java maneja para el envío de emails
(JAVAMAIL)
, esta API permite fácilmente enviar emails a cualquier servidor de correos que se cuente con el SMTP (Protocolo).

La aplicación preparada consta de un aplicativo tipo WEB, con 3 paquetes con 3 clases (Una clase por paquete), la lógica es mas o menos de esta manera, se tiene un DTO (Data Transfer Object) especial para el seteo de los diferentes parámetros que se manejara: (cuentaEmailRemitente, cuentaEmailDestinatario, servidor, servidor, etc) . Es importante contar con los SMTP de los diferentes servidores de correos a los cuales uno requiero conectar (El demo preparado soporte los siguientes: Gmail, Hormail, Yahoo) . Luego de seteado el objeto este es enviado a una clase ya preparada llamada: UtilEmail, esta clase ya hace todas las validaciones respectivas y se encarga de enviar el email, de la forma más rápida.

Es requerido la autenticación para cada servidor de emails al cual se desee conectar. El demo también soporta el multienvio de emails (Uno puedo mandar 1 o N emails en un solo envío), pero tener cuidado con esto para que después no registren en el BLACK LIST (http://mxtoolbox.com/blacklists.aspx) . Finalmente, algo que si me gusto es que el demo permite, simultáneamente el manejo de texto, Html y adjunto en un mismo email. El adjunto cualquier tipo de archivo ubicado necesariamente en el SourceFolder: recursos.



Para descargar el ejemplo completo descargarlo de: AQUÌ.