【问题标题】:Java EE -- using the same stateful object for several usersJava EE——为多个用户使用相同的有状态对象
【发布时间】:2011-04-15 12:37:03
【问题描述】:

尽管我在 Java SE 中已经有很长一段时间了,但我在大约一个月前才开始使用 Java 进行 EE 和 web,如果这个问题看起来有点幼稚,请见谅...

所以情况是这样的:我正在尝试编写一个基于 JS 的具有实时交互的多人游戏(我们在这个例子中说国际象棋,虽然它是什么特定的游戏并不重要,可能是网球或曾经)。客户端将通过 JS 调用与服务器交互,发送移动等。现在,虽然我可以从一个客户端接收移动并将其直接传递给另一个玩家,但不在服务器上维护游戏状态将意味着放置一个巨大的标志说“欢迎用户 JS 脚本”(这是没有经验的——我自己“入侵”了这种垃圾)。这给我带来了我的问题——我如何在几个会话之间共享一个有状态的对象?想到的一个想法是一个存储有状态bean的Hashmap的单例,然后每个会话都可以通过它的哈希来检索bean,但我不知道这是多么正确(对于这样一个相当普遍的事情来说,这似乎相当复杂)。将其绑定到应用程序范围似乎也有点过分......

附:我确实知道该对象需要并发管理等,但我似乎无法弄清楚如何共享它......

编辑:很抱歉我之前没有提到它——使用 Glassfish、EE6。

【问题讨论】:

    标签: concurrency jakarta-ee ejb stateful


    【解决方案1】:

    解决了。通过 ServletContext 共享它,我最初认为这不起作用,因为 FacesServlet 是一个单独的,我认为它也像一个不同的容器。

    【讨论】:

    • @Mike 这个问题已经有两年多了,甚至不记得它是关于什么的。 :) 看看我能不能在周末写一篇像样的文章,谢谢你指出来。
    【解决方案2】:

    您有一个根据 Seam 框架文档定义的业务流程场景,如下所示

    业务流程跨越与多个用户的多次交互,因此此状态在多个用户之间共享,但以明确定义的方式。当前任务决定了当前的业务流程实例,业务流程的生命周期是外部使用流程定义语言定义的,因此业务流程划分没有特殊的注解。

    Here你可以看一个Seam业务流程管理教程

    注意 Seam 在幕后使用JBoss BPM 来处理其业务流程上下文。 如果你只是想使用普通的JBoss BPM能力,你可以看here如何与JBoss集成

    另见JBoss BPM User guide

    【讨论】:

    • 抱歉,我想我应该在一开始就在帖子中提到它——我正在使用 Glassfish 并希望保持这种状态,因为我很确定一定有办法获得它也在 GF 上完成...
    • @TC1 我明白了。一种方法是将有状态的对象存储在应用程序上下文中(因为会话上下文是每个用户),并分配一个唯一的 ID 来标识游戏
    猜你喜欢
    • 1970-01-01
    • 2013-02-01
    • 2015-05-31
    • 1970-01-01
    • 1970-01-01
    • 2020-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多