JMS消息驱动Bean工作器同步

1 java jms jboss-mdb

我们刚刚开始构建我们的JMS体系结构并具有以下基本设置:

  1. GLassfish v2.1
  2. MDB通过TopicConnectionFactory监听主题(全部在本地服务器上)

现在,MDB在新消息到达时生成一个工作线程,即使我们按顺序传递消息,我们也需要一个同步机制,以便线程在同时处理请求之前检查某个条件.

这些线程有没有办法共享数据?或者我们可以用于同步的其他机制(数据库表/行锁除外)吗?

提前致谢.


为了澄清,我不是在创建自己的线程.正如每个人都正确指出的那样,容器就是为我做的.让我用一个例子帮助解释我的困境.

-Message A到达t = 0,'创建'数据id 1

- 消息B到达t = 0.1,其'更新'数据id 1

现在假设容器产生2个工人来处理A和B,并且"创建"数据比花费更多时间需要更多时间,更新将更早地处理并且不起作用.

为了更清楚,

- 处理消息B时,我会在t = 1时查找数据id 1(找不到它,因此没有做任何事情就完成了).

- 在t = 2处理消息A时将创建数据ID 1.

Joh*_*n M 6

小心警报!我是那种读取技术实际规格的人.

阅读EJB规范 3.0版,第21.1.2节(编程限制)不允许在代码中使用线程.这是语言和理由......

企业bean不得尝试管理线程.企业bean不得尝试启动,停止,暂停或恢复线程,或更改线程的优先级或名称.企业bean不得尝试管理线程组.

这些函数是为EJB容器保留的.允许企业bean管理线程会降低容器正确管理运行时环境的能力.

因此,如果你按照自己的意思行事,那么EJB警察会在半夜敲你的门然后把你带走.或者你的应用可能会出现故障,当你抱怨时,供应商会笑.或者一切都不会发生.

但是,正如duffymo所说,为什么会这样呢?如果您想要许多线程提供的可伸缩性,您可以为MDB配置吗?EJB的重点是为你处理类似的东西.