весенняя проблема изоляции загрузчика классов на jboss - PullRequest
1 голос
/ 24 апреля 2010

У меня на jboss развернуто два уха с правильными настройками изоляции загрузчиков классов. Когда bean-компонент seam вызывает Spring bean-компоненты, которые выполняют некоторые запросы к базе данных, все работает нормально, но когда вызывается bean-объект spring quartz, и execute пытается выполнить запросы к базе данных, возникает проблема, потому что spring пытается использовать hibernate jar из другого уха, и возникает исключение. ! Это явно весенняя проблема изоляции загрузчика классов. Кто-нибудь сталкивался с такой проблемой? Как обеспечить изоляцию?

Ответы [ 2 ]

0 голосов
/ 24 апреля 2010

Предполагая, что JBoss 4.x, затем в файле deploy/ear-deployer.xml убедитесь, что у вас включена изоляция загрузчика классов, например,

<server>
   <mbean code="org.jboss.deployment.EARDeployer" name="jboss.j2ee:service=EARDeployer">
      <attribute name="Isolated">true</attribute>
      <attribute name="CallByValue">false</attribute>
      <attribute name="EnablelibDirectoryByDefault">true</attribute>
   </mbean>
</server>

Это предотвратит видимость классов в одном EAR для другого. По какой-то причине по умолчанию установлено значение Isolation=false.

Этого может быть достаточно. Однако вам также может понадобиться добавить файл jboss-app.xml в каталог EAR META-INF, содержащий что-то вроде этого:

<jboss-app>
  <loader-repository>MyCompany:loader=MyApplication</loader-repository>
</jboss-app>

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

0 голосов
/ 24 апреля 2010

Бьюсь об заклад, JAR Hibernate, который использует SEAM, исходит от загрузчика классов JBOSS, который вызывается перед любым загрузчиком классов EAR. Это происходит потому, что SEAM связан с JBOSS.

Spring в EAR использует другую версию Jiber Hibernate или ее зависимостей, поэтому возникает конфликт.

Вы должны либо удалить JAR Hibernate из JBOSS, чтобы он больше не был виден загрузчику классов сервера приложений, но это, вероятно, сломало бы SEAM.

Вы можете увидеть, есть ли у JBOSS какой-либо способ сказать серверу приложений, чтобы он предпочитал JAR уровня приложения серверным JAR в конфигурации EAR.

...