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Ì.