【发布时间】:2014-09-18 09:26:09
【问题描述】:
对范围、ejb 和托管 bean 有一些疑问。
- 范围(javax.enterprise.context.ApplicationScope、javax.enterprise.context.SessionScope)是否仅适用于 EJB?还是它们适用于所有托管 bean?直到今天,我都非常确定它适用于所有托管 bean。
-
在我的应用程序中,我们有:
@ApplicationScoped public class MyClass implements MyNonSerializableInterface { @Inject private transient NonSerializableLogger transientLogger; @Inject private NonSerializableLogger logger; ... }还有一些经理:
@Singleton public class SomeManager { @Inject private MyClass myClass; }和一个网络服务:
@Path("some") public class SomeWebService { @Inject private SomeManager; }
容器(部署时间)或者编译器没有报错,正常吗?
我认为:
“使用会话、应用程序或会话范围的 bean 必须是可序列化的,但使用请求范围的 bean 不必是可序列化的。”JAVA EE Using Scopes
MyClass 是否应该实现 Serializable?我们是否可以说因为托管 bean 被注入到 @Singleton 中,所以永远不会发生序列化?因此在部署时没有显示序列化错误?
- 如果是:如果我创建 MyClass @ApplicationScoped 和 @Stateful 并使用 @EJB 将其注入 SomeManager,那么在部署时我会收到关于序列化的错误..
- 如果否:为什么我没有为瞬态 Logger 获得一些 NullPointerExceptions(由于钝化/激活)?
【问题讨论】:
-
“范围(ApplicationScope、SessionScope..)是否仅适用于 EJB?”所以实际上:“CDI 管理的 bean 是上下文的,而 EJB bean 不是”Adam Bien 在:oracle.com/technetwork/articles/java/…
标签: jakarta-ee serialization jboss dependency-injection cdi