2011-01-31 4 views
1

あなたがこれを手助けできることを願っています。私はトランザクションのメソッドをマークするために、@TransactionalのSpringアノテーションを使用しています。必要なのは<tx:annotation-driven transaction-manager="txManager"/>です。私はSpring 2.5.6とcglib 2.1_3を私のビルドに含めています。展開のオンAbstractMethod @Transactional、Spring 2.5、cglibで展開するエラー

(Websphereの7ランタイムに)、私は根本的な原因で、豆の作成の例外を参照してください。

Caused by: java.lang.AbstractMethodError: net/sf/cglib/core/ClassGenerator.generateClass(Lnet/sf/cglib/asm/ClassVisitor;)V 
    at net.sf.cglib.core.DefaultGeneratorStrategy.generate(DefaultGeneratorStrategy.java:25) 
    at net.sf.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.java:216) 
    at net.sf.cglib.proxy.Enhancer.createHelper(Enhancer.java:377) 
...and so on 

私は、これは我々がAbstractClassGeneratorのインスタンス上generateClass(...)メソッドを呼び出していることを意味することを理解、そのメソッドを実装していません。そのようなものはすべて春にはっきりと設定されているように見えますが、どこから問題を解決するのかはわかりません。

答えて

0

私は、あなたが複数のcglibを蹴散らしていると推測しています。あなたのアプリケーションサーバーには独自のコピーがありますか?そうであれば、あなたのアプリケーションにも含めないほうが良いでしょう。

もう1つの可能性は、asm.jarが見つからないことです。その場合は、エラーが多少異なると言えます。

+0

は...私は私がのためのインタフェースを作成していない(ONEクラスに対して呼んでいるクラス以上のインターフェイスを追加しました... )、具体的なサブクラスを使用するように設定を変更し、すべてが有効になりました。 – Brabster

+0

@Brabster:cglibは、クラスローディングに関しては、困ったデザインの選択肢のために、一般的に不愉快です。同様に、なぜバプルが、スプリングの人々がそれを使用することを主張しているのですか? – skaffman

0

Skaffmanは、cglibの重複したコピーがあるかどうかを確認するよう提案しました。私はWAS 7を持っていませんが、WAS 7の上に構築されているWPS 7を見て、SCAフィーチャー・パックの一部であるJAR-cglib-nodep-2.1_3.jarがあることに気付きました。

マシンにSCAフィーチャーパックがあり、そこにこのファイルが存在するかどうかを確認してください。

私はどのクラスからJarがピックアップされているかを確認するためにクラスの読み込みトレースを有効にし、それによってcavajをサポートしているメソッドを確認します。

具体的なサブクラスがこの問題を解決しているようだと言うと、それは私にも勝つ!上で述べたように、私はまずランタイム中にこれらのクラスをロードするJarを見つけ、何が起きているのか把握します。私は、アプリケーションサーバー上の追加のコピーをチェックします

HTH Manglu