2011-03-01 14 views
8

Estoy leyendo un libro sobre Java EE 6 y me encontré con las siguientes partes:estado conversacional de beans de sesión

"sin estado: El bean de sesión contiene ningún estado de conversación entre los métodos, y cualquier instancia se puede utilizado para cualquier cliente ".

"pleno estado: El bean de sesión contiene el estado de conversación, que debe ser retenido a través de métodos para un solo usuario."

¿Qué significa "estado conversacional"? ¿Alguien tiene un ejemplo del mundo real para explicarlo?

Gracias de antemano.

II. ¿Por qué es tan importante esta clasificación de los frijoles? No dice nada con la explicación correcta tampoco o para principiante (a primera vista) Así que gracias a ti obtuve la diferencia lógica, pero ¿por qué este tipo de comportamiento tan importante?

Respuesta

11

al más básico, "estado de conversación" se refiere al valor de los campos de instancia.

Para beans de sesión sin estado, el contenedor no garantiza que las invocaciones de métodos posteriores utilicen la misma instancia EJB (del grupo), por lo tanto, no puede suponer que los valores colocados cuando llame a un método bean seguirán allí cuando vuelve a llamar al método (u otro método del bean).

Para beans de sesión con estado, el contenedor garantiza que las llamadas posteriores utilizarán la misma instancia de EJB, por lo tanto, puede mantener los valores de campo de instancia.

Por poner un ejemplo, digamos que tiene un bean que tiene un método de incremento() y un método de recuperación(). Incremento aumenta el valor almacenado y recuperar obtiene el valor almacenado actual.

Para un bean de sesión sin estado, si llama al método de incremento() 5 veces, no se garantiza que cuando realice una recuperación(), obtendrá un 5. Depende del contenedor que EJB Asignaremos a su llamada. Entonces, si le asignan una nueva instancia de EJB, obtendrá un cero. También es posible que el contenedor no haya limpiado su instancia de EJB, por lo que es posible obtener un 5, pero no está garantizado.

Para un bean de sesión con estado, si llama al método de incremento 5 veces, cuando recupera el valor obtendrá un 5. El contenedor garantiza que el EJB que se utilizó la primera vez que llamó se usará para todos llamadas subsecuentes.

+0

Gracias por su tiempo y esfuerzo, si tiene tiempo puede explicar mi segundo II. pregunta? – cscsaba

4

Un ejemplo del mundo real de un estado de conversación sería Carro de compras. Un usuario puede agregar varios artículos al carro de compras uno por uno y luego solicitar el pago. Todos los tiempos agregados estarían allí

Supongamos que el carro tiene estado, es decir, mantendrá el estado conversacional.

cart.add(item1); // suppose cart keep tracks of item by adding it to ArrayList 
cart.add(item2); 

cart.checkOut(); // at this stage both item1 and item2 would be there in ArrayList. 

Si el carro no tiene estado, cada llamada será independiente de las anteriores y en la facturación que no pueden tener nada.

Para su segundo punto La distinción es necesaria debido a las diferencias en el comportamiento de ambos granos. El mantenimiento del estado requiere recursos, por lo tanto, los beans con estado no son tan escalables como los beans sin estado.

+0

Gracias por su tiempo y esfuerzo, si tiene tiempo puede explicar mi segundo II. pregunta? – cscsaba

+0

Gracias otra vez anergy. – cscsaba

0

En cuanto a la segunda parte de la pregunta, de la Java EE 6 tutorial se puede leer lo siguiente:

Cuando Frijoles touse Sesión

beans de sesión con estado son apropiados si cualquiera de los siguientes las condiciones son verdaderas

  • El estado del bean representa la interacción entre el bean y un cliente específico.
  • El bean necesita contener información sobre el cliente en todas las invocaciones de métodos.
  • El bean media entre el cliente y los otros componentes de la aplicación, presentando una vista simplificada al cliente.
  • Detrás de escena, el bean gestiona el flujo de trabajo de varios enterprise beans.

Para mejorar el rendimiento, puede elegir un bean de sesión sin estado si tiene alguno de estos rasgos.

  • El estado del bean no tiene datos para un cliente específico.
  • En una invocación de método único, el bean realiza una tarea genérica para todos los clientes. Por ejemplo, puede usar un bean de sesión sin estado para enviar un correo electrónico que confirme un pedido en línea.
  • El bean implementa un servicio web.

Java EE 6 Tutorial

Cuestiones relacionadas