情景:
我有一个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有两个池? 在这种情况下,如何只有一个池?
答案 0 :(得分:0)
我终于找到了原因和解决方案。
原因:
查看.ear档案,我看到了" native" ejb(ProjectEJB)被放置在档案的根目录中,并且"独立的" ejb(ProjectWithProblematicMDB)打包在lib文件夹中。由于某种原因,glassfish也在.war模块中创建了池。
解决方案:
将ProjectWithProblematicMDB作为依赖项添加到ProjectEAR,使得maven将它包装在.ear存档的根目录中,并且不再存在于lib文件夹中。在我以这种形式部署应用程序后,第二个池(来自.war的池)不再创建。