You are on page 1of 7

Por Mario Humberto Tiburcio Ziga

Instalacin del servidor de aplicaciones JBoss


(Contenedor de EJBs, Servlets y JSPs)
1. Antes de proceder con la instalacin de JBoss, verifique que cuente con una versin de Java
instalada, as como la existencia de las variables de ambiente JAVA_HOME y
JBOSS_HOME en el archivo /etc/profile debidamente exportadas. El archivo /etc/profile
debe contener algo parecido a lo siguiente:
JAVA_HOME=/usr/local/jdk1.0.6_22
JBOSS_HOME=/usr/local/jboss
PATH=$JAVA_HOME/bin:$PATH
export JAVA_HOME JBOSS_HOME PATH
2. Descargue de http://www.jboss.org/jbossas/downloads/ el archivo jboss-4.2.1.GA.zip (u otra
versin) en un directorio de trabajo y descomprmalo:
unzip jboss-4.2.1.GA.zip
3. Mueva el directorio generado por la descompresin a la carpeta /usr/local/ con el nuevo
nombre jboss:
mv jboss-4.2.1.GA/ /usr/local/jboss
4. Edite el archivo /etc/hosts agregando la direccin IP de su mquina y un nombre que la
identifique, por ejemplo (esto no es necesario si cuenta con DNS):
192.168.100.50 BeansServer
5. Levante el servicio de JBoss:
/usr/local/jboss/bin/run.sh -b 0.0.0.0
Permita que el servidor JBoss inicie completamente. Una vez iniciado, deber verse una
salida como la del siguiente recuadro. Verifique que aparezca la palabra Started que
significa iniciado.
22:41:07,111 INFO [Http11Protocol] Arrancando Coyote HTTP/1.1 en puerto http-0.0.0.0-8181
22:41:07,253 INFO [AjpProtocol] Starting Coyote AJP/1.3 on ajp-0.0.0.0-8009
22:41:07,407 INFO [Server] JBoss (MX MicroKernel) [4.2.1.GA (build:
SVNTag=JBoss_4_2_1_GA date=200707131605)] Started in 1m:44s:491ms

6. Pruebe en un navegador si el servidor de JBoss est funcionando escribiendo el siguiente


URL:
http://direccion_de _DNS_o_IP:8080

1/7

Por Mario Humberto Tiburcio Ziga


Verifique que en el navegador aparezca una salida similar a la siguiente:

7. Para dar de baja el servidor pulse [CTRL]-[C] en la terminal desde donde se invoc (o sea
donde apareci la palabra Started). Cuando el servidor haya parado por completo debern
observarse en la terminal mensajes similares a los siguientes:
22:51:04,078 INFO [TransactionManagerService] Stopping recovery manager
22:51:04,420 INFO [Server] Shutdown complete
Shutdown complete
Halting VM
8. Por defecto el puerto en el que funciona JBoss es el 8080. Para que ste no entre en conflicto
con otros servicios instalados (como el Tomcat de Apache) puede cambiarlo editando el
siguiente archivo:
nano /usr/local/jboss/server/default/deploy/jboss-web.deployer/server.xml
Localice el prrafo siguiente y modifique el valor 8080 por el de su preferencia:
<Connector port="8080" address="${jboss.bind.address}"
maxThreads="250" maxHttpHeaderSize="8192"
emptySessionPath="true" protocol="HTTP/1.1"
enableLookups="false" redirectPort="8443" acceptCount="100"
9. Y reinicie el servidor de JBoss. Prubelo con el nuevo puerto desde un navegador.

2/7

Por Mario Humberto Tiburcio Ziga

Estructura de un EJB
1. A manera de ejemplo, se muestra la estructura de directorios donde se instala un EJB que
calcula reas de figuras planas geomtricas en JBoss:
$JBOSS_HOME
|___server
|
|___default
|
|___deploy
|
|___areasEJB
|___areas.jar
|
|___META-INF
|
|___ejb-jar.xml
|___areas
|___areasBean.class
|___areasHome.class
|___areasRemote.class

En donde:
areasEJB es el nombre del proyecto.
META-INF es el directorio en donde se aloja el descriptor de despliegue del proyecto.
ejb-jar.xml es el descriptor de despliegue.
areas es el nombre del paquete (directorio) que contiene las clases del proyecto.
areasBean es la clase que define el Bean.
areasHome es la clase que define la interfaz local.
areasRemote es la clase que define la interfaz remota.
areas.jar es el archivo que empaqueta a los directorios META-INF y areas.
Archivo: ejb-jar.xml
<?xml version="1.0"?>
<!DOCTYPE ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD
Enterprise JavaBeans 2.0//EN" "http://java.sun.com/j2ee/dtd/ejb-jar_2_0.dtd">
<ejb-jar>
<description>EJB para calcular areas</description>
<enterprise-beans>
<session>
<display-name>Bean Areas</display-name>
<ejb-name>areas</ejb-name>
<home>areas.areasHome</home>
<remote>areas.areasRemote</remote>
<ejb-class>areas.areasBean</ejb-class>
<session-type>Stateless</session-type>
<transaction-type>Bean</transaction-type>
</session>
</enterprise-beans>
</ejb-jar>

3/7

Por Mario Humberto Tiburcio Ziga


Archivo: areasBean.java
package areas;
import java.rmi.RemoteException;
import javax.ejb.EJBException;
import javax.ejb.SessionBean;
import javax.ejb.SessionContext;
public class areasBean implements SessionBean
{
private static final long serialVersionUID = 1L;// Quita warning de
// serializacin del objeto
// Nuestro mtodo "de negocio"
public double cuadrado(double l)
{
return l*l;
}
public double triangulo(double a,double b)
{
return a*b/2;
}
public double rectangulo(double a,double b)
{
return a*b;
}
public double circulo(double r)
{
return 3.1415926*r*r;
}
public double elipse(double a,double b)
{
return 3.1615926*a*b;
}
public String info()
{
return ("Bean para calcular superficies\n"+"Por: Mario H Tiburcio Z\n"+"(C)Copyright
2010\n");
}
// Mtodos del ciclo de vida del Bean (obligatorios)
public void ejbCreate(){}
public void ejbActivate() throws EJBException, RemoteException {}
public void ejbPassivate() throws EJBException, RemoteException {}
public void ejbRemove() throws EJBException, RemoteException {}
public void setSessionContext(SessionContext arg0) throws EJBException, RemoteException{}
}

4/7

Por Mario Humberto Tiburcio Ziga


Archivo: areasHome.java
package areas;
import java.rmi.RemoteException;
import javax.ejb.CreateException;
import javax.ejb.EJBHome;
import areas.*;
public interface areasHome extends EJBHome
{
areasRemote create() throws RemoteException, CreateException;
}
Archivo: areasRemote.java
package areas;
import java.rmi.RemoteException;
import javax.ejb.EJBObject;
public interface areasRemote extends EJBObject
{
public double cuadrado(double l) throws RemoteException;
public double triangulo(double a,double b) throws RemoteException;
public double rectangulo(double a,double b) throws RemoteException;
public double circulo(double r) throws RemoteException;
public double elipse(double a,double b) throws RemoteException;
public String info() throws RemoteException;
}
2. Para crear la estructura de directorio use el comando mkdir.
3. Para generar las clases (*.class), se deben compilar los cdigos fuente (*.java).
La compilacin de los archivos Java, requiere de los siguientes archivos jar debidamente
direccionados en la variable de ambiente CLASSPATH:
/usr/local/jboss/server/default/lib/jboss-j2ee.jar
/usr/local/jboss/client/jboss-client.jar
/usr/local/jboss/client/jbossall-client.jar
4. Para generar el archivo areas.jar, utilice el comando jar dentro del directorio areasEJB:
jar -cf areas.jar areas/ META-INF/

5/7

Por Mario Humberto Tiburcio Ziga

PROBANDO EL EJB
Para probar el correcto funcionamiento del EJB implementado, se puede usar el siguiente
cdigo fuente como cliente en Java. El cliente se puede ejecutar desde cualquier mquina
remota al contenedor JBoss de EJBs.
Archivo: BeanCliente.java
import java.util.Properties;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.rmi.PortableRemoteObject;
import areas.areasHome;
import areas.areasRemote;
public class BeanCliente
{
public static void main(String[] args)
{
// Preparacin de propiedades para construir el contexto inicial de JNDI
Properties prop = new Properties();
prop.put(Context.INITIAL_CONTEXT_FACTORY,"org.jnp.interfaces.NamingContextFactory");
prop.put(Context.PROVIDER_URL, "direccion_de _DNS_o_IP:1099");
try
{
// Intentamos obtener el contexto inicial antes preparado
InitialContext jndiContext = new InitialContext(prop);
System.out.println(" >> Obtenido un contexto JNDI");
// Obtener una referencia al Bean
Object ref = jndiContext.lookup("areas"); // Nombre del ejb en el ejb-jar.xml
System.out.println(" >> Obtenida una referencia al Bean \"areas\"");
// Obtener una referencia desde aqu a la interfaz Home del Bean
areasHome home = (areasHome)
PortableRemoteObject.narrow(ref, areasHome.class);
// Creacin de la interfaz remota a partir de la interfaz Home:
areasRemote h = home.create();
// Invocamos finalmente al Bean
System.out.println("Cir. EJB: " + h.circulo(10));
System.out.println("Tri. EJB: " + h.triangulo(10,30));
System.out.println("Cua. EJB: " + h.cuadrado(10));
System.out.println("Rec. EJB: " + h.rectangulo(10,30));
System.out.println("Eli. EJB: " + h.elipse(10,30));
}
catch(Exception ex)
{
System.out.println(ex.toString());
}
}
}

6/7

Por Mario Humberto Tiburcio Ziga


Para compilar el programa cliente se requieren los siguientes archivos jar:
jbossall-client.jar
areas.jar
Estos archivos deben estar direccionados en la variable de ambiente CLASSPATH.
El archivo areas.jar debe contener la siguiente estructura.
areas.jar
|
|___META-INF
|
|___ejb-jar.xml
|___areas
|___areasHome.class
|___areasRemote.class

Ntese que slo se incluyen las interfaces local y remota, as como el archivo de despliegue, no
as el class del EJB. Esto se debe a que el programa cliente slo necesita de las interfaces para
hacer uso del EJB que se encuentra almacenado en el contenedor JBoss.
El servidor JBoss de EJBs, debe ser identificado por la mquina cliente con el mismo nombre
que se especific en el archivo /etc/hosts del servidor JBoss. Para garantizar ese requisito, debe
agregarse en el archivo hosts de la mquina cliente la siguiente lnea:
192.168.100.50 BeansServer
Si la mquina cliente es LINUX o UNIX, el archivo hosts se encuentra en /etc.
Si la mquina es Windows, el archivo hosts se encuentra en c:\windows\system32\drivers\etc.
Si todo se configura adecuadamente, la salida del programa cliente debe verse como se muestra
enseguida:
[root@tiburcio prueba]# java BeanCliente
>> Obtenido un contexto JNDI
>> Obtenida una referencia al Bean "areas"
Cir. EJB: 314.15926
Tri. EJB: 150.0
Cua. EJB: 100.0
Rec. EJB: 300.0
Eli. EJB: 948.47778
=====================
Bean para calcular superficies
Por: Mario H Tiburcio Z
(C)Copyright 2010

7/7

You might also like