I tried to use new Informix JDBC driver from .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)