2017-07-05 18 views
1

我想在我的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导致相同的结果。

问候

约翰

回答

0

这是不可能的GlassFish的。如所讨论的in this StackOverflow answer中,EJB @Singleton注释将具有每一个JVM实例,如每EJB 3.1规格:

一个单会话bean是每个应用程序实例化一次会话bean组件。在容器分布在多个虚拟机的情况下,每个应用程序将有辛格尔顿一个bean实例每个JVM

答案也提到WildFly 10有一个机制来支持这一点,但是这是一个专有解决方案,而不是在GlassFish中找到的。

Payara Server目前正在研究解决方案,但尚未实施。