在应用程序范围java glassfish中存储变量

时间:2011-05-09 11:33:49

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

我正在尝试在glassfish webservice的应用程序中存储一个数字

网络服务:

@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;
}

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

2 个答案:

答案 0 :(得分:1)

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

private static int counter = 5;

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

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

答案 1 :(得分:1)

实现Singleton模式应该有效。您将在整个JVM中使用相同的实例。请注意:从不同的线程写入单例可能是一个满足的锁,这就是龙!

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