3

Spring MVC と Hibernate を使用して、シンプルなトレーニング アプリケーションを開発しています。ビルドツールとして Maven を使用しています。すべての依存関係 (spring、hibernate、aopalliance、junit など) は、Maven の pom.xml ファイルを使用して解決されます。

$ mvn war:war glassfish:deployプロジェクトはGlassFishサーバーにデプロイされています-すべての*.jarファイルがコピーされます( を含むcom.springsource.org.aopalliance-1.0.0.jar)。

クラスパス内に不透明度が存在するかどうかをテストするための簡単なサーブレットを作成しました。

protected void doGet(...) throws ... {
    response.getWriter().println(org.aopalliance.intercept.MethodInterceptor.class.getCanonicalName());
}

そしてそれは存在します。上記のコードはorg.aopalliance.intercept.MethodInterceptor期待どおりに表示されます。

ただし、サーブレットをそのようなものに変更すると:

protected void doGet(...) throws ... {
    response.getWriter().println(org.springframework.transaction.interceptor.TransactionInterceptor.class.getCanonicalName());
}

例外がスローされます。

java.lang.NoClassDefFoundError: org/aopalliance/intercept/MethodInterceptor

TransactionInterceptorは aopalliance インターフェイスを使用していますが、サーブレットでは検出できるのに、なぜ検出できないのかわかりません。クラスローダーに何らかの関係があると思いますが、修正方法がわかりません。

編集:

いくつかの詳細:

編集:

spring.osgi.core/io@Ravi の提案に従って、依存関係も追加しました。

<dependency>
    <groupId>org.springframework.osgi</groupId>
    <artifactId>org.springframework.osgi.core</artifactId>
    <version>1.2.1</version>
</dependency>

<dependency>
    <groupId>org.springframework.osgi</groupId>
    <artifactId>org.springframework.osgi.io</artifactId>
    <version>1.2.1</version>
</dependency>

しかし、それは問題を解決しませんでした。

ただし、SpringSource Tool Suite で提供される VMware vFabric tc Server でまったく同じアプリケーションを実行しようとしましたが、すべて問題なく動作しました。これは GlassFish 固有の問題のようです。

GlassFish Server Open Source Edition 3.1.1 を使用しています。

もう1つの奇妙なこと:アプリケーションを再デプロイすると(Eclipseで「発行」を使用)、サーブレットがスローします:

java.lang.NoClassDefFoundError: org/aopalliance/intercept/MethodInterceptor

しかし、リフレッシュした後(ブラウザを白くする)、次のようになります:

java.lang.NoClassDefFoundError: org/springframework/transaction/interceptor/TransactionInterceptor

さらに更新しても何も変わりません。

4

3 に答える 3

7

私は同じ問題を抱えていました.1週間近く答えを探した後、aopalliance.jarが必要であることがわかりました. これで私の問題は解決しました。

于 2013-03-27T21:18:40.537 に答える
1

親クラスローダーのどこかに別の不完全なスプリングがある可能性があります。おそらく {domaindir}/lib にあります。

于 2012-02-10T06:50:32.007 に答える
0

クラスパスに Spring トランザクション jar を含めましたか。TransactionInterceptor.javaのソースには、 org.springframework.transactionおよび org.springframework.transaction.supportパッケージの一部への参照が含まれています。

最初のスニペット org.aopalliance.intercept.MethodInterceptor.class.getCanonicalName()では、Spring Transaction ライブラリに依存しない aopalliance クラスのみをロードしています。

2 番目のスニペットでは、TransactionInterceptor クラスとその依存関係をロードしています ( org.springframework.transaction.interceptor.TransactionInterceptor.class.getCanonicalName())。ブラウザーの更新後に表示される 2 番目の例外は、前のエラー (ブラウザーの更新前) と比較して理にかなっています。

最初のスニペットは独立したクラスですが、2 番目のスニペットは aopalliance のラッパーである Spring クラス ロードです。Spring は、独自の依存関係 (トランザクション関連のクラスと aopalliance 実装) をロードしようとしています。

java.lang.NoClassDefFoundError依存関係の 1 つがコンパイル時に見つかったが、実行時に見つからない場合にスローされます (依存関係の問題)。

これらの依存関係を追加してみて、解決するかどうかを確認してください。

于 2012-02-07T01:21:18.120 に答える