【问题标题】:Java Jersey REST Webservice: Not possible to create a singleton bean over all cluster nodesJava Jersey REST Webservice:无法在所有集群节点上创建单例 bean
【发布时间】:2017-12-09 00:35:10
【问题描述】:

我想在我的 Jersey 1.19.1 网络服务中有一个单例对象,它是我所有 Glassfish 节点上的同一个实例。这是我当前的实现:

@Singleton
@ApplicationScoped
@Stateless
public class ValueObject {

    public long downloads = 0;

}

@Path("downloads")
public class Downloads {

    @InjectParam
    private ValueObject singleton;

}

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

我的目标是始终获得 1。我该如何实现?

不使用@ApplicationScoped 或使用@Stateful 而不是@Stateless 会导致相同的结果。

问候

约翰

【问题讨论】:

    标签: web-services jersey glassfish singleton cluster-computing


    【解决方案1】:

    这对于 GlassFish 是不可能的。正如in this StackOverflow answer 所讨论的那样,根据 EJB 3.1 规范,EJB @Singleton 注释将为每个 JVM 提供一个实例:

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

    答案还提到 WildFly 10 有一种机制来支持这一点,但这是一种专有解决方案,在 GlassFish 中没有。

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

    【讨论】:

      猜你喜欢
      • 2020-03-19
      • 2013-04-24
      • 2020-09-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多