2009-07-21 9 views
3

サーバ上のjarファイルをアップグレードせずに、耳の中で最新のハイバネートバージョンを使用したいと思います。私はここに与えられた指示に従っています - http://jaitechwriteups.blogspot.com/2008/08/how-to-upgrade-hibernate-in-jboss.htmlJBossスコープ付きクラスローディング

しかし、今問題は、アプリケーションがjboss-local-jdbc.rarをdeployフォルダに置いていないことです。

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 [email protected]{ 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) 

答えて

7

私はそのページの手順をスキャンしていましたが、ほとんど同じ手順に従っています。私のシステムは親の委任を無効にしない、それが唯一のローダ名がある

<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-app.xmlファイルの内容であると思われますJBossのdeploy/ear-deployer.xmlファイルにIsolated = true属性を設定する必要があります。

これはうまく動作します。親の委任を無効にすると、アプリケーションがコンテナーとやりとりすることができなくなります。ただし、そのオプションを省略した場合は、yak shavingのビットが必要です

JBossのクラスと同じ名前のEAR内のクラスは、 EAR(それは良い)です。ただし、EARで見つからないクラスはJBossのlibsに渡ります。 jboss-local-jdbc.rarの場合、これは良好です。しかし、それは特有の副作用を有する可能性がある。

たとえば、Hibernateはセッションファクトリを作成するときに、Hibernate SearchライブラリとHibernate Validatorライブラリを探してそれらも起動しようとします。これらがEARに存在しない場合は、JBossのlibディレクトリにあります。問題は、JBossに同梱されているSearchおよびValidatorのバージョンがEARにパッケージ化されているHibernateと互換性がないため、多くの場合リンカーエラーが発生することです。

解決策は、設定プロパティ(hibernate.validator.autoregister_listeners=falsehibernate.search.autoregister_listeners=false)を使用して検索リスナと検証リスナの登録を無効にするためにHibernateセッションファクトリを設定するか、EARにSearch and Validatorの互換バージョンをパッケージ化することです。

+2

「ヤクシェービング」の+1 - 私はそれを使い始めるつもりです。 –

+0

jbossドキュメントによると、java2ParentDelegation = falseがデフォルトです。これがあなたの展開にどのように影響するのか、どのように考慮しますか? – cmcginty

-1

jbossアプリケーションサーバー上で休止状態のjarファイルを削除してみませんか?

+1

Jerrishは、アプリケーションサーバーに付属のjarファイルをアップグレードまたは変更したくないと述べました。 – avernet

1

Jerrish、

あなたはjavax.managementを含むjarファイルをパッケージ化しているようだ。*アプリケーションのパッケージ内のクラス。アプリケーションパッケージからjarファイルを削除します(既にJBoss ASに同梱されているため)。

関連する問題