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

标签 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>

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

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

            com.mycompany:loader='com.mycompany.repository2'

...WAR 的两个副本都可以顺利部署。

但是,破解 WAR 文件的内部结构对于客户来说并不是一个极好的解决方案。

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

是否可以在 jboss-web.xml 中使用属性?让我做类似的事情:

            com.mycompany:loader='com.mycompany.repository-${jboss.context-root}'

(注意:我编造了那个属性名称。)

退后一步,有没有更好的方法来完成我想要完成的事情?

最佳答案

实现所需内容的常规 J2EE 方法是将代码与部署分开。这意味着将 jboss-web.xml 放入 WAR 中是错误的。 这个特定于部署的配置文件应该在部署期间使用。我不太了解 jboss 部署过程,但是对于 Oracle IAS,它是这样的:

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

JSR 88 定义了部署计划概念,还定义了一个 deployment plan facility .所以这应该是您查找 int jboss 文档的起点。

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

关于java - 在 jboss-web.xml 中使用属性/变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5108315/

相关文章:

java - 部署war文件解析错误

java - 从 Wildfly 发送 jms 消息

java - 从 jar 访问网络资源

apache - 如何使用 JBoss(或 Apache Tomcat)将 ip 和端口绑定(bind)到子域

java - 使用 RESTEasy 处理格式错误的@QueryParam

java - 使用 SPNEGO Web SSO 自动登录

java - 将 HttpServletRequest 对象存储在队列中供以后处理是否危险?

java - Neo4j 或 SQLite 来保存文件夹结构?

java - 使用 Java 8 的 SonarQube 和 squidS2095

Java,将纪元转换为毫秒