我想设置我的企业应用程序的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>
元素吗?
答案 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元素。