Está en la página 1de 11

Instalación del servidor de aplicaciones JBoss

(Contenedor de EJBs, Servlets y JSPs)

1. Antes de proceder con la instalación de JBoss, verifique que cuente con una versión 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


versión) en un directorio de trabajo y descomprímalo:

unzip jboss-4.2.1.GA.zip

3. Mueva el directorio generado por la descompresión 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 dirección IP de su máquina 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

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 deberá
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 párrafo 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"
Y reinicie el servidor de JBoss. Pruébelo con el nuevo puerto desde un navegador.
9.
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 geométricas 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>

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

// serialización del objeto


// Nuestro método "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");

// Métodos 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{}

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 códigos fuente (*.java).
La compilación 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/


PROBANDO EL EJB
Para probar el correcto funcionamiento del EJB implementado, se puede usar el siguiente código
fuente como cliente en Java. El cliente se puede ejecutar desde cualquier máquina 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)


{

// Preparación 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);

// Creación 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());

Para compilar el archivo 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

Nótese que sólo 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 sólo 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 máquina 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 máquina cliente la siguiente línea:

192.168.100.50 BeansServer

Si la máquina cliente es LINUX o UNIX, el archivo hosts se encuentra en /etc.


Si la máquina 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