集群环境中的javax.ejb.singleton有多大?

集群环境中的javax.ejb.singleton有多大?,java,jakarta-ee,ejb,ejb-3.0,java-ee-6,Java,Jakarta Ee,Ejb,Ejb 3.0,Java Ee 6,我需要为集群环境中的所有用户和节点维护一个在应用程序中唯一的简单计数器。 我考虑过使用singleton会话bean注释javax.ejb.singleton,如下所示: package foo; import javax.ejb.Singleton; @Singleton public class Bean { private int counter; [...] } 这看起来很简单,但如果这在集群环境中按预期工作,我找不到答案。集群中的每个节点是否都有自己的实例 当然,

我需要为集群环境中的所有用户和节点维护一个在应用程序中唯一的简单计数器。 我考虑过使用singleton会话bean注释javax.ejb.singleton,如下所示:

package foo;

import javax.ejb.Singleton;

@Singleton
public class Bean {
    private int counter;
    [...]
}
这看起来很简单,但如果这在集群环境中按预期工作,我找不到答案。集群中的每个节点是否都有自己的实例

当然,我可以将bean持久化到数据库中,但它实际上只是一个计数器,这样做太过分了。此外,我希望计数器在应用程序崩溃或重新启动时重置,因此保持计数器将产生比解决问题更多的问题

集群中的每个节点是否都有自己的实例

是的,每个集群节点将有一个不同的单实例。因此,@Singleton注释并不是解决您问题的方法


请记住,JavaEE规范没有定义任何类型的集群行为。您需要搜索特定的供应商解决方案来实现这种需求。正如一个例子所示。

您可以使用。它是一个分布式内存键值存储。看起来很合适。它还实现了JCache规范JSR-107。

Ha singleton是一种方法。作为一种进步,有一些局限性。 如果您阅读,您将拥有一个@stateless bean,它通过“getValue()”方法访问服务。get值调用单例bean的方法,并为您提供一个值。。。好的,直到那里


但是,如果您需要使用bean进行操作,那么策略应该通过get value返回一个SingletonBean实例,但是。。您将有更多的单例bean实例。。。。这就是问题所在

谢谢。我想知道是否有不依赖于特定产品的选项。也许是黑客JNDI之类的?我认为可以实现您自己的解决方案,但您将面临已经为专业开发团队解决的问题(挑战)。即使您选择坚持,该解决方案也可能不是一个完全可靠的解决方案。如果在节点1正忙于持久化更新的计数器值时,节点2上出现请求,该怎么办?:-)如果您使用的是支持序列的db,则可以使用它们。为什么?因为我认为这是最可靠的解决方案。在您的单件游戏中,您可以使用生命周期注释执行序列重置操作,无论是在启动时还是销毁时,这取决于您。我需要进行上下计数,并且应用程序服务器的生命周期与数据库不同,因此这不起作用,但谢谢。