在SessionScoped CDI Bean中注入无状态EJB

时间:2014-09-12 19:18:30

标签: java java-ee ejb cdi

我想知道当SessionScoped CDI bean被钝化然后被激活时,注入的EJB-Proxy会发生什么。是否有空参考?或者是EJB"重新注入"?谢谢你的澄清。

2 个答案:

答案 0 :(得分:2)

第6.6.3节。 (CDI规范的钝化能力依赖性)声明容器保证无状态bean是否具有钝化功能,无论您是否声明无状态bean可序列化。

规范的第6.6.5节规定,如果钝化作用域(例如,@ SessionScoped')声明了对非钝化能力依赖的依赖性,则在部署时会发生错误。

容器如何处理重新激活取决于实现。当更新代理进行反序列化时,它可以使无状态bean可序列化,或代理可序列化以及对bean的引用。

答案 1 :(得分:2)

添加maress的答案;由于无状态bean对于客户端实际上是无状态的,因此容器不一定必须为它序列化任何东西。

对无状态bean的每次其他调用都可以转到另一个bean实例,或者每隔一次调用都可以导致创建一个新的bean实例(如果我没弄错的话,这是WildFly 8中的默认行为)。 / p>

正如maress所提到的,从技术上讲,代理可以是可序列化的,但代理通常只能从系统范围的池(可以是零大小)获取实际的bean *,并将所有方法调用委托给它。

*)作为技术细节;代理可能不会直接调用实际的bean,而是在调用实际实际的bean之前调用拦截器链