在jboss-web.xml中使用属性/变量

Aro*_*ron 7 java jboss

我有一个配置为在JBoss下使用范围类加载器的WAR.这一切都很好,花花公子.jboss-web.xml中的配置如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE jboss-web PUBLIC
  "-//JBoss//DTD Web Application 4.2//EN"
  "http://www.jboss.org/j2ee/dtd/jboss-web_4_2.dtd">

<jboss-web>
    <class-loading>
        <loader-repository>
            com.mycompany:loader='com.mycompany.repository'
            <loader-repository-config>java2ParentDelegation=false</loader-repository-config>
        </loader-repository>
    </class-loading>
</jboss-web>
Run Code Online (Sandbox Code Playgroud)

现在,客户端希望在同一JBoss实例下部署两个WAR文件副本.它们被配置为使用相同的类加载器存储库,这会导致问题.

如果我手动更改WAR文件的一个副本中的jboss-web.xml以指定不同的存储库,例如通过将相关行更改为:

            com.mycompany:loader='com.mycompany.repository2'
Run Code Online (Sandbox Code Playgroud)

...... WAR的两个副本都可以毫无问题地部署.

但是,攻击WAR文件的内部对于客户来说并不是一个很棒的解决方案.

如果我可以将上下文根合并到存储库的名称中(或者两个部署之间保证不同的其他属性),这可以自动完成.

是否可以在jboss-web.xml中使用属性?让我这样做:

            com.mycompany:loader='com.mycompany.repository-${jboss.context-root}'
Run Code Online (Sandbox Code Playgroud)

(注意:我编写了该属性名称.)

退后一步,是否有更好的方法来完成我想要完成的任务?

Ber*_*ase 1

实现您想要的目标的正常 J2EE 方法是将代码与部署分开。这意味着,发动jboss-web.xml战争是错误的。应在部署期间使用此特定于部署的配置文件。我不太了解jboss部署过程,但是对于Oracle IAS来说是这样的:

  • WAR/EAR 只包含环境条目、使用的数据源、安全角色等的特定于代码的设置和声明(在web.xml),但不包含条目的值
  • 在部署时,特定于供应商的部署描述符(orion-web.xml对于 Oracle,jboss-web.xml对于 jBoss )包含角色、数据源、环境条目等的映射运行时值,被传递到容器(这是以容器特定的方式完成的,Oracle 采用通过 cmdline arg 或通过浏览器形式上传给出的部署计划文件,即上传 EAR 和部署计划,部署计划包含所有特定于供应商的部署描述符)

JSR 88 定义了部署计划概念,还定义了部署计划工具。所以这应该是您查看 jboss 文档的起点。

如前所述,这是将部署时值映射与代码 WAR/EAR 分离的标准 J2EE 方法。在您的特定情况下,您最终会得到一个 EAR 和两个不同的部署计划。