2010-10-18 22 views
8

我嘗試使用JBoss的接縫與DB2數據庫時,出現下列錯誤java.lang.UnsatisfiedLinkError中同時加載DB2 JDBC驅動程序

com.ibm.db2.jcc.a.SqlException: [jcc][10389][12245][3.52.95] while loading the native 
library db2jcct2, java.lang.UnsatisfiedLinkError: no db2jcct2 in java.library.path 
an error occurred ERRORCODE=-4472, SQLSTATE=null 

我試着設置-Djava.library.path=/opt/IBM/db2/V9.5/lib64以及

-Djava.library.path=/opt/IBM/db2/V9.5/lib32 

兩條路徑包括libdb2jcct2.so

我也試圖設置LD_LIBRARY_PATH沒有效果。

操作系統是Mac系統

編輯 我還試圖用一個JDBC4司機,db2jcc4.jar因爲jdbc4司機不應該依賴於本地庫。

回答

17

用於JDBC和SQLJ的IBM數據服務器驅動程序包含類型2和類型4 JDBC驅動程序。請檢查以下內容:

1)確保驅動程序位於classpath中:db2jcc.jar。或者,您可以使用JDBC4驅動程序(db2jcc4.jar),但不要將它們都放在類路徑中。

2)確保您在應用程序配置中指定了JCC驅動程序(com.ibm.db2.jcc.DB2Driver)。

3)使用類型4的URL,如jdbc:db2://server:port/database。如果您指定類似2的URL,如jdbc:db2:database那麼驅動程序將開始尋找本地庫。

2

您是否嘗試過設置DYLD_LIBRARY_PATH?可能值得一試。

+0

+1 DYLD_LIBRARY_PATH是在MacOS,而不是LD_LIBRARY_PATH – Fedearne 2010-10-18 07:27:37

+0

感謝時,我檢查這個可惜沒有成功。 – stacker 2010-10-18 07:29:08

2

從路徑看,這看起來是一個linux/unix平臺。嘗試運行strace/truss以查看哪些目錄正在爲庫打開。

+2

+1好的提示,因爲mac上的工具記錄叫做dtrace。 dtrace -n'syscall :: open *:entry {printf(「%s%s」,execname,copyinstr(arg0)); }」 – stacker 2010-10-18 19:21:41

-1

如果java.library.path(使用LD_LIBRARY_PATH env。變量分配)錯誤,則實際上應該會顯示如下內容:「t2本地庫加載失敗」。

您可以檢查java.library.path以確定是否包含此路徑。

System.out.println(System.getProperty("java.library.path"));

你能不能缺少另一個罐子像db2jcc_license_cu.jar

也許發表您的類路徑。你可以通過閱讀財產java.class.path(如上所述)來獲得它。

1

附加一個「driverType = 4;」到您的網址。

0

我在任何地方都找不到明確的例子,所以我在這裏粘貼我的解決方案。固定我的是添加「DriverType」值爲「4」的xa-datasource屬性。

  <xa-datasource jndi-name="java:/DB2DataSource" pool-name="DB2DataSource" enabled="true" use-ccm="true"> 
       <xa-datasource-property name="ServerName"> 
        my.server.com 
       </xa-datasource-property> 
       <xa-datasource-property name="DatabaseName"> 
        SAMBLEDB 
       </xa-datasource-property> 
       <xa-datasource-property name="PortNumber"> 
        50000 
       </xa-datasource-property> 
       <xa-datasource-property name="DriverType"> 
        4 
       </xa-datasource-property> 
       <driver>ibmdb2</driver> 
       <xa-pool> 
        <is-same-rm-override>false</is-same-rm-override> 
       </xa-pool> 
       <security> 
        <user-name>username</user-name> 
        <password>supersecret</password> 
       </security> 
       <recovery> 
        <recover-plugin class-name="org.jboss.jca.core.recovery.ConfigurableRecoveryPlugin"/> 
       </recovery> 
       <validation> 
        <valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.db2.DB2ValidConnectionChecker"/> 
        <background-validation>true</background-validation> 
        <stale-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.db2.DB2StaleConnectionChecker"/> 
        <exception-sorter class-name="org.jboss.jca.adapters.jdbc.extensions.db2.DB2ExceptionSorter"/> 
       </validation> 

      </xa-datasource>