(Imagen: Francisco de Goya - La familia de Carlos IV)XML y yo no nos llevamos bien... por eso me gustó tanto que EJB 3 habilitara la configuración mediante anotaciones. Pero, como ya sabe, a Sun le encanta poner preguntas de las cosas feas de la tecnología en el examen (i.e Threads, Generics, Filters), así que debido a eso vamos a hacer un repaso práctico de como declarar referencias EJB en el DD.
Creo que este ejemplillo se explica por si solo:
<enterprise-beans>
<session>
<ejb-name>EmployeeService</ejb-name>
<ejb-class>com.wombat.empl.EmployeeServiceBean</ejb-class>
<ejb-ref>
<description>Esta es una referencia a un EJB 2.1 entity bean</description>
<ejb-ref-name>ejb/Emplrecord</ejb-ref-name>
<ejb-ref-type>Entity</ejb-ref-type>
<home>com.wombat.empl.EmployeeRecordHome</home>
<remote>com.wombat.empl.EmployeeRecord</remote>
</ejb-ref>
<ejb-local-ref>
<description>Esta es una referencia a la interfaz de negocio local de un session bean EJB 3.0 </description>
<ejb-ref-name>ejb/Payroll</ejb-ref-name>
<local>com.aardvark.payroll.Payroll</local>
</ejb-local-ref>
<ejb-local-ref>
<description>Otra referencia a una interfaz de negocio local de un session bean EJB 3.0</description>
<ejb-ref-name>ejb/PensionPlan</ejb-ref-name>
<local>com.wombat.empl.PensionPlan</local>
</ejb-local-ref>
</session>
</enterprise-beans>
Aunque... siempre son necesarias cierta aclaraciones:
- Para declarar referencias EJB, se utilizan los elementos ejb-ref y ejb-local-ref. Usamos ejb-ref para acceder al EJB mediante su interfaz de negocio remota, o remote home; mientras ejb-local-ref es usada para acceder mediante la interfaz de negocio local o local home
- El elemento ejb-ref-name es obligatorio, y su valor es la entrada en el entorno EJB usada en el código EJB
- El elemento ejb-ref-type es opcional, y sirve para indicarnos el tipo de EJB esperado: Entity o Session
- El elemento local de ejb-local-ref, se refiere a la clase/ tipo de la interfaz de negocio
- Recordando siempre que las referencias EJB no son accessibles por otros EJB's en tiempo de ejecución. Cada EJB debe definir sus propias referencias EJB 's porque estas no se comparten.
<enterprise-beans>
<session>
<ejb-name>EmployeeService</ejb-name>
<ejb-class>com.wombat.empl.EmployeeServiceBean</ejb-class>
...
<ejb-ref>
<ejb-ref-name>ejb/EmplRecord</ejb-ref-name>
<ejb-ref-type>Entity</ejb-ref-type>
<home>com.wombat.empl.EmployeeRecordHome</home>
<remote>com.wombat.empl.EmployeeRecord</remote>
<ejb-link>EmployeeRecord</ejb-link>
</ejb-ref>
</session>
<entity>
<ejb-name>EmployeeRecord</ejb-name>
<home>com.wombat.empl.EmployeeRecordHome</home>
<remote>com.wombat.empl.EmployeeRecord</remote>
...
</entity>
...
</enterprise-beans>
Recordemos que una referencia es simplemente una referencia. Simplemente nos dice "aquí debería haver un EJB, y yo debería poder usarlo", lo cuál, en tiempo de ejecución, no es suficiente. Para suerte nuestra, nuestro amigo el ensamblador de aplicaciones tiene entre sus funciones el asignarle a la referencia EJB un EJB objetivo, de modo que ahora sí sea utilizable desde el EJB que contiene la referencia. Y para eso, utiliza el elemento ejb-link del descriptor de despliegue.
Como vemos en el ejemplo de arriba, se utiliza ejb-link dento de ejb-ref o ejb-local-ref para hacer referencia a un EJB en concreto. El valor del elemento ejb-link debe coincidir con el elemento name del enterprise bean objetivo.
Tenemos que seguir con esto del entorno EJB, pero ya será en otra ocasión. Hasta otra..!!






