Professional Documents
Culture Documents
1/7
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
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
4/7
5/7
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
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