【发布时间】:2017-03-30 07:30:28
【问题描述】:
我有 2 个应用程序。一个“主”,另一个带有远程 EJB。第一个应用程序在第二个应用程序中调用远程 EJB。
现在我想实现 Observable 模式。但它似乎不适用于跨应用程序。
所以我希望我的 Observable 在第二个应用程序中,而我的 Observers 在第一个应用程序中。当我尝试它时,它似乎不起作用。只有当我在同一个应用程序中创建 Observable 和 Observers 时它才有效。
我有另一个解决方案,但我认为它很脏。我可以在第二个应用程序中使用 MDB,并在主题上发布一条消息,然后在第一个应用程序中使用这些消息。但话说回来,这似乎有点脏。
我在 Payara 4.1.1.171 服务器上使用 JEE7。
编辑: 因为我发现触发事件不会退出 EAR 文件,所以我现在使用 MDB 方法。但这仍然行不通。 更多信息,这是EAR文件的包结构。
my-application.ear
+--- common-ejb.jar (EJB)
| +--- MessageDrivenBean.java (Triggers the event)
+--- my-application.jar (EJB)
+--- my-application.war (WEB)
+--- WEB-INF
+--- lib
| +--- common-web.jar (Resources WEB jar)
| +--- SessionBean1 to receive the events
+--- classes
+--- SessionBean2 to receive the events
如您所见,有 2 个会话 bean 来接收事件,但 2 个实际上都没有接收它们。
【问题讨论】:
-
不太了解您想要实现的目标,但您是否尝试过 MBean 世界?
-
以这种方式使用JMS是一个完全合理的解决方案。如果您确保您的事件是可序列化的,那么您可以想象使用 JMS 队列,并使用它在应用程序之间构建“事件桥”。
-
使用 JMS 确实可以部分工作。但是现在我让 MDB 处理“触发消息”并希望触发所有活动的会话 bean(忽略它们的会话)。但由于某种原因,我需要在 MDB 和 SessionScoped bean 之间使用 ApplicationScoped bean。
-
难道没有一个选项我不需要使用 ApplicationScoped bean,而只需在 MDB 中触发一个触发器并在所有 bean 中监听这些触发器,而忽略它们的状态。
-
您的会话 bean 究竟是如何注释的?
标签: jakarta-ee glassfish ejb observable payara