Java Jersey REST Web服务:无法在所有群集节点上创建单身bean
问题描述:
我想在我的Jersey 1.19.1 webservice中有一个单例对象,它在我的所有Glassfish节点上都是同一个实例。这是我目前实施:Java Jersey REST Web服务:无法在所有群集节点上创建单身bean
@Singleton
@ApplicationScoped
@Stateless
public class ValueObject {
public long downloads = 0;
}
和
@Path("downloads")
public class Downloads {
@InjectParam
private ValueObject singleton;
}
当一个文件被下载计数器增加。 下载文件并询问downloadCounter 1和0后,将返回两个Glassfish节点中的哪一个节点处理该请求。
我的目标是总是1.我该如何实现这一目标?
没有@ApplicationScoped或使用@Stateful而不是@Stateless导致相同的结果。
问候
约翰
答
这是不可能的GlassFish的。如所讨论的in this * answer中,EJB @Singleton
注释将具有每一个JVM实例,如每EJB 3.1规格:
一个单会话bean是每个应用程序实例化一次会话bean组件。在容器分布在多个虚拟机的情况下,每个应用程序将有辛格尔顿一个bean实例每个JVM
答案也提到WildFly 10有一个机制来支持这一点,但是这是一个专有解决方案,而不是在GlassFish中找到的。
Payara Server目前正在研究解决方案,但尚未实施。