2010-01-02 104 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元素。