SCBCD - Entorno del Bean como contexto JNDI

(Imagen: Salvador Dalí - Persistencia de la memoria)

El entorno del bean (enterprise bean environment, para el examen) es un mecanismo que nos permite personalizar la lógica de negocio contenida en el EJB durante el despliegue o ensamble, y esto se realiza mediante anotaciones o en su defecto mediante el descriptor de despliegue.

Es el contenedor el que implementa el entorno del EJB, y lo hace disponible mediante un contexto JNDI. Este entorno EJB puede ser usado de diferentes maneras:
  • El EJB hace uso de las entradas del entorno, que pueden ser inyectadas a campos o métodos o mediante el método lookup de EJBContext. O si te gusta la antigua mediante interfaces JNDI
  • El contenedor provee la implementación del contexto JNDI que almacena el entorno EJB
  • El implementador crea e inicializa las entradas del entorno, declaradas mediante anotaciones o elementos del descriptor de despliegue (DD)
  • El contenedor inyecta entradas del entorno en los campos o métodos del EJB.
  • El contenedor hace disponible en contexto JNDI del entorno para todas las instancias EJB en tiempo de ejecución. Los instancias EJB pueden obtener las entradas del entorno mediante el método lookup de EJBContext o las interfaces JNDI (ya lo dije antes...pero quiero que quede claro)
Cada EJB define sus propias entradas de entorno, y todas las instancias de un EJB comparten las mismas entradas de entorno (por si suena raro... en inglés es environment entries) ; pero las entradas de entorno no son compartidas con otros EJB's.

Por lo general, al realizar un lookup al contexto obtenemos una nueva instancia del objeto solicitado; a menos que el objeto sea inmutable (java.lang.String ... la gente que estudia para el SCJP lo sabe bien) o el objeto es definido como un singleton (sólo puede existir una instancia de dicho objeto en la JVM. Para más información consultar Wikipedia). Recordar también que la inyección de un objeto se traduce en un lookup JNDI.

Anotaciones y variable de entorno: Un campo o un método EJB pueden ser anotados para solicitar la inyección de un aentrada del entorno EJB. El campo / método pueden tener cualquier modificador de acceso (recordando SCJP : public, private, protected, default) pero no deben ser estáticos (static).
  • Si se trata de un campo, el campo no puede ser final
  • Si se trata de un método, el método debe seguir las convenciones de nombres de propiedades JavaBean (setters, getters, etc...)
Cada recurso puede ser inyectado una sóla vez en el EJB. Por ejemplo, si solicitamos la inyección de java:comp:/env/com.example.MySessionBean/myDatabase en el método setMyDatabase y en la variable de instancia myDatabase obtendremos un error.

Las anotaciones pueden aplicarse a la clase, en vez de ser aplicadas en métodos o campos. En este caso, se declara una entrada en el entorno del bean pero el recurso no es inyectado; a diferencia de una anotación de campo o método. En este caso, el bean debe usar el método lookup de EJBContext o el API JNDI para obtener una entrada del entorno.

Este temita tiene para rato..así que la seguiremos en otro post. Al menos ya no son interceptores xD

Publicar un comentario