2010-10-18 38 views
8

tôi cố gắng sử dụng JBoss-đường may với một cơ sở dữ liệu DB2, các lỗi sau xảy rajava.lang.UnsatisfiedLinkError khi tải DB2 JDBC lái xe

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 

tôi đã cố gắng thiết lập -Djava.library.path=/opt/IBM/db2/V9.5/lib64 cũng như

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

Cả hai đường dẫn đều bao gồm libdb2jcct2.so

Tôi cũng đã cố gắng đặt LD_LIBRARY_PATH không có hiệu lực.

OS là hệ điều hành MacOS

EDIT Tôi cũng cố gắng sử dụng một trình điều khiển JDBC4, db2jcc4.jar từ trình điều khiển jdbc4 không nên dựa vào libs bản địa.

Trả lời

17

Trình điều khiển máy chủ dữ liệu IBM cho JDBC và SQLJ bao gồm cả trình điều khiển JDBC loại 2 và loại 4. Vui lòng kiểm tra như sau:

1) Đảm bảo trình điều khiển nằm trong đường dẫn lớp của bạn: db2jcc.jar. Ngoài ra, bạn có thể sử dụng trình điều khiển JDBC4 (db2jcc4.jar), nhưng không đặt cả hai trong classpath.

2) Đảm bảo rằng bạn đang chỉ định trình điều khiển JCC (com.ibm.db2.jcc.DB2Driver) trong cấu hình ứng dụng của bạn.

3) Sử dụng URL loại 4 như jdbc:db2://server:port/database. Nếu bạn chỉ định một URL Type-2 như jdbc:db2:database thì trình điều khiển sẽ bắt đầu tìm kiếm các thư viện gốc.

2

Bạn đã thử đặt DYLD_LIBRARY_PATH chưa? Có thể đáng để bắn.

+0

+1 DYLD_LIBRARY_PATH được sử dụng trên MacO thay vì LD_LIBRARY_PATH – Fedearne

+0

cảm ơn, tôi đã kiểm tra điều này thật không may mà không thành công. – stacker

2

Từ đường dẫn, điều này trông giống như một nền tảng linux/unix. Hãy thử chạy strace/truss để xem thư mục nào đang được mở cho thư viện.

+2

+1 gợi ý tốt, cho các bản ghi công cụ trên một mac được gọi là dtrace. dtrace -n 'syscall :: open *: entry {printf ("% s% s", tên thực thi, copyinstr (arg0)); } ' – stacker

-1

Nếu số java.library.path (được gán bằng biến LD_LIBRARY_PATH) là sai, bạn thực sự nên nhận được thông tin như sau: "không tải được thư viện gốc t2".

Bạn có thể kiểm tra java.library.path để biết nếu đường dẫn được bao gồm như thế này.

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

bạn có thể bị mất một jar như db2jcc_license_cu.jar

lẽ gửi classpath của bạn. Bạn có thể lấy nó bằng cách đọc các tài sản java.class.path từ coide (như trên).

1

Nối "driverType = 4;" vào URL của bạn.

0

Tôi không thể tìm thấy ví dụ rõ ràng ở bất cứ đâu, vì vậy tôi đang dán giải pháp của mình tại đây. Điều cố định của tôi là thêm một thuộc tính xa-datasource-property của giá trị "DriverType" "4".

  <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> 
Các vấn đề liên quan