2012-01-04 65 views
0

我目前正在编写一个新的EJB应用程序,它基本上应该接收来自Web服务的消息并基于此消息内容启动下载过程。这个应用程序将运行在Glassfish 3.1.1上。EJBs - 架构问题

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

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

感谢您的帮助!

回答

0

为什么你需要一个singleton bean在这里?仅有状态会话bean不够好?你想同时下载,你想要有状态,那么为什么要使用单身?你能多解释一下吗?

+0

嗨马克!单身人士将成为应用程序的“入口点”,负责管理所有下载内容,即检查每个bean的下载状态,通过Web服务发送这些状态,中断/取消所有下载等。它是否回答您的问题?你看到另一种方式继续?问候 – Mehdi 2012-01-04 09:25:42

+0

是的,我明白了,但它仍然不能说服我在这里需要一个单身人士。我的意思是,让SFSB管理单个客户端的互连,下载/取消/获取状态等。你为什么需要“集中”这个? – 2012-01-04 09:27:58

+0

因为(在我看来)我需要集中。因为例如取消/中断下载等命令来自WS。所以我需要能够识别我需要中断/取消哪个SFSB ...更清楚了吗? – Mehdi 2012-01-04 09:46:37

1

我不认为你想要一个有状态的会话bean在这里。有状态bean的意义在于它保持了会话范围内的状态,这与特定的客户端有关系。在你的情况下,每个客户端没有一个下载(是否有客户?),这意味着这不是一个合适的范围。

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