0

Weblogic 11G を使用すると、以下のエラーが発生します。

weblogic.application.ModuleException: 
at weblogic.servlet.internal.WebAppModule.startContexts(WebAppModule.java:1514)
at weblogic.servlet.internal.WebAppModule.start(WebAppModule.java:486)
at weblogic.application.internal.flow.ModuleStateDriver$3.next(ModuleStateDriver.java:425)
at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:41)
at weblogic.application.internal.flow.ModuleStateDriver.start(ModuleStateDriver.java:119)
Truncated. see log file for complete stacktrace

Caused By: java.lang.NoSuchMethodError: javax.persistence.OneToMany.orphanRemoval()Z
at org.hibernate.cfg.AnnotationBinder.processElementAnnotations(AnnotationBinder.java:1912)
at org.hibernate.cfg.AnnotationBinder.processIdPropertiesIfNotAlready(AnnotationBinder.java:79
at org.hibernate.cfg.AnnotationBinder.bindClass(AnnotationBinder.java:707)
at org.hibernate.cfg.Configuration$MetadataSourceQueue.processAnnotatedClassesQueue(Configuration.java:4035)
at org.hibernate.cfg.Configuration$MetadataSourceQueue.processMetadata(Configuration.java:3989)

詳細をお伝えしましょう。私の Web アプリケーションには、この hibernate-jpa-2.0-api-1.0.1.Final の中にejb3-persistence-1.0.2.GA.jarhibernate-jpa-2.0-api-1.0.1.Final.jar jar ファイルが含まれています。 jarにはorphanRemoval()メソッドが含まれていますが、ejb3-persistence-1.0.2.GA.jar には含まれていません。

以下の仕様により、weblogic ライブラリの代わりにアプリケーション ライブラリをロードするように weblogic を構成しました。

weblogic-application.xml

<prefer-application-packages>
    <package-name>antlr.*</package-name>
    <package-name>org.mozilla.javascript.*</package-name>
    <package-name>org.mozilla.classfile.*</package-name>
    <package-name>javax.persistence.*</package-name>
</prefer-application-packages>

ejb3-persistence-1.0.2.GA.jarファイルの代わりにhibernate-jpa-2.0-api-1.0.1.Final.jarから必要なクラスをロードするようにサーバーに指示する必要があるようですが、方法がわかりませんそれをするために?

あなたの助けに感謝します。

4

2 に答える 2

1

読み込まれた jar に何らかの問題がある場合、java.lang.NoSuchMethodError が発生します。このコードを実行しようとしているシステムでは、古いバージョンのjarをロードしているパスにCLASSPATHが設定されていると思います。次のコードを使用して、ClassLoader が依存関係を解決しているパスを見つけます。

public static void main(String[] args) {
            URLClassLoader classLoader = (URLClassLoader)Main.class.getClassLoader();
            System.out.println(Arrays.toString(classLoader.getURLs()));
    }

このメソッドを Main クラスに配置し、このエラーが発生しているシステムで実行します。依存関係が解決された場所からのすべてのパスが表示されます。パスのいずれかに古いバージョンの jar があるかどうかを調べます。

これがあなたの原因に役立つことを願っています。

于 2012-11-30T14:18:18.833 に答える