Un
bean
de sesión
representa a un cliente dentro de un servidor J2EE. Para
acceder a una aplicación desplegada en el servidor, el cliente
invoca métodos del bean de sesión.
Existen
dos tipos de Bean de Session:
Stateful (con sesión)
El
estado de un objeto consiste en el valor de sus variables de
instancia:
- Mantienen estado de sesión.
- Cada cliente usa una instancia del bean.
- Se especifican mediante la anotación @Stateful.
Stateless (sin sesión)
Una
sesión stateless no mantiene un estado conversacional para un
cliente en particular. Puede servir a muchos clientes.
- No mantienen el estado del cliente.
- El contenedor crea pools de Session bean stateless usados por n clientes.
- Se especifican mediante la anotación @Stateless
Ciclo
de vida Bean @StateFul:
- Creación: Cuando el cliente ejecuta el método create().
- Uso: Cuando el cliente llama un método de negocio.
- Desactivación: El bean se manda a memoria secundaria.
- Activación: El bean es despertado para servir algún método al cliente.
- Destrucción: Cuando el cliente termina su sesión con el bean.
Ciclo
de vida Bean @Stateless:
- Creación: Cuando el contenedor quiere un bean.
- Uso: Cuando el cliente llama un método de negocio.
- Destrucción: Cuando el contenedor decide que hay muchos beans en el pool.
Métodos invocados automáticamente por el EJB container:
No
tienen parámetros y son tipos de métodos void.
Los
métodos anotados con @PostConstruct son invocados cuando se
instancia un bean, después de la inyección de las anotaciones y
antes de que se invoque el primer método de negocio.
Los
métodos anotados con @PreDestroy son invocados después de la
ejecución de métodos anotados con @Remove y antes de que el
contenedor elimine la instancia del bean.
Los
métodos anotados con @PostActivate son invocados después de que el
contenedor mueva el bean de memoria secundaria a estado activo.
Los
métodos anotados con @PrePassivate son invocados antes de que el
contenedor elimine el bean del ambiente activo y lo salve en la
memoria secundaria.
Un
método anotado con @Remove es un método de ciclo de vida especial,
que puede ser invocado por el cliente del bean.
Después
de su ejecución el contenedor llama al método anotado con
@PreDestroy, si existe.
A
continuación la instancia queda sin referencia y lista para ser
procesada con el Garbage Collector (recolector de basura).
Acceso de Clientes Bean a una Sesión:
Un
cliente sólo puede acceder un Session Bean a través de los métodos
definidos en la Interfaz. Es el
tipo de cliente quién determina que interfaces se usan. Pueden haber dos tipos de interfaces:
- Remotas.
- Locales.
Un
cliente remoto de un session bean:
- Corre en una máquina virtual de Java diferente a la del bean.
- Puede ser un programa standalone, un componente web (servlet o JSP) u otro EJB.
- La localización del bean es transparente para el cliente.
- Para definirlo debe usarse la anotación @Remote y puede hacerse de dos formas diferentes.
Un
cliente local de un session bean:
- Debe correr en la misma máquina virtual de Java que el bean.
- Normalmente es otro EJB.
- La localización del bean NO es transparente para el cliente.
- Para definirlo debe usarse la anotación @Local en la declaración de la interfaz o nada, que es por defecto.
@Local
public interface MiBeanLocal
{
//CODIGO DEL BEAN
}
- Debemos especificar la clase principal con la anotación @Local con la interfaz como parámetro:
@Local(MiBeanLocal.class)
public class MiBean implements MiBeanLocal
{
//CODIGO DE LA CLASE
}
Factores a considerar para utilizar acceso local o acceso remoto:
- Beans relacionados entre sí deben usar interfaces locales para comunicarse entre ellos.
- Clientes en otras máquinas virtuales o reales diferentes deben usar interfaces remotas.
No hay comentarios:
Publicar un comentario