Ahora toca hablar de ciclo de vida de una instancia EJB, y en este post específicamente de los Stateless Session Beans. La imagen es cortesiá de la guía SCBCD de Mikalai Zaikin y como está en Inglés y no me dan muchas ganas de traducirla (el Paint y yo andamos peleados xD); aquí una descripción de la vida de un EJB desde que nace que muere (no... ellos no se reproducen)
- Los stateless session beans se mantienen en un pool (creo que poner piscina sería un tanto fuera de lugar), y son utilizados de este pool por los clientes EJB cuando lo requieren. Entonces, todo inicia cuando el contenedor decide que necesita más instancias, e instancia un stateless SB que es agregado al pool
- Recordar que después de instanciar el EJB, se produce la inyección de dependencia de estar presente, y luego se llama a los métodos anotados con @PostConstruct para inicializar recursos. Siempre se invoca al método @PostConstruct antes de la primera invocación a métodos de negocio.
- Para que un cliente acceda a los servicios del stateless SB, debe obtener una referencia a la interfaz de negocio del EJB (recordar que clientes interactúan a través de esta interfaz) mediante JNDI (o inyección de dependencia...que al final es un lookup JNDI)
- Una vez que el cliente obtiene la referencia mediante JNDI, puede invocar al método de negocio de la interfaz de negocio EJB. Ésta a su vez invoca al método correspondiente en la clase Wrapper (generada por el contenedor).
- Antes de invocar al método en la instancia presente en el pool , el contenedor nos ayuda con los servicios middleware necesarios (gestión de transacciones, seguridad, etc)
- Ahora si llamamos a la instancia EJB, invocamos al método y obtenemos el resultados. También se proveen servicios middleware necesarios después de la invocación.
- Los resultados pasan al cliente a través de la interfaz de negocio. Tenemos un cliente feliz :)
- El tiempo pasa...las cosas cambian ...
- El contenedor decide que tiene demasiadas instancias en el pool; por lo que decide eliminar del mapa a algunas.
- Se invoca al método del bean anotado como @PreDestroy (para liberar recursos antes del fin...como conexiones a base de datos).
- Se remueve la instancia del bean. Que en paz descanse.
Publicar un comentario