![](/img/trans.png)
[英]In EJB conatainer, how to manage MDB, Will it create one thread for one MDB?
[英]Glassfish: Why are there 2 pools for the same MDB: one in ejb and one in war?
場景:
我有一個在GF 3.1.2上運行的java maven ear項目。 在該項目中,我想使用在單個ejb模塊中定義的MDB,因此我將其作為依賴項。 所以結構如下:
ProjectEAR:
- ProjectEJB
- ProjectWithProblematicMDB
- ProjectWAR
- dependency ProjectEJB with scope provided
實際問題:
當在jconsole的幫助下將其部署到glassfish時,我看到了ProblematicMDB的兩個不同的MDB池:一個在ejb模塊中,一個在war模塊中。 它們不是同一個池,因為我已經在ProjectEJB上設置了部署描述符以將池的大小限制為1,並且ProjectEJB中的池的大小不會大於1,但是ProjectWAR中的池的大小會增加。
對於ProjectEJB中稱為依賴項的模塊中的所有MDBS =,這會發生,而對於ProjectEJB中的“本地” MDB,則不會發生這種情況。 我必須提到一個事實,就是我不能從戰爭中排除ProjectWithProblematicMDB,因為我在那里使用了一些bean(而不是mdb)。
問題:
為什么同一MDB有兩個池? 在這種情況下,如何只有一個池?
我終於找到了原因和解決方案。
原因:
查看.ear檔案,我看到“本機” ejb(ProjectEJB)被放置在檔案的根目錄中,而“獨立” ejb(ProjectWithProblematicMDB)被包裝在lib文件夾中。 由於某些原因,glassfish也在.war模塊中創建了池。
解:
將ProjectWithProblematicMDB作為依賴項添加到ProjectEAR中,使Maven還將其打包到.ear歸檔文件的根目錄中,並且不再位於lib文件夾中。 以這種形式部署應用程序后,不再創建第二個池(來自.war的池)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.