【问题标题】:store variable in application scope java glassfish在应用程序范围内存储变量java glassfish
【发布时间】:2011-05-09 11:33:48
【问题描述】:

我正在尝试在 glassfish 网络服务的应用范围中存储一个数字

网络服务:

@WebService()
public class datacheck {
    //TODO 080 disable sql_log in the settings of hibernate
    //TODO 090 check todo's from webservice_1

    private int counter = 5;

当我请求计数器变量时,我得到 5 和

@WebMethod(operationName = "increaseCounter")
public Integer increaseCounter() {
    counter++;
    return counter;
}

返回 6 但 当我之后尝试这样做时,我再次得到 5:

@WebMethod(operationName = "getCounter")
public Integer getCounter() {
    return counter;
}

如何存储可用于 web 服务中所有方法的变量?

【问题讨论】:

    标签: java web-services variables scope glassfish-3


    【解决方案1】:

    这在一定程度上取决于您的用例和架构。如果每个用户都应该看到递增计数器的结果,那么您可以在代码中静态声明它。

    private static int counter = 5;
    

    这仅适用于您的应用程序中只有一个 JVM 并且需要仔细考虑同步问题。

    或者,您可以将其保存在外部(例如,保存到数据库或文件中)

    【讨论】:

    • 谢谢,这就是我想要的。我会试试这个并考虑可能的同步问题。
    【解决方案2】:

    实现Singleton 模式应该可以工作。您最终将在整个 JVM 中使用相同的实例。但请注意:从不同线程向单例写入可能是一个满足锁,这样就成了龙!

    还有ThreadLocal 如果你想将一个对象约束到一个线程(我认为 glassfish 是每个请求一个线程,但不要引用我:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-02-02
      • 2017-09-20
      • 1970-01-01
      • 1970-01-01
      • 2014-07-13
      • 2018-04-27
      • 1970-01-01
      相关资源
      最近更新 更多