我正在尝试在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中所有方法的变量?
答案 0 :(得分:1)
这取决于您的用例和架构。如果每个用户都应该看到增量计数器的结果,那么你可以在你的代码中静态地声明它。
private static int counter = 5;
这只适用于您的应用程序中只有一个JVM,并且需要仔细考虑同步。
或者,您可以将其保留在外部(例如,数据库或文件)
答案 1 :(得分:1)
实现Singleton模式应该有效。您将在整个JVM中使用相同的实例。请注意:从不同的线程写入单例可能是一个满足的锁,这就是龙!
如果你想将一个对象约束到一个线程,还有ThreadLocal(我认为glassfish是每个请求一个线程,但不要引用我:)