gpt4 book ai didi

hibernate - JBoss 作用域类加载

转载 作者:行者123 更新时间:2023-12-02 14:11:47 25 4
gpt4 key购买 nike

我想在耳朵内使用最新的 hibernate 版本,而不升级服务器上的 jars。我按照此处给出的说明进行操作 - 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)

有什么想法吗?

最佳答案

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

效果很好。通过禁用父委派,您会削弱应用程序以任何方式与容器交互的能力,这有点极端。但是,如果您忽略该选项,则会出现一点 yak shaving为必填项

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

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

解决此问题的方法是配置 Hibernate session 工厂以使用配置属性(hibernate.validator.autoregister_listeners=falsehibernate.search.autoregister_listeners)禁用搜索和 validator 监听器的注册=false),或者将搜索和 validator 的兼容版本也打包到您的 EAR 中。

关于hibernate - JBoss 作用域类加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1157313/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com