【发布时间】:2014-05-01 18:31:34
【问题描述】:
场景:
我有一个在 GF 3.1.2 上运行的 java maven ear 项目。在那个项目中,我想使用在单个 ejb 模块中定义的 MDB,因此我将其作为依赖项。 所以结构如下:
ProjectEAR:
- ProjectEJB
- ProjectWithProblematicMDB
- ProjectWAR
- dependency ProjectEJB with scope provided
实际问题:
当它部署到 glassfish 时,在 jconsole 的帮助下,我看到 ProblematicMDB 有两个不同的 MDB 池:一个在 ejb 模块中,一个在 war 模块中。 它们不是同一个池,因为我在 ProjectEJB 上设置了部署描述符以将池大小限制为 1,并且 ProjectEJB 中的池大小不会大于 1,但 ProjectWAR 中的池会增大。
这发生在 ProjectEJB 中称为依赖项的模块中的所有 MDBS=s 上,但不会发生在 ProjectEJB 中的“本机”MDB 上。 我必须提到一个事实,即我不能将 ProjectWithProblematicMDB 排除在战争之外,因为我在那里使用了一些 bean(不是 mdb)。
问题:
为什么同一个 MDB 有两个池? 在这种情况下我怎么能只有一个池?
【问题讨论】:
-
看起来像是 EE6 的一个副作用,允许在 WAR 中使用 EJB(我已经注意到,虽然从标准中不清楚这是否允许/需要,但 Glassfish 3 选择了打包的 MDB在 WAR 中)——我知道没有办法抑制这种行为,所以拆分你的 EJB 项目可能是最好的解决方案。
-
感谢您的快速响应。根据您的建议,我已经拆分了我的项目,以便我的 WAR 中不存在任何 bean(只是为了测试)。所以现在我有战争只引用 ProjectEJB 作为提供的依赖项,而 ProjectWithProblematicMDB 作为排除项。但是,这不会阻止 WAR 中的池被创建和使用。非常感谢有关如何在不使用 Glassfish 创建两个池的情况下引用外部 EJB 模块的任何其他想法。 @fvu
-
这很奇怪 - 你能告诉我你在 jconsole 中查看的是什么项目吗?另外,imqadmin 是否确认您在 jconsole 中看到的队列中的活跃消费者数量总和?
-
在 MBeans 选项卡下:amx -> bean-pool-mon -> /mon/server-mon[server] -> ProjectEAR/ProjectEJB.jar/RogueMDB/bean-pool -> numbeansinpool 和amx -> bean-pool-mon -> /mon/server-mon[server] -> ProjectEAR/ProjectWAR.war/RogueMDB/bean-pool -> numbeansinpool。使用 imqcmd 查询队列仅返回 2 个活动消费者,但就我一直在使用 glassfish 而言,使用 mdb 时,在查询活动消费者的目的地时看不到实际的 mdb 数量@fvu
标签: java maven jakarta-ee glassfish message-driven-bean