Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
631 views
in Technique[技术] by (71.8m points)

jakarta ee - Is it possible to @Inject a @RequestScoped bean into a @Stateless EJB?

Is it possible to inject a request-scoped CDI bean into a Stateless session bean?

I had asked a related question and thought the specific CDI @RequestScoped into @Stateless question merited its own post.

Passing state between EJB methods / @RequestScoped and @Stateless

I also asked a similar question about JMS @MessageDriven beans - basically want to know the same about @Stateless.

@RequestScoped CDI injection into @MessageDriven bean

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

You can absolutely do what you mention and use @RequestScoped beans in an @Stateless session bean and an @MessageDriven bean. This is a core part of the CDI spec and TCK and guaranteed portable.

Note on MDBs

Do be aware that there is a test for a @Stateless bean that uses a @RequestScoped bean, but there is no test that guarantees a @MessageDriven bean can reference @RequestScoped beans. This was just an oversight and is already fixed for the Java EE 7 TCK. So just be aware that if it doesn't work for the MDB case, it may not be your fault :)

The workaround would be to simply have your MDB delegate to a SessionBean of any kind as @Stateless, @Stateful, and @Singleton all have @RequestScoped tests.

Making the EJB, itself, scoped

While @Stateless, @Singleton and @MessageDriven can have scoped references injected via @Inject, they cannot be @RequestScoped or any other scope. Only the @Stateful model is flexible enough to support scopes. In other words, you can annotate the @Stateful bean class itself as @RequestScoped, @SessionScoped, etc..

In simple terms @Stateless, @Singleton have fixed "scopes" already. @Singleton is essentially @ApplicationScoped and @Stateless would perhaps be some made-up scope like @InvocationScoped, if that existed. The lifecycle of an @MessageDriven bean is entirely up to the Connector that drives it and is therefore also not allowed to have user-defined scope.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...