Los ejercicios de esta sesión van a centrarse en la creación,
compilación y despliegue de beans. En concreto, vamos a trabajar con
un sencillo ejemplo de bean de sesión sin estado, el bean saludoEjb.
En los ejercicios vamos a usar las siguientes herramientas:
Tiempo estimado de realización: 10 minutos
Suponemos que el servidor de aplicaciones está instalado en
el directorio del usuario. Por ejemplo, en el directorio /home/domingo/bea
.
Vamos a llamar a este directorio BEA_HOME
. Justo en este
directorio podemos encontrar el directorio weblogic81
.
Llamaremos a este otro directorio WL_HOME
:
BEA_HOME = /home/domingo/bea
WL_HOME = /home/domingo/bea/weblogic81
1. Lo primero que debemos hacer es instalar un dominio vacío en el que
vamos a probar los ejemplos. Para ello debes ejecutar el comando config.sh
que se encuentra en el directorio WL_HOME/common/bin
:
% cd /home/domingo/bea/weblogic81/common/bin
% ./config.sh
Sigue paso a paso las indicaciones del asistente, tal y como se
muestra en las siguientes figuras:
1. Indica que quieres crear una nueva configuración de WebLogic Server
2. Selecciona la plantilla de configuración básica.
Esta es una plantilla vacía, sin ejemplos ni configuraciones
iniciales de servicios. También sería posible escoger
alguna otra plantilla, en la que ya se han configurado algunos
servicios, como el de JDBC o el de JMS.
3. Cuando pulses "Next" aparecerá otra pantalla en la que te
preguntará si quieres usar la configuración Express.
Acepta esa configuración.
4. Después aparece la siguiente pantalla en la que debes dar un login y contraseña para el usario de administración del servidor de aplicaciones. Deja "weblogic" como usuario y, por simplificar, pon "weblogic" como contraseña:
5. La siguiente pantalla te preguntará por el modo del
servidor, desarrollo o producción, así como por ej Java
SDK que queremos usar. Acepta lo que aparece por defecto (modo
desarrollo y Java SDK de Sun proporcionado por BEA):
6. Por último, la siguiente pantalla te da la oportunidad de
cambiar el nombre de la configuración del servidor de
aplicaciones. Acepta el nombre que te ofrece por defecto (mydomain
):
Pulsa "Create" y aparecerá una última ventana de
resumen con las características de la nueva configuración.
Pulsa "Done" y el asistente se cerrará.
7. Una vez que se ha creado el nuevo dominio, lanza el servidor de
aplicaciones con esa nueva configuración vacía. Para ello
ejecuta los siguientes comandos en un shell:
% cd BEA_HOME/user_projects/domain/mydomain
% ./startWebLogic.sh
Se lanzará el servidor de aplaciones en ese shell. Deja el
shell abierto porque ahí vas a poder ver todos los mensajes que
genere el servidor de apliaciones y todo lo que escriban los beans por
la salida estandar.
8. Por último, para comprobar que el servidor de aplicaciones
está funcionando correctamente puedes abrir un navegador y
conectarte a la página http://localhost:7001/console.
Deberás ver la consola de administración del WebLogic y
deberás poder entrar en ella con el usuario weblogic y la
contraseña weblogic:
saludoEjb
Tiempo estimado de realización: 40 minutos
Vamos ahora a ver, paso a paso, cómo compilar y desplegar un
enterprise bean. Existen distintas herramientas y distintas
configuraciones para realizar este despliegue. Por ejemplo, es posible
usar la herramienta ant
y algunas tareas proporcionadas por
el servidor de aplicaciones. En este primer ejemplo, vamos a usar el
entorno Eclipse para implementar el bean y la herramienta gráfica
WebLogic Builder para desplegar el bean en el servidor de aplicaciones.
Partimos del fichero SaludoBean.java
en el que se
define la implementación del bean de sesión. Puedes
encontrar este fichero en las plantillas de ejercicios de la
sesión 1. El código fuente de este fichero es el siguiente:
package especialista;
import javax.ejb.*;
public class SaludoBean implements SessionBean {
private String[] saludos = {"Hola, que tal?",
"Cuanto tiempo sin verte","Que te cuentas?", "Me alegro de
volver a verte"};
// Metodos de la interfaz SessionBean
public void setSessionContext(SessionContext arg0) {
System.out.println("set session context");
}
public void ejbRemove() {
System.out.println("ejb remove");
}
public void ejbActivate() {
System.out.println("ejb activate");
}
public void ejbPassivate() {
System.out.println("ejb passivate");
}
// Fin de la interfaz SessionBean
public String saluda() {
System.out.println("estoy en saluda");
int random = (int) (Math.random() * saludos.length);
return saludos[random];
}
public void ejbCreate() {
System.out.println("ejb create");
}
}
1. Lo primero que debemos hacer es crear el directorio en el que vamos a compilar
el bean. Supongamos que vamos a realizar todos los ejercicios en el directorio
/home/domingo/ejb
. Bajo ese directorio debemos crear la estructura
del bean de sesión saludoEjb
. Vamos a llamar al directorio
que contiene esa estructura saludoEjb
. También creamos el
directorio correspondiente al package especialista
, que es donde
va a residir el bean. Por último, copiamos en este directorio el fichero
SaludoBean.java
:
% cd /home/domingo
% mkdir ejb
% mkdir ejb/saludoEjb
% mkdir ejb/saludoEjb/especialista
% cp ejercicios1/SaludoBean.java ejb/saludoEjb/especialista
2. Lanzamos ahora Eclipse. Asegúrate de que Eclipse está configurado para que guarde los ficheros compilados en el mismo directorio en el que se encuentran los ficheros fuente. Para ello, selecciona "Window > Preferences" y comprueba de que en la preferencia "Java > New Project" está activa la opción "Source and output folder: Project":
3. Vamos ahora a crear un proyecto nuevo que debe residir en el
directorio /home/domingo/ejb/saludoEjb. Para ello, seleccionamos la
opción "File > New Project " y escogemos un proyecto de tipo
Java. Cuando pulsamos "Next" aparece una pantalla en la que debemos
definir el directorio base del proyecto:
Pulsando "Next >" pasamos a configurar el proyecto. Pulsamos la pestaña
"Libraries" y pulsamos la opción "Add External JARs ...". Vamos a añadir
el fichero JAR weblogic.jar
al proyecto. Se trata de un fichero
JAR donde se incluyen todas las librerías de clases de J2EE. Su ruta
es: WL_HOME/server/lib/weblogic.jar
.
La configuración final del proyecto en la vista de Java aparece en la siguiente imagen:
Eclipse habrá compilado correctamente el fichero SaludoBean.java
y habrá depositado el fichero SaludoBean.class
en el mismo
directorio saludoEjb/especialista
.
4. El siguiente paso es crear los ficheros de interfaz del bean. Recordemos
que son dos: la interfaz componente (Saludo.java
) y la interfaz
home (SaludoHome.java
). Creamos las interfaces ayudados del asistente
de Eclipse:
La interfaz Saludo.java
debe heredar de la interfaz java.ejb.EJBObject
.
Lo puedes indicar en la ventana correspondiente del asistente de creación
de interfaces:
Cuando hayas creado el fichero debes copiar en él el siguiente código,
en el que se declara el método saluda()
:
package especialista;
import javax.ejb.EJBObject;
import java.rmi.RemoteException;
public interface Saludo extends EJBObject {
public String saluda() throws RemoteException;
}
Vamos a escribir ahora la interfaz home. La llamaremos SaludoHome.java
y debe heredar de la interfaz java.ejb.EJBHome
. Al igual que la
interfaz componente la puedes crear también con el asistente de creación
de interfaces.
Cuando tengas el fichero debes copiar en él el siguiente código
en el que se declara el método create()
:
package especialista;
import javax.ejb.EJBHome;
import javax.ejb.CreateException;
import java.rmi.RemoteException;
public interface SaludoHome extends EJBHome {
public Saludo create() throws
RemoteException, CreateException;
}
Con esto ya has terminado de escribir todo el código que necesitas para que el bean funcione. Ahora sólo falta construir los descriptores de despliegue y realizar el despliegue en el servidor de aplicaciones. Ambas tareas se van a simplificar enórmemente con la herramienta WebLogic Builder.
Antes, comprueba que todo está correctamente. En la perspectiva de recursos, debe aparecer la siguiente estructura de directorios:
5. Primero lanza el programa WebLogic Builder:
% cd WL_HOME/server/bin
% ./startWLBuilder.sh
Escoge la opción "File > Open" y abre el directorio saludoEjb. Aparecerá un mensaje de aviso en el que se indica que no se encuentran los descriptores de despliegue. Acepta la opción para que los construya automáticamente y salva el directorio con la opción "File > Save":
Refresca el directorio saludoEjb en Eclipse para comprobar que se han creado los descriptores de despliegue:
Los dos ficheros descriptores de despliegue son ejb-jar.xml
, que
es el fichero estándar de la especificación EJB, y weblogic-ejb-jar.xml
,
que contiene unos descriptores específicos del servidor de aplicaciones
WebLogic. El contenido de estos ficheros es el siguiente.
Fichero ejb-jar.xml
:
<ejb-jar>
<enterprise-beans>
<session>
<ejb-name>SaludoBean</ejb-name>
<home>especialista.SaludoHome</home>
<remote>especialista.Saludo</remote>
<ejb-class>especialista.SaludoBean</ejb-class>
<session-type>Stateless</session-type>
<transaction-type>Container</transaction-type>
</session>
</enterprise-beans>
<assembly-descriptor>
<container-transaction>
<method>
<ejb-name>SaludoBean</ejb-name>
<method-name>*</method-name>
</method>
<trans-attribute>Required</trans-attribute>
</container-transaction>
</assembly-descriptor>
</ejb-jar>
Fichero weblogic-ejb-.jar.xml
:
<weblogic-ejb-jar>
<weblogic-enterprise-bean>
<ejb-name>SaludoBean</ejb-name>
<stateless-session-descriptor>
<pool>
</pool>
<stateless-clustering>
</stateless-clustering>
</stateless-session-descriptor>
<transaction-descriptor>
</transaction-descriptor>
<jndi-name>SaludoBean</jndi-name>
</weblogic-enterprise-bean>
</weblogic-ejb-jar>
6. Sólo falta desplegar el bean en el contenedor. Al estar el directorio
en el mismo host que el servidor de aplicaciones, no es necesario comprimir
toda la estructura de directorios en un único fichero JAR, sino que basta
con indicarle al servidor e aplicaciones las ubicación del directorio
saludoEjb
. Lo va a hacer todo de forma casi automática WebLogic
Builder. Selecciona la opción "Tools > Connect to server ...". Comprueba
los siguientes parámentros:
Host: localhost
Port: 7001
Server name: myserver
System user name: weblogic
System user password: weblogic
Pulsa "Connect..." y deberá aparecer un botón verde en la esquina inferior derecha de la aplicación para indicar que se ha conectado correctamente con el servidor de aplicaciones. Pulsa ahora la opción "Tools > Deploy module ..." y aparecerá la siguiente ventana:
Pulsa "Deploy Module..." y, si todo ha ido bien, el módulo se desplegará correctamente en el servidor de aplicaciones. Puedes comprobarlo con el navegador, abriendo la consola de administración (recuerda la dirección: http://localhost:7001/console) y eleccionando la opción "EJB Modules". Verás que ya está activo el bean:
Si pichamos en saludoEjb, veremos que la ubicación de los ficheros de la aplicación es exactamente la misma en la que hemos estado realizando el desarrollo. En este caso WebLogic Server no necesita que los ficheros se encuentren comprimidos en un fichero JAR, sino que le basta con una estructura de directorios correcta. Es lo que la aplicación denomina un exploded JAR directory. La siguiente imagen muestra esta pantalla:
Con esto se terminar el ejercicio. En el ejercicio siguiente construiremos un cliente java que se conecta con el bean.
Tiempo estimado de realización: 15 minutos
Vamos a usar el fichero SaludoClient.java
que se
encuentra en las plantillas de ejercicios de la sesión 1. Con
este fichero crearemos un nuevo proyecto en Eclipse y desde el propio
Eclipse ejecutaremos el fichero para comprobar como se conecta al bean
desplegado en el servidor de aplicaciones. El código fuente de
este fichero es el siguiente:
import javax.naming.*;
import java.util.*;
import javax.rmi.*;
import especialista.*;
public class SaludoClient {
public static void main(String[] args) {
try {
Context jndiContext = getInitialContext();
Object ref = jndiContext.lookup("SaludoBean");
SaludoHome home =
(SaludoHome) PortableRemoteObject.narrow(
ref,
SaludoHome.class);
Saludo sal = home.create();
System.out.println("Voy a llamar al bean");
System.out.println(sal.saluda());
System.out.println("Ya he llamado al bean");
sal.remove();
} catch (Exception e) {
e.printStackTrace();
}
}
public static Context getInitialContext()
throws javax.naming.NamingException {
Properties p = new Properties();
p.put(
Context.INITIAL_CONTEXT_FACTORY,
"weblogic.jndi.WLInitialContextFactory");
p.put(Context.PROVIDER_URL, "t3://localhost:7001");
return new javax.naming.InitialContext(p);
}
}
1. Lo primero es crear la estructura de directorios en la que nos
vamos a basar para crear el proyecto en Eclipse, y copiar en el nuevo
directorio el fichero SaludoClient.java
:
% cd /home/domingo
% mkdir ejb/saludoClient
% cp ejercicios1/SaludoClient.java ejb/saludoClient
2. Creamos el nuevo proyecto en Eclipse.
Y ahora hay que hacer algo muy importante: definir las librerías de
clases que va a usar el proyecto. En primer lugar declaramos que necesitamos
el proyecto saludoEjb
, ya que en este proyecto se encuentran las
clases especialista.Saludo
y especialista.SaludoHome
que se necesitan para compilar la aplicación cliente. También
podríamos haber construido un fichero JAR con estas dos clases, darle
el nombre de saludoClient.jar
y añadirlo al proyecto como
un JAR externo. Sin embargo, vamos a hacer lo primero que hemos comentado:
También hay que añadir el JAR con las clases
necesarias para construir un cliente EJB, el fichero wlclient.jar
.
Su ruta es: WL_HOME/server/lib/wlclient.jar:
La estructura del proyecto queda como muestra la siguiente imagen:
3. Y, por último, lanzamos el cliente con la opción "Run As > Java Application". Si todo ha funcionado correctamente, el cliente se conectará con el bean y escribirá en la salida estándar unos mensajes como:
Voy a llamar al bean
Que te cuentas?
Ya he llamado al bean
Prueba a ejecutar el programa varias veces para comprobar que aparecen mensajes distintos.
Tiempo estimado de realización: 10 minutos
En este ejercicio modificaremos el bean y volveremos a desplegarlo en el servidor de aplicaciones.
1. Modifica el fichero SaludoBean.java para que en el mensaje del bean aparezca tu nombre.
2. Con el WebLogic Builder vuelve a desplegar el bean en el servidor de aplicaciones.
3. Vuelve a ejecutar el cliente para comprobar que tu nombre aparece en la salida del bean
Tiempo estimado de realización: 10 minutos
En este ejercicio comprobaremos una de las características fundamentales de los beans: su naturaleza distrubuída.
1. Modifica el código del cliente para que se conecte con el servidor que está en la máquina de algún compañero.
2. Ejecuta el cliente y comprueba que está usando el bean que reside en el servidor de aplicaciones de tu compañero.
Modifica el bean saludoEjb
para añadir el método
método saludaPlantilla (String plantilla)
. El parámetro
plantilla
es una cadena que contiene el literal "<saludo>".
El bean deberá buscar ese literal, sustituirlo por un saludo y devolver
el resultado. Por ejemplo, la llamada al bean
sal.saluda("Juan entra en la sala y dice: <saludo>");
debe devolver algo como "Juan entra en la sala y dice: Hola, qué tal".
Entregas en el directorio WebDAV
1. Comprime los ficheros del bean saludoEjb:
% cd /home/<alunmno>/ejb/saludoEjb
% jar cvf ../saludoEjb.jar *
2. Crea en tu directorio WebDAV el directorio entregas/ejb/sesion1
y copia el fichero saludoEjb.jar
en él.