Развертывание 2 военных файлов с общими классами в JBoss - PullRequest
0 голосов
/ 20 апреля 2011

У меня два war-файла app1.war и app2.war, развернутые в одном экземпляре JBoss. Имена пакетов для классов Java для обоих файлов war начинаются с com.myapp

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

Я хочу знать, может ли это представлять какую-либо угрозу сценарию развертывания?

Ответы [ 4 ]

0 голосов
/ 27 июля 2012

Лучший способ - это изолировать загрузку классов для архивов вашего приложения.

Для JBoss 5.1.0 GA мне помогло следующее.

  1. Создать jboss-classloading.xml файл в папке WEB-INF.
  2. Добавлены следующие строки в этот файл

Здесь, export-all = "NON_EMPTY "=> Обеспечивает, чтобы классы, загруженные для этого приложения, не экспортировались import-all =" true "=> Импортирует и использует все доступные определения классов.parent-first = "false" => Если найдено более одного класса с одинаковым именем, сначала будет использоваться класс, определенный в приложении.

К вашему сведению.Это также помогло мне встроить конфигурацию журнала log4j в файл war приложения.Нужно будет поместить log4j.xml в классы WEB-INF / и иметь файл log4j.jar в папке WEB-INF / lib.

0 голосов
/ 20 апреля 2011

У меня была похожая ситуация с несколькими приложениями. Посмотрите на мое решение здесь

0 голосов
/ 20 апреля 2011

Для каждого приложения или отдельного модуля будет один экземпляр загрузчика классов.Другими словами, классы в app1.war будут загружены в загрузчик классов, отличный от классов в app2.war.Это поведение по умолчанию любого сервера Java EE;Так что на самом деле не имеет значения наличие классов с одинаковым пакетом / именами и / или разным содержимым.Это поведение по умолчанию любого сервера Java EE.

Сказав, что, если вы настроите политику загрузчика классов на сервере или попытаетесь загрузить классы (отразить), используя что-либо, кроме Thread.currentThread().getContextClassLoader(), вы можете напомнить о проблеме.

0 голосов
/ 20 апреля 2011

Вы можете получить проблемы с загрузкой классов, если ваши приложения не изолированы, то есть имеют собственный репозиторий загрузки классов и загрузчики классов. Если вы сконфигурируете JBoss для изоляции приложений друг от друга, у вас должно быть все в порядке (я не знаю, какое значение по умолчанию для вашей версии, но используемый нами 4.2.3 не изолирует приложения по умолчанию).

Чтобы пояснить это немного:

Если у вас есть два класса с разными реализациями, но с одинаковым FQCN, вы можете получить неправильный класс из загрузчика классов для приложения, которое загружается вторым. Даже если реализация была такой же, вы можете получить исключения приведения класса или другое странное поведение, если одно приложение получит класс из другого приложения.

...