【发布时间】:2012-01-12 14:09:13
【问题描述】:
我在 RF3.2 分支中使用了 a4j:push,但使用 RF4.1 似乎有点复杂。尤其是对 JMS 系统的需求是需要研究的东西。在学习时,我读到不再需要 JMS,但我找不到任何演示。我在夜间构建中找到了操作方法和演示代码,但它们似乎都使用 JMS。
没有 JMS 似乎要简单得多:)
有什么建议吗?
谢谢, 米洛·范德泽
【问题讨论】:
标签: richfaces
我在 RF3.2 分支中使用了 a4j:push,但使用 RF4.1 似乎有点复杂。尤其是对 JMS 系统的需求是需要研究的东西。在学习时,我读到不再需要 JMS,但我找不到任何演示。我在夜间构建中找到了操作方法和演示代码,但它们似乎都使用 JMS。
没有 JMS 似乎要简单得多:)
有什么建议吗?
谢谢, 米洛·范德泽
【问题讨论】:
标签: richfaces
来自 Richfaces 4.1 Component Reference:
3.8.6。在没有 JMS 的情况下使用 Push
由于在某些情况下可能不需要 JMS 耦合,因此 RichFaces 提供关闭 JMS 集成的开关:
<context-param> <param-name>org.richfaces.push.jms.disable</param-name> <param-value>true</param-value> </context-param>
只需将上述上下文参数添加到您的 web.xml 中即可使用不带 JMS 的推送组件。
【讨论】:
再次尝试 RichFaces 4.1 组件参考, 有两个使用示例(TopicsContext 和 CDI):
【讨论】:
我知道这篇文章是一篇旧文章,但我可以看到这个帖子是该主题的热门搜索之一。
如果您使用的是 Servlet 3.0,则无需更改 web.xml。
首先,您需要使用正确的版本安装大气。我从事的项目是使用Richfaces 4.3.6.Final。兼容的大气版本为1.0.17。
<dependency>
<groupId>org.atmosphere</groupId>
<artifactId>atmosphere-runtime</artifactId>
<version>1.0.17</version>
</dependency>
然后您可以开始使用TopicContext 从托管bean 向订阅者发送通知。以下是我将数据发布到TopicContext 的方式。
TopicKey topicKey = new TopicKey("sometopic");
TopicsContext topicsContext = TopicsContext.lookup();
try {
topicsContext.publish(topicKey, "somenewdata");
} catch (MessageException e) {
e.printStackTrace();
}
那么你只需要在订阅页面中包含推送组件即可。
<a4j:push address="sometopic">
<a4j:ajax event="dataavailable" oncomplete="someJsMethodToExecuteAfterGettingNotified();"/>
</a4j:push>
一旦设置成功,您只需在托管 bean 中的任意位置调用TopicContext#publish,这样订阅该主题的页面就会自动收到通知。
【讨论】: