Развертывание нескольких версий одних и тех же EJB и классов на одном и том же сервере JBoss - PullRequest
1 голос
/ 16 июля 2009

У меня есть несколько отдельных проектов приложений (EAR) с несколькими EJB, которые я хочу развернуть на одном и том же сервере JBoss. Теперь некоторые проекты могут иметь одинаковые EJB-компоненты, но разные версии. В аналогичных обстоятельствах некоторые проекты могут использовать разные версии одних и тех же «обычных» классов (то есть классов, загружаемых в ВМ, без поиска JNDI).

С OC4J это, похоже, не было проблемой, но теперь с JBoss у меня создается впечатление, что все находится в одном и том же «пространстве имен» (или, возможно, загрузчике классов). Я прав в этом предположении?

По сути, я хочу сделать (или убедиться) две вещи:

  • От клиента, который выполняет JNDI-поиск EJB, я хочу иметь возможность указать, в каком приложении он находится, так что возвращается правильная версия EJB.

  • Внутри EJB при создании экземпляра класса я хочу убедиться, что этот класс развернут с тем же приложением (EAR), что и EJB.

Мне кажется, я читал, что вы можете настроить некоторые свойства "изоляции" для EJB, правильно ли я полагаю, что это могло бы решить мою вторую мысль?

Ответы [ 2 ]

6 голосов
/ 17 июля 2009

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

К счастью, это легко исправить. В файле ear-deployer.xml в каталоге deploy убедитесь, что задан следующий параметр:

<attribute name="Isolated">true</attribute>

Это даст каждому развернутому EAR свое пространство загрузчика классов. Он по-прежнему сможет получать доступ к содержимому из каталога lib JBoss, но развернутые EAR будут невидимы друг для друга.

3 голосов
/ 16 июля 2009

Вы правы, что классы из разных EAR находятся в одном и том же "пространстве". JBoss по умолчанию использует плоскую иерархию загрузчика классов , что означает, что все классы (кроме упакованных в WAR) загружаются одним и тем же загрузчиком классов. С появлением JBoss 5 появился новый профиль standard , который строго следует правилам Java EE и, таким образом, поддерживает изолированную загрузку классов. Старые версии JBoss также поддерживают это поведение с помощью свойств callByValue и , которые изолируют в конфигурации развертывания.

...