Esta lecci�n nos presenta la programaci�n de aplicaciones J2EE, y el SDK J2EE mostr�ndonos como escribir una sencilla y peque�a aplicaci�n Enterprise multi-capa que consiste en una p�gina HTML, un servlet y un Bean de sesi�n.
El SDK J2EE es una definici�n y especificaci�n operacional no comercial de la plataforma J2EE que Sun Microsystem a liberado para demostraciones, prototipos y usos educacionales. Viene con el servidor de aplicaciones J2EE, servidor Web, base de datos, los APIs J2EE, y un completo conjunto de herramientas de desarrollo. Nos iremos encontrando con estas caracter�sticas y herramientas seg�n vayamos avanzando en este tutorial.
�Ejemplo de Aplicaci�n Cliente Multi-Capa
La peque�a aplicaci�n cliente de ejemplo de esta lecci�n acepta entrada de usuario a trav�s de un formulario HTML que invoca un servlet. El servlet usa el API JNDI (Java Naming and Directory Interface�) para buscar un Bean de sesi�n que realice los c�lculos por �l.
Este ejemplo es una aplicaci�n peque�a porque el servlet no ejecuta ninguna l�gica de negocio. El sencillo c�lculo lo realiza un Bean de sesi�n que se ejecuta en el servidor de aplicaciones J2EE. Por eso el cliente es peque�o, porque no maneja el proceso; lo hace el Bean de sesi�n.
Las aplicaciones multi-capa pueden consistir en 3 � 4 capas. Como se ve en la , el ejemplo multi-capa para este tutorial tiene cuatro capas. La arquitectura de tres capas extiende al cliente est�ndar de dos capas y el modelo del servidor situando un servidor de aplicaciones multi-capa entre la aplicaci�n cliente no-basada-en-web y la base de datos final. La arquitectura de cuatro capas extiende el modelo de tres capas reemplazando la aplicaci�n cliente con un navegador Web y una p�gina HTML potenciada con las tecnolog�as servlet/JavaServer Pages�.
Mientras que esta lecci�n usa s�lo tres o cuatro capas, la siguiente lecci�n extiende este mismo ejemplo para acceder al servidor de base de datos en la cuarta capa. Lecciones posteriores adaptan el ejemplo para usar las tecnolog�as JavaServer� Pages y Extensible Markup Language (XML).
�Software J2EE y Configuraci�n
Para ejecutar los ejemplos del tutorial, necesitas descargar e instalar el SDK Java 2 Enterprise Edition (J2EE), Versi�n 1.2.1 (http://java.sun.com/j2ee/download.html), y SDK Java 2, Standard Edition (J2SE), Versi�n 1.2 o posterior (http://java.sun.com/jdk/index.html).
Las instrucciones de este tutorial asumen que J2EE y J2SE est�n instalados en el directorio J2EE debajo del directorio home del usuario.
Nota: Siempre que se utilice monicap en un nombre de path, tendr�s que cambiarlo por tu nombre de usuario. |
Unix:
/home/monicap/J2EE/j2sdkee1.2.1 /home/monicap/J2EE/jdk1.2.2
Windows:
\home\monicap\J2EE\j2sdkee1.2.1 \home\monicap\J2EE\jdk1.2.2
�Configuraci�n del Path y ClassPath
La descarga contiene el servidor de aplicaciones J2EE, la base de datos Cloudscape, un servidor Web que usa capas de socket seguras (SSL) tambi�n conocido como HTTP sobre HTTPS, herramientas de desarrollo y despliegue, y los APIs Java para Enterprise. Para usar estar caracter�sticas, debemos configurar las variables de entorno path y classpath como se describe aqu�: Configuraci�n del Path
La configuraci�n del Path hace accesibles las herramientas de desarrollo y despliegue desde cualquier lugar de nuestro sistema. Debemos asegurarnos de seleccionar estos path antes de cualquier otro path que pudi�ramos tener de viejas instalaciones del JDK.
Unix:
/home/monicap/J2EE/jdk1.2.2/bin /home/monicap/J2EE/j2sdkee1.2.1/bin
Windows:
\home\monicap\J2EE\jdk1.2.2\bin \home\monicap\J2EE\j2sdkee1.2.1\binConfiguraci�n del ClassPath
La configuraci�n del ClassPath le dice a las herramientas de desarrollo y despliegue de Java 2 d�nde encontrar las distintas librer�as de clases que usa:
Unix:
/home/monicap/J2EE/j2sdkee1.2.1/lib/j2ee.jar
Windows:
\home\monicap\J2EE\j2sdkee1.2.1\lib\j2ee.jar
�Componentes de Aplicaci�n J2EE
Los programadores de aplicaciones J2EE escriben componentes de aplicaci�n J2EE. Un componente J2EE es una unidad de software funcional auto-contenida que se ensambla dentro de una aplicaci�n J2EE y que se comunica con otros componentes de aplicaci�n. La especificaci�n J2EE define los siguientes componentes de aplicaci�n:
- Componentes de Aplicaci�n Cliente
- Componentes JavaBeans Enterprise
- Componentes Servlets y JavaServer Pages (tambi�n llamados componentes Web)
- Applets
En esta lecci�n, crearemos una aplicaci�n y dos componentes J2EE: un servlet y un Bean de sesi�n. El servlet est� empaquetado con su fichero HTML en un fichero Web Archive (WAR), y las clases e interfaces del Bean de sesi�n est�n empaquetadas en un fichero JAR. Los ficheros WAR y JAR se a�aden a la aplicaci�n J2EE y se empaquetan dentro de un fichero Enterprise Archive (EAR) para probar, verificar y desplegar el entorno de producci�n.
Mientras estemos haciendo todos estos pasos para esta lecci�n, realmente estaremos realizando varias funciones diferentes. Escribir el c�digo del servlet y del Bean de sesi�n es una funci�n de desarrollo, mientras que crear la aplicaci�n J2EE y a�adir los componentes J2EE a una aplicaci�n es una funci�n de ensamblaje. En realidad, estas funciones podr�an ser realizadas por diferentes personas de diferentes compa��as.
�Crear la P�gina HTML
La p�gina HTML para esta lecci�n se llama bonus.html. Su c�digo HTML est� debajo de la , que muestra c�mo ver�a la p�gina HTML el usuario. El fichero bonus.html tiene dos campos de datos en los que usuario puede introducir un n�mero de seguridad social y un multiplicador. Cuando el usuario pulsa el bot�n Submit, BonusServlet.java recupera el dato del usuario, busca el Bean de sesi�n, y le pasa el dato del usuario al Bean de sesi�n. el Bean de sesi�n calcula un valor "bonus" y lo devuelve al servlet. El servlet devuelve otra p�gina HTML con el valor del "bonus" para que lo vea el usuario.
La siguiente Figura muestra el flujo de los datos entre el navegador y el Bean de sesi�n. El Bean de sesi�n se ejecuta en el servidor de aplicaciones J2EE.
�C�digo HTML
Lo m�s interesante sobre el c�digo del formulario HTML es el alias usado para invocar a BonusServlet . Cuando el usuario pulsa el bot�n Submit sobre el formulario HTML, se llama a BonusServlet porque se ha mapeado a BonusAlias durante el ensamblaje de la aplicaci�n descrito en Ensamblar la Aplicaci�n J2EE.
El ejemplo asume que bonus.html est� en el directorio /home/monicap/J2EE/ClientCode en UNIX. Aqu� y desde ahora los usuarios de Windows pueden invertir las barras inclinadas para obtener los paths correctos para su plataforma:
<HTML> <BODY BGCOLOR = "WHITE"> <BLOCKQUOTE> <H3>Bonus Calculation</H3> <FORM METHOD="GET" ACTION="BonusAlias"> <P> Enter social security Number: <P> <INPUT TYPE="TEXT" NAME="SOCSEC"></INPUT> <P> Enter Multiplier: <P> <INPUT TYPE="TEXT" NAME="MULTIPLIER"></INPUT> <P> <INPUT TYPE="SUBMIT" VALUE="Submit"> <INPUT TYPE="RESET"> </FORM> </BLOCKQUOTE> </BODY> </HTML>
�Crear el Servlet
El ejemplo asume que el fichero BonusServlet.java est� en el directorio /home/monicap/J2EE/ClientCode en UNIX. Durante la ejecuci�n, el c�digo del servlet hace lo siguiente:
- Recupera los datos del usuario
- Busca el bean de sesi�n
- Le pasa los datos al bean de sesi�n
- Despu�s de recibir un valor de vuelta desde el bean de sesi�n, crea una p�gina HTML para mostrar el valor devuelto al usuario.
La siguiente secci�n describe las diferentes partes del c�digo del servlet. Aqu� puedes ver el c�digo del Servlet completo.
�Sentencias Import
El c�digo del servlet empieza con sentencias import para los siguientes paquetes:
- javax.servlet, que contiene clases servlets gen�ricas (independientes del protocolo). La clase HTTPServlet usa la clase ServletException de este paquete para indicar un problema en el servlet.
- javax.servlet.http, que contiene clases servelts HTTP. La clase HttpServlet est� en este paquete.
- java.io para entrada y salida del sistema. La clase HttpServlet usa la clase IOException de este paquete para se�alar que se ha producido una excepci�n de alg�n tipo de entrada o salida.
- javax.naming para poder usar los APIs Java Naming and Directory Interface (JNDI�) para buscar el interface home del bean de sesi�n.
- javax.rmi para buscar el interface home del bean de sesi�n y poner su objeto servidor remoto listo para las comunicaciones.
�M�todo init()
El m�todo BonusServlet.init busca el interface home del bean de sesi�n y crea su ejemplar. El m�todo usa el nombre JNDI especificado durante el ensamblado de componentes (calcs) para obtener una referencia al interface home por su nombre. La siguiente l�nea pasa la referencia y la clase del interface home al m�todo PortableRemoteObject.narrow para asegurarse de que la referencia puede forzarse al tipo CalcHome.
InitialContext ctx = new InitialContext(); Object objref = ctx.lookup("calcs"); homecalc = (CalcHome)PortableRemoteObject.narrow(obj ref, CalcHome.class);
�M�todo doGet
La lista de par�metros de doGet toma un objeto request y un response. El navegador env�a una petici�n (request) al servlet y el servlet env�a una respuesta (response) de vuelta al navegador. La implementaci�n del m�todo accede a informaci�n del objeto request para encontrar qui�n ha hecho la petici�n, en qu� formulario est�n los datos de la petici�n, y que cabeceras HTTP se enviar�n, y usa el objeto response para crear una p�gina HTML en respuesta a la petici�n del navegador.
El m�todo doGet lanza una IOException si hay alg�n problema con los datos de entrada o salida cuando maneja la petici�n, y una ServletException si la petici�n no se puede manejar. Para calcular el valor del bonus, el m�todo doGet crea el interface home y llama al m�todo calcBonus.
public void doGet (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String socsec = null; int multiplier = 0; double calc = 0.0; PrintWriter out; response.setContentType("text/html"); String title = "EJB Example"; out = response.getWriter(); out.println("<HTML><HEAD><TITLE>") out.println(title); out.println("</TITLE></HEAD><BODY>"); try{ //Retrieve Bonus and Social Security Information String strMult = request.getParameter( "MULTIPLIER"); Integer integerMult = new Integer(strMult); multiplier = integerMult.intValue(); socsec = request.getParameter("SOCSEC"); //Calculate bonus double bonus = 100.00; theCalculation = homecalc.create(); calc = theCalculation.calcBonus( multiplier, bonus); }catch(Exception CreateException){ CreateException.printStackTrace(); } //Display Data out.println("<H1>Bonus Calculation</H1>"); out.println("<P>Soc Sec: " + socsec + "<P>"); out.println("<P>Multiplier: " + multiplier + "<P>"); out.println("<P>Bonus Amount: " + calc + "<P>"); out.println("</BODY></HTML>"); out.close(); }
�C�digo del Servlet
Aqu� est� el c�digo completo:
import javax.servlet.*; import javax.servlet.http.*; import java.io.*; import javax.naming.*; import javax.rmi.PortableRemoteObject; import Beans.*; public class BonusServlet extends HttpServlet { CalcHome homecalc; public void init(ServletConfig config) throws ServletException{ //Look up home interface try{ InitialContext ctx = new InitialContext(); Object objref = ctx.lookup("calcs"); homecalc = (CalcHome)PortableRemoteObject.narrow( objref, CalcHome.class); } catch (Exception NamingException) { NamingException.printStackTrace(); } } public void doGet (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String socsec = null; int multiplier = 0; double calc = 0.0; PrintWriter out; response.setContentType("text/html"); String title = "EJB Example"; out = response.getWriter(); out.println("<HTML><HEAD><TITLE>"); out.println(title); out.println("</TITLE></HEAD><BODY>"); try{ Calc theCalculation; //Get Multiplier and Social Security Information String strMult = request.getParameter("MULTIPLIER"); Integer integerMult = new Integer(strMult); multiplier = integerMult.intValue(); socsec = request.getParameter("SOCSEC"); //Calculate bonus double bonus = 100.00; theCalculation = homecalc.create(); calc = theCalculation.calcBonus(multiplier, bonus); } catch(Exception CreateException){ CreateException.printStackTrace(); } //Display Data out.println("<H1>Bonus Calculation</H1>"); out.println("<P>Soc Sec: " + socsec + "<P>"); out.println("<P>Multiplier: " + multiplier + "<P>"); out.println("<P>Bonus Amount: " + calc + "<P>"); out.println("</BODY></HTML>"); out.close(); } public void destroy() { System.out.println("Destroy"); } }
�Crear el Bean de Session
Un bean de sesi�n representa una conversaci�n temporal con un cliente. Si el servidor o el cliente, se cuelgan, el bean de sesi�n y sus datos se van. En contraste, los beans de entidad son persistentes y representan datos en una base de datos. Si el servidor o el cliente se bloquean, los servicios relacionados aseguran que los datos del bean de entidad se graban.
La siguiente Figura muestra como funcionan el servlet y el bean de sesi�n como una aplicaci�n J2EE completa una vez que se han ensamblado y desplegado. El contenedor, mostrado en la caja sombreada, es el interface entre el bean de sesi�n y las funcionalidades especificas de la plataforma de bajo-nivel que soporta el bean de sesi�n. El contenedor se crea durante el despliegue.
La siguiente secci�n muestra el c�digo del bean de sesi�n. El ejemplo asume que los ficheros CalcBean.java , Calc.java, y CalcHome.java est�n situados en el directorio /home/monicap/J2EE/Beans. La sentencia package Beans en la parte superior del interface CalcBean y los ficheros de clases es el mismo nombre que el nombre de este directorio. Cuando se compilen estos ficheros, se hara desde el directorio superior Beans y el nombre del paquete Beans (o directorio) se pretende que apunte al interface y los ficheros class compilados. Compilar el Bean de Sesi�n.
Nota: Este ejemplo muestra c�mo escribir un bean de sesi�n, pero tambi�n es posible comprar beans enterprise a un proveedor y ensamblarlos dentro de una aplicaci�n J2EE. |
�CalcHome
BonusServlet no trabaja directamente con el bean de sesi�n, sino que crea un ejemplar de su interface home. El interface home extiende EJBHome y tiene un m�todo create para crear el bean de sesi�n en su contendor. Se lanzar� una CreateException si no se puede crear el bean de sesi�n y una RemoteException si ocurre una excepci�n relacionada con las comunicaciones durante la ejecuci�n del m�todo remoto.
package Beans; import java.rmi.RemoteException; import javax.ejb.CreateException; import javax.ejb.EJBHome; public interface CalcHome extends EJBHome { Calc create() throws CreateException, RemoteException; }
�Calc
Cuando se crea el interface home, el servidor de aplicaciones J2EE crea el interface remoto y el bean de sesi�n. El interface remoto extiende EJBObject declara el m�todo calcBonus para el c�lculo del valor del bonos. Este m�todo requiere que se lance una javax.rmi.RemoteException, y est� implementado por la clase CalcBean.
package Beans; import javax.ejb.EJBObject; import java.rmi.RemoteException; public interface Calc extends EJBObject { public double calcBonus(int multiplier, double bonus) throws RemoteException; }
�CalcBean
La clase del bean de sesi�n implementa el interface SessionBean y proporciona el comportamiento para el m�todo calcBonus. Los m�todos setSessionContext y ejbCreate son llamados en este orden por el contendor despu�s de que BonusServlet llame al m�todo create CalcHome.
Los m�todos vac�os son del inteface SessionBean. Estos m�todos los llama el contenedor del bean. No tenemos que proporcionar comportamiento para estos m�todos a menos que necesitemos funcionalidades adicionales, por ejemplo cuando el bean es a�adido o eliminado de su contenedor.
package Beans; import java.rmi.RemoteException; import javax.ejb.SessionBean; import javax.ejb.SessionContext; public class CalcBean implements SessionBean { public double calcBonus(int multiplier, double bonus) { double calc = (multiplier*bonus); return calc; } //These methods are described in more //detail in Lesson 2 public void ejbCreate() { } public void setSessionContext( SessionContext ctx) { } public void ejbRemove() { } public void ejbActivate() { } public void ejbPassivate() { } public void ejbLoad() { } public void ejbStore() { } }
�Compilar el Bean de Sesi�n y el Servlet
Para ahorrarnos tecleado, la forma m�s sencilla para compilar el bean de sesi�n y el servlet es con un script (en Unix) o un fichero batch (en Windows).
�Compilar el Bean de Session
Unix
#!/bin/sh cd /home/monicap/J2EE J2EE_HOME=/home/monicap/J2EE/j2sdkee1.2.1 CPATH=.:$J2EE_HOME/lib/j2ee.jar javac -d . -classpath "$CPATH" Beans/CalcBean.java Beans/CalcHome.java Beans/Calc.java
Windows
cd \home\monicap\J2EE set J2EE_HOME=\home\monicap\J2EE\j2sdkee1.2.1 set CPATH=.;%J2EE_HOME%\lib\j2ee.jar javac -d . -classpath %CPATH% Beans/CalcBean.java Beans/CalcHome.java Beans/Calc.java
�Compilar el Servlet
Unix
#!/bin/sh cd /home/monicap/J2EE/ClientCode J2EE_HOME=/home/monicap/J2EE/j2sdkee1.2.1 CPATH=.:$J2EE_HOME/lib/j2ee.jar: /home/monicap/J2EE javac -d . -classpath "$CPATH" BonusServlet.java
Windows
cd \home\monicap\J2EE\ClientCode set J2EE_HOME=\home\monicap\J2EE\j2sdkee1.2 set CPATH=.;%J2EE_HOME%\lib\j2ee.jar; \home\monicap\J2EE javac -d . -classpath %CPATH% BonusServlet.java
�Arrancar el Servidor de Aplicaciones J2EE
Necesitamos arrancar el servidor de aplicaciones J2EE para desplegar y ejecutar el ejemplo. El comando para arrancar el servidor est� en el directorio bin debajo de nuestra instalaci�n J2EE. Si tenemos el path configurado para que lea el directorio bin, vamos directamente al directorio J2EE (entonces nuestra versi�n real corresponde con lo que veremos en el texto) y tecleamos:
j2ee -verbose
Nota: Algunas veces el servidor J2EE no arranca si est�mos ejecutando Outlook |
Si esto no funciona, tecleamos lo siguiente desde el directorio J2EE:
Unix:
j2sdkee1.2.1/bin/j2ee -verbose
Windows:
j2sdkee1.2.1\bin\j2ee -verbose
La opci�n verbose imprime mensajes de informaci�n en la l�nea de comandos cuando el servidor arranca. Cuando veamos J2EE server startup complete , podemos arrancar la herramienta de despliegue. Por ahora, podemos ignorar los otros mensajes que aparecen.
�Arrancar la Herramienta DeployTool
Para ensamblar y desplegar la aplicaci�n J2EE, tenemos que arrancar la herramienta deploytool. Si tenemos el path configurado para que lea el directorio bin, vamos directamente al directorio J2EE (entonces nuestra versi�n real corresponde con lo que veremos en el texto) y tecleamos:
deploytool
Si esto no funciona, hacemos lo siguiente desde el directorio J2EE:
Unix:
j2sdkee1.2.1/bin/deploytool
Windows:
j2sdkee1.2.1\bin\deploytool
Notas: Si ocurre un error de acceso a memoria mientras arrancamos deploytool , a�adimos una variable de entorno llamada JAVA_FONTS y seleccionamos el path a c: \<font directory> . Por ejemplo c:\winnt\fonts. Tambi�n, si se encuentra una NullPointerException para BasicFileChooserUI cuando se arranca deploytool, debemos asegurarnos de no arrancar la herramienta desde el directorio ra�z (es decir c:\ ). Si la ejecutamos desde cualquier otro lugar, como el directorio bin de nuestra instalaci�n j2sdkee1.2, no encontraremos este problema. |
�DeployTool
El herramienta DeployTool mostrada en la siguiente figura tiene cuatro ventanas principales. La ventana "Local Aplications" muestra las aplicaciones J2EE y sus componentes. La ventana "Inspecting" muestra informaci�n sobre la aplicaci�n o componentes seleccionados. La ventana "Servers" nos dice si el servidor de aplicaciones se est� ejecutando en un host local. Y la ventana "Server Aplications" nos dice qu� aplicaciones tenemos instaladas. Cuando sigamos los pasos para ensamblar la aplicaci�n de ejemplo J2EE, veremos que todas estas ventanas nos muestran informaci�n.
Nota: A la derecha de la ventana Server Applications hay un bot�n gris Uninstall. Despu�s de desplegar la aplicaci�n, veremos la aplicaci�n listada en esta ventana. Podemos pulsar sobre Uninstall para desinstalarla, hacerle cambios, y reinstalarla sin tener que parar y rearrancar el servidor de aplicaciones. |
�Ensamblar la Aplicaci�n J2EE
Ensamblar una aplicaci�n J2EE implica crear una nueva aplicaci�n, y a�adirle los componentes de aplicaci�n. Aqu� tenemos un sumario de los pasos para ensamblar, que se describen abajo con m�s detalle.
- Crear una nueva aplicaci�n J2EE (BonusApp.ear).
- Crear un nuevo bean enterprise (CalcBean.jar).
- Crear un nuevo componente web (Bonus.war).
- Especificar un nombre JNDI para el bean enterprise (calcs).
- Especificar el contexto ra�z para la aplicaci�n J2EE (BonusRoot ).
�Crear la aplicaci�n J2EE
Los componentes J2EE se ensamblan dentro de ficheros (EAR) "Enterprise Archive".
Menu File : Seleccionamos New Application .
Caja de di�logo New Application:
- Tecleamos BonusApp.ear para el Application File Name.
- Pulsamos el bot�n derecho del rat�n en el campo Application Display Name. BonusApp aparece en el nombre.
- Pulsamos el bot�n Browse para abrir el selector de ficheros para seleccionar la localizaci�n donde queremos grabar el fichero EAR
Selector de Ficheros New Application:
- Localizamos el directorio donde queremos situar el fichero EAR de la aplicaci�n.
- En este ejemplo, este directorio es /home/monicap/J2EE .
- En el campo File name, tecleamos BonusApp.ear.
- Pulsamos sobre New Application .
- Pulsamos sobre OK.
En la ventana de Local Applications ahora aparecer� "Bonusapp.ear", y en la ventana Inspector a la derecha muestyra el nombre, la localizaci�n y la informaci�n de contenidos para BonusApp . La meta informaci�n mostrada en la ventrana contents describe el fichero JAR y la aplicaci�n J2EE, y prorporciona informaci�n de tiempo de ejecuci�n sobre la aplicaci�n.
�Crear el Bean de Sesi�n
Los beans Enterprise (tanto de entidad como de sesi�n) se empaquetan en un fichero JAR.
Men� File: Seleccionamos New Enterprise Bean. Arrancar� el New Enterprise Bean Wizard y mostrar� un di�golo de introducci�n que sumariza los pasos que vamos a tomar. Despu�s de leerlos, pulsamos sobre Next .
Caja de Di�logo EJB JAR: Especificamos la siguiente informaci�n:
- Enterprise Bean will go in : BonusApp
Display name: CalcJar
Description: Un sencillo Bean de sesi�n que calcula un bonus y tiene un m�todo. - Pulsamos sobre Add. Hay dos botones en esta pantalla. No aseguramos de pulsar el segundo que est� cerca de la ventana Contents.
Caja de Di�logo Add Files to .JAR: vamos al directorio J2EE. Podemos teclear el nombre del path o usar el navegador para obetenerlo. Una vez en el directorio J2EE, hacemos doble click sobre beans para mostrar el contenido del directorio beans.
- Selecionamos Calc.class .
- Pulsamos sobre Add .
- Seleccionamos CalcHome.class .
- Pulsamos sobre Add .
- Seleccionamos CalcBean.class .
- Pulsamos sobre Add .
Nota Importante: La caja de di�logo Add Contents to .JAR se deber�a parecer a la de la figura siguiente. Las clases Enterprise Bean JAR se deber�an mostrar con el prefijo del nombre de directorio Beans. |
- Pulsamos OK. Ahora deber�amos estar de nuevo en la caja de di�logo EJB JAR. Beans/Calc.class , Beans/CalcHome.class, y Beans/CalcBean.class deber�an aparecer en la ventana Contents.
- Pulsamos Next.
Caja de di�logo General: Seleccionamos la siguiente informaci�n:
- classname: Beans.CalcBean
Home interface: Beans.CalcHome
Remote interface: Beans.Calc
Bean type: Session y Stateless - Especificamos el nombre (el nombre que aparece cuando el fichero JAR se a�ade a BonusApp en la ventana de "Local Applications"), y proporcionamos una descripci�n para los contenidos del ficheros JAR.
- Display Name: CalcBean
- Description: Este fichero JAR contiene el bean de sesi�n CalcBean.
- Pulsamos sobre Next .
Caja de Di�logo Environment Entries: Este ejemplo no hace uso de las propiedades (entradas de entorno) pero nosotros si podr�amos:
- Pulsamos sobre Finish .
Verificar que el fichero JAR se a�adido realmente a la aplicaci�n J2EE:
- Vamos a la ventana "Local Applications"
- Pulsamos el gr�fico gris en frente de BonusApp . Veremos el fichero JAR CalcJar.
- Pulsamos el gr�fico gris en frente de CalcJar para ver el bean de sesi�n CalcBean.
�Crear Componentes Web
Los componentes Web (servlets, o JavaServer Pages�) se empaquetan dentro de un fichero Web Archive (WAR).
Men� File : Seleccionamos New Web Component . Se arrancar� el New Web Component Wizard y mostrar� una ventana que sumariza los pasos que vamos a tomar. Despu�s de leerlos, pulsamos sobre Next .
Caja de di�logo WAR File General Properties : Proporcionamos la siguiente informaci�n:
- WAR file: BonusApp
Display name: BonusWar
Description: Este fichero war contiene un servlet y una p�gina HTML - Pulsamos Add .
Caja de Di�logo Add Contents to WAR:
- Vamos el directorio ClientCode tecleando ClientCode despu�s de J2EE en el campo Root Directory.
- Seleccioamos bonus.html. Debemos asegurarnos de que WAR contents muestra el listado como bonus.html sin el directorio ClientCode precediendo al nombre.
- Pulsamos sobre Add .
Nota: Debemos asegurarnos de a�adir bonus.html antes de a�adir BonusServlet.class |
- Pulsamos sobre Next .
- Elegimos de nuevo el directorio ClientCode.
- Seleccionamos BonusServlet.class. Debemos asegurarnos de que WAR contents muestra el nombre de BonusServlet.class sin el directorio precediendo el nombre.
- Pulsamos sobre Add .
Caja de Di�golo Contents to WAR: La pantalla se deber�a parecer a la de la siguiente figura:
- Pulsamos Finish .
Caja de di�golo WAR File General Properties :
- Pulsamos Next .
Caja de di�logo Choose Component Type:
- Selecccionamos Servlet (si no est� ya seleccionado)
- Puslamos Next .
Caja de Di�logo Component General Properties:
- Nos aseguramos de que BonusServlet est� seleccionado para la clase Servlet.
- Introducimos un nombre ( BonusServlet ) y una descripci�n.
- Podemos ignornar las selecciones de Startup y load sequence aqu� porque este ejemplo s�lo usa un servlet.
Caja de di�logo Component Initialization Parameters:
- Pulsamos Next . BonusServlet no usa ning�n par�metro de inicializaci�n.
Caja de di�logo Component Aliases:
- Pulsamos Add .
- Tecleamos BonusAlias y pulsamos Return . Este es el mismo nombre de alias que pusimos en el campo ACTION del formulario HTML embebido en el fichero bonus.html.
- Pulsamos Finish .
En el panel de contenido, podemos ver que el fichero WAR contiene un fichero XML con informaci�n estructural y de atributos sobre la aplicaci�n web. el fichero bonus.html, y el fichero class BonusServlet. El formato del fichero WAR es donde van todas las clases servlet en un punto de entrada con Web-INF/classes. Sin embargo, cuando se despliega el fichero WAR, la clase BonusServlet se sit�a en un directorio ra�z de contexto bajo public_html. Esta situaci�n es la convenci�n parra servidores web compatibles con Servlet 2.2.
Para cambiar el nombre o la descripci�n:
- Ponemos el cursor en el campo apropiado en la ventana
- Lo cambiamos seg�n nuestros deseos
- Pulsamos la tecla Return para que las ediciones tengan efecto.
�Especificar el Nombre JNDI y el Contexto Ra�z
Antes de poder desplegar la aplicaci�n BonusApp y sus componentes, tenemos que especificar el nombre JNDI que BonusServlet usa para buscar el bean de sesi�n CalcBean, y especificar un directorio de contexto ra�z donde el desplegador pondr� los componentes web.
Nombre JNDI:
- Seleccionamos el fichero BonusApp en la ventana "Local Applications". La ventana "Inspecting" muestra pesta�as en la parte superior, y una de esas pesta�as es JNDI Names.
- Seleccionamos Select JNDI. La ventana "Inspecting" muestra una pantalla con tres columnas y una fila. CalcBean se ve en la columna central.
- En la columna m�s a la derecha bajo el nombre JNDI, tecleamos calc. Este nombre JNDI es el mismo nombre JNDI pasado al m�todo BonusServlet.lookup.
- Pulsamos la tecla Return.
Contexto Ra�z:
- Pulsamos la pesta�a Web Context en la parte superior de la ventana Inspecting. Veremos BonusWar en la columna de la izquierda.
- Tecleamos BonusRoot en la columna de la derecha
- Pulsamos la tecla Return. Durante el despliegue se crea el directorio BonusRoot bajo el directorio public_html en nuestra instalaci�n J2sdkee1.2, y los ficheros bonus.html y BonusServlet se copian como muestra en la siguiente figura:
Alias:
- En la ventana LocalApp, pulsamos BonusWar y luego BonusServlet
- Pulsamos la pesta�a Aliases de la parte superior de la ventana Inspecting. Deber�amos ver BonusAlias en el campo.
- Si BonusAlias no est� ah�, lo tecleamos y pulsamos Return.
�Verificar y Desplegar la Aplicaci�n J2EE
Antes de desplegar la aplicaci�n, es una buena idea ejecutar el verificador. El verificador nos mostrar� errores en los componentes de la aplicaci�n como un m�todo no existente en el bean que el compilador no captura.
Verificar:
- Con BonusApp seleccionado, elegimos Verifier desde el men� Tools.
- En el di�logo que aparece, pulsamos OK. La ventana nos deber�a decir si no han fallado los tests.
- Cerramos la ventana del verificador porque ya estamos listos para desplegar la aplicaci�n.
Nota: En la versi�n 1.2 podr�amos obtener un error tests app.WebURI. Esto significa que la herramienta de desarrollo no puso una extensi�n .war al fichero WAR durante su creaci�n. Este es un bug menor y la apliaci�n J2EE se despliega bien sin notarlo. |
Desplegar:
- Desde el men� Tools, elegimos Deploy Application . Se mostrar� una caja de di�logo Deploy BonusApp. Debemos verificar que la selecci�n Target Server es o localhost o el nombre del servidor donde se est� ejecutando el J2EE.
Nota: No debemos seleccionar el check box Return Client Jar. La �nica vez que necesitamos seleccionar este check box es cuando despleguemos una aplicaci�n solitaria para el programa cliente. Este ejemplo usa un servlet y una p�gina HTML por eso no debemos seleccionarlo. Seleccionar este check box crea un fichero Jar con la informaci�n de despliegue necesaria para una aplicaci�n solitaria. |
- Pulsamos Next. Nos aseguramos de que el nombre JNDI muestra calcs. Si no lo hace, lo tecleamos nosotros mismos y pulsamos la tecla Return.
- Pulsamos Next. Nos aseguramos de que el nombre Context Root muestra BonusRoot. Si no lo hace, lo tecleamos nosotros y pulsamos la tecla Return.
- Pulsamos Next .
- Pulsamos Finish para empezar el despliegue. Aparecer� una caja de di�logo que mostrar� el estado de la operaci�n de despliegue.
- Cuando est� completa, las tres barras de la izquierda est�r�n completamente sombreadas, como se ve en la siguiente figura. Cuando esto suceda, pulsamos OK.
�Ejecutar la Aplicaci�n J2EE
El servidor web se ejecuta por defecto en el puerto 8000. Para abrir la p�gina bonus.html apuntamos nuestro navegador a http://localhost:8000/BonusRoot/bonus.html, que es donde DeployTool puso el fichero HMTL.
Nota: Si necesitamos usar un puerto diferente porque el puerto 8000 est� siendo utilizado por otra cosa, editamos el fichero web.properties en el directorio ~/J2EE/j2sdkee1.2/config y arrancamos de nuevo el servidor J2EE. |
- Rellenamos un n�mero de seguridad social.
- Rellenamos un multiplicador.
- Pulsamos el bot�n Submit. BonusServlet procesa nuestros datos y devuelve una p�gina HTML con el c�lculo del bono.
Bonus Calculation Soc Sec: 777777777 Multiplier: 25 Bonus Amount 2500.0
�Actualizar el C�digo de Componentes
El men� Tools tiene dos opciones de inter�s. Son Update Application Files y Update and Redeploy Application. Estas opciones nos permiten cambiar el c�digo y redesplegar nuestra aplicaci�n con facilidad. Simplemente hacemos los cambios en el c�digo, lo recompilamos, y elegimos una de estas opciones del men�.
- Update Application Files actualiza los ficheros de la aplicaci�n con nuestro nuevo c�digo. En este punto podemos verificar la aplicaci�n o desplegarla.
- Update and Redeploy Application actualiza los ficheros de la aplicaci�n con nuestro nuevo c�digo y redespliega la aplicaci�n sin ejecutar el verificador.
�C�digo Fuente de los Ejemplos
Aqu� tienes un fichero Zip con los ficheros fuente de los ejemplos de esta p�gina: