java - Spring Framework 在 JBoss 上看不到 cglib

标签 java spring jboss5.x cglib

我的应用程序在 JBoss 5.1.0.GA 上使用 Spring Framework 3.0.5。框架由服务端提供,即框架库放在server/<servername>/lib目录。服务器由第三方管理,因此我无法将任何库添加到该服务器提供的环境中。有必要在我的应用程序中使用 cglib。 Spring 将其用于代理目的。 cglib 不在 server/<servername>/lib 中,因此我包括了 cglib-2.2.2.jar到我的应用 .war与专家。

问题是部署时出现以下错误:

Cannot proxy target class because CGLIB2 is not available. Add CGLIB to the class path or specify proxy interfaces.

我检查了我的应用 .war对于 cglib 并在 WEB-INF/lib 中找到它目录。 AFAIK 位于此目录中的 jars 中的所有类都在类路径中,并且 jars 中的类在 server/<servername>/lib 中。 .为什么 Spring 找不到 cglib?

最佳答案

为了这个问题的目的,JBoss 类加载器层次结构只能看“向下”,即系统类加载器加载的类看不到应用程序的 lib 目录中的类。因此服务器的 lib 目录中的 Spring 库无法在您的应用程序的 lib 目录中看到 cglib。

可能的解决方案,按优先顺序排列:

  1. 从服务器的 lib 目录中删除 Spring JAR。他们不应该在那里,这只是个坏主意。但是你说你不能这样做。
  2. 将cglib 添加到服务器的lib 目录。出于与上述相同的原因,不是一个选项。
  3. 将 Spring JAR 的副本添加到应用程序的 lib 目录中。确保它们与服务器的完全相同,否则您将面临奇怪的类版本控制冲突的风险。这应该允许解析 cglib。

选项 3 远非理想,因为在类加载器之间复制类会导致类加载器问题,但它可能是您唯一的选择。

关于java - Spring Framework 在 JBoss 上看不到 cglib,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10566955/

相关文章:

java - 如何解决Jboss库和webapps库之间的冲突

ssl - Java8,JBoss AS5,SSLException : "Received fatal alert: handshake_failure"

java - 你如何设置一个也可以使用 groovy 的 maven java 项目?

java - Log4j2 编程配置不滚动文件

java - Swing GridBagLayout - 对齐问题

java - 编译从Java中的Swing的JFrame类返回缺少的方法和包

java - Spring Authentication,如何为错误的凭证自定义responeText

java - SDR/搜索映射冲突

database - JDBCTemplate with TransactionTemplate and Connection Pool,使用哪个数据源

tomcat - 如何在 jboss 5.1 中定义 war 之外的根上下文?