Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用相同静态方法的多个无状态bean_Java_Static_Ejb - Fatal编程技术网

Java 使用相同静态方法的多个无状态bean

Java 使用相同静态方法的多个无状态bean,java,static,ejb,Java,Static,Ejb,我在使用无状态EJB时遇到了一个问题。我希望在EJB中使用一个特定的静态方法,但是这个方法非常重要,并且具有静态依赖性 正如我们所知,无状态会话bean的实例是根据需求(一个或多个)创建的。因此,我如何确保所有EJB都使用该静态方法的单个副本呢。我不确定,但我认为每个使用静态方法的不同类都会加载不同的类副本,然后执行不同的静态方法副本 我不能依赖单例EJB,因为它不能保证只剩下一个副本,因为如果服务器需要多个JVM。不同的JVM中将存在不同的单例EJB副本 提前感谢。每个类都有一个静态方法,即使

我在使用无状态EJB时遇到了一个问题。我希望在EJB中使用一个特定的静态方法,但是这个方法非常重要,并且具有静态依赖性

正如我们所知,无状态会话bean的实例是根据需求(一个或多个)创建的。因此,我如何确保所有EJB都使用该静态方法的单个副本呢。我不确定,但我认为每个使用静态方法的不同类都会加载不同的类副本,然后执行不同的静态方法副本

我不能依赖单例EJB,因为它不能保证只剩下一个副本,因为如果服务器需要多个JVM。不同的JVM中将存在不同的单例EJB副本


提前感谢。

每个类都有一个静态方法,即使您创建了该类的数千个实例,所有这些方法都只会看到静态方法的一个副本

现在按照规范,在EJB中不应该有静态方法,如果你想让它静态化,或者把它变成非静态的,你应该考虑把它移动为实用程序的一部分。 根据规范:

EE.5.2.3注释和注入

如以下章节所述,一个特定的字段或方法 可以对容器管理的组件类进行注释,以请求 应用程序组件环境中的条目将被注入 这个班。本章中描述的任何类型的资源都可以 注射。也可以使用中的条目请求注入 与每种资源类型对应的部署描述符。 字段或方法可以具有任何访问限定符(公共、私有、, 等等)。对于除应用程序客户端主类以外的所有类 字段或方法不能是静态的


静态方法是每个类一个,即使您创建了该类的数千个实例,所有这些方法都只会看到静态方法的一个副本

现在按照规范,在EJB中不应该有静态方法,如果你想让它静态化,或者把它变成非静态的,你应该考虑把它移动为实用程序的一部分。 根据规范:

EE.5.2.3注释和注入

如以下章节所述,一个特定的字段或方法 可以对容器管理的组件类进行注释,以请求 应用程序组件环境中的条目将被注入 这个班。本章中描述的任何类型的资源都可以 注射。也可以使用中的条目请求注入 与每种资源类型对应的部署描述符。 字段或方法可以具有任何访问限定符(公共、私有、, 等等)。对于除应用程序客户端主类以外的所有类 字段或方法不能是静态的

我想知道为什么它说它们“不能是静态的”。谁在乎它们是不是静止的?即使在标准Java中,静态方法也是一种害群之马:由于是过程性的,而不是面向对象的,所以将它们放在哪里并不重要。程序员将静态方法组织到类中,但因为它们不在对象状态上操作,所以选择有些随意。我最近了解到,“它们不能是静态的”,因为静态方法不参与容器管理的事务、AOP、安全性等。如果我们问“为什么静态方法不参与AOP等?”我认为这与EJB/CDI如何使用代理来完成它的工作有关:代理通常通过实现接口或扩展类来实现,这在静态方法上不起作用(类似于)。我想知道为什么它说它们“不能是静态的”。谁在乎它们是不是静止的?即使在标准Java中,静态方法也是一种害群之马:由于是过程性的,而不是面向对象的,所以将它们放在哪里并不重要。程序员将静态方法组织到类中,但因为它们不在对象状态上操作,所以选择有些随意。我最近了解到,“它们不能是静态的”,因为静态方法不参与容器管理的事务、AOP、安全性等。如果我们问“为什么静态方法不参与AOP等?”我认为这与EJB/CDI如何使用代理来完成它的工作有关:代理通常是通过实现接口或扩展类来实现的,这在静态方法上不起作用(类似于)。