Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Concurrency JavaEE——对多个用户使用相同的有状态对象_Concurrency_Jakarta Ee_Ejb_Stateful - Fatal编程技术网

Concurrency JavaEE——对多个用户使用相同的有状态对象

Concurrency JavaEE——对多个用户使用相同的有状态对象,concurrency,jakarta-ee,ejb,stateful,Concurrency,Jakarta Ee,Ejb,Stateful,尽管我已经在JavaSE工作了相当长的一段时间,但我在大约一个月前才开始使用Java开发EE&WebW,所以如果这个问题看起来有点愚蠢,请原谅 情况是这样的:我正在尝试编写一个基于JS的多人实时交互游戏(在本例中,让我们假设国际象棋,尽管它实际上与具体的游戏无关,可以是网球或w/ever)。客户端将通过JS调用与服务器交互,发送移动等。现在,虽然我可以从一个客户端接收移动并将其直接传递给另一个玩家,但不在服务器上维护游戏状态将意味着在服务器上放置一个巨大的签出,上面写着“用户JS脚本欢迎”(这是

尽管我已经在JavaSE工作了相当长的一段时间,但我在大约一个月前才开始使用Java开发EE&WebW,所以如果这个问题看起来有点愚蠢,请原谅

情况是这样的:我正在尝试编写一个基于JS的多人实时交互游戏(在本例中,让我们假设国际象棋,尽管它实际上与具体的游戏无关,可以是网球或w/ever)。客户端将通过JS调用与服务器交互,发送移动等。现在,虽然我可以从一个客户端接收移动并将其直接传递给另一个玩家,但不在服务器上维护游戏状态将意味着在服务器上放置一个巨大的签出,上面写着“用户JS脚本欢迎”(这是没有经验的--“hacked”我自己也有一大堆这样的东西)。这就引出了我的问题——如何在多个会话之间共享有状态对象?我想到的一个想法是单例存储有状态bean的Hashmap&然后每个会话都可以通过它的hash来检索bean,但我不知道这有多正确(对于这样一个相当常见的事情来说,这似乎相当复杂)。将其绑定到应用范围似乎也太过分了

另外,我知道这个对象需要并发管理等等,我只是不知道如何让它共享


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

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

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

您可以看到Seam业务流程管理教程

请注意,Seam在幕后处理其业务流程上下文如果您只想使用普通的JBoss BPM功能,您可以看到如何与JBoss集成


另请参见解决问题。通过ServletContext共享它,我最初认为它不起作用,因为FacesServlet是一个单独的容器,我认为它的smthn也像一个不同的容器。

对不起,我想我应该在一开始的帖子中提到它——我用的是Glassfish&希望保持这种方式,因为我很确定一定有办法在GF上完成…@TC1我明白了。一种方法是将有状态对象存储在应用程序上下文中(因为会话上下文是每个用户的),并为标识分配唯一的idgame@Mike这个问题已经两年多了,我甚至都不记得是关于什么的不过,我会看看周末我是否能得到一篇像样的评论,谢谢你指出这一点。