javajdbcinformix

Problem connecting to Informix database with new JDBC driver 15.0.0.0


I tried to use new Informix JDBC driver from https://mvnrepository.com/artifact/com.ibm.informix/jdbc

I have simple program that tests connection time to a database. With Informix JDBC driver 4.50.JC11 it works well:

export CLASSPATH=jdbc-4.50.11.jar

[mn:~/jdbc_connect_test] ./jdbc_connect_test_ifx.sh
OS: Linux 6.12.13-200.fc41.x86_64 amd64
Java version: 21.0.6 Red Hat, Inc.
--------------
JDBC drivers:
com.informix.jdbc.IfxDriver@76ed5528 ver: 4.2
--------------
Test [jdbc:informix-sqli://test-informix.testd:9088/multi:informixserver=ol_testifx]
JDBC driver version: '4.50.JC11'; major: 4; minor: 50
Test  1:    88 [ms] com.informix.jdbc.IfxSqliConnect@725bef66
Test  2:    14 [ms] com.informix.jdbc.IfxSqliConnect@2aaf7cc2
...

When I changed CLASSPATH to point at jdbc-15.0.0.0.jar it fails with strange exception:

export CLASSPATH=jdbc-15.0.0.0.jar

[mn:~/jdbc_connect_test] ./jdbc_connect_test_ifx.sh
OS: Linux 6.12.13-200.fc41.x86_64 amd64
Java version: 21.0.6 Red Hat, Inc.
--------------
JDBC drivers:
com.informix.jdbc.IfxDriver@7a81197d ver: 4.2
com.informix.jdbc.InformixDriver@27bc2616 ver: 15.0
--------------
Test [jdbc:informix-sqli://test-informix.testd:9088/multi:informixserver=ol_testifx]
Exception in thread "main" java.lang.IllegalMonitorStateException
    at java.base/java.util.concurrent.locks.ReentrantLock$Sync.tryRelease(ReentrantLock.java:175)
    at java.base/java.util.concurrent.locks.AbstractQueuedSynchronizer.release(AbstractQueuedSynchronizer.java:1059)
    at java.base/java.util.concurrent.locks.ReentrantLock.unlock(ReentrantLock.java:494)
    at com.informix.jdbc.IfxSqliConnect.unlockSession(IfxSqliConnect.java:2696)
    at com.informix.jdbc.IfxSqli.executeStatementQuery(IfxSqli.java:1239)
    at com.informix.jdbc.IfxResultSet.executeQuery(IfxResultSet.java:132)
    at com.informix.jdbc.IfxStatement.executeQuery(IfxStatement.java:744)
    at com.informix.jdbc.IfxStatement.executeQuery(IfxStatement.java:169)
    at com.informix.jdbc.IfxStatement.executeQuery(IfxStatement.java:157)
    at com.informix.jdbc.IfxSqliConnect.getSqlLogicalChar(IfxSqliConnect.java:3795)
    at com.informix.jdbc.IfxDatabaseMetaData.<init>(IfxDatabaseMetaData.java:306)
    at com.informix.jdbc.IfxSqliConnect.getMetaData(IfxSqliConnect.java:1737)
    at jdbc_connect_test.test_connection(jdbc_connect_test.java:34)
    at jdbc_connect_test.main(jdbc_connect_test.java:91)

Code fails on db.getMetaData(), but I tried also simple executeQuery() and it fails with the same exception:

public static void test_connection(int n, String jdbc_url, String jdbc_username, String jdbc_passwd)
    {
    long t0 = System.currentTimeMillis();
    Connection db = null;
    try
        {
        try
            {
            db = DriverManager.getConnection(jdbc_url, jdbc_username, jdbc_passwd);
            long t2 = System.currentTimeMillis();
            if (n == 0)
                {
                DatabaseMetaData dbmi = db.getMetaData();
                System.out.format("JDBC driver version: '%s'; major: %s; minor: %s\n", dbmi.getDriverVersion(), dbmi.getDriverMajorVersion(), dbmi.getDriverMinorVersion());
                }
            System.out.format("Test %2d: %5d [ms]\t%s\n", (n+1), (t2 - t0), db);
            }
        finally
            {
            if (db != null)
                db.close();
            }
        }
    catch (SQLException e)
        {
        e.printStackTrace();
        }
    }

Anybody tried Informix JDBC driver 15.0.0.0 with success?


EDIT

With the new 15.0 driver I can connect to Informix 14.10 database and it works, but it cannot connect with Informix 11.50.

With the old 4.50 driver I can connect to Informix 11.50 database:

[mn:~/test/tools/javatools/jdbc_connect_test] ./jdbc_connect_test_ifx.sh
OS: Linux 6.12.13-200.fc41.x86_64 amd64
Java version: 21.0.6 Red Hat, Inc.
classpath: bson-5.3.1.jar:jdbc-4.50.11.jar:
--------------
JDBC drivers:
com.informix.jdbc.IfxDriver@38af3868 ver: 4.2
--------------
Test [jdbc:informix-sqli://test-informix.testd:9088/multi:informixserver=ol_testifx]
db=com.informix.jdbc.IfxSqliConnect@6d7b4f4c
db.isClosed()=false
SELECT FIRST 1 DBINFO('version','full') FROM systables
IBM Informix Dynamic Server Version 11.50.FC4
JDBC driver version: '4.50.JC11'; major: 4; minor: 50
Test  1:   288 [ms] com.informix.jdbc.IfxSqliConnect@6d7b4f4c
Test  2:    20 [ms] com.informix.jdbc.IfxSqliConnect@63e2203c
...

With the new 15.0 driver I can connect to Informix 14.10 stores demo database

[mn:~/test/tools/javatools/jdbc_connect_test] ./jdbc_connect_test_ifx.sh
OS: Linux 6.12.13-200.fc41.x86_64 amd64
Java version: 21.0.6 Red Hat, Inc.
classpath: bson-5.3.1.jar:jdbc-15.0.0.0.jar:
--------------
JDBC drivers:
com.informix.jdbc.IfxDriver@3af49f1c ver: 4.2
com.informix.jdbc.InformixDriver@7106e68e ver: 15.0
--------------
Test [jdbc:informix-sqli://localhost:9088/stores_demo:INFORMIXSERVER=informix]
db=JDBC Connection #1
db.isClosed()=false
SELECT FIRST 1 DBINFO('version','full') FROM systables
IBM Informix Dynamic Server Version 14.10.FC9W1DE
JDBC driver version: '15.0.0'; major: 15; minor: 0
Test  1:   106 [ms] JDBC Connection #1
Test  2:    17 [ms] JDBC Connection #2
...

With the new 15.0 driver I cannot to Informix 11.50 database:

[mn:~/test/tools/javatools/jdbc_connect_test] ./jdbc_connect_test_ifx.sh
OS: Linux 6.12.13-200.fc41.x86_64 amd64
Java version: 21.0.6 Red Hat, Inc.
classpath: bson-5.3.1.jar:jdbc-15.0.0.0.jar:
--------------
JDBC drivers:
com.informix.jdbc.IfxDriver@3af49f1c ver: 4.2
com.informix.jdbc.InformixDriver@7106e68e ver: 15.0
--------------
Test [jdbc:informix-sqli://test-informix.testd:9088/multi:informixserver=ol_testifx]
db=JDBC Connection #1
db.isClosed()=false
SELECT FIRST 1 DBINFO('version','full') FROM systables
Exception in thread "main" java.lang.IllegalMonitorStateException
    at java.base/java.util.concurrent.locks.ReentrantLock$Sync.tryRelease(ReentrantLock.java:175)
    at java.base/java.util.concurrent.locks.AbstractQueuedSynchronizer.release(AbstractQueuedSynchronizer.java:1059)
    at java.base/java.util.concurrent.locks.ReentrantLock.unlock(ReentrantLock.java:494)
    at com.informix.jdbc.IfxSqliConnect.unlockSession(IfxSqliConnect.java:2696)
    at com.informix.jdbc.IfxSqli.executeStatementQuery(IfxSqli.java:1239)
    at com.informix.jdbc.IfxResultSet.executeQuery(IfxResultSet.java:132)
    at com.informix.jdbc.IfxStatement.executeQuery(IfxStatement.java:744)
    at com.informix.jdbc.IfxStatement.executeQuery(IfxStatement.java:169)
    at com.informix.jdbc.IfxStatement.executeQuery(IfxStatement.java:157)
    at jdbc_connect_test.showSelectResults(jdbc_connect_test.java:28)
    at jdbc_connect_test.test_connection(jdbc_connect_test.java:55)
    at jdbc_connect_test.main(jdbc_connect_test.java:114)

Solution

  • The new Informix JDBC driver 15.0.0.0 is not compatible with older Informix databases. It works with 14.10, 15.0, but does not work with 11.50.