Использование свойств / переменных в jboss-web.xml - PullRequest
7 голосов
/ 24 февраля 2011

У меня есть WAR-файл, настроенный для использования загрузчика классов в JBoss. Это все работает отлично и денди. Конфигурация для него в 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>

Теперь клиент хочет развернуть две копии нашего WAR-файла под одним экземпляром JBoss. Они настроены на использование одного и того же хранилища загрузчика классов, что вызывает проблемы.

Если я вручную изменю jboss-web.xml внутри одной копии файла WAR, чтобы указать другой репозиторий, например, изменив соответствующую строку на:

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

... обе копии WAR развертываются без проблем.

Однако взлом внутреннего файла WAR не является фантастическим решением для клиента.

Если бы я мог включить, скажем, корень контекста в имя хранилища (или какое-либо другое свойство, которое гарантированно будет отличаться между двумя этими развертываниями), это может быть выполнено автоматически.

Можно ли использовать свойства в jboss-web.xml? Позвольте мне сделать что-то вроде:

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

(Примечание: я составил это имя свойства.)

Немного отступив, есть ли лучший способ достичь того, чего я пытаюсь достичь?

Ответы [ 2 ]

1 голос
/ 01 июня 2011

Обычный J2EE-способ достижения того, чего вы хотите - это отделить код от развертывания. Это означает, что ввод jboss-web.xml в WAR - ошибка здесь. Этот специфичный для развертывания файл конфигурации следует использовать во время развертывания. Я действительно не знаю процесс развертывания jboss, но для Oracle IAS это следующее:

  • WAR / EAR содержит только специфичные для кода настройки и объявления записей env, использованных источников данных, ролей безопасности и т. Д. (В web.xml), но не значения для записей
  • Во время развертывания дескриптор развертывания для конкретного поставщика (orion-web.xml для Oracle, jboss-web.xml для jBoss), содержащий сопоставленные значения времени выполнения для ролей, источников данных, записей env и т. Д., Передается в контейнер (это делается в конкретном контейнере Oracle принимает файл плана развертывания, заданный с помощью cmdline arg или с помощью загрузки в форме браузера, т. е. вы загружаете EAR и план развертывания, план развертывания содержит все специфичные для поставщика дескрипторы развертывания)

JSR 88 определяет концепцию плана развертывания, а также определяет средство плана развертывания . Так что это должно быть вашей отправной точкой для поиска в документации по jboss.

Как уже говорилось ранее, это стандартный J2EE-способ отделения отображений значений времени развертывания от вашего кода WAR / EAR. В вашем конкретном случае вы получите один EAR и два разных плана развертывания.

0 голосов
/ 06 июня 2011

Вы можете развернуть свой военный файл как взорванный каталог .WAR, а не как один файл .WAR. Это позволит вам легко редактировать jboss-web.xml в каждом экземпляре. Любой код / ​​ресурсы, указанные в веб-приложении, должны быть скомпилированы в JARS и добавлены в путь к классу приложений. Это уменьшит размер ваших WARS и остановит их редактирование по ошибке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...