|
Buscador
Secciones
Otras zonas
Foros
Ganamos
Registro
|
Inicio > Tutoriales > Lenguajes orientados a objeto > J2EE > Construir Aplicaciones EJB con JBoss, Lomboz y Eclipse
Como has podido ver en la figura anterior se ha creado una etiqueta a nivel de clase @ejb.bean, que tiene asignado el tipo del bean, su nombre y su nombre JNDI que se generará en el interface Home. Esta etiqueta también generará los descriptores de despliegue en los ficheros ejb-jar.xml y jboss.xml cuando generemos las clases. Ahora vamos a generar todos los interfaces, incluyendo Home, Remote y DAO y otras clases de ayuda. No necesitamos especificar ninguna etiqueta en ejbGenerate.xml ya que ya lo hicimos para el módulo MyStoreMgr en páginas anteriores.
Ahora veamos los ficheros que ha generado Xdoclet. Como se muestra en la siguiente figura hay dos nuevos ficheros llamado CustomerData y CustomerPK además de los que añadimos para nuestros beans de sesión. También tenemos un CustomerBMP que extiende la clase CustomerBean. El resto de ficheros deberían serte familares... ![]() Como discutimos en páginas enteriores sobre las distintas etiquetas ejbDoclet usadas en ejbGenerate.xml, para generar estas clases, CustomerData y CutomerPk se generan mediante las etiquetas del siguiente fragmento de código de ejbGenerate.xml: Las etiquetas importantes son <dataobject/> y <entitypk/>. ![]()
|
|
Nota:
Ok, OK!, como referencia aquí tienes los pasos que tienes que seguir:
|

Abajo puedes ver el interface DAO generado:

Si miramos la clase DAO generada, veremos que tiene cuatro métodos más que la de StoreAccess (que era para un bean de sesión sin estado) cuando se generó por primera vez (es decir, antes de añadirle la etiqueta a nivel de método @dao:call(.
|
Nota:
Merece la pena mencionar aquí que los beans de entidad con persistencia manejada por el bean no necesitan la etiqueta @dao:call para generar los métodos del interface DAO. |

Todos estos métodos se han generado a partir de la etiqueta descrita anteriormente para la generación del interface DAO, como se ve abajo:

También podemos ver los descriptores generados hasta este paso, en ejb-jar.xml dentro de MyStoreMgr/META-INF.
Estos descriptores se han generado mediante la siguiente etiqueta en CustomerBean:
@ejb.bean name="Customer" jndi-name="CustomerBean" type="BMP"
Esta etiqueta también genera los descriptores en jboss.xml, que cubriremos más adelante.

El siguiente paso es añadir atributos/propiedades a nuestro bean Customer, a las que podrán acceder los clientes a través del interface remoto utilizando los métodos get y set. Estos atributos son mapeados a las correspondientes columnas en una tabla de la base de datos.
/**
* Returns the customerID
* @return the customerID
*
* @ejb.persistence
* @ejb.pk-field
* @ejb.interface-method
*/
public java.lang.String getCustomerID() {
return customerID ;
}
/**
* Sets the customerID
* @param java.lang.String the new customerID value
*
* @ejb.interface-method
*/
public void setCustomerID (java.lang.String customerID)
this.customerID = customerID;
}

Ahora analicemos estas etiquetas:
Ahora, en el caso de los métodos mutadores (como setCustomerID) la única referencia requerida es @ejb.interface-method para generar este método en el interface remoto.
De forma similar, añade los métodos y sus etiquetas para el resto de campos persistentes. No hay etiqueta @ejb.pk-field ya que customerID es la clave primaria.
|
Nota:
En el caso de una clave primaria compuesta tienes que especificar etiquetas @ejb.pk-field para todos los atributos/propiedades que crean la clave compuesta. |
De forma similar, añade las etiquetas y métodos para el resto de campos persistentes, que en este caso son firstName, lastName, Address, phone y shareholderStatus como se ve en el siguiente fragmento de código de CustomerBean.

Añadir Métodos de Búsqueda:Ahora añadiremos unos métodos de búsqueda para nuestra clase Bean.
public CustomerPK ejbFindByPrimaryKey(CustomerPK pk) throws FinderException

Ahora cuando regeneremos nuestras clases EJB se sobreescribirá este método en CustomerBMP. Este método también llamará al correspondiente método del interface CustomerDAO como se ve en el siguiente fragmento de código de CustomerBMP:

Esto también creará los métodos en el interface Home y en el interface del DAO, como se ve en las siguientes figuras:


public CustomerPK ejbFindByUserID (String userID) throws FinderException

|
Nota:
Según lo establece la especificación EJB 12.8.1, todos los métodos finder deberían devolver la clave primaria. |

Añadir Métodos de Negocio:|
Nota:
Los pasos para añadir un método de negocio se vieron en páginas anteriores. Hemos elegido el tipo de interface como local porque estos métodos serán invocados desde la misma JVM. En este caso, serán invocados por el bean de sesión sin estado StoreAccess. |

Implementar el Interface DAO del Cliente:Ahora implementemos nuestros métodos en la clase CustomerDAOImpl. Esta clase del paquete au.com.tusc.dao implementa los métodos generados en la clase CustomerDAO del paquete au.com.tusc.bmp.
javax.naming.InitialContext; javax.sql.DataSource; java.sql.Connection; java.sql.PreparedStatement; java.sql.ResultSet; java.sql.SQLException;
private DataSource jdbcFactory;
El string de búsqueda es java:comp/env/jdbc/DefaultDS.






Después de regerenar las clases EJB, veamos los interfaces Home Local y Remote Local:
En el interface Remote Local (que en este caso es CustomerLocal), se ha expuesto un método de negocio, y el resto de métodos son para acceder a los atributos/propiedades del bean (ya que declaramos estos métodos como métodos de interface en CustomerBean), como se ve abajo. Estos métodos los ha generado la etiqueta @ejb.interface-method.

En el interface Home Local (que en este caso es CustomerLocalHome), hay dos métodos finder. También ha generado JNDI_NAME y COMP_NAME (nombre lógico para buscar el componente).

Estos nombres se han generado utilizando la etiqueta declarada en CustomerBean:

|
Nota:
Actualmente no estámos interesados en el interface Customer (que es un interface remoto) ni en CustomerHome (que es un interface home remoto), porque estámos accediendo a los métodos del bean desde la misma máquina virtual Java, por eso, sólo necesitamos interfaces locales. |
|
Nota:
En CustomerBean no hemos implementado ningún método para configurar el contexto, porque lo genera Xdoclet en la clase CustomerBMP, como se ve en la siguiente figura: ![]() |
Ahora el Bean Customer y su implementación DAO están completos y podemos desplegar este bean.
Desplegar el Bean Customer:Para poder desplegar este bean tenemos que añadirle unos cuantos descriptores de despliegue. Añadiremos las dos etiquetas mostradas abajo:

@ejb.resource-ref res-ref-name="jdbc/DefaultDS" res-type="javax.sql.Datasource" res-auth="Container"
Esta etiqueta generará los descriptores de despliegue en ejb-jar.xml, ya que el bean tiene que saber a que datasource va a conectarse, y cuál es su tipo, etc. Esto generará los descriptores mostrados en la siguiente figura:

@jboss.resource-ref res-ref-name="jdbc/DefaultDS" jndi-name="java:/DefaultDS"
Esta etiqueta generará los descriptores de despliegue en jboss.xml, ya que el servidor de aplicaciones necesita conocer el nombre JNDI del datasource que se ha registrado. Estos generará los siguientes descriptores de despliegue:

|
Nota:
Esto es para arrancar el servidor, si tu servidor ya está ejecutándose, saltate este paso y ve al siguiente. |

Los mensajes de la consola te dirán si tu bean se ha desplegado con éxito o no.
Ahora que nuestro bean Customer está terminado, para poder crear un cliente que invoque operaciones sobre este bean tenemos que hacer algunas modificaciones a nuestro bean StoreAccess.
|
Nota:
Como pudiste ver en el diagrama que hay al principio de la página, el cliente invocará operaciones sobre el bean Customer a través de StoreAccesBean, es una buena práctica acceder a los beans de entidad de esta forma. Como resultado necesitamos una vista local del bean del cliente en vez de una vista remota, porque ámbos están en la misma máquina virtual Java. |
Añadir un Método Create a StoreAccess:En el bean StoreAccess añadiremos un método ejbCreate, que creará un bean de entidad BMP (en este caso Customer) con la siguiente firma:
public void ejbCreate() throws javax.ejb.CreateException
private CustomerLocalHome customerLocalHome;

Añadir un Método de Negocio en StoreAccess:Añadiremos otro método de negocio en StoreAccess que invocará el correspondiente método de negocio del bean Customer.
CustomerLocal myCustomer = customerLocalHome.findByUserID(userID)
CustomerData cd = myCustomer.getCustomerData()
Abajo puedes ver un fragmento de este método de negocio:

Ya se han añadido a StoreAccess todos los métodos para acceder a los métodos de negocio de Customer. Sólo nos quedan los descriptores de despligue necesarios para enlazar/referenciar los beans StoreAccess y Customer. Añadiremos estas dos etiquetas:

@ejb.ejb-ref ejb-name="Customer" view-type="local" ref-name="CustomerLocal"
Esta etiqueta generará los descriptores de despliegue en ejb-jar.xml, como StoreAccessBean tiene saber a qué bean está referenciando, y cuál es su tipo de vista y su nombre de referencia. Esto generará los siguientes descriptores de despliegue.
|
Nota:
El tipo de vista es local porque ámbos beans están en la misma JVM, de lo contrario sería remoto. Observa que ref-name se ha generado como CustomerLocalHome en vez de como CustomerHome. Se generán los dos pero nosotros estámos utilizando Local en este caso. |

@jboss.ejb-ref-jndi ref-name="CustomerLocal" jndi-name="CustomerLocal"
Esta etiqueta generará los descriptores de despliegue en jboss.xml, ya que el servidor de aplicaciones tiene que conocer el nombre JNDI del bean Customer con el que se ha registrado. Estos son los descriptores generados:

|
Nota:
Como podemos ver en el fragmento de código anterior, el descriptor de despliegue generado por la etiqueta @jboss es erróneo, porque la referencia local del Customer de la etiqueta <ejb-ref> debería ser lt;ejb-local-ref>. Esto parece ser un bug de esta etiqueta, por eso lo corregiremos manualmente cambiando la etiqueta en el fichero jboss.xml como se ve abajo: ![]() Precaución aquí: asegúrate de hacer este cambio después de terminar de regenerar tus clases EJB, porque cada vez que las regeneres, jboss.xml inicialmente tendrá los descriptores erróneos generados por esta etiqueta. |
Ahora hemos terminado de modificar el bean StoreAccess, despliegua el bean de nuevo desde la vista Lomboz J2EE. Los pasos para hacer esto se han visto en página anteriores. En la consola podrás ver los mensajes que muestran el estado del despliegue.
Una vez que el bean se ha desplegado con éxito, crea un test de cliente que invocará el método loginUser sobre StoreAccessBean y getCustomerData sobre CustomerBean.
Crear tu Test de Cliente:
Esto generará los métodos necesarios en tu clase SessionBMPClient y simplemente debes invocar los métodos loginUser y getCustomerData como se ve abajo:

System.out.println("Request from client : ");
String userID = myBean.loginUser("ANDY","PASSWD");
System.out.println("Reply from Server: Your userid is " + userID );
CustomerData cd = myBean.getCustomerData(userID);
System.out.println ("Andy your details with MyStore are " + cd );

Probar el Cliente:
Ahora en tu consola, si tu respuesta para ANDY es U2 y si los detalles para el CustomerID son C2, tu llamada habrá tenido éxito:

Ejercicio:Aquí tienes un ejercicio para tí. Para seguir progresando, implementa Manager como un bean de entidad BMP similar a Customer, con los mismos comportamientos. Te ayudaremos con un listado de las tareas:
ejbFindByPrimaryKey (MangerPK pk) throws FinderException.
public MangerPK ejbFindByUserID (String userID) throws FinderException
public ManagerData getManagerData()
private ManagerLocalHome manager LocalHome;
public MangerData getManagerData(String userID)
1. @ejb.ejb-ref ejb-name="Manager"
view-type="local"
ref-name="ManagerLocal"
2. @jboss.ejb-ref-jndi ref-name="ManagerLocal"
jndi-name="ManagerLocal"
|
Nota:
No olvides corregir los descriptores generados en jboss.xml como se mencionó antes en relación al bean Customer. Nota: Todos estos pasos son los mismos que para el bean Customer. Implementa este bean que utilizaremos en siguientes páginas. Nota: En el caso de que no puedas hacerlo, aquí te proporcionamos las clases: |
| Leer comentarios (74) | |
| Escribir comentario | |
| Puntuación: |
|
| Votar | |
| Recomendar este tutorial | |
| Estadísticas |
Copyright © 1999-2007
Programación en castellano.
Todos los derechos reservados.
Formulario de Contacto -
Datos legales -
Publicidad
Mantenida por: Claudio y
Dani.
Hospedaje web y servidores dedicados linux por Ferca Network
red internet: jugar gratis | amor | navidad 2009 | registro de dominios |
servidores dedicados
más internet: comprar | gratis | posicionamiento en buscadores | decoración libre | gifs animados