3

我想在不升级服务器上的 jar 的情况下使用耳内最新的休眠版本。我正在按照此处给出的说明进行操作 - 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

4 回答 4

7

我浏览了该页面上的说明,它大多遵循与我相同的步骤。关键的区别似乎在于他的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>

您可能(也可能不需要)还需要在 JBoss 的deploy/ear-deployer.xml文件中设置 Isolated=true 属性:

这很好用。通过禁用父委托,您会削弱应用程序以任何方式与容器交互的能力,这有点极端。但是,如果您忽略该选项,则需要刮一点牦牛毛

通过省略该java2ParentDelegation=false选项,您会遇到一种情况,即您的 EAR 中与 JBoss 中的类同名的任何类都将优先从 EAR 加载(这很好)。但是,在 EAR 中找不到的任何类都将落入 JBoss 的库中。在 的情况下jboss-local-jdbc.rar,这很好。但是,它可能会产生特殊的副作用。

例如,当 Hibernate 创建会话工厂时,它会查找 Hibernate Search 和 Hibernate Validator 库,并尝试启动它们。如果这些不在您的 EAR 中,它将在 JBoss 的库中找到它们。问题是您经常会收到链接器错误,因为 JBoss 附带的 Search 和 Validator 版本可能与打包在您的 EAR 中的 Hibernate 不兼容。

对此的解决方案是配置 Hibernate 会话工厂以禁用使用配置属性 (hibernate.validator.autoregister_listeners=falsehibernate.search.autoregister_listeners=false) 注册 Search 和 Validator 侦听器,或者也将兼容版本的 Search 和 Validator 打包到您的 EAR 中。

于 2009-07-21T08:55:58.497 回答
1

Jerrish,

You seem to be packaging a jar containing javax.management.* classes within your application packaging. Remove that jar from the application packaging (since it already ships in JBoss AS).

于 2009-07-29T11:44:37.717 回答
0

我正在使用jboss-classloading.xml专用于类加载的文件。对我来说,语法比语法更自然jboss-app.xml。有关全面说明,请参阅http://phytodata.wordpress.com/2010/10/21/demystifying-the-jboss5-jboss-classloading-xml-file/ 。

于 2013-06-10T14:48:36.810 回答
-1

为什么不直接删除 jboss 应用程序服务器上的休眠 jar?

于 2009-07-23T15:06:12.587 回答