Bean de Sesion

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