3. www.cjavaperu.com
AgendaAgenda
En esta lección, usted aprenderá a:
Identificar las características de los beans de sesión
con estado
Crear y desplegar beans de sesión con estado
Implementar beans de sesión con estado
4. www.cjavaperu.com
4
1. La invocación del método remove() para eliminar instancias
del bean de sesión iniciara la excepción _____________.
a. EJBException
b. CreateException
c. RemoteException
d. RemoveException
2. ¿Cuál método de la interfaz EJBHome es invocado por los
clientes para gestionar de manera remota a un bean de
sesión sin estado?
a. getEJBHome()
b. getHomeHandle()
c. getHandle()
d. isIdentical()
Preguntas de EvaluaciónPreguntas de Evaluación
5. www.cjavaperu.com
5
3. ¿Cuál es el número de argumentos pasados al método
create() para crear una instancia de un bean de sesión
sin estado?
a. Uno
b. Dos
c. Tres
d. Cero
3. ¿Cuál método de la interfaz PortableRemoteObject es
utilizado por los clientes para recuperar la referencia de
la interfaz home de un bean de sesión sin estado?
a. getHomeHandle()
b. getEJBMetaData()
c. narrow()
d. getEJBHome()
Preguntas de EvaluaciónPreguntas de Evaluación
6. www.cjavaperu.com
6
5. ¿Cuál método es utilizado por el método
setSessionContext() definido en la interfaz
SessionContext para obtener la interfaz
local de un bean de sesión?
a. getEJBHome()
b. getEJBLocalObject()
c. getEJBObject()
d. getEJBLocalHome()
Preguntas de EvaluaciónPreguntas de Evaluación
7. www.cjavaperu.com
7
• En una aplicación, un bean de sesión con
estado guarda el estado de un cliente.
• Un cliente inicia una conversación con un
bean de sesión con estado cuando éste
invoca al método del bean en un objeto EJB.
• Cuando la conversación termina, el estado
conversacional es preservado y se
almacenan los datos específicos del cliente
relacionados con la conversación entre el
cliente y el bean.
• Cuando el cliente llama a otro método en el
bean de sesión con estado, el cliente puede
requerir conocer el estado conversacional de
la llamada de método anterior. Un bean de
sesión con estado retiene el estado
conversacional para clientes individuales a
través de las llamadas de método.
Información General de los Beans de Sesión Con EstadoInformación General de los Beans de Sesión Con Estado
8. www.cjavaperu.com
8
Ciclo de Vida de los Beans de sesión con estado
• Contenedor EJB:
• Controla el ciclo de vida de un bean de
sesión con estado.
• Asigna una instancia del bean de sesión con
estado para dar servicio a un solo cliente a la
vez. Como resultado, hay las mismas
instancias de bean de sesión con estado en el
grupo que el número de clientes.
• No puede destruir de manera aleatoria la
instancia de un bean de sesión con estado ya
que ésta almacena el estado del cliente.
• Se asegura de que el estado del cliente
almacenado en las variables de la instancia
de un bean no es requerido en el
procesamiento de la aplicación, antes de
destruir una instancia del bean de sesión con
estado,.
Información General de los Beans de Sesión Con EstadoInformación General de los Beans de Sesión Con Estado
9. www.cjavaperu.com
9
Las etapas del ciclo de vida de un
bean de sesión con estado son:
• Listo: En esta etapa, la instancia de un
bean de sesión con estado permanece
en el grupo compartido y da servicio a
las solicitudes del cliente.
• Pasiva: En esta etapa, el contenedor
EJB almacena el estado del cliente en
un almacén secundario y elimina la
instancia del bean de la memoria.
• No Existe: En esta etapa, se elimina
permanentemente a un bean de sesión
con estado del grupo compartido.
Información General de los Beans de Sesión Con EstadoInformación General de los Beans de Sesión Con Estado
10. www.cjavaperu.com 10
Las etapas del ciclo de vida de un bean de sesiónLas etapas del ciclo de vida de un bean de sesión
Información General de los Beans de Sesión Con Estado
11. www.cjavaperu.com
11
•La Etapa Listo
• Al inicio de su ciclo de vida, un bean de sesión con
estado está en la etapa Listo.
• La instancia del bean de sesión con estado entra a la
etapa Listo en los siguientes casos:
• Cuando el contenedor EJB crea una nueva
instancia del bean de sesión con estado.
• Cuando el contenedor EJB activa un bean de
sesión con estado que está pasivo.
• El contenedor EJB crea nuevas instancias de un bean
de sesión con estado cuando no hay suficientes
instancias del bean de sesión con estado en el grupo
compartido para dar servicio a las solicitudes de los
clientes.
Información General de los Beans de Sesión Con EstadoInformación General de los Beans de Sesión Con Estado
12. www.cjavaperu.com
12
• Para crear una nueva instancia del bean de sesión con
estado, el contenedor EJB realiza los siguientes pasos:
• El contenedor EJB invoca a:
1. El método newInstance(), el cual crea una
nueva instancia del bean de sesión con estado.
2. El método setEntityContext() para asociar la
instancia del bean de sesión con estado con el
contexto del bean.
3. El método ejbCreate() de la clase bean de
sesión con estado. Usted puede pasar
argumentos al método ejbCreate() para
inicializar una nueva instancia del bean de
sesión con estado. Un bean de sesión con
estado puede tener más de un método
ejbCreate(), donde cada método tiene un
número y tipo de argumentos diferentes.
Información General de los Beans de Sesión Con EstadoInformación General de los Beans de Sesión Con Estado
13. www.cjavaperu.com
13
•Una instancia del bean de sesión con estado
también puede pasar a la etapa Listo
cuando el contenedor EJB activa a un bean
de sesión con estado en estado pasivo
invocando al método ejbActivate().
•El método ejbActivate() transfiere el
estado del cliente de un bean de sesión con
estado en estado pasivo a las variables de
la instancia del bean de sesión con estado.
•El contenedor EJB llama al método
ejbActivate() para permitirle al bean
adquirir los recursos liberados por éste
durante su estado pasivo.
Información General de los Beans de Sesión Con EstadoInformación General de los Beans de Sesión Con Estado
14. www.cjavaperu.com
14
La Etapa Pasiva
• Un bean de sesión con estado entra a la etapa Pasiva
en su ciclo de vida cuando el contenedor EJB lo libera
de dar servicio a un cliente inactivo y devuelve el
bean de sesión con estado al grupo compartido para
dar servicio a las solicitudes de otro cliente.
• Antes de volverlo pasivo, el contenedor EJB guarda el
estado del cliente asociado con la instancia del bean
de sesión con estado en un mecanismo secundario
de almacenamiento, como un disco duro en el
servidor.
• El contenedor EJB llama al método ejbPassivate()
antes de volver pasivo a un bean de sesión. Esto
permite al bean de sesión liberar sus recursos.
Información General de los Beans de Sesión Con EstadoInformación General de los Beans de Sesión Con Estado
15. www.cjavaperu.com
15
Etapa No Existe
•Al término de su ciclo de vida, la instancia del bean de
sesión con estado entra en la etapa No Existe.
•Una instancia del bean de sesión con estado entra en
esta etapa en los siguientes casos:
• Cuando el contenedor EJB invoca al método
ejbRemove().
• Cuando la desconexión por tiempo del ciclo de
vida de la instancia del bean especificada por el
desarrollador del bean expira.
Información General de los Beans de Sesión Con EstadoInformación General de los Beans de Sesión Con Estado
16. www.cjavaperu.com
16
•El contenedor EJB destruye a las instancias del bean de
sesión con estado cuando el número de instancias es
mayor al número de solicitudes de clientes activos.
•El contenedor EJB no invoca al método ejbRemove() en
los siguientes casos:
• Cuando ocurre una falla en el contenedor EJB.
• Cuando la ejecución de un método del bean de
sesión con estado inicia una excepción del
sistema.
Información General de los Beans de Sesión Con EstadoInformación General de los Beans de Sesión Con Estado
17. www.cjavaperu.com
17
Activación y Pasivación de los Beans de Sesión con
Estado
•El contenedor EJB pasiva y activa las instancias del bean de
sesión con estado en el grupo compartido para reducir el
gasto de almacenamiento de un gran número de instancias
del bean.
•El contenedor EJB almacena el estado del bean de una
instancia inactiva del bean en un mecanismo secundario de
almacenamiento. Este proceso es denominado pasivación .
•Cuando el cliente de un bean pasivo llama a otro método
del bean, se restaura el estado del bean. Este proceso es
denominado activación.
Información General de los Beans de Sesión Con EstadoInformación General de los Beans de Sesión Con Estado
18. www.cjavaperu.com 18
La pasivación del bean de sesión con estadoLa pasivación del bean de sesión con estado
Información General de los Beans de Sesión Con Estado
19. www.cjavaperu.com
19
Los beans de sesión con estado preservan las
referencias de las siguientes interfaces, además de
la información específica del cliente durante la
pasivación del bean:
• javax.ejb.EJBHome
• javax.ejb.EJBObject
• javax.jta.UserTransaction
• javax.naming.Context
• javax.ejb.EJBLocalHome
• javax.ejb.EJBLocalObject
Información General de los Beans de Sesión Con EstadoInformación General de los Beans de Sesión Con Estado
20. www.cjavaperu.com
20
•Los distintos algoritmos utilizados para implementar la
pasivación son:
• El Menos Utilizado Recientemente (LRU): Selecciona
la instancia del bean de sesión con estado, la cual ha
estado inactiva por más tiempo. Esto se conoce como
pasivación impaciente.
• No Utilizado Recientemente (NRU): Selecciona la
instancia del bean de sesión con estado, la cual ha estado
recientemente inactiva.
• Primero Dentro Primero Fuera (FIFO): Selecciona la
instancia del bean de sesión con estado, la cual entró
primero al grupo y está inactiva. Este también se conoce
como pasivación floja.
•La mayoría de los servidores EJB utilizan el algoritmo justo a
tiempo, de acuerdo con este algoritmo, un bean pasivo es
activado cuando un cliente decide continuar la interacción con la
instancia del bean.
Información General de los Beans de Sesión Con EstadoInformación General de los Beans de Sesión Con Estado
22. www.cjavaperu.com
22
• Usted necesita desarrollar las interfaces del bean y la
clase bean para crear un bean de sesión con estado.
• Después de crear los archivos, usted necesita
compilarlos para generar los archivos de clase.
• Empaquete los archivos compilados en un solo archivo
Java Archive (JAR). Este archivo JAR se empaqueta
después en un archivo EAR de la aplicación J2EE y se
despliega en el Servidor de Aplicaciones J2EE.
• Después de desplegar el bean de sesión con estado,
usted puede acceder a él utilizando clientes Web o de
Aplicación.
Creando Beans de Sesión Con EstadoCreando Beans de Sesión Con Estado
23. www.cjavaperu.com
23
Utilizando Archivos Java para Crear un Bean de Sesión Con
Estado
•Usted necesita definir tres archivos de clase Java para crear
un bean de sesión con estado.
• Interfaz home del bean de sesión con estado: Define
los métodos para crear y eliminar las instancias del
bean de sesión con estado.
• Interfaz remota del bean de sesión con estado:
Define los métodos empresariales que pueden llamar
los clientes. Estos métodos se implementan el la
clase del bean de sesión con estado.
• Clase del bean de sesión con estado: Implementa los
métodos del ciclo de vida del bean de sesión con
estado y los métodos empresariales declarados en la
interfaz remota del bean de sesión con estado.
Creando Beans de Sesión Con EstadoCreando Beans de Sesión Con Estado
24. www.cjavaperu.com
24
•Creando la Interfaz Home del Bean de Sesión Con Estado
• Los clientes utilizan una implementación de la
interfaz home del bean de sesión con estado para
crear una instancia del bean de sesión con estado.
• La interfaz home del bean de sesión con estado
extiende a la interfaz javax.ejb.EJBHome.
• Los clientes utilizan los métodos definidos en la
interfaz javax.ejb.EJBHome para administrar una
instancia de un bean de sesión con estado.
• La interfaz home del bean de sesión con estado
define al método create() para crear nuevas
instancias del bean de sesión con estado.
Creando Beans de Sesión Con EstadoCreando Beans de Sesión Con Estado
25. www.cjavaperu.com
25
• Puede haber varios métodos create() en la
interfaz home del bean de sesión con estado,
pero la firma de cada método create() debe ser
diferente.
• El tipo de devolución del método create() es
una referencia de la implementación de la
interfaz remota del bean de sesión con estado.
• En la interfaz home del bean de sesión con
estado, la cláusula throws del método create()
incluye a las excepciones,
javax.ejb.CreateException y
javax.ejb.RemoteException.
Creando Beans de Sesión Con EstadoCreando Beans de Sesión Con Estado
26. www.cjavaperu.com
26
Creando la Interfaz Remota del Bean de Sesión Con Estado
• Los clientes remotos acceden a los métodos
empresariales del bean de sesión con estado utilizando
los métodos definidos en la interfaz remota del bean de
sesión con estado.
• La interfaz remota del bean de sesión con estado
extiende a la interfaz javax.ejb.EJBObject.
• La interfaz remota del bean de sesión con estado define
los métodos empresariales implementados en la clase del
bean de sesión con estado.
• La firma de los métodos empresariales debe ser la misma
que la de los métodos empresariales implementados en
la clase del bean de sesión con estado.
• Todos los métodos empresariales deben iniciar la
excepción javax.ejb.RemoteException.
Creando Beans de Sesión Con EstadoCreando Beans de Sesión Con Estado
27. www.cjavaperu.com
27
Creando la Clase del Bean de Sesión Con Estado
• La clase del bean de sesión con estado
implementa el ciclo de vida y los métodos
empresariales de la aplicación del bean de
sesión con estado.
• La clase del bean de sesión con estado
implementa la interfaz
javax.ejb.SessionBean, la cual define los
métodos invocados por el contenedor EJB para
gestionar el ciclo de vida de una instancia del
bean de sesión con estado.
• La clase de un bean de sesión con estado
declara las variables de la instancia para
guardar el estado del cliente. La clase del bean
de sesión con estado se declara como pública.
Creando Beans de Sesión Con EstadoCreando Beans de Sesión Con Estado
28. www.cjavaperu.com
28
Compilando y Desplegando un Bean de Sesión Con Estado
• Después de crear los archivos Java para un bean de sesión con
estado, compile todos los archivos Java utilizando el compilador
javac.
• El comando que se utiliza para compilar los archivos Java es
javac <file_name>.
• Los archivos de clase Java compilados desde la aplicación del
bean de sesión con estado se despliegan en el Servidor de
Aplicaciones J2EE1.4 utilizando la herramienta deploytool.
• El Asistente para el nuevo Enterprise Bean de la herramienta
deploytool despliega a un bean de sesión con estado .
• La herramienta deploytool empaqueta los archivos de clase Java
compilados en un archivo JAR antes de desplegar el bean .
• La herramienta deploytool genera automáticamente el
descriptor de despliegue del bean de sesión con estado.
Creando Beans de Sesión Con EstadoCreando Beans de Sesión Con Estado
29. www.cjavaperu.com
29
Accediendo a un Bean de Sesión Con Estado
• Un cliente accede a los métodos empresariales de un bean de
sesión con estado utilizando las referencias de las interfaces
home y remota del bean.
• Ambos, el cliente Web y el cliente de Aplicación, pueden acceder
a un bean de sesión con estado. Un cliente realiza los siguientes
pasos para acceder a un bean de sesión con estado:
1. Ubica al bean de sesión con estado desplegado en el
Servidor de Aplicaciones J2EE 1.4.
2. Recupera las referencias de las interfaces home y remota del
bean de sesión con estado.
Creando Beans de Sesión Con EstadoCreando Beans de Sesión Con Estado
30. www.cjavaperu.com
30
Ubicando a un Bean de Sesión Con Estado
• Un cliente ubica a un bean de sesión con estado en el
Servidor de Aplicaciones J2EE 1.4 utilizando la Interfaz
del Directorio de Nombres de Java (JNDI).
• Para ubicar a un bean de sesión con estado, un cliente
debe:
• crear un contexto inicial de nombre utilizando la
interfaz InitialContext de JNDI.
• ubicar el bean de sesión con estado desplegado
después de crear un contexto inicial utilizando el
método lookup(). El método lookup() devuelve la
referencia de la interfaz home del bean de sesión
con estado.
Creando Beans de Sesión Con EstadoCreando Beans de Sesión Con Estado
31. www.cjavaperu.com
31
Recuperando las Referencias de las Interfaces del Bean de
Sesión Con Estado
•Un cliente:
• Debe recuperar las referencias de las interfaces home
y remota de un bean de sesión con estado después
de ubicar al bean de sesión con estado.
• Puede utilizar la referencia de la interfaz remota del
bean de sesión con estado para invocar a los
métodos empresariales de un bean.
• utiliza el método narrow() de la interfaz
PortableRemoteObject para recuperar la referencia
de la interfaz home de un bean de sesión con estado.
Creando Beans de Sesión Con EstadoCreando Beans de Sesión Con Estado
32. www.cjavaperu.com
32
• Un cliente local debe utilizar el método lookup() de la
interfaz InitialContext para recuperar una referencia
de la interfaz home local de un bean de sesión con
estado.
• Un cliente recupera una referencia de la interfaz remota
o local del bean de sesión con estado llamando al
método create() en la interfaz home del bean de
sesión con estado.
Creando Beans de Sesión Con EstadoCreando Beans de Sesión Con Estado
33. www.cjavaperu.com
33
Las Responsabilidades del Proveedor del Bean de Sesión y el
Proveedor del Contenedor EJB son:
• Las Responsabilidades del Proveedor del Bean de Sesión
son:
• Crear la interfaz home remota del bean de sesión
con estado.
• Crear la interfaz local remota del bean de sesión con
estado.
• Crear la interfaz remota del bean de sesión con
estado.
• Crear la clase del bean de sesión con estado.
• Cerrar todas las conexiones de la base de datos en
el método ejbPassivate() del bean de sesión con
estado y asignar valores nulos a las variables de
instancia de conexión.
Creando Beans de Sesión Con EstadoCreando Beans de Sesión Con Estado
34. www.cjavaperu.com
34
Las responsabilidades del proveedor del contenedor EJB son:
• Proveer la herramienta de despliegue para desplegar
beans de sesión.
• Gestionar el ciclo de vida de una instancia del bean de
sesión.
• Garantizar que una instancia del bean de sesión dé
servicio a la solicitud de un sólo cliente a la vez. El
contenedor EJB inicia la
javax.ejb.RemoteException o la
javax.ejb.EJBException cuando un cliente intenta
acceder a la instancia del bean de sesión cuando esta está
dando servicio a la solicitud de otro cliente.
• Manejar las excepciones del tiempo de ejecución iniciadas
por las instancias de un bean de sesión
Creando Beans de Sesión Con EstadoCreando Beans de Sesión Con Estado
35. www.cjavaperu.com
35
• Implementar el método
SessionContext.getEJBObject() para recuperar una
referencia de la interfaz remota del bean de sesión.
• Serializar el estado del cliente de una instancia del bean
de sesión con estado después de invocar al método
ejbPassivate().
• Eliminar la instancia de un bean de sesión con estado si
la instancia del bean no se adhiere a los requerimientos
de serialización.
• Guardar y restaurar el estado del cliente durante la
pasivación y activación de la instancia del bean de
sesión con estado.
Creando Beans de Sesión Con EstadoCreando Beans de Sesión Con Estado
36. www.cjavaperu.com
36
En esta lección, usted aprendió:
• Un bean de sesión con estado preserva el estado del cliente a
través de la invocación de métodos y la transacción.
• El ciclo de vida de un bean de sesión con estado consiste de
tres etapas, Listo, Pasiva y No Existe.
• El contenedor EJB invoca al método ejbCreate() para
inicializar una nueva instancia del bean de sesión con estado.
• El contenedor EJB pasiva y activa las instancias de un bean
de sesión con estado para reducir el gasto de mantener un
gran número de instancias del bean en el grupo compartido.
• El contenedor EJB utiliza los algoritmos LRU, NRU y FIFO para
seleccionar la instancia del bean de sesión con estado que
será pasivada.
• El algoritmo justo a tiempo se utiliza para activar un bean de
sesión con estado pasivo.
ResumenResumen
37. www.cjavaperu.com
37
• Para crear un bean de sesión con estado para clientes
remotos, usted necesita crear los siguientes archivos
Java:
• Interfaz home del bean de sesión con estado
• Interfaz remota del bean de sesión con estado
• Clase del bean de sesión con estado
• La interfaz home de un bean de sesión con estado
extiende a la interfaz javax.ejb.EJBHome.
• El método create() de la interfaz home de un bean de
sesión con estado se utiliza para obtener una referencia
al objeto que implementa la interfaz remota del bean.
• La interfaz remota de un bean de sesión con estado
extiende a la interfaz javax.ejb.EJBObject.
ResumenResumen
38. www.cjavaperu.com
38
• La clase bean de un bean de sesión con estado
implementa la interfaz
javax.ejb.SessionBean.
• Un cliente utiliza a JNDI para ubicar un bean de
sesión con estado desplegado.
ResumenResumen
40. www.cjavaperu.com
40
1. a. EJBException
2. b. getHomeHandle()
3. c. Cero
4. c. narrow()
5. b. getEJBLocalObject()
Soluciones a las Preguntas de EvaluaciónSoluciones a las Preguntas de Evaluación