EJBs - 架构问题

时间:2012-01-04 09:10:59

标签: multithreading architecture singleton ejb-3.1 stateful

我正在编写一个新的EJB应用程序,它基本上应该从Web服务接收消息并基于此消息内容启动下载过程。此应用程序将在Glassfish 3.1.1上运行。

我的第一个想法是创建一个单例bean,它将从Web服务读取消息并使用有状态会话bean来启动和处理下载本身。我需要使用有状态bean,因为我需要在我的单例和有状态bean之间具有转换状态(下载状态等)

“问题”是如果我收到来自Web服务的几条消息我应该并行开始几次下载,每次下载当然都有自己的上下文。我应该如何实现这一点,好像我从我的单例中调用一个有状态会话bean我总是得到相同的bean,对吗?我看到的唯一解决方案是使用将从我的单例创建和启动的线程,但EJB规范不允许这样做......

感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

我认为你不想在这里使用有状态会话bean。有状态bean的要点是在会话范围内维护状态,这是与特定客户端的关系。在您的情况下,每个客户端没有一个下载(甚至还有任何客户端?),这意味着这不是一个合适的范围。

如果您只想要多个线程,请使用带有@Asynchronous方法的无状态bean。您可能必须使用对单例的回调来处理状态更新。

答案 1 :(得分:0)

为什么你需要一个单独的bean?只是有状态会话bean不够好吗?你想要同时下载,你想要有状态,那么为什么要使用单身?你能解释一下吗?