2010-01-02 95 views
0

我想設置我的企業應用程序(捆綁爲EAR)的Web應用程序部分的上下文根。我添加了一個「的application.xml」文件,該文件是這樣的:Java EE 6中的應用程序部署描述符

<application> 
    <module> 
     <web> 
      <web-uri>SearchResulter-war.war</web-uri> 
      <context-root>/searcharoo</context-root> 
     </web> 
    </module> 
</application> 

的事情是,我的EJB項目也是如此。看起來以前的Java EE 5/6魔術並不需要我包含「application.xml」文件,而這一切都很好,直到我想更改上下文根。就定義你自己的去向而言,它是一個全有或全無的主張?換句話說,我必須在相關信息中添加一個<ejb>元素嗎?

回答

1

我不能到現場jcp.org檢查JSR316的最終草案......裏面應該有明確的答案......

我最好的建議是創建一個「完整」的application.xml ,但是。

+1

我認爲你是對的。根據規範: 「部署工具必須首先從應用程序.ear文件(META-INF/application.xml)中讀取Java EE應用程序部署描述符 。如果部署描述符 存在,它將完全指定應用程序中包含的模塊。如果不存在部署描述符,則部署工具使用以下規則來確定應用程序中包含的模塊:「 我應該先看看那個,我想是的:謝謝你的幫助 – Rintoul 2010-01-02 07:40:29

0

根據JSR316,必須在META-INF/application.xml中指定上下文根,否則web模塊將獲取剝離了.war擴展名的部署包的名稱。

+0

如果你決定跳過application.xml,你可以通過應用服務器特定的配置來修改上下文根名,然後你可以在你的WAR包中使用EJB 3.1和其他JEE6的好處。 /sun-web.xml。 – jarekrozanski 2010-01-02 11:27:17

+0

由於我使用的是Glassfish v3,我嘗試了jarekronzanski的建議,但似乎並不奏效。我使用NetBeans作爲IDE,並通過某種機制啓動應用程序不完全理解,所以有可能出現錯誤... – Rintoul 2010-01-02 19:01:31

+0

你可以嘗試導出Ne從WAR包tBeans並將其部署到IDE之外? 檢查您的WEB-INF/sun-web.xml中是否可以找到條目: /MY_NEW_CONTEXT_NAME < ! - ...剩下的xml - > jarekrozanski 2010-01-02 21:40:18

4

引述部分8.5.2部署Java EE規範V6的J2EE應用程序

部署工具必須首先閱讀從應用程序.ear文件中的Java EE應用程序部署描述符(META -INF/application.xml中)。如果部署描述符存在,則完全指定包含在應用程序中的模塊。如果不存在部署描述符,則部署工具使用以下規則來確定應用程序中包含的模塊。

換句話說,當提供application.xml時,您確實需要在其中包含所有模塊。

0

首先,您不必使用application.xml。由於您有一個war文件,因此可以使用特定於容器的部署描述符來定義上下文根。例如,在WebLogic Server Administration Console doc,它讀取,

「你可以在被打包爲一個.war 歸檔或展開的.war目錄的Web應用程序的weblogic.xml 部署描述符指定上下文根元素。如果您將Web應用程序 作爲企業應用程序的一部分打包(.ear歸檔或分解.ear), 指定application.xml中的上下文根。請注意, application.xml context-root先於weblogic。 xml 值。「

或者,在glassfish-web.xml(或sun-web.xml)中爲Glassfish的情況。

如果您決定使用標準application.xml,那麼容器將從此描述符中獲取模塊的完整列表。換句話說,application.xml先於模塊級描述符。所以是的,你需要在你的application.xml中包含你的ejb元素。