2010-10-18 61 views
8

intento usar jboss- costura con una base de datos DB2, se produce el siguiente errorjava.lang.UnsatisfiedLinkError durante la carga de 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 

Intenté fijar -Djava.library.path=/opt/IBM/db2/V9.5/lib64, así como

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

Ambas rutas incluyen libdb2jcct2.so

También intenté establecer LD_LIBRARY_PATH sin ningún efecto.

sistema operativo MacOs es

EDITAR También traté de usar un controlador JDBC4, ya que los conductores db2jcc4.jar jdbc4 no debe confiar en librerías nativas.

Respuesta

17

IBM Data Server Driver para JDBC y SQLJ incluye controladores JDBC de tipo 2 y tipo 4. Compruebe lo siguiente:

1) Asegúrese de que el controlador se encuentre en su classpath: db2jcc.jar. Alternativamente, puede usar el controlador JDBC4 (db2jcc4.jar), pero no ponga ambos en el classpath.

2) Asegúrese de que está especificando el controlador JCC (com.ibm.db2.jcc.DB2Driver) en la configuración de su aplicación.

3) Use una URL de tipo 4 como jdbc:db2://server:port/database. Si especifica una URL de Tipo 2 como jdbc:db2:database, entonces el controlador comenzará a buscar bibliotecas nativas.

2

¿Has probado configurar DYLD_LIBRARY_PATH también? Puede valer la pena intentarlo.

+0

+1 DYLD_LIBRARY_PATH se utiliza en MacOS en lugar de LD_LIBRARY_PATH – Fedearne

+0

gracias, he comprobado esto lamentablemente sin éxito. – stacker

2

Desde la ruta, se ve una plataforma Linux/Unix. Intente ejecutar strace/truss para ver qué directorios se están abriendo para la biblioteca.

+2

+1 buena pista, para los registros la herramienta en un mac se llama dtrace. dtrace -n 'syscall :: open *: entry {printf ("% s% s", execname, copyinstr (arg0)); } ' – stacker

-1

Si el java.library.path (asignado mediante la variable de entorno LD_LIBRARY_PATH) es incorrecto, debería obtener algo así como: "error en la carga de la biblioteca nativa t2".

Puede verificar java.library.path para ver si la ruta está incluida de esta manera.

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

Podría faltar otro frasco como db2jcc_license_cu.jar

Tal publicar la ruta de clases. Puede obtenerlo leyendo la propiedad java.class.path del codigo (como se indica arriba).

1

Agregue un "driverType = 4;" a tu URL

0

No pude encontrar un ejemplo claro en ninguna parte, así que estoy pegando mi solución aquí. Lo que me solucionó fue agregar una propiedad xa-datasource de "DriverType" valor "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> 
Cuestiones relacionadas