Introducción a J2EE

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\bin
Configuraci�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.

  1. Crear una nueva aplicaci�n J2EE (BonusApp.ear).
  2. Crear un nuevo bean enterprise (CalcBean.jar).
  3. Crear un nuevo componente web (Bonus.war).
  4. Especificar un nombre JNDI para el bean enterprise (calcs).
  5. 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:

fuentes_L1.zip

COMPARTE ESTE ARTÍCULO

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP
ARTÍCULO ANTERIOR

SIGUIENTE ARTÍCULO