我在使用无状态EJB时遇到了一个问题。我希望在该EJB中使用特定的静态方法,但这种方法非常重要并且具有静态依赖性。
正如我们所知,无状态会话bean的实例是根据需求(一个或多个)创建的。那么我怎么能确定所有EJB都使用该静态方法的单个副本。我不确定,但我认为每个使用静态方法的不同类都会加载不同的类副本,然后执行静态方法的不同副本。
我不能依赖单例EJB,因为它不能保证只剩下一个副本,因为服务器需要多个JVM。单例EJB的不同副本将存在于不同的JVM中。
提前致谢。
答案 0 :(得分:1)
静态方法是每个类一个,即使您创建了该类的数千个实例,所有这些实例只能看到静态方法的一个副本。
现在按照规范,您的EJB中不应该有静态方法,如果您想要静态方法,则应考虑将其作为实用程序的一部分移动,或者将其设置为非静态方法。
来自规范:
EE.5.2.3注释和注入
如以下部分所述,某个领域或方法 可以注释容器管理的组件类以请求它 注入应用程序组件环境中的条目 班级。本章中描述的任何类型的资源都可以 被注射也可以使用中的条目请求注入 与每种资源类型对应的部署描述符。 该字段或方法可以具有任何访问限定符(公共,私有, 等等。)。对于除应用程序客户端主类之外的所有类, 字段或方法不能是静态的。