2010-10-18 3 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 без эффекта.

ОС MacOs

EDIT Я также попытался использовать драйвер JDBC4, db2jcc4.jar поскольку водители jdbc4 не должны полагаться на родных LIBS.

ответ

17

Драйвер IBM Data Server для JDBC и SQLJ включает в себя как драйверы JDBC типа 2, так и тип 4. Пожалуйста, проверьте следующее:

1) Убедитесь, что драйвер находится в вашем пути к классу: db2jcc.jar. В качестве альтернативы вы можете использовать драйвер JDBC4 (db2jcc4.jar), но не ставьте оба в путь к классам.

2) Убедитесь, что вы указали драйвер JCC (com.ibm.db2.jcc.DB2Driver) в настройках вашего приложения.

3) Используйте URL-адрес типа 4, например jdbc:db2://server:port/database. Если вы укажете URL-адрес типа 2, например jdbc:db2:database, тогда драйвер начнет искать собственные библиотеки.

2

Вы тоже пробовали установить DYLD_LIBRARY_PATH? Возможно, стоит сделать снимок.

+0

+1 DYLD_LIBRARY_PATH используется на MacOs вместо LD_LIBRARY_PATH – Fedearne

+0

спасибо, я проверил это, к сожалению, не увенчались успехом. – stacker

2

С пути это выглядит как платформа linux/unix. Попробуйте запустить strace/truss, чтобы узнать, какие каталоги становятся открытыми для библиотеки.

+2

+1 хороший подсказку, для записей инструмент на mac называется dtrace. dtrace -n 'syscall :: open *: entry {printf ("% s% s", execname, copyinstr (arg0)); }» – stacker

-1

Если значение java.library.path (назначено с использованием переменной LD_LIBRARY_PATH) неверно, вы должны фактически получить что-то вроде: «сбой при загрузке родной библиотеки t2».

Вы можете проверить java.library.path на se, если путь включен как это.

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

Не могли бы вы быть отсутствующий другой сосуд, как db2jcc_license_cu.jar

Может разместить свой путь к классам. Вы можете получить его, прочитав свойство java.class.path с паролем (как и выше).

1

Добавить «driverType = 4;» на ваш URL.

0

Я не мог найти яркого примера в любом месте, поэтому я вставляю свое решение здесь. Я исправил добавление свойства xa-datasource значения «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> 
Смежные вопросы