Glassfish 3.1.2 - 了解EJB(MDB)线程池

时间:2012-12-06 18:31:36

标签: ejb-3.0 threadpool glassfish-3

我有一个MDB接收处理批处理的消息(BatchProcessor)。 BatchProcessor不是一次处理批处理中的一个项目,而是创建一个BatchItemProcessor,使用Semaphore将允许一次同时处理最大数量的项目。 BatchItemProcessors是无状态会话bean,由Glassfish容器注入。

每当我们完成处理具有其状态的批处理项目时,我们需要将SOAP消息发送到另一个服务。 BatchItemProcessor创建/发送消息到JMS主题。我们有另一个MDB,StatusSender,它监听这些消息并创建/发送SOAP消息到其他服务。

问题是在BatchProcessor调度了所有批处理项之前,不会发送SOAP消息。

查看日志,正在EJB线程池中创建BatchItemProcessors(例如,来自日志的名称:__ejb-thread-pool10),并创建BatchProccessor和StatusSender,我假设是Glassfish MDB线程池(例如,日志中的名称:p: thread-pool-1; w: 39)。

我假设(因为我无法找到确认/拒绝的文档)p: thread-pool-1;标识池和w: 39实际线程。如果这是真的,则BatchProcessor使用与StatusSender完全不同的线程,因为线程标识符不同(一个用于BatchProcess,一个用于StatusSender)。

这意味着我真的很困惑为什么BatchProcessor onMessage必须在可以执行StatusSender onMessage调用之前完成。

查看我的Glassfish EJB容器/ MDB设置配置(default-config和server-config)我有以下内容(我认为是默认设置):

  • 初始和最小池大小= 0
  • 最大泳池尺寸= 32
  • 游泳池调整数量= 8
  • 空闲超时= 600

如果有人打电话帮我解决这个问题,我们将不胜感激。此外,任何有关良好资源(书籍,网站等)的重新推荐也将受到赞赏。

更新

我的问题与一些导致StatusSender onMessage执行延迟的代码逻辑有关。但是,我仍然感谢任何关于Glassfish和线程/池的良好参考的建议。

0 个答案:

没有答案