JBoss Scoped Class Загрузка - PullRequest
3 голосов
/ 21 июля 2009

Я хочу использовать последнюю версию спящего режима в ухе, не обновляя банки на сервере. Я следую приведенным здесь инструкциям - http://jaitechwriteups.blogspot.com/2008/08/how-to-upgrade-hibernate-in-jboss.html.

Однако теперь проблема заключается в том, что приложение не использует файл jboss-local-jdbc.rar, находящийся в папке развертывания.

2009-07-21 09:01:50,347 INFO  [org.jboss.system.ServiceConfigurator] Problem configuring service jboss.jca:service=DataSourceBinding,name=MockDS
org.jboss.deployment.DeploymentException: Exception setting attribute ConnectionManager = jboss.jca:service=LocalTxCM,name=MockDS on mbean jboss.jca:service=DataSourceBinding,name=MockDS; - nested throwable: (javax.management.InvalidAttributeValueException: Set attribute  has class class javax.management.ObjectName loaded from null that is not assignable to attribute class class javax.management.ObjectName loaded from org.jboss.mx.loading.UnifiedClassLoader3@1babddb{ url=file:/C:/servers/jboss-4.2.2.GA/server/default/tmp/deploy/tmp22267hibernate_upgrade_test.ear ,addedOrder=43})
    at org.jboss.system.ServiceConfigurator.setAttribute(ServiceConfigurator.java:707)
    at org.jboss.system.ServiceConfigurator.configure(ServiceConfigurator.java:382)
    at org.jboss.system.ServiceConfigurator.internalInstall(ServiceConfigurator.java:462)
    at org.jboss.system.ServiceConfigurator.install(ServiceConfigurator.java:171)
    at org.jboss.system.ServiceController.install(ServiceController.java:226)
    at sun.reflect.GeneratedMethodAccessor23.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

Есть идеи?

Ответы [ 4 ]

7 голосов
/ 21 июля 2009

Я проверил инструкции на этой странице, и он в основном выполняет те же действия, что и я. Кажется, что критическая разница заключается в содержимом его файла jboss-app.xml:

<jboss-app>
 <loader-repository>
   org.myapp:loader=SomeClassloader
   <loader-repository-config>
      java2ParentDelegation=false
   </loader-repository-config>
 </loader-repository> 
</jboss-app>

Моя система не отключает родительское делегирование, она имеет только имя загрузчика:

<jboss-app>
 <loader-repository>org.myapp:loader=MyAppName</loader-repository> 
</jboss-app>

Вы можете (или не можете) также установить атрибут Isolated = true в deploy/ear-deployer.xml файле JBoss:

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

Опуская опцию java2ParentDelegation=false, вы получаете ситуацию, когда любые классы в вашем EAR, которые имеют то же имя, что и классы в JBoss, будут загружаться преимущественно из EAR (что хорошо). Тем не менее, любые классы, не найденные в EAR, попадут в библиотеки JBoss. В случае jboss-local-jdbc.rar это хорошо. Однако у него могут быть специфические побочные эффекты.

Например, когда Hibernate создает фабрику сеансов, он ищет библиотеки Hibernate Search и Hibernate Validator, а также пытается их запустить. Если их нет в вашем EAR, он найдет их в библиотеках JBoss. Проблема в том, что вы часто получаете ошибку компоновщика, потому что версии Search и Validator, поставляемые с JBoss, могут быть несовместимы с Hibernate, упакованным в вашем EAR.

Решением этой проблемы является либо настройка фабрики сеансов Hibernate для отключения регистрации прослушивателей Search и Validator с использованием свойств конфигурации (hibernate.validator.autoregister_listeners=false и hibernate.search.autoregister_listeners=false), либо упаковка пакетов совместимых версий Search и Validator также в EAR.

1 голос
/ 29 июля 2009

Jerrish,

Похоже, вы упаковываете jar, содержащий классы javax.management. * В упаковку вашего приложения. Удалите эту банку из упаковки приложения (поскольку она уже поставляется в JBoss AS).

0 голосов
/ 10 июня 2013

Я использую файл jboss-classloading.xml, который предназначен для загрузки классов. Синтаксис для меня более естественный, чем синтаксис jboss-app.xml. См. http://phytodata.wordpress.com/2010/10/21/demystifying-the-jboss5-jboss-classloading-xml-file/ для подробного объяснения.

0 голосов
/ 23 июля 2009

Почему бы вам просто не удалить jibernate jar на сервере приложений jboss?

...