在我的项目中,我将所有服务设计为无状态会话bean。在工作流程期间,将创建新数据,并将其报告给客户端。我只想在成功提交事务时发送此消息。
我注册了一个ServletContextListener,它调度我的xmpp数据包(smack库)。当我收到一个数据包时,我找到了我的调度有状态会话bean并开始处理请求。
public void processPacket(Packet packet) {
try{
if(packet instanceof RawRequest){
DispatchIQService service = Core.lookup(DispatchIQService.class);
service.process(connection, (RawRequest)packet);
// sending of the messages should happen here, because transaction completed successful.
}else{
log.debug("Packet ignored: " + packet.toXML());
}
}catch(Exception e){
log.error(e, e);
}
}
如何在多个bean的工作流程中收集生成的消息?我将从dispatch bean返回此列表,然后发送消息。我的简单解决方案是在我添加消息的列表中进行路由,但是有更优雅的方式吗?
我有一个XMPP资源(名册http://www.igniterealtime.org/builds/smack/docs/latest/javadoc/org/jivesoftware/smack/Roster.html),我必须从所有bean访问。我怎么能做到这一点?将它存储到静态变量中并同步对它的访问听起来不太好。
答案 0 :(得分:2)
马库斯,我不是J2EE的大师,但出于你的目的,我建议你看一下JMS。这将有助于您实现基于消息的方法。 至于我,我曾经使用过RabbitMQ系统。这是非常棒的经验,但运行系统需要额外的软件。