如何使应用程序客户端从服务器推送的EJB获取事件和通知?

时间:2013-02-22 09:13:44

标签: java-ee ejb jms rmi application-client

使用Java EE和CDI将EJB注入应用程序客户端并让应用程序客户端与EJB通信非常简单。真的很简单。而且,这种沟通的流量是书籍和互联网谈论的全部内容。似乎没有人担心或者不需要让对话流动反过来。好吧,我希望我的EJB能够将事件和通知推送到源自服务器的应用程序客户端(使用Java Web Start启动应用程序客户端)。

当然,我可以让应用程序客户端不断地从服务器轮询数据,但是,我不认为这是一个好的设计。我的网络客户端正在使用ajax long pull(comet),它们对服务器的负担是否比我的应用程序客户端要小?

我看到它的方式,JMS是我唯一的选择。对于我将要介于两者之间的简单通信似乎有点矫枉过正,我知道的是,JAVA端点=)我尝试了RMI并将远程存根从应用程序客户端推送到EJB但是后来我得到了例外情况我的问题对象已经是某种远程存根。 HMM。

你有个主意吗?

修改

类似的讨论发生here。他们也认为除了使用JMS之外别无他法。我发现有点“混乱”,我的所有Java EE书籍或官方Oracle教程都没有解决这个问题。甚至没有小旁注。我是否只是在这个宇宙中试图做我想做的事情?

2 个答案:

答案 0 :(得分:0)

如果您不想打开自己的套接字,也不希望客户端启动服务器可以使用的Web服务,那么还有另一种JMS替代方法。即Java EE 7 WebSocket。它们是全双工的。

答案 1 :(得分:0)

这里也有同样的问题。

我自己提出了相同的解决方案 - 从服务器发送JMS并从客户端的MDB中侦听它,然后从客户端的缓存中提取它,以减少服务器负载。

我无法使用WebSocket。

<小时/> 此外,您可以尝试使用GifSocket。它非常简单并且与IE6兼容! C: https://github.com/videlalvaro/gifsockets