【问题标题】:Custom Mediator ClassNotFoundException TransactionSynchronization自定义调解器 ClassNotFoundException TransactionSynchronization
【发布时间】:2013-08-14 11:19:55
【问题描述】:

我创建了一个自定义中介类,它使用 spring jdbc 来访问数据库中的数据。
我从该类制作了一个 jar 并将其部署在 WSO2_HOME/repository/components/lib 中。
之后,我将以下 jar 添加到同一文件夹中:
spring-jdbc.jar,
spring -tx.jar。

但是当我尝试自定义中介时,出现错误“ClassNotFoundException org\springframework\transaction\support\TransactionSynchronization”。

问题是我很确定 spring-tx.jar 中提供了“TransactionSynchronization”类。谁能帮我解决这个问题? :)

【问题讨论】:

  • 能否用-DosgiConsole启动服务器,看看“spring-tx.jar”是否安装正确?您可以在 osgi 控制台使用“ss spring-tx”查看包状态。
  • @Lahiru 您好,感谢您的回复..我尝试了 ss spring_tx 命令,结果显示它是“活动的”..

标签: spring wso2 wso2esb spring-jdbc


【解决方案1】:

一个原因可能是您的类路径中有两个包具有相同的“TransactionSynchronization”类。你可以试试下面的。

  1. 您的 WSO2_HOME/repository/components/dropins 目录中有什么?删除dropins中的所有jar并重新启动服务器并重新检查问题。

  2. 如果错误仍然存​​在,请尝试从 WSO2_HOME/repository/components/lib 和 WSO2_HOME/repository/components/dropins 中删除 spring-tx.jar。然后重启服务器。然后检查您是否收到相同的错误或不同的错误?

【讨论】:

  • 谢谢,我现在知道是什么问题了,问题是spring-jdbc.jar和spring-tx.jar中的包。包名类似,所以当类使用“org/springframework/transaction/support/TransactionSynchronization.class”时,它从spring-jdbc.jar中搜索。解决了:)
【解决方案2】:

我正在经历同样的行为。我有一个自定义的 spring 调解器,它调用基于角色的 authNZ 的数据库。我正在运行 esb v 4.7.0。

我从 maven 存储库中下载了 spring-tx-3.1.0.RELEASE.jar 并将其复制到我的环境中的 /usr/local/wso2/wso2esb-4.7.0/repository/components/lib 中,然后重新启动了 ESB .当我向代理服务发出请求时,会发生未找到相同类的异常。

我今天正在检查 jar 内容,当我检查 /usr/local/wso2/wso2esb-4.7.0/repository/components/lib 中的 spring-tx jar 时,当前的类:

jar tf spring-tx-3.1.0.RELEASE.jar | grep TransactionSynchronization
org/springframework/transaction/support/TransactionSynchronization.class

当我在重新启动 esb 后在 /usr/local/wso2/wso2esb-4.7.0/repository/components/dropins 中执行相同操作时,该类不存在:

jar tf ../dropins/spring_tx_3.1.0.RELEASE_1.0.0.jar 
spring-tx-3.1.0.RELEASE.jar
META-INF/
META-INF/p2.inf
META-INF/MANIFEST.MF

请注意,在 Synapse 重新启动后,spring-tx jar 不包含在 OSGi 包中。

我明天将进一步调查,包括构建一个 OSGi 包,其中包含我通过 Eclipse 需要的 Spring 依赖项

【讨论】:

  • 就像Mr.lakmali-erandi 说的,请检查你的lib 文件夹,可能有一个jar 包含与spring-tx.jar 相同的包。
  • Mari,你最终做了什么来解决类加载问题?
  • 嗨 Juan,我通过编辑我的 jar 解决了这个问题。在我的情况下,我有 2 个 jar(spring-jdbc.jar 和 spring-tx.jar),所以我将两个 jar 中的所有类都加入到一个 jar 中,而不是在 lib 文件夹中部署那个 jar。我不知道是否有更好的解决方案,但至少这可以解决我的问题:)
  • 我终于能够通过从ebr.springsource.com/repository/app 下载 spring-jdbc 和 spring-tx 的预捆绑 osgi jar 并将它们复制到 dropins 来解决我的问题。之前,我将非 osgi 捆绑的 Spring jar 复制到 lib 目录并让 carbon 为我转换。我不敢相信我没有寻找我以前需要的 osgi 版本的罐子。显然,转换为 jdbc 和 tx 包提供了相同的 id 和包路径值。不锈钢 |在 osgi 控制台模式下重新启动 4.6.0 esb 后,grep spring 是救命稻草。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-19
  • 1970-01-01
  • 2016-03-31
  • 1970-01-01
  • 2023-04-02
相关资源
最近更新 更多