sábado, 9 de mayo de 2009

Validaciones con Hibernate Annotations & RichFaces

Explorando una forma nueva de realizar las validaciones, comence a indagar como podria realizarlo por medio de Anotaciones con el Framework 'Hibernate' y bueno probando resulto el demo preparado a continuaciòn.

Este demo esta realizado en Eclipse, Maven y RichFaces (Para el acceso a las anotaciones, mediante uno de sus controles). Para los que no puedan correr la aplicacion por medio de Maven, aqui esta un muy buen tutorial descargable.

Para descargar la aplicaciòn demo pulsar:
Aquì.

domingo, 3 de mayo de 2009

Integraciòn JSF - Applet - Servlet

Hola como estan, hace unos dìas estaba trabajando y surgiò la necesidad de realizar una implementaciòn de un sistema y integrar 2 logicas de programaciòn distintas (Aplicacion J2SE y J2EE), para ello sabia que tenia que relizarlo mediante applets incrustados dentro de la aplicaciòn oreintada a web. Pero, lo que deseaba hacer es que trabaje en el servidor, una tranferencia de datos que tenia que hacer mediante un formulario, y como el applet no trabaja en el servidor mismo sino en el cliente, tube que indagar formas diferentes formas de conectar estas 2 logicas de trabajo y encontre una par de formas de hacerlo:

Mediante una conexion de la aplicacion web, enviandole aparametros al applet y este a su vez conectandoce con el servlet (Que hara lo que tenga que hacer en el servidor: guardar en base de datos, guardar una imagen en disco, etc) para que luego este servlet regrese un mensaje de confirmacion entre otras cosas y estas se muestren en la aplicacion web. Todo esto es apreciado en algunos ajemplos que preparè.

Para visualizar como luce la aplicaciòn pulsar:
Aquì.

Para descargar la aplicaciòn demo online pulsar:
Aquì.

Hasta una nueva oportunidad.

jueves, 30 de abril de 2009

Integracion 'J2EE - JMF - BLOB' en 3 Motores de Datos Distintos.

Hola como están, en esta oportunidad estoy presentando un demo que muestra la integración de J2EE + JMF + BLOB (Archivos) en 3 diferentes motores de datos. La idea de este demo surgió hace un par de semanas ya que en mi ex-trabajo aparecieron los requerimientos de hacer un sistema que manejara un control de WebCam en tiempo real dentro de la misma aplicación web y yo buscando me encontré con JMF que permitía hacer todo esto y mas ya que es un API para manejo de multimedia, luego surgió otro requerimiento que las imágenes que para la webcam sean en guardadas no en una ruta del servidor sino en la misma BD. Y esto fue un problema ya que no todos los motores de datos manejan la misma clase para guardar el archivo BLOB. Y finalmente recuperar la imagen guardada y mostrarla. Bueno lo anteriormente explicado salio finalmente exitoso y me dio la idea de ir un poco más y preparar un demo como este:

EXPLICACIÒN:
La aplicación que he desarrollado y continuación explicare esta basada en J2EE, JMF, JSF (Tomahawk, Sandbox, Richfaces), trabaja con 3 motores de datos simultaneamente ( MySql, Postgres y Oracle ) y fue desarrollado en la IDE: 'Red Hat Developer Studio'( Que es un Eclipse v3.3 mejorado ). Esta aplicación en si consta de 3 demos:

1er Demo: Búsqueda BLOB 'Applet-Servlet', donde se aplica una lógica de programación basada en 'Applet-Servlet' y muestra un ambiente de consulta para obtener el objeto que trae consigo a mostrar el archivo guardado en la BD como blob. Para la consulta hay que escoger el código del registro y tipo de archivo que se obtendrá de la BD y que ya esta guardada como tipo de dato (Imagen, Música, Video, Documento). Esto será validado al momento de obtener dicho archivo para dependiendo de eso mostrarse en el navegador, en un Applet JMF ( Como 'Control Imagen' o Como 'Reproductor' ).

2do Demo: Búsqueda BLOB 'Jsf-Servlet', donde se aplica una lógica de programación basada en 'Jsf-Servlet' y muestra un ambiente de consulta para obtener el objeto que trae consigo a mostrar el archivo guardado en la BD como blob. Para la consulta hay que escoger el código del registro y tipo de archivo que se obtendrá de la BD y que ya esta guardada como tipo de dato (Imagen, Música, Video, Documento). Esto será validado al momento de obtener dicho archivo para dependiendo de eso mostrarse en el navegador, mediante un Servlet que utiliza un clase que desarrollé llamada 'ManejoContentType' que lee la extensión del archivo obtenido y automáticamente retorna el tipo de ContentType respectivo para que el Servlet retorne en el response.

3er Demo: Demo Mantenimiento BLOB, donde se muestra un mantenimiento completo (CRUD), utilizando las lógicas explicadas anteriormente.

4to Demo: Este demo no es propio de la aplicación web pero es importante ya que muestra el manejo de BLOB ejecutando una clase descomentando y comentando métodos (CRUD), dicha clase esta ubicada en: 'Manejo_Java_BLOB\src\org\java\main\Main.java', recuerda que para la ejecución de esta clase se tiene que haber hecho previamente 'Configuración Previa' y que luego de ejecutar los 4 métodos CRUD de la clase en orden, se tiene que copiar nuevamente el contenido de: 'Manejo_Java_BLOB\fuentes\imagenesPrueba' en: 'C:\Imagenes'.

Para visualizar como luce la aplicación pulsar:
[[ VISUALIZAR ]]


CONFIGURACIÒN PREVIA
Para configurar la aplicación hay que tener ya cargada la aplicación en 'Red Hat Developer Studio o en Eclipse v3.3. Luego hay que ver a cual de los 3 motores de datos que soporta la aplicación nos vamos a conectar, esto al igual que los paràmetros de conecciòn son configurables en el archivo: 'Manejo_Java_BLOB\src\org\java\conexion\jdbc.properties'
( 1=MySql, 2=Postgres, 3=Oracle ).
(Si tenemos los 3 motores de datos podemos acceder a los 3, alterando el archivo .properties y reiniciando el servidor para cada acceso), para la manipulaciòn de los datos de tipo BLOB, de en los 3 motores de datos, podemos usar esta muy buena herramienta DbVisualizer v6.5.1 . Luego, hay que crear la carpeta 'C:\Imagenes' y hay que pegar el contenido de 'Manejo_Java_BLOB\fuentes\archivosBlob' y de 'Manejo_Java_BLOB\fuentes\imagenesPrueba' ahí dentro (Estos serán los archivos que serán grabados como BLOB en los registros de prueba ). Después, ejecutaremos los scripts que serán soportados en los motores de datos, para ello accederemos a la ruta 'Manejo_Java_BLOB\fuentes\bd\ScriptBD.txt', dentro están los scripts para crear las tablas, secuenciales y inserts respectivos por motor de datos. Finalmente, Instalar la plataforma JMF v2.1 y luego el Plugin MP3 v3.1.0. (Recuerda que estos tienen que estar relacionados con el JDK o JRE que la aplicación este usando).

DESCARGAS:
Descarga Aplicación Demo Completa.
Descarga Plataforma JMF v2.1.
Descarga Java MP3 Plugin v3.1.0.

jueves, 5 de marzo de 2009

Manejo Conexiones JDBC

En esta oportunidad estoy mostrando un documento que muestra los informaciòn importante para el manejo de conexiones JDBC en distintos motores de datos, la informaciòn que he recaudada es la siguiente:

- Clase Driver:
- URL de Conexión:
- Ejemplo URL:
- Librerìa 'jar':
- Hibernate Dependency:

Las librerìas JBDC de las cuales se a juntado la informaciòn, son de los siguientes motores de datos:

- DB2
- DERBY
- H2
- HSQLDB
- INFORMIX
- MySQL
- ORACLE
- PostgreSQL
- SQLSERVER
- SYBASE

Para descargar el documento con toda la informaciòn anteriormente explicada pulsar: AQUI.

Para descargar todas las librerias (.JARs) JDBC de todos los motores de datos nombrados pulsar: AQUI.

viernes, 27 de febrero de 2009

Validaciones y Mensajes Dinamicos con JSF

Aqui muestro una forma muy efectiva de como manejar los Validadores en un Formulario
utilizando el Framework 'JSF', en los casos que se manipulen datos de tipo: 'BigDecimal, String, Integer, Date'. Ademas, muestro tambien una forma de como manipular los de 'JSF' para trabajarlos de forma dinàmica ( Estados: INFO, ERROR, WARNING ).

Para visualizar la Aplicacion demo, donde muestro todo lo explicado anteriormente pulsar: AQUI.

Porsiaca la Aplicacion demo la desarrolle en la Ide 'Eclipse v3.3'. Y para verlo se puede simplemente importar dicho proyecto desde Eclipse.

viernes, 16 de enero de 2009

Hibernate Dialect

Aqui comparto los diferentes Dialecto que Hibernate utiliza, para su manejo de los diferentes motores de datos. Estos son:


A.- DB2 - org.hibernate.dialect.DB2Dialect

B.- HypersonicSQL - org.hibernate.dialect.HSQLDialect

C.- Informix - org.hibernate.dialect.InformixDialect

D.- Ingres - org.hibernate.dialect.IngresDialect

E.- Interbase - org.hibernate.dialect.InterbaseDialect

F.- Pointbase - org.hibernate.dialect.PointbaseDialect

G.- PostgreSQL - org.hibernate.dialect.PostgreSQLDialect

H.- Mckoi SQL - org.hibernate.dialect.MckoiDialect

I.- Microsoft SQL Server - org.hibernate.dialect.SQLServerDialect

J.- MySQL - org.hibernate.dialect.MySQLDialect

K.- Oracle (Any Version) - org.hibernate.dialect.OracleDialect

L.- Oracle 9 - org.hibernate.dialect.Oracle9Dialect

M.- Progress - org.hibernate.dialect.ProgressDialect

Ñ.- FrontBase - org.hibernate.dialect.FrontbaseDialect

O.- SAP DB - org.hibernate.dialect.SAPDBDialect

P.- Sybase - org.hibernate.dialect.SybaseDialect

Q.- Sybase Anywhere - org.hibernate.dialect.SybaseAnywhereDialect


COMPARATIVO JSP - JSF

En esta oportunidad hablare de un comparativo basico entre JSP y JSF. Ya que a mi como a la mayoria que ahora trabaja con este Framework les pudo haber pasado, el tratar en entender la logica de trabajo de JSF y seguro querer tratar de trabajarlo como uno estaba acostumbrado a trabajar con JSP.

Para comenzar JSP trabaja de una conocida forma en base Request/Response por el contrario JSF tiene una logica de trabajo tipo aplicacion Desktop en base a eventos, esto para que el Developer que venga de trabajar en JAVA J2SE al querer migrar a trabajar con J2EE les sea mas facil de entender. Al comienzo para los que ya han tenido un paso por JSP les sera un poco dificultoso la forma de trabajo pero despues les aseguro que mes gustara mucho este framework, esto debido a la cantidad de controles en sus diferentes frameworks que implementan la logica de trabajo de JSF como lo son: "MyFaces,A4j,RichFaces,Jenia Faces,Tomahawk,IceFaces". Todos muy buenos en realidad y o mejor que pueden trabajar de la mano. La unica cosa que hasta ahorita critico a JSF y en lo que pienso que deberian de mejorar lo antes posible es en tratar que sus controles al momento de hacer el Diseño de la Interfaz sean mas amigables ya que por mas que se traba con una buen CSS. Nunca pero nunca una Interfaz en JSF puede lucir de una manera profesional (Pude lucir bien pero profesional nunca) y claro el diseño demora bastante (La difencia en cuanod se trabajaba con HTML puro, que era rapido y frexible ).

Bueno pero lo que queria hablar desde el comienzo solo me deje llevar, era de como trabajar desde los ManageBean (Que vendria a ser tu Servlet al trabajar con JSF).
al querer mandar y obtener un parametro, un atributo, setear en sesion y simular los tan importantes resquest y response al trabajar con JSF. Bueno aqui les dejo la solucion:


I.- SETEAR EN SESION:

A.- JSP: request.getSession().setAttribute("miVariable",valor);

B.- JSF: FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("miVariable", valor);


II.- RECUPERAR LA SESION:

A.- JSP: request.getSession().getAttribute("miVariable");

B.- JSF: FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("miVariable");


III.- RECUPERANDO 'Context, Request, Response':

A.- JSP: En JSP es automatico al utilizar los Servlet.

B.- JSF: Se tiene que simular el manejo 'Context, Resquest, Response' tanto para el HttpServlet o el Servlet, segun se requiera.


- FacesContext context = FacesContext.getCurrentInstance();

- HttpServletRequest request = (HttpServletRequest)context.getCurrentInstance().getExternalContext().getRequest();

- HttpServletResponse response = (HttpServletResponse)context.getExternalContext().getResponse();

- ServletContext request2 = (ServletContext)context.getCurrentInstance().getExternalContext().getRequest();

- ServletContext sContext = (ServletContext)context.getExternalContext().getContext();

- ServletRequest sRequest = (ServletRequest)context.getExternalContext().getRequest();

- ServletResponse sResponse = (ServletResponse)context.getExternalContext().getResponse();