tipo que beans bean java-ee java-ee-6 cdi ejb-3.1 stateless-session-bean

java-ee - que - stateless java definition



¿Es posible @Inyectar un bean @RequestScoped en un EJB @Stateless? (1)

¿Es posible inyectar un bean CDI de ámbito de solicitud en un bean de sesión sin estado?

Hice una pregunta relacionada y pensé que el CDI específico @RequestScoped in @Stateless question merecía su propia publicación.

Pasando el estado entre los métodos EJB / @RequestScoped y @Stateless

También hice una pregunta similar sobre los beans JMS @MessageDriven - básicamente quiero saber lo mismo sobre @Stateless.

@RequestScoped inyección de CDI en @MessageDriven bean


Absolutamente puede hacer lo que menciona y usar los frijoles @RequestScoped en un @Stateless sesión sin estado y en un bean @MessageDriven . Esta es una parte fundamental de la especificación de CDI, TCK y portátil garantizado.

Nota sobre los MDBs

@Stateless cuenta que hay una prueba para un bean @Stateless que utiliza un bean @RequestScoped , pero no hay ninguna prueba que garantice que un bean @MessageDriven puede hacer referencia a los beans @RequestScoped . Esto fue solo un descuido y ya está arreglado para el Java EE 7 TCK . Entonces, tenga en cuenta que si no funciona para el caso de MDB, puede que no sea su culpa :)

La solución sería simplemente tener su delegado MDB en un SessionBean de cualquier tipo como @Stateless , @Stateful , y @Singleton todos tienen pruebas de @RequestScoped .

Haciendo el EJB, en sí, con ámbito

Si bien @Stateless , @Singleton y @MessageDriven pueden tener referencias de ámbito inyectadas a través de @Inject , no pueden ser @RequestScoped ni ningún otro ámbito. Solo el modelo @Stateful es lo suficientemente flexible como para soportar ámbitos. En otras palabras, puede anotar la @Stateful clase de bean @Stateful como @RequestScoped , @SessionScoped , etc.

En términos simples @Stateless , @Singleton ha corregido "ámbitos". @Singleton es esencialmente @ApplicationScoped y @Stateless tal vez sería un ámbito @InvocationScoped como @InvocationScoped , si existiera. El ciclo de vida de un bean @MessageDriven es totalmente @MessageDriven del conector que lo impulsa y, por lo tanto, tampoco se le permite tener un alcance definido por el usuario.