AbstractMethodError при развертывании с помощью @Transactional, Spring 2.5 и cglib - PullRequest
1 голос
/ 31 января 2011

Надеюсь, вы можете помочь с этим.Я использую аннотацию Spring @Transactional для пометки метода транзакции, и у меня есть реквизит <tx:annotation-driven transaction-manager="txManager"/>.Я включаю Spring 2.5.6 и cglib 2.1_3 в мою сборку.

При развертывании (во время выполнения Websphere 7) я вижу исключения создания bean-компонента с основной причиной:

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

Я полагаю, что это означает, что мы вызываем метод generateClass(...) для экземпляра AbstractClassGenerator, который не реализует этот метод.Поскольку все это, кажется, прозрачно настроено в Spring, я не уверен, куда идти, чтобы решить проблему, хотя ... какие-нибудь идеи?

Ответы [ 2 ]

0 голосов
/ 01 февраля 2011

Как сказал Скаффман, проверьте, есть ли дублирующая копия cglib. У меня под рукой нет WAS 7, но я посмотрел на свой WPS 7, который построен поверх WAS 7, и заметил, что есть JAR - cglib-nodep-2.1_3.jar, который является частью пакета функций SCA. .

Есть ли у вас пакет функций SCA на вашем компьютере и посмотрите, существует ли этот файл там.

Я бы включил трассировку загрузки класса, чтобы увидеть, из какого Jar-класса этот класс берется, и сделал cavaj, чтобы узнать, какие методы поддерживаются им.

Меня тоже бьет, когда вы говорите, что конкретный подкласс, кажется, решает эту проблему !. Как упомянуто выше, я сначала нашел бы Jar, который загружает эти классы во время выполнения, а затем выяснил, что происходит.

НТН Manglu

0 голосов
/ 31 января 2011

Полагаю, у вас есть несколько копий cglib. У вашего сервера приложений есть своя собственная копия? если да, то лучше не включать его в свое приложение.

Другая возможность заключается в том, что вам не хватает asm.jar, хотя в этом случае ошибка, скорее всего, скажет нечто иное.

...