2011-10-15 82 views
2

我正在創建一個基於MDB和支持這些MDB的類的項目。我還需要使用ServletContextListener與MDB Universe進行交互(詳情如下),這意味着我需要一個WAR項目。在EAR項目中從WAR項目的EJB項目中訪問類?

問題:ServletContextListener如何訪問EJB項目中的類?

項目組織(標準的Eclipse EAR項目):

EAR項目 中有 EJB項目 有一些MDB的和大量的MDB的 WAR項目 使用其他類都有一定的ServletContextListener罐子。

我爲什麼要這樣做?當項目啓動時,我需要啓動一個線程。這個線程需要訪問MDB所使用的一堆類。

注意:我明白我可以將這些常用類放入EAR項目中的jar中。如果有一種方法可以做到這一點,例如單獨的Eclipse「Debug As」 - >「On Server」,那麼這將構成一個很好的解決方案。無論提供什麼解決方案,都需要在服務器上支持該調試,並逐步調試到所有類中。注意2:我可以告訴Eclipse WAR項目依賴於EJB項目,它刪除了Eclipse錯誤標誌,但eclipse顯示了一個警告,表明這個依賴項不會存在於已部署的項目中,這意味着我的類可以從WAR將無法在運行時實例化。

回答

1

對於Java EE服務器上的「標準」部署(意味着:使用默認的類加載器策略),WAR類「可以看到」封閉EAR中的所有內容,並且EAR類優先。

我可以告訴Eclipse的WAR項目是依賴於EJB項目

是不是在你身邊做它的其他方式?這是EAR項目需要在項目的「屬性 - >部署程序集」部分中包含WAR項目。

想到的另一種可能性是,您可能試圖在非Java EE服務器上部署,如Tomcat,它不支持EAR。這可能是Eclipse爲什麼說部署項目中不存在依賴關係的原因。

+0

我讀過一個與你同意的網頁 - 在我發佈之前。在Glassfish(我的目標)上,它有可能像你說的那樣工作。但是,Eclipse顯示一個錯誤。我在Eclipse中創建了我的項目,如下所示:(1)創建EAR項目。 (2)創建EJB項目作爲EAR的成員。 (3)創建WAR項目作爲EAR的成員。 WAR項目中的類無法在EJB項目中看到一個類 - 每個Eclipse錯誤標誌。我通過創建一個「Utility」(庫)項目作爲同一個EAR的一部分來解決這個問題,並將所有的類移動到它,除了MDB和ServletContextListener。這似乎矯枉過正。 – Mesocyclone