Java EE 6中的应用程序部署描述符

时间:2010-01-02 06:37:14

标签: java java-ee

我想设置我的企业应用程序的Web应用程序部分的上下文根(捆绑为EAR)。我添加了一个“application.xml”文件,如下所示:

<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”文件,这一切都很好,直到我想要更改context-root。就定义自己的命运而言,它是一个全有或全无的命题吗?换句话说,我必须添加一个带有相关信息的<ejb>元素吗?

4 个答案:

答案 0 :(得分:4)

引用Java EE规范v6的 8.5.2部署Java EE应用程序部分:

  

部署工具必须首先从应用程序.ear文件(META-INF / application.xml)中读取Java EE应用程序部署描述符。如果存在部署描述符,则完全指定应用程序中包含的模块。如果不存在部署描述符,则部署工具使用以下规则来确定应用程序中包含的模块。

换句话说,在提供application.xml时,您确实需要在其中包含所有模块。

答案 1 :(得分:1)

我无法访问jcp.org网站查看JSR316的最终草案......应该有明确的答案...

我最好的建议是创建一个“完整的”application.xml。

答案 2 :(得分:0)

根据JSR316,必须在META-INF / application.xml中指定上下文根,否则web模块将获取剥离.war扩展名的部署包的名称。

答案 3 :(得分:0)

首先,您不必使用application.xml。由于您有war文件,因此可以使用特定于容器的部署描述符来定义context-root。例如,在WebLogic Server Administration Console doc中,它显示为

  

&#34;您可以在weblogic.xml中指定context-root元素   打包为.war的Web应用程序的部署描述符   归档或爆炸.war目录。如果打包Web应用程序   作为企业应用程序的一部分(.ear存档或爆炸.ear),   在application.xml中指定context-root。请注意   application.xml context-root优先于weblogic.xml   。值&#34;

或者,对于Glassfish的情况,在glassfish-web.xml(或sun-web.xml)中。

如果您决定使用标准application.xml,容器将从此描述符中获取完整的模块列表。换句话说,application.xml优先于模块级描述符。所以是的,您还需要在application.xml中包含您的ejb元素。