2014-09-12 68 views

回答

2

节6.6.3。 (钝化能力的依赖关系)CDI规范指出,无论您声明无状态bean是否可序列化,容器都保证无状态bean是钝化功能。

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

容器如何处理重新激活依赖于实现。当代理被反序列化时,它可以使无状态bean可序列化,或者可序列化的代理和对bean的引用。

+0

>当对代理进行反序列化时,对bean的引用被更新了 - 我还没有调查过每一个EJB实现代理,但从概念上讲,我不认为代理拥有对实际无状态bean的引用,而只是从池中获取它的代码。也就是说,对同一个代理的每个其他调用都可能会转到不同的bean实例,因此代理保留对特定实例的引用没有多大意义。 – 2014-09-13 10:05:32

2

添加到maress的答案;因为一个无状态bean实际上是无状态的客户端,所以容器不一定需要序列化任何东西。

对无状态bean的任何其他调用都可以转到不同的bean实例,或者其他任何调用都可以创建新的bean实例(如果我没有弄错,这是WildFly 8中的默认行为)。

正如Maress提到的那样,技术上可以使代理可序列化,但代理通常不会从系统范围池(可以为零大小)获取实际bean *并将所有方法调用委托给该代理。

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

相关问题