Web services JavaRESTWebService:不可能在所有集群节点上创建单例bean

Web services JavaRESTWebService:不可能在所有集群节点上创建单例bean,web-services,jersey,glassfish,singleton,cluster-computing,Web Services,Jersey,Glassfish,Singleton,Cluster Computing,我希望在Jersey 1.19.1 webservice中有一个singleton对象,它在我的所有Glassfish节点上都是相同的实例。这是我当前的实现: @Singleton @ApplicationScoped @Stateless public class ValueObject { public long downloads = 0; } 及 下载文件时,计数器会增加。 下载文件并请求downloadCounter后,根据两个Glassfish节点中处理请求的节点返回1

我希望在Jersey 1.19.1 webservice中有一个singleton对象,它在我的所有Glassfish节点上都是相同的实例。这是我当前的实现:

@Singleton
@ApplicationScoped
@Stateless
public class ValueObject {

    public long downloads = 0;

}

下载文件时,计数器会增加。 下载文件并请求downloadCounter后,根据两个Glassfish节点中处理请求的节点返回1和0

我的目标是永远得到1分。我怎样才能做到这一点

如果没有@ApplicationScoped,或者使用@Stateful而不是@Stateless,则会导致相同的结果

问候


约翰

这在玻璃鱼身上是不可能的。如前所述,根据EJB3.1规范,EJB
@Singleton
注释将为每个JVM提供一个实例:

单例会话bean是每个应用程序实例化一次的会话bean组件。在容器分布在多个虚拟机上的情况下,每个应用程序将为每个JVM提供一个单例bean实例

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


目前正在研究Payara服务器的解决方案,但尚未实施。

这在GlassFish中是不可能的。如前所述,根据EJB3.1规范,EJB
@Singleton
注释将为每个JVM提供一个实例:

单例会话bean是每个应用程序实例化一次的会话bean组件。在容器分布在多个虚拟机上的情况下,每个应用程序将为每个JVM提供一个单例bean实例

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

目前正在研究Payara服务器的解决方案,但尚未实现

@Path("downloads")
public class Downloads {

    @InjectParam
    private ValueObject singleton;

}