2013-07-26 49 views
3

我使用spring jdbc從數據庫訪問數據的自定義介體類。
我從該類中創建一個jar並將其部署到WSO2_HOME/repository/components/lib中。
之後,我將下面的jar添加到同一個文件夾:
spring-jdbc.jar,
spring-tx.jar。

但是當我嘗試自定義介體時出現「ClassNotFoundException組織\ springframework \ transaction \ support \ TransactionSynchronization」錯誤。

問題是我很確定「TransactionSynchronization」類在spring-tx.jar中可用。任何人都可以幫我解決這個問題嗎? :)自定義介體ClassNotFoundException TransactionSynchronization

+0

需要一個OSGi包就可以啓動服務器-DosgiConsole,看看「彈簧tx.jar」安裝正確?您可以在osgi控制檯上使用「ss spring-tx」來查看軟件包狀態。 –

+0

@Lahiru嗨,感謝您的回覆..我試了ss spring_tx命令,結果表示它是「ACTIVE」.. –

回答

1

一個原因可能是你的類路徑中有兩個包具有相同的'TransactionSynchronization'類。你可以試試下面。

  1. 你在WSO2_HOME/repository/components/dropins目錄中有什麼?刪除下拉列表中的所有jar並重新啓動服務器並重新檢查問題。

  2. 如果錯誤仍然存​​在,請嘗試從WSO2_HOME/repository/components/lib中刪除spring-tx.jar WSO2_HOME/repository/components/dropins。然後重新安裝服務器。然後檢查你是否得到相同的錯誤或不同的錯誤?

+0

謝謝,我現在知道問題是什麼,問題是spring-jdbc.jar和spring中的包-tx.jar。包的名稱是相似的,所以當類使用「org/springframework/transaction/support/TransactionSynchronization.class」時,它會從spring-jdbc.jar中進行搜索。解決:) –

1

我正在經歷相同的行爲。我有一個自定義的spring mediator,它調用了一個基於角色的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。當我向我的代理服務發出請求時,會發生相同的類未發現異常。

我正在研究罐子內容今天,當我檢查了/usr/local/wso2/wso2esb-4.7.0/repository/components/lib彈簧TX罐子,在目前等級:

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 

注意,彈簧TX重新啓動Synapse後,OSGi包中不包含jar。

我會進一步調查明天,包括建立一個包含Spring的依賴我通過Eclipse

+0

就像Mr.lakmali-erandi說,請檢查您的lib文件夾,也許有一個jar包含與spring-tx.jar相同的包。 –

+0

Mari, 你最終做了什麼來解決類加載問題? –

+0

嗨胡安,我通過編輯我的jar來解決這個問題。在我的情況下,我有2個jar(spring-jdbc。jar和spring-tx.jar),所以我加入了jar中的所有類,而不是在lib文件夾中部署一個jar。我不知道是否有更好的解決方案,但至少這可以解決我的問題:) –