我有一个Java EE应用程序,其中模型经常从各种来源更新。此外,我有一个富客户端应用程序,它通过远程EJB触发一些操作,但也应该至少每秒显示一次模型更改。
将更改从Java EE应用程序发送到Java客户端应用程序的最简单/最佳选择是什么?直到现在我有以下选择:
答案 0 :(得分:3)
选项1 是最简单的,您可以使用异步EJB方法:
SERVER
@Asynchronous
public Future<String> getUpdatedModel() {
//here create blocking process until something interesting happen
return new AsyncResult<String>("model has changed!");
}
客户端
Future<String> updatedModel = bean.getUpdatedModel();
while(true){
String response = updatedModel.get();
//process response here
}
选项2 看起来像选项1,但你必须处理编组对象,所以不要打扰使用普通的servlet。
选项3 看起来很有趣,因为websockets将包含在Java EE7中(现在您可以使用servlet的opensource彗星实现)。在我看来,它不是为企业应用程序中的通信而设计的,但可能适用于您的用例。有很多JSON序列化器可用(例如gson),我在JS和java之间使用这种通信,并且工作正常。
选项4 打破了主要的Java EE原则(禁止打开自己的套接字),我不鼓励你使用它。
选项5 听取谢并使用JMS!如果您将使用JMS主题,则可以在特定事件发生时发送消息,并且所有连接的客户端将异步接收消息。它是解决此类问题的自然Java EE方法,如果是必需的,可以使用开箱即用的事务,消息重新传递和持久性。