Glassfish:为什么同一个MDB有2个池:一个在ejb,一个在战争中?

时间:2014-03-24 11:57:03

标签: java maven java-ee glassfish message-driven-bean

情景:

我有一个java maven ear项目,我在GF 3.1.2上运行。在该项目中,我想使用在单个ejb模块中定义的MDB,因此我将其作为依赖项。 所以结构如下:

ProjectEAR:
   - ProjectEJB
        - ProjectWithProblematicMDB
   - ProjectWAR
        - dependency ProjectEJB with scope provided

实际问题:

当它被部署到glassfish时,在jconsole的帮助下,我看到两个不同的MDB池用于ProblematicMDB:一个在ejb模块中,另一个在war模块中。 它们不是同一个池,因为我在ProjectEJB上设置了部署描述符以将池大小限制为1,并且ProjectEJB中池的大小不会大于1,但ProjectWAR中的池大小会增大。

在ProjectEJB中作为依赖项引用的模块中,所有MDBS = s都会发生这种情况,但不会发生在" native"来自ProjectEJB的MDB。 我必须提到这样一个事实:我不能从战争中排除ProjectWithProblematicMDB,因为我在那里使用了一些bean(而不是mdb)。

问题(S):

为什么同一个MDB有两个池? 在这种情况下,如何只有一个池?

1 个答案:

答案 0 :(得分:0)

我终于找到了原因和解决方案。

原因:

查看.ear档案,我看到了" native" ejb(ProjectEJB)被放置在档案的根目录中,并且"独立的" ejb(ProjectWithProblematicMDB)打包在lib文件夹中。由于某种原因,glassfish也在.war模块中创建了池。

解决方案:

将ProjectWithProblematicMDB作为依赖项添加到ProjectEAR,使得maven将它包装在.ear存档的根目录中,并且不再存在于lib文件夹中。在我以这种形式部署应用程序后,第二个池(来自.war的池)不再创建。