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.
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.