Traducir Blog

Mostrando entradas con la etiqueta J2EE5 JSF. Mostrar todas las entradas
Mostrando entradas con la etiqueta J2EE5 JSF. Mostrar todas las entradas

miércoles, noviembre 05, 2008

Implementando MyFaces, Tommahawk y SandBox.

En el mundo de JSF existen muchas implementaciones que siguen el modelo y la filosofia de este robusto Framework de desarrollo enfocado principalmente en la capa de presentación, resaltan Oracle ADF Faces, RichFaces, MyFaces, Trinidad, ICEFaces, etc. Todos enfocados a extender la implementación estandar de JSF siguiendo obviamente el modelo y arquitectura definidos por la implementación de referencia.


En esta ocasión hablaré un poco sobre MyFaces una de las implementaciónes de JSF mas conocida y utilizada, como información general este es uno de los muchos proyectos con exito de Apache, ahora bien,Tommahawk y SandBoxpueden tomarse como extensiones o subproyectos de MyFaces, con componentes y utilidades que no se encuentran en la distribución core de MyFaces, una de las grandes ventajas que tenemos los desarrolladores de JSF es que podemos hacer una mezcla de diversos frameworks dentro de nuestros proyectos y hacer uso de una gran gama de componentes que, a final nos sirven para que los proyectos que desarrollemos haciendo uso de tecnologia J2EE tengan una buena calidad.

Configuración e instalación del Proyecto:

Para comenzar debemos contar con una estructura de aplicación Web, donde cuando menos debemos contar con un direcotorio WEB-INF y en el interior de dichos directorios deberan existir por lo menos los directorios lib, classes, conf (opcional) y los ficheros web.xml (fichero de configuración de la aplicación web) y faces-config.xml (fichero de configuración de JSF).Con esta estructura creada es necesario tener las librerias adecuadas en el directorio WEB-INF/lib para la correcta instalación y configuración de la aplicación es necesario descargar MyFaces y las correspondientes librerias commons al momento de redactar este documento nos encontramos en la versión 1.2.7, para descargarlo la ruta es: http://www.apache.org/dyn/closer.cgi/myfaces/binaries/myfaces-core-1.2.7-bin.tar.gz
El fichero contiene las librerias commons adecuadas deacuerdo la versión de MyFaces. Sin embargo, en algunos casos (dependiendo del servidor de aplicaciones o contenedor web de despliegue) sera necesario la libreria commons-el (Expression Lenguage) este asunto se explicará con detenimiento mas adelante.
Posteriormente debemos descargar Tommahawk desde aqui: http://www.apache.org/dyn/closer.cgi/myfaces/binaries/tomahawk-1.1.9-bin.tar.gz
La versión al momento de escribir este documento es la 1.1.9.
Finalmente nos descargamos SandBox desde la siguiente ruta:
http://people.apache.org/maven-snapshot-repository/org/apache/myfaces/tomahawk/
Una vez ubicadas estas librerias en el directorio WEB_INF/lib procedemos a configurar el proyecto de la forma mas adecuada, en MyFaces es necesario configurar los filtros de extensión para Tommahawk ademas es necesario tener en cuenta que para una aplicación Web normal con MyFaces, no se pueden incluir en el directorio WEB_INF/lib las librerias de la implementación estandar de JSF, es decir los ficheros jsf-api.jar y jsf-impl.jar principalmente debido a conflictos entre las especificaciones de JSF estandar y MyFaces.
Ahora el fichero de configuración de la aplicación Web debera contener las siguientes lineas:


El contenido del fichero es casi "auto-explicativo" solamente por resaltar lo explicado anteriormente sobre la definición del ExtensionFilter aquí es importante anotar que la etiqueta de estas lineas deben de coincidir con la definición del Faces Servlet que como se muestra en las lineas anteriores contiene *.faces lo que indica que cualquier petición a una pagina en el servidor con extensión .faces será procesada por el Servlet de Faces.

Prueba de Configuración y Ejecución:

Para verificar el correcto funcionamiento de la configuración realizada se podra componer una pagina de prueba que haga uso de componentes simples de MyFaces, Tommahawk y SandBox.
Crearemos un fichero llamado index.jsp con el siguiente contenido

FICHERO INDEX.JSP

Si el nombre de la pagina es index.jsp, para que sea manejada por JSF es necesario invocarla como index.faces, esto debido a que la extensión faces es la que se ha configurado en el web.xml

Posibles problemas de configuración:
Es probable que se detecten errores de configuración cuando se configura MyFaces relacionado con librerias especialmente, en algunos casos el servidor de aplicaciones o contenedor Web prevee las librerias necesarias, en otras ocasiones no, como es el caso de las librerias commons-el y commons-lang ahora bien, los errores relacionados con esto como ya se podria imaginar son ClassNotFoundException. por lo tanto es necesario incluirlas tambien en el directorio WEB_INF/lib aquí las dejo:

commons-el
commons-lang

Tambien es posible que el ExtensionFilter no se encuentre bien configurado sin embargo con el fichero de configuración implementado en lineas anteriores se encuentra correctamente configurado y no deberia haber problemas, sin embargo la documentación se encuentra aquí:

http://myfaces.apache.org/tomahawk/extensionsFilter.html
Por el momento es todo por el momento, espero que sea de utilidad, si alguien tiene alguna duda deja tu comentario.

Jdaanial.




[+/-] Continuar leyendo...

sábado, julio 19, 2008

Utilizando J2EE 5.O Parte III

En esta parte mostraré un poco el uso de la capa web integrandola con las capas de negocio y persistencia mostradas en las entradas anteriores, para conseguir este objetivo en Java puede hacerse uso de diferentes tecnologias, tales como Servlets, JSP o Frameworks como Struts o JSF, para este caso con el fin de seguir la continuidad de tecnologias ampliamente soportadas y adaptadas en J2EE 5.0 se hara uso de JSF (Java Server Faces).




JSF es un Framework que se caracteriza por contener elementos que le permiten a los desarrolladores adaptar soluciones de acuerdo a sus propias necesidades gracias al modelo de componentes que dicho framework maneja, cabe resaltar que JSF es una "evolución" de las tecnologias anteriormente mencionadas (Servlets, JSP y Struts), una de las premisas mas importantes que cada desarrollador de software que utilice JSF debe tener es pensar en cada objeto y en cada elemento de la capa web desarrollada como un Componente, el cual tiene atributos, propiedades y metodos de acción, y una de las cosas mas importantes, es reutilizable y puede emplearse en cualquier interfaz web desarrollada.
En JSF existen diferentes implementaciones, las cuales amplian las funcionalidades de los componentes estandar que vienen incluidos en la Implementación de Referencia de Sun, e inclusive contienen componentes que nuevos, gracias al modelo de componentes que implementa esta tecnologia, cualquier desarrollador con un conocimiento medio sobre tecnologia JSF puede desarrollar sus propios componente y emplearlos en sus propias creaciones, o compartilos con otros usuarios. Un ejemplo claro de esto se encuenta en las implementaciones de Apache sobre JSF llamada MyFaces la cual incluye componentes bastante robustos que en algunos casos implementan Ajax y uso avanzado de Toolkits basados en JavaScript. Tambien existen otras implementaciones como Rich Faces, ADF Faces, ICE Faces, entre otros.

Ahora comienza la integración propiamente dicha de acuerdo a lo anteriormente creado en las entradas de EJB y JPA respectivamente:

Primero que nada es necesario crear una aplicación Web como se hace normalmente, e incluir por lo menos la siguiente estructura de directorios:
MYAPP
|
|
-WEB-INF
|
-classes
-lib
-src (opcional esta ubicación, los fuentes pueden estar ubicados en cualquier sitio)

En este punto desde el directorio MYAPP pueden existir los directorios y paginas donde se contendran todos los recursos web, como en cualquer otra aplicación comun, en el directorio WEB-INF/classes se deberan contener todos los archivos .class que representan la versión compilada de los Managed Beans (clases planas que separan la logica de la aplicación y la presentación en un entorno JSF) y cualquier otra clase o recurso necesario.
En el directorio LIB se contendran las librerias necesarias para implementar JSF RI, en el caso de que se emplee un servidor de aplicaciones como Sun Application Server (Glassfish) este punto no se hace necesario, ya que Glassfish contiene todas las lbrerias necesarias para ejecutar las API de J2EE 5.0.

Ahora se asume los siguientes archivos de configuración que son necesarios para poner en marcha un contexto web con JSF en el directorio raiz de WEB-INF deben existir los siguientes archivos (pulsa en el enlace para ver su contenido):

faces-config.xml

Para este archivo se define solamente los recursos de los cuales dispondra JSF para su correcto funcionamiento en esta aplicación, en este archivo se pueden contener muchas instrucciones que son utiles para adicionar componentes personalizados, recursos de mensajes en diferentes idiomas (soporte para internacionalización), managed beans y otras opciones adicionales como reglas de navegación.

web.xml

En este archivo se especifica la forma en la cual será mapeada la configuración de JSF para ser empleada en el contexto de la aplicacioón, puede notarse que para la configuración de JSF, todas las paginas deberan preceder del conexto virtual faces/ y apartir de allí se podran ejecutar todas las paginas que contengan componentes y/o recursos basados en JSF.

Despues de tener estas opciones de configuración listas se procede a crear las paginas, para este caso se crea crearParte.jsp, si se aprecia que la extensión de la pagina es .JSP y no .JSF es debido a la configuración anteriormente definida en el fichero web.xml, mas explicitamente en las lineas donde se especifica el Faces Servlet, de esta forma la pagina inicial podria ser un simple formulario de registro de datos:

crearParte.jsp

Ahora bien, hasta este punto solamente tenemos la parte de la capa web creada, sin embargo podemos ver que se hace un uso notable de un Bean Manejado (JdaanialBean para este caso) este Managed Bean ha sido definido en el archivo de configuración faces-config donde se ha definido el paquete al que pertenece, en nombre con el que sera identificado y usado por los demas que recursos que accedan a él, y su extensión, que aunque para este caso es de session, puede ser usado en las extensiones habituales de cualquier variable en un contexto web normal, pudiendo emplearse Managed Beans a nivel de: session, application y request de esta forma se mantienen los datos guardados en el Managed Bean de acuerdo a su extensión.
aqui se puede obtener el codigo de este ManagedBean

BeanPruebas.java

Puede notarse que tanto en la pagina como en el Managed Bean se hace uso de una de las entidades definidas en la entrada anterior sobre JPA, para realizar esta integración entre estas capas de la aplicación se hace vital el uso de la anotación @EJB, dicha anotación tiene como atributo de referencia la interfaz remota o local que debe ser empleada para acceder al EJB propiamente dicho y que efectuara los metodos que se invoquen por los componentes que quieran usarlos, la anotación @EJB se encarga de localizar e instanciar todas las referencias necesarias del EJB para que se encuentre en estado consistente y pueda ser empleado en cada momento, dado que este EJB tiene como atributo la entidad Parte, esta entidad puede ser usada, y si que es usada como lo que realmente es, un objeto plano (POJO) que solamente almacena datos cuando se emplean los metodos setXXX y getXXX sobre sus atributos, lo cual es bastante util al momento de guardar directamente las entidades como registros en la base de datos al momento activar el manejador de persistencia para guardado de datos.

JDaanial.

[+/-] Continuar Leyendo...