2010-07-26 55 views
7

我有一個JavaEE6應用程序,它由Web東西和EJB組成,並且僅部署爲WAR(使用EJB3.1)。構建基於Maven。我剛剛閱讀了有關在Java EE 6 here中訂購模塊初始化的新可能性,這也是我的應用程序所需要的。此外,我想有一個選項來定義XML中的一些EJB屬性。部署爲WAR-only的EJB 3.1應用程序:那麼ejb-jar.xml呢?

由於該示例作爲EAR項目進行部署,因此在application.xml中定義了該順序。但是在WAR部署的項目中,沒有application.xml。現在我想知道我可以在哪裏定義這些信息?或者是否可以在WAR部署的應用程序中以某種方式使用application.xml?

編輯:

哎呀我沒讀過模塊訂單例子吧,在第一時刻,我認爲這是對以何種順序在我的應用程序的EJB是加載。當然,我的WAR-app中只有一個模塊,所以排序沒有意義。

好的,但就我而言,還有一個大問題仍然存在(也改變了問題標題以反映更改):那麼ejb-jar.xml呢?我能以某種方式在XML中定義關於我的EJB的東西(因爲它對某些設置有用,以避免重新編譯)?

+0

注意到你的編輯,很好的問題btw。我已經更新了我的答案。 – 2010-07-26 18:30:01

回答

9

簡而言之,基於WAR的部署是不可能的。

Java EE 6的模塊初始化功能用於按特定順序初始化應用程序的不同模塊。當你有一個基於WAR的EJB應用程序時,你的EJB和Web應用程序就不再有單獨的模塊。只有一個模塊 - 基於WAR的部署中的Web應用程序模塊

因此,如果你要實現相同的特徵模塊初始化順序,在Java EE 6提供的,你必須做以下任一操作:

  • 獨立的EJB到一個單獨的模塊並使用基於EAR的部署。
  • 這或多或少都是欺騙性的,就像在Java EE 5中所做的那樣,你會想避免它。您可能希望在邏輯中編寫代碼,以確保在創建單身EJB之前(假設這是由於在您的應用程序中使用單例),然後纔將其用於代碼。在部署時

位置在WAR文件

The EJB 3.1 specification(包裝上的一章中)的ejb-jar.xml中的地址的ejb-jar.xml文件的位置的問題WAR:

在.war文件,部署描述符 存儲名爲 WEB-INF/ejb-jar.xml中。

PS:我還沒有嘗試過這種部署方式。因人而異。

+0

感謝您的信息!只是改變了我的問題,看我的編輯。 – ifischer 2010-07-26 16:50:45

+3

請注意,您可以將EJB打包到EJB-JAR中並將它們部署在WAR中。 – 2010-07-26 22:49:45

5

有關.wars和ejb-jar.xml處理中的EJB的注意事項。如前所述,位置是WEB-INF/ejb-jar.xml,但也要注意,即使在WEB-INF/lib /內部有ejbs jar,也可以通過標準規則檢查位置,即只有任何META-INF/ejb-jar.xml文件被忽略。

專家組相當分裂,因此如果您有一個偏好,那麼將反饋發送到EJB 3.1專家組列表以供EJB.next考慮也不遲。

我的投票仍然允許個別罐子有META-INF/ejb-jar.xml文件,就像這些罐子現在可以有persistence.xmls,beans.xmls,網頁片段等一樣。對我來說更大的問題是它與支持EAR風格類路徑的嵌入式EJB容器API不兼容,它允許多個可能包含META-INF/ejb-jar.xml文件的jar /模塊。結果是,如果您使用嵌入式API測試由單個.war文件組成的多jar ejb應用程序,那麼您將面臨將任何ejb-jar.xml數據合併到單個ejb中的任務webapp的-jar.xml。爲用戶排序痛苦。