如何让应用程序客户端从 EJB 获取事件和通知,由服务器推送?
Posted
技术标签:
【中文标题】如何让应用程序客户端从 EJB 获取事件和通知,由服务器推送?【英文标题】:How to make an application client get events and notifications from an EJB, pushed by the server? 【发布时间】:2013-02-07 20:31:56 【问题描述】:使用 Java EE 和 CDI 将 EJB 注入应用程序客户端并让应用程序客户端与 EJB 对话非常简单。真的很简单。而且,这种交流是书籍和互联网的全部内容。似乎没有人担心或需要让对话反过来进行。好吧,我希望我的 EJB 能够将事件和通知推送到源自服务器的应用程序客户端(应用程序客户端使用 Java Web Start 启动)。
当然,我可以让应用程序客户端不断地从服务器轮询数据,但是,我不认为这是一个好的设计。我的 Web 客户端正在使用 ajax 长拉(彗星),它们对服务器的负担真的应该比我的应用程序客户端更小吗?
在我看来,JMS 是我唯一的选择。对于我将在两者之间进行的简单通信来说,这似乎有点过头了,我所知道的是,JAVA 端点 =) 我尝试了 RMI 并将远程存根从应用程序客户端推送到 EJB,但后来我得到了异常告诉我有问题的对象已经是某种远程存根。嗯。
你有想法吗?
编辑
类似的讨论发生在here。他们也认为除了使用 JMS 之外别无他法。我发现我的所有 Java EE 书籍或官方 Oracle 教程都没有解决这个问题,这有点“令人困惑”。甚至在一个小的旁注中也没有。在这个宇宙中,只有我一个人在努力做我想做的事吗?
【问题讨论】:
【参考方案1】:如果您不想打开自己的套接字,也不希望客户端启动服务器可以使用的 Web 服务,那么还有另一种 JMS 替代方案。即 Java EE 7WebSocket。它们是全双工的。
【讨论】:
【参考方案2】:同样的问题。
我自己提出了相同的解决方案 - 从服务器发送 JMS 并从客户端的 MDB 中监听它,然后从客户端的缓存中提取它,以减少服务器负载。
而且我不能使用 WebSocket。
另外,您可以尝试使用 GifSocket。它非常简单并且与 IE6 兼容! C: https://github.com/videlalvaro/gifsockets
【讨论】:
以上是关于如何让应用程序客户端从 EJB 获取事件和通知,由服务器推送?的主要内容,如果未能解决你的问题,请参考以下文章
无法在 JBoss 的上下文中从客户端应用程序获取远程 ejb