2010-05-14 12 views
6

Estoy experimentando con EJB3¿Cómo obtengo un nuevo bean de sesión con estado en un subproceso de servlet?

Me gustaría inyectar un bean de sesión con estado en un servlet, para que cada usuario que acceda al servlet obtenga un nuevo bean.

Obviamente, no puedo dejar que el bean sea una variable de instancia para el servlet, ya que se compartirá. Y al parecer, inyectar variables locales no está permitido.

Puedo usar el nuevo operador para crear un bean, pero ese no parece el enfoque correcto.

¿Hay una forma correcta de hacerlo? Parece que lo que estoy tratando de hacer es bastante sencillo, después de todo, queremos que cada cliente nuevo encuentre un carrito de compras vacío.

Respuesta

14

No puede usar new para obtener un nuevo SFSB.

Lo que normalmente hace es lookup una nueva usando el InitialContext.

MyBean bean = (MyBean) new InitialContext().lookup(name); 

A continuación, obtiene una referencia a un SFSB específico que puede reutilizar en las solicitudes.

De this answer:

No debe normalmente se inyecta SFSB, a menos que sea en otro o en SFSB un cliente Java EE. Debe usar @EJB en la clase de referencia (por ejemplo, su servlet ) para declarar ejb-ref y y luego hacer una búsqueda JNDI en el código para obtener la instancia. Esta instancia podría colocarse directamente en su sesión Http.

Para obtener más información acerca de SFSB, que podría estar interesado en estos otros respuestas de mí:

espero que ayude.

+0

¿Cuál debe ser el nombre de un nuevo SFSB? –

+0

Debería poder proporcionar un 'nombre' en' @Stateful (name = "xxx") 'y usarlo para la búsqueda. En realidad es un poco más complicado, y hay varios tipos de nombre (ver 'beanName',' name', y 'mappedName') y si el prefijo' java: comp/env/'debe usarse o no. Nunca recuerdo las sutilezas entre todos estos. Pruebe el caso más simple y genere otra pregunta. – ewernli

Cuestiones relacionadas