【发布时间】:2011-11-11 02:45:42
【问题描述】:
在我的项目中,我将所有服务设计为无状态会话 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 收集这些生成的消息?我会从调度 bean 返回这个列表,然后发送消息。我的简单解决方案是通过一个列表来添加我的消息,但有没有更优雅的方法?
我有一个 XMPP 资源(名册http://www.igniterealtime.org/builds/smack/docs/latest/javadoc/org/jivesoftware/smack/Roster.html),我必须从所有 bean 访问它。我怎样才能做到这一点?将其存储到静态变量中并同步对它的访问听起来不太好。
【问题讨论】:
标签: java design-patterns ejb-3.0 stateless