Friday, 14 July 2017

java.sql.SQLException: Could not commit with auto-commit set on

I saw this earlier: -

[14/07/17 20:00:02:593 BST]     FFDC Exception:java.sql.SQLException ProbeId:587
java.sql.SQLException: Could not commit with auto-commit set on

in the FFDC logs for an IBM BPM 8.57 JVM: -

view /opt/ibm/WebSphereProfiles/AppSrv01/logs/ffdc/AppClusterMember1_72d880eb_17.07.14_20.00.02.5935101433318572951378.txt 

I am using Oracle 12c ( specifically  )

and am using the version of the Oracle JDBC drivers that ship with WAS -

ls -altrc /opt/ibm/WebSphere/AppServer/jdbcdrivers/Oracle/

total 6632
-rw-r--r-- 1 wasadmin wasadmins 3389454 Jul 10 19:59 ojdbc6.jar
drwxr-xr-x 5 wasadmin wasadmins      45 Jul 10 19:59 ..
drwxr-xr-x 2 wasadmin wasadmins      40 Jul 10 19:59 .
-rw-r--r-- 1 wasadmin wasadmins 3397734 Jul 10 19:59 ojdbc7.jar

specifically: -

/opt/ibm/WebSphere/AppServer/java_1.7.1_64/jre/bin/java -jar /opt/ibm/WebSphere/AppServer/jdbcdrivers/Oracle/ojdbc6.jar -getversion

Oracle JDBC 4.0 compiled with JDK6 on Thu_Apr_04_15:06:58_PDT_2013
#Default Connection Properties Resource
#Fri Jul 14 20:11:21 BST 2017

Source: Checking the Oracle JDBC Driver Version on a Weblogic Server

Thankfully, this IBM developerWorks Answers ( dwAnswers ) page: -

provides an answer: -

This kind of exceptions occur when the Oracle JDBC Driver (ojdbc6.jar) version 12 or above will be used. Version 12 and above of the driver is more strictly than earlier driver versions. You can solve the problem, by setting the jvm-argument:

•  -Doracle.jdbc.autoCommitSpecCompliant=false
on all affected servers.

as does this IBM Technote: -

Once I added the JVM property, and restarted the AppCluster, all was well.

For the record, this is what I now have in server.xml in the context of JVM arguments: -

    <jvmEntries xmi:id="JavaVirtualMachine_1499716654178" verboseModeClass="false" verboseModeGarbageCollection="true" verboseModeJNI="false" initialHeapSize="1536" maximumHeapSize="2560" runHProf="false" hprofArguments="" debugMode="false" debugArgs="-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=7777" genericJvmArguments="${IBMSCMX} ${IBMGCPOLICY_GENCON} ${IBMJITPMC} -Xmns256m -Xmnx768m -Xgc:preferredHeapBase=0x100000000 -Xdisableexplicitgc -Xss2048k -Declipse.bundle.setTCCL=false  -Doracle.jdbc.autoCommitSpecCompliant=false" executableJarFileName="" disableJIT="false">

and, via the GUI: -

No comments:

Yay, VMware Fusion and macOS Big Sur - no longer "NAT good friends" - forgive the double negative and the terrible pun ...

After macOS 11 Big Sur was released in 2020, VMware updated their Fusion product to v12 and, sadly, managed to break Network Address Trans...