在部署时覆盖 Jboss EAP 6.4 中 web.xml 中的上下文参数
Override context-param in web.xml in Jboss EAP 6.4 at deployment time
目标 - 在 Jboss EAP 6.4 上部署项目 war,为 web.xml 中的上下文参数提供新值,无需编辑现有的war。
当前状态 -
如果我在构建时输入所需的 web.xml 值,- war 会起作用。但是当我使用默认 web.xml.
时它失败了
- default war 在 Tomcat 9 上工作正常,因为它在管理器控制台 gui 上有 "XML Configuration file path" 选项可以覆盖默认值 web.xml.
我默认web.xml-
<?xml version="1.0" encoding="utf-8"?><web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
<display-name>Myproject Web Service</display-name>
<context-param>
<param-name>myproject.appserver</param-name>
<param-value>jbosseap</param-value>
</context-param>
<context-param>
<param-name>myproject.logpath</param-name>
<param-value></param-value>
</context-param>
<context-param>
<param-name>myproject.dbtype</param-name>
<param-value></param-value>
</context-param>
<listener>
<listener-class>com.myproject.ApplicationStartListener</listener-class>
</listener>
<error-page>
<error-code>404</error-code>
<location>/pages//404ErrorView.html</location>
</error-page></web-app>
所需值为 -
<context-param>
<param-name>myproject.logpath</param-name>
<param-value>D:\myproject\vXX\workspace</param-value>
</context-param>
<context-param>
<param-name>myproject.dbtype</param-name>
<param-value>MSSQL</param-value>
</context-param>
疑难解答 -
- Jboss EAP 6.4 官方文档中没有提到这种方式。
- Jboss EAP 管理控制台中没有这样的选项
(http://localhost:9990/console/App.html#home) 喜欢 tomcat
部署。
- none 具有类似问题的帖子的 SO 答案
对我有帮助。
由于我们向客户发送相同的 war,因此决定不让客户编辑 war 和部署。
如果在部署时覆盖根本不可能,那么任何关于此类限制的官方文档参考都会有所帮助。
谢谢。
Jboss EAP 不支持像 tomcat 这样的上下文参数替换。但它确实支持已部署 WAR 的内容替换。
解决方案 - 使用 deployment-overlay
命令替换 web.xml。
Official documentation
因此在用户端,需要 web.xml 模板,用户必须根据他们的环境为上下文参数设置值并重新部署 war。
war 和 web.xml 必须在 \bin 内。 Else deployment-overlay
命令无法识别路径。
命令序列 - 使用 jboss-cli.bat -
[standalone@localhost:9990 /] deploy s1temp/myproj.war
[standalone@localhost:9990 /] deployment-overlay add --name=s1overlay --content=WEB-INF/web.xml=s1temp/web.xml
[standalone@localhost:9990 /] deployment-overlay link --name=s1overlay --deployments=myproj.war --redeploy-affected
目标 - 在 Jboss EAP 6.4 上部署项目 war,为 web.xml 中的上下文参数提供新值,无需编辑现有的war。
当前状态 -
-
如果我在构建时输入所需的 web.xml 值,
- war 会起作用。但是当我使用默认 web.xml. 时它失败了
- default war 在 Tomcat 9 上工作正常,因为它在管理器控制台 gui 上有 "XML Configuration file path" 选项可以覆盖默认值 web.xml.
我默认web.xml-
<?xml version="1.0" encoding="utf-8"?><web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
<display-name>Myproject Web Service</display-name>
<context-param>
<param-name>myproject.appserver</param-name>
<param-value>jbosseap</param-value>
</context-param>
<context-param>
<param-name>myproject.logpath</param-name>
<param-value></param-value>
</context-param>
<context-param>
<param-name>myproject.dbtype</param-name>
<param-value></param-value>
</context-param>
<listener>
<listener-class>com.myproject.ApplicationStartListener</listener-class>
</listener>
<error-page>
<error-code>404</error-code>
<location>/pages//404ErrorView.html</location>
</error-page></web-app>
所需值为 -
<context-param>
<param-name>myproject.logpath</param-name>
<param-value>D:\myproject\vXX\workspace</param-value>
</context-param>
<context-param>
<param-name>myproject.dbtype</param-name>
<param-value>MSSQL</param-value>
</context-param>
疑难解答 -
- Jboss EAP 6.4 官方文档中没有提到这种方式。
- Jboss EAP 管理控制台中没有这样的选项 (http://localhost:9990/console/App.html#home) 喜欢 tomcat 部署。
- none 具有类似问题的帖子的 SO 答案 对我有帮助。
由于我们向客户发送相同的 war,因此决定不让客户编辑 war 和部署。
如果在部署时覆盖根本不可能,那么任何关于此类限制的官方文档参考都会有所帮助。 谢谢。
Jboss EAP 不支持像 tomcat 这样的上下文参数替换。但它确实支持已部署 WAR 的内容替换。
解决方案 - 使用 deployment-overlay
命令替换 web.xml。
Official documentation
因此在用户端,需要 web.xml 模板,用户必须根据他们的环境为上下文参数设置值并重新部署 war。
war 和 web.xml 必须在 \bin 内。 Else deployment-overlay
命令无法识别路径。
命令序列 - 使用 jboss-cli.bat -
[standalone@localhost:9990 /] deploy s1temp/myproj.war
[standalone@localhost:9990 /] deployment-overlay add --name=s1overlay --content=WEB-INF/web.xml=s1temp/web.xml
[standalone@localhost:9990 /] deployment-overlay link --name=s1overlay --deployments=myproj.war --redeploy-affected