加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

如何从Java EE应用程序发送事件(推送通知)?

发布时间:2020-12-14 19:35:23 所属栏目:Java 来源:网络整理
导读:我有一个 Java EE应用程序,其中模型从各种来源非常频繁地更新.此外,我有一个富客户端应用程序,它通过远程EJB触发一些操作,但也应该至少每秒显示一次模型更改. 将更改从Java EE应用程序发送到Java客户端应用程序的最简单/最佳选择是什么?直到现在我有以下选
我有一个 Java EE应用程序,其中模型从各种来源非常频繁地更新.此外,我有一个富客户端应用程序,它通过远程EJB触发一些操作,但也应该至少每秒显示一次模型更改.

将更改从Java EE应用程序发送到Java客户端应用程序的最简单/最佳选择是什么?直到现在我有以下选择:

>每秒从客户端轮询一个远程EJB
>轮询一个servlet(最好使用json / xml而不是java对象序列化吗?还有其他的序列化吗?)
> websockets(可以在这里发送Java对象吗?或者必须将结果序列化为Json,例如?)
> tcp套接字连接(服务器将提供客户端在启动时连接的端口.模型更改通过标准对象序列化发送.这是否在Java EE应用程序中“允许”?)

解决方法

选项1是最简单的,您可以使用异步EJB方法:

服务器

@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听Xie并使用JMS!如果您将使用JMS主题,则可以在特定事件发生时发送消息,并且所有连接的客户端将异步接收消息.它是解决此类问题的自然Java EE方式,具有开箱即用的事务,消息重新传递和持久性(如果有的话).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读