java.lang.UnsatisfiedLinkError while loading DB2 JDBC driver

26,954

Solution 1

The IBM Data Server Driver for JDBC and SQLJ includes both Type 2 and Type 4 JDBC drivers. Please check the following:

1) Make sure the driver is in your classpath: db2jcc.jar. Alternatively you can use the JDBC4 driver (db2jcc4.jar), but don't put both in the classpath.

2) Make sure that you're specifying the JCC driver (com.ibm.db2.jcc.DB2Driver) in your app configuration.

3) Use a Type-4 URL like jdbc:db2://server:port/database. If you specify a Type-2 URL like jdbc:db2:database then the driver will start looking for native libraries.

Solution 2

Have you tried setting DYLD_LIBRARY_PATH too? Might be worth a shot.

Solution 3

From the path, this looks a linux /unix platform. Try running strace/truss to see which directories are getting opened for library.

Solution 4

Append a "driverType=4;" to your URL.

Solution 5

I couldn't find a clear example anywhere, so I'm pasting my solution here. What fixed me up was adding a xa-datasource-property of "DriverType" value "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>
Share:
26,954
stacker
Author by

stacker

Data Explorer English

Updated on June 11, 2020

Comments

  • stacker
    stacker almost 4 years

    I try to use jboss-seam with a db2 database, the following error occurs

    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
    

    I tried setting -Djava.library.path=/opt/IBM/db2/V9.5/lib64 as well as

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

    Both paths include libdb2jcct2.so

    I also tried to set LD_LIBRARY_PATH with no effect.

    OS is MacOs

    EDIT I also tried to use a JDBC4 driver , db2jcc4.jar since jdbc4 drivers shouldn't rely on native libs.