【问题标题】:Server push message with JMS messaging to a JSF web application服务器将带有 JMS 消息传递的消息推送到 JSF Web 应用程序
【发布时间】:2012-03-04 22:26:21
【问题描述】:

我正在编写两个模拟发布者/订阅者模式的 Web 应用程序。客户端通过后端的 EJB bean 将来自 JSF Web 应用程序的订阅添加到数据库中。然后,另一个客户端在后端使用相同的 EJB bean 从另一个 JSF Web 应用程序发布消息。这个 EJB bean 需要通知所有匹配发布消息的订阅者。我正在寻找一种通过 JMS 之类的方式通知所有订阅者的方法。我是否使用 JMS 都没有关系,但我必须使用 JSF 并且通知必须是异步的。

我正在寻找类似Push technologyComet 的东西,我在之前的post 中找到了一些东西。此示例使用与 JMS 和 JSF 兼容的 RichFaces,但它没有显示如何接收消息或使用 JMS。我还发现了这个post,它解释了如何不将 JMS 与 RichFaces 一起使用,但就像我说我想使用 JMS 一样,也许这是我从 EJB bean 发送/接收消息的唯一解决方案。我发现的所有解决方案都只使用 JSF 托管 bean,但是如果您必须从 EJB bean 接收通知怎么办?

【问题讨论】:

  • 我查看了您的网站,但找不到示例。在开始工作之前,我想对其进行评估并找到最佳解决方案。我的截止日期很短。

标签: jsf-2 glassfish jms java-ee-6


【解决方案1】:

您可以为此使用 JMS,但广播消息您必须自己处理,因此最终是否将 JMS 用于此场景并不重要,只是发送/处理已发布消息的部分会有所不同。

示例:客户端使用 JSF 应用程序将消息转发到 JMS 队列/主题。另一个 JSF 应用程序(JMS 客户端)将使用 MDB 接收消息,对其进行解析并从数据库中检索收件人列表并将消息分配给每个人,再次使用数据库。

正如您所见,一切都发生在简单的 db 数据处理中,并且没有必要使用 JMS,您可以使用任何 EJB 或 Servlet 来为您处理消息。

在应该接收消息的 JSF 应用程序上,您可以使用 AJAX 机制轮询数据库以获取分配给特定用户的新消息。

【讨论】:

  • 我正在考虑这个解决方案,但不幸的是我无法使用它。这个项目是我教授的任务。我向他解释过,但他说我需要保持通知异步,否则发布/订阅模式将失去其身份。
【解决方案2】:

我认为WebSockets 是您正在寻找的技术。看看PrimePush PrimeFaces 中的实现。

您可以将它与 SEAM-JSF 结合使用,以通过支持 bean 中的 CDI 注释访问 JMS 资源。

【讨论】:

  • 我已经在使用 PrimeFaces 并且查看了 PrimePush,但在该示例中,您只能从托管 bean 推送。我需要接收从 EJB bean 发布的消息。
  • 什么是“后备豆”?
  • 哦,afaik backing beanmanaged bean 是同义词。例如。 @Named@ManagedBean。什么是EJB Bean? ;-) ...您可以使用@ManagedBean @Stateless
  • JSF ManagedBean 或支持 bean 应该不同于 JEE 容器中的普通 bean(称为 Enterprise bean 或 EJB bean)。后者在容器内,第一个在 http 会话内。无论如何,您能指出一个用于访问 JMS 队列的 CDI 注释示例吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-16
  • 2010-12-20
  • 2019-01-21
  • 1970-01-01
  • 2018-12-20
相关资源
最近更新 更多