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

发布于 2024-11-06 09:44:39 字数 619 浏览 0 评论 0原文

我试图在 glassfish Web 服务的应用程序范围中存储一个数字

Web 服务:

@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 服务中所有方法的变量?

i'm trying to store a number in the applicationscope of a glassfish webservice

the 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;

when i request the counter variable i get 5
and

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

returns 6 but
when i try to do this afterwards i get 5 again:

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

how do i store a variable that is available for all methods in the webservice?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

蹲墙角沉默 2024-11-13 09:44:39

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

private static int counter = 5;

不过,只有当您的应用程序中只有一个 JVM 并且需要仔细考虑同步时,这才有效。

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

This depends on your use case and architecture to an extent. If every user should see the result of increment counter then yo could declare it statically in your code.

private static int counter = 5;

This will only work if you have only one JVM in your application though and would require careful thought about synchronization.

Alternatively you could persist it externally ( to a database or file for example )

梦屿孤独相伴 2024-11-13 09:44:39

实现 Singleton 模式应该可行。您最终将在整个 JVM 中得到相同的实例。但要注意:从不同线程写入单例可能是满足锁,这样就可能是龙!

如果您想限制反对一个线程(我认为 glassfish 是每个请求一个线程,但不要引用我:)

Implementing the Singleton pattern should work. you will end up with the same instance in the whole JVM. Beware though: writing to a singleton from different threads might be a contented lock, and that way be dragons!

There's also ThreadLocal if you want to constraint an object to one thread (i think glassfish is one thread per request but dont cite me :)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文