|
Colón de Larreategui 26, 1A 48009 Bilbao - Tel. 944 23 73 84 - e-mail: formacion@programia.es
|
Continuamos nuestra aplicación de ejemplo después de una pequeña (por decir algo) pausa. Confiamos en tener tiempo esta semana para ir añadiendo nuevas entradas.
Estructura de la Aplicación usando un único War
Nuestra aplicación de ejemplo será una aplicación web, y utilizará la librería de ICEfaces 2.0. Para crear un proyecto de este tipo seguiremos estos pasos, desde el Netbeans:
Desde el menú de File - New Project... seleccionar la categoría: Java Web – Web Application.
Datos del proyecto:
Pulsar en Siguiente, y continuar con estos datos:
Pulsar en Siguiente, y continuar con estos datos:
Frameworks: seleccionamos sólo ICEfaces, y marcamos la opción de Compatibilidad con ICEfaces 1.8 (ICEfaces 2.0 only).
El proyecto se generará de forma automática. Para probar que se ha generado correctamente, arrancamos el servidor Glassfish V3 y desplegamos la aplicación. Abrimos un navegador y accedemos a esta url:
Nos aparecerá una pantalla con título "ICEfaces 2", y contenido "Welcome to ICEfaces 2. Add ICEfaces 1.8 components ". Ya tenemos funcionando nuestra primera aplicación con JSF 2.0, y ICEfaces 2. ¿Quién dijo fácil?
Un vistazo a los ficheros generados
Vamos a echar un vistazo a los ficheros generados de forma automática. Los primeros que vamos a mirar serán los que están en "[demo-war]/Web Pages/WEB-INF/". Son ficheros de configuración de la aplicación: descriptores de despliegue.
/Web Pages/WEB-INF/beans.xml
Es un fichero de configuración utilizado para inyección de dependencias del contenedor (CDI). Lo dejaremos vacío. Podeis ver más información sobre él en esta URL: http://relation.to/Bloggers/WhyIsBeansxmlRequiredInCDI
/Web Pages/WEB-INF/sun-web.xml
Es el fichero descriptor de despliegue propio del Glassfish para la aplicación web. En él se configurarán parámetros propios del servidor de aplicaciones. En el fichero generado por el NetBeans, indica de forma explícita que el context-root será “/demo-war”.
También se pueden indicar otros parámetros, como el “keepgenerated” a true, para que mantenga el .java que se compila para cada jsp.
/Web Pages/WEB-INF/web.xml
Es el fichero descriptor de despliegue para la aplicación web. Está definido en la especificación de JavaEE. Todas las aplicaciones web tienen que tener el suyo.
En él se ha configurado nuestra aplicación para que utilice el Servlet de JSF (FacesServlet) para todas las peticiones a URLs que terminen en “.jsf” (nuestras páginas web), o para todas las que comiencen por “/icefaces/*” (que -si no me equivoco- serán peticiones internas generadas por los componentes de icefaces).
Se indica, además, el tiempo (en minutos) en el que una sesión de usuario puede estar inactiva antes de que se deseche.
Y también se indica que el welcomeFile será “index.html” o “ welcomeICEfaces.jsf”. De esta forma, cuando se accede a una URL sin indicar la página se comprobará si en el directorio existe “index.html” o “welcomeICEfaces.jsf”. Por ejemplo, al acceder a “http://localhost/demo-war/” estaremos accediendo en realidad a “http://localhost/demo-war/welcomeICEfaces.jsf” (porque no tenemos “index.html”). O también, si accediéramos a "http://localhost/demo-war/directorio_ejemplo/" el Glassfish intentará buscar un fichero index.html, o un jsf de welocomeICEfaces.jsf. Si no lo encuentra, devolverá un código de error 404. Pero primero, buscará esas páginas indicadas como welcomeFile.
Una petición a la url “http://localhost/demo-war/welcomeICEfaces.jsf” estará gestionada por el FacesServlet -por lo indicado en el "servlet-mapping" del web.xml-. Este FacesServlet asociará el árbol de componentes JSF a la petición del usuario según lo indicado en el fichero “/welcomeICEfaces.xhtml”. Es decir, una petición a un XXX.jsf tendrá que tener asociado un fichero XXX.xhtml.
Después de revisar los ficheros descriptores de despliegue, veamos el fichero a partir del cual se genera el código HTML:
/Web Pages/welcomeICEfaces.xhtml
En este fichero se define el HTML de presentación de la página, utilizando etiquetas de JSF y de ICEfaces. La mayoría de las etiquetas de componentes de icefaces requieren que estén dentro de un formulario de icefaces (<ice:form ...).
Enlace con los fuentes del proyecto generado: demo-war_01.rar
Organización de las clases de nuestro proyecto en Packages
Vamos a organizar las clases de nuestro proyecto según estos paquetes:
Otra forma de estructurar la aplicación en contenedores Java EE 5:
Hasta antes de la versión Java EE 6, para poder acceder a un EJB desde una aplicación web de forma local teníamos que tener los dos componentes -el EJB y el WAR- en una misma aplicación EAR. Y queremos utilizar un EJB para poder acceder a nuestras entidades de JPA dentro de un contexto transaccional, por lo que la estructura de nuestras aplicaciones web solía ser de esta forma:
Para cada uno de estos cuatro componentes, tendríamos un proyecto distinto de Netbeans:
En la siguiente parte prepararemos nuestras clases de entidad, y accederemos a ellas desde un EJB.