|
Buscador
Secciones
Registro
¡Colabora!
Ganamos
Servicios
|
Inicio > Tutoriales > Lenguajes orientados a objeto > Java > J2EE > Construir Aplicaciones EJB con JBoss, Lomboz y Eclipse
![]() ![]()
|
|
Nota:
Esto generará el nombre del bean, el nombre JNDI, y el tipo del bean que hay en el fichero. También, se le añade Bean al nombre del fichero. De nuevo, hay que ser cuidadoso con las convenciones de nombrado, especificando sólo el nombre del bean en el wizard sin añadirle la palabra Bean ya que el wizard la añadirá por nosotros. Si expandes el nodo MyStoreMgr/META-INF dentro del explorador de paquetes verás que Lomboz ha generado siete ficheros utilizando Xdoclet como se ve en la siguiente figura: ![]() |
Ahora vamos a generar todos los interfaces, incluyendo el Home, el Remote, el DAO y otras clases de ayuda. Explicaremos porqué un poco más adelante, por el momento sólo sigue estos pasos. Pero antes de que te excites demasiado hay algunos conceptos que cubrir.
|
Nota:
Lomboz utiliza este fichero para generar los interfaces y clases de ayuda necesarias, por eso, en el caso de que tengas necesidades especiales tendrás que personalizar este fichero. (Mira la documentación de Xdoclet para más información). El fichero ejbGenerate.xml se genera sólo una vez cuando creamos el módulo EJB. Por eso, cualquier cambio realizado en este fichero se reflejará incluso si modificamos nuestra clase bean y generamos las clases una y otra vez. |

Como puedes ver a partir del fragmento de código mostrado en la anterior figura, se han definido las siguientes etiquetas:
|
Nota:
<dataobject/> se ha quedado obsoleto en favor de Value Object que es más poderoso en términos de relaciones (1-1, 1-n y n-m). |
|
Nota:
No hay una etiqueta para generar un DAO. Por eso, tenemos que incluir esta etiqueta <dao/>. Si quieres ver más detalles, visita la documentación de Xdoclet. |
Como puedes ver en este otro fragmento del código también se han definido las siguientes etiquetas:

Los otros dos ficheros importantes para nosotros son ejb-jar.xml y jboss.xml. El primero tiene todos los descriptores de despliegue para los beans y el segundo tiene los descriptores de despliegue específicos de JBOSS requeridos por el propio JBOSS.
|
Nota:
El fichero ejb-jar.xml se genera cada vez que se generan las clases interfaces y de ayuda para nuestro bean. Para la primera vez, está vacío. jboss.xml también se generará cada vez que generemos las clases de nuestro bean. |
Configurar el DAO:Ahora, personalicemos ejbGenerate.xml para configurar un DAO.


Como estámos utilizando la base de datos Hypersonic, estos parámetros son los apropiados. Estos parámetros están relacionado con el fichero de configuración standardjbosscmp-jdbc.xml que controla los mapeos CMP-a-JDBC para JBOSS. Este fichero reside en $JBOSS_HOME/server/conf/. Abajo puedes ver un fragmento del código de standardjbosscmp-jdbc.xml:

|
Nota:
La forma en que trabaja Xdoclet es un poco diferente de algunos estilos de programación convencionales, las etiquetas de Xdoclet generarán estos interfaces (home y remoto) junto con las clases de ayuda necesarias, que luego se utilizarán en las clases del bean y de la implementación de DAO. Sin embargo, hasta que no estén generadas, no podemos escribir ningún método de negocio en el Bean ni envolturas JDBC en la clase de implementación del DAO. Si esto te parece confuso simplemente sigue los pasos, espero que pronto se te aclare todo esto. |
Crear el Interface DAO:Como vamos a utilizar un DAO para acceder a la base de datos para este Bean sin estado, tenemos que crear una clase DAOImpl que implemente el interface DAO generado.

@ejb.dao class="au.com.tusc.session.StoreAccessDAO" impl-class="au.com.tusc.dao.StoreAccessDAOImpl"



Los interfaces EJB y las clases de ayuda se generan en el directorio ejbsrc/au.com.tusc.session como se muestra en la siguiente figura:

Se han generado 7 ficheros:
StoreAccessDAO se genera mediante esta etiqueta declarada en StoreAccesBean. Si no declaras esta etiqueta en este fichero no se generará este interface:
@ejb.dao class=au.com.tusc.session.StoreAccessDAO impl-class=au.com.tusc.dao.StoreAccessDAOImpl
Otros ficheros de interés que se generan son ejb-jar.xml y jboss.xml en MyStoreMgr/META-INF.
Como se muestra en la siguiente figura, se han generado unos nuevos descriptores en el fichero ejb-jar.xml:

Estos descriptores se han generado mediante la siguiente etiqueta declarada en el fichero StoreAccesBean:
@ejb.bean name ="StoreAccess" jndi-name="StoreAccessBean" type="Stateless"
Esta etiqueta la añadió Lomboz en el wizard de creación del bean.
Esta etiqueta también genera los siguientes descriptores de despliegue en jboss.xml como se ve en el siguiente fragmento:

Entonces, ya sabes cuales son las clases responsables de generar las clases, los interfaces y los descriptores.
Añadir un Método de Negocio:El siguiente paso es añadir un método de negocio al bean.

signature: public String loginUser (String username, String password).

Este wizard genera un método loginUser en nuestra clase bean, con la etiqueta a nivel de método @ejb.interface mostrada abajo:

Esta etiqueta es la responsable de generar este método en el Interface Remoto (en este caso es StoreAccess que se creará una vez que generemos las clases. Esta etiqueta se cubrirá un poco más adelante.
Ahora, este método de negocio necesita invocar a un método del DAO, através del que se comunicará con la base de datos. Por lo tanto, añadiremos otra etiqueta a este método, para que en el interface DAO se genere un método con esta firma, que podemos implementar en la clase DAOImpl. Entonces este método de negocio puede invocar el método de la clase DAOImpl para obtener el resultado deseado.
@dao.call name="loginUser"
Añade esta etiqueta como se ve en la siguiente figura:

Ahora genera de nuevo tus clases EJB como viste en los pasos anteriores.
|
Nota:
Ok, OK!, como referencia aquí tienes los pasos que tienes que seguir:
|
Después de generar las clases, primero veremos el interface DAO generado y luego la clase Sessión.
@dao.call name="loginUser"

|
Nota:
Por favor, no edites ninguna clase generada por Xdoclect. |
Fragmento de código de StoreAccessSession:

Implementar el Interface DAO:Ahora, implementaremos los métodos de la clase StoreAccessDAOImpl:
javax.naming.InitialContext; javax.sql.DataSource; java.sql.Connection; java.sql.PreparedStatement; java.sql.ResultSet; java.sql.SQLException;
private DataSource jdbcFactory;



|
Nota:
No tenemos que llamar al método loginUser de StoreAccessDAOImpl, ya que está siendo invocado por el método loginUser de la clase StoreAccessSession que desciende de la clase StoreAccessBean, es decir, la clase StoreAccessSession ha sobreescrito este método. |
Abajo puedes ver un fragmento de código de StoreAccessSession:

Añadir Métodos de Retro-llamada:Ahora, añadiremos los siguientes métodos de retrollamada a la clase StoreAccessBean:
|
Nota:
Es el contenedor EJB el que invoca a estos métodos de retro-llamada. |
import javax.ejb.SessionContext;
protected SessionContext ctx;

|
Nota:
La clase StoreAccessSession desciende de la clase abstracta StoreAccessBean e implementa SessionBean, que sobreescribirá todos los métodos del interface SessionBean. Por eso, después de finalizar estos métodos de la clase bean, genera de nuevo tus clases EJB. Se sobreescribirán los métodos de SessionContext, como se ve en el siguiente fragmento de código: ![]() |
Ahora veamos los interfaces Home y Remote generados.
En el caso del interface Remote todos los métodos de negocio declarados en el bean se han generado con la misma firma. Esto es a cusa de las etiquetas a nivel de clases declaradas en el bean StoreAccess que hemos discutido antes. Abajo puedes ver un fragmento del código:

Por eso, loginUser se ha generado en un Interface Remote llamado StoreAccess como se ve abajo a causa de esta etiqueta:

En el caso del interface Home sólo se ha creado un método llamado create, que se genera por defecto a causa de la etiqueta <homeinterface/> que hay en ejbGenerate.xml como se ve abajo:

Además de esto, están JNDI_NAME y COMP_NAME (que es el nombre lógico para buscar el componente), estos se generan mediante la etiqueta declarada a nivel de clase en la clase StoreAccessBean, como se puede ver en la siguiente imagen:

|
Nota:
Para ver otras opciones asociadas con estas etiquetas no dudes en ojear la sección de ejbdoclet en la documentación de Xdoclet. |
Ahora que ya hemos cubierto todos estos aspectos y la funcionalidad de nuestro bean está completa. Vamos a por los descriptores de despliegue...
Desplegar el Bean:Para poder desplegar el bean hemos declarado unas cuantas etiquetas en la clase StoreAccessBean, como puedes ver en el siguiente código:

@ejb.resource-ref res-ref-name="jdbc/DefaultDS" res-type="javax.sql.Datasource" res-auth="Container"
Esta etiqueta generará los descritores de despliegue en ejb-jar.xml, ya que el bean tiene que saber a qué datasource te vas a conectar, de qué tipo es, etc. Esto generará estos descriptores como se muestra en el siguiente fragmento de código:

@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 tiene que conocer el nombre JNDI del datasource con el que se tiene que registrar. Esto generará los descriptores mostrados en el siguiente código:

Ahora que todo está completo, es hora de desplegar el bean.
|
Nota:
Hemos generado las clases una y otra vez, para poder explicar cada paso y sus resultados. Una vez que estés familiarizado con estos pasos dejarás de necesitar estas iteracciones. De cualquier forma, no tiene importancia, ya que tu implementación nunca se verá modificada por este paso extra. |



Ahora, ya hemos desplegado nuestro bean, sólo nos queda crear un test de cliente que invoque el método loginUser sobre StoreAccessBean...
Crear Nuestro Test de Cliente:

Esto generará los métodos necesarios en nuestra clase SessionClient y sólo tendremos que invocar al método loginUser en el bean, como se ve abajo:

Añade estas líneas dentro del método testBean, como se ve en la siguiente figura:
System.out.println("Request from client : ");
System.out.println("Reply from Server: Your userid is "+
myBean.loginUser("ANDY","PASSWD"));

Probar Nuestro Cliente:

|
Nota:
Ahora ya has desplegado tu primer bean de sesión sin estado y lo has probado con éxito; a partir de ahora deberías sentirte cómodo utilizando Lomboz. En el futuro no entraremos en los detalles de los pasos para utilizar Lomboz y nos concentraremos en otros aspectos de los beans. |
| Leer comentarios (72) | |
| Escribir comentario | |
| Puntuación: |
|
| Votar | |
| Recomendar este tutorial | |
| Estadísticas |
Copyright © 1999-2006
Programación en castellano.
Todos los derechos reservados.
Formulario de Contacto -
Datos legales -
Publicidad
Hospedaje web y servidores dedicados linux por
Ferca Network