1

希望您能对此有所帮助。我正在使用 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 中透明设置的,我不确定从这里到哪里来解决问题……有什么想法吗?

4

2 回答 2

0

我猜你有多个 cglib 副本。您的应用服务器是否有自己的副本?如果是这样,你最好不要将它包含在你的应用程序中。

另一种可能性是你错过了asm.jar,尽管在这种情况下错误可能会说一些不同的东西。

于 2011-01-31T15:25:37.290 回答
0

正如 Skaffman 建议的那样,检查是否存在 cglib 的重复副本。我手边没有 WAS 7,但我查看了构建在 WAS 7 之上的 WPS 7,并注意到有一个 JAR - cglib-nodep-2.1_3.jar,它是 SCA 功能包的一部分.

您的机器上是否有 SCA 功能包,并查看该文件是否存在。

我会打开类加载跟踪以查看该类是从哪个 Jar 中提取的,并对其进行 cavaj 以查看它支持的方法。

当你说具体的子类似乎解决了这个问题时,它也打败了我!如上所述,我会首先找到在运行时加载这些类的 Jar,然后弄清楚发生了什么。

HTH芒鲁

于 2011-01-31T22:27:27.003 回答