hibernate - Could not open connection after migration from Oracle 10g to 11g driver -


i have application oracle db usage, uses c3p0 , hibernate. after upgrade hibernate 4 i'm getting exception

java.lang.abstractmethoderror: method oracle/jdbc/driver/t4cpreparedstatement.setbinarystream(iljava/io/inputstream;j)v abstract         @ oracle.jdbc.driver.t4cpreparedstatement.setbinarystream(t4cpreparedstatement.java)     @ oracle.jdbc.driver.t4cpreparedstatement.setbinarystream(t4cpreparedstatement.java) ~[ojdbc14.jar:oracle jdbc driver version - "10.2.0.5.0"]     @ sun.reflect.generatedmethodaccessor257.invoke(unknown source) ~[na:na]     @ sun.reflect.delegatingmethodaccessorimpl.invoke(delegatingmethodaccessorimpl.java:43) ~[na:1.8.0_40]     @ java.lang.reflect.method.invoke(method.java:497) ~[na:1.8.0_40]     @ com.mchange.v2.c3p0.impl.newproxypreparedstatement.setbinarystream(newproxypreparedstatement.java:2133) ~[c3p0-0.9.2.jar:0.9.2]     @ org.hibernate.type.descriptor.sql.blobtypedescriptor$5$1.dobind(blobtypedescriptor.java:147) ~[hibernate-core-4.3.11.final.jar:4.3.11.final]     @ org.hibernate.type.descriptor.sql.blobtypedescriptor$2$1.dobind(blobtypedescriptor.java:103) ~[hibernate-core-4.3.11.final.jar:4.3.11.final]     @ org.hibernate.type.descriptor.sql.basicbinder.bind(basicbinder.java:90) ~[hibernate-core-4.3.11.final.jar:4.3.11.final]     @ org.hibernate.type.abstractstandardbasictype.nullsafeset(abstractstandardbasictype.java:286) ~[hibernate-core-4.3.11.final.jar:4.3.11.final]     @ org.hibernate.type.abstractstandardbasictype.nullsafeset(abstractstandardbasictype.java:281) ~[hibernate-core-4.3.11.final.jar:4.3.11.final]     @ org.hibernate.type.abstractsinglecolumnstandardbasictype.nullsafeset(abstractsinglecolumnstandardbasictype.java:56) ~[hibernate-core-4.3.11.final.jar:4.3.11.final]     @ org.hibernate.persister.entity.abstractentitypersister.dehydrate(abstractentitypersister.java:2843) ~[hibernate-core-4.3.11.final.jar:4.3.11.final]     @ org.hibernate.persister.entity.abstractentitypersister.insert(abstractentitypersister.java:3121) ~[hibernate-core-4.3.11.final.jar:4.3.11.final]     @ org.hibernate.persister.entity.abstractentitypersister.insert(abstractentitypersister.java:3581) ~[hibernate-core-4.3.11.final.jar:4.3.11.final]     @ org.hibernate.action.internal.entityinsertaction.execute(entityinsertaction.java:104) ~[hibernate-core-4.3.11.final.jar:4.3.11.final]     @ org.hibernate.engine.spi.actionqueue.executeactions(actionqueue.java:465) ~[hibernate-core-4.3.11.final.jar:4.3.11.final]     @ org.hibernate.engine.spi.actionqueue.executeactions(actionqueue.java:351) ~[hibernate-core-4.3.11.final.jar:4.3.11.final]     @ org.hibernate.event.internal.abstractflushingeventlistener.performexecutions(abstractflushingeventlistener.java:350) ~[hibernate-core-4.3.11.final.jar:4.3.11.final]     @ org.hibernate.event.internal.defaultflusheventlistener.onflush(defaultflusheventlistener.java:56) ~[hibernate-core-4.3.11.final.jar:4.3.11.final]     @ org.hibernate.internal.sessionimpl.flush(sessionimpl.java:1258) ~[hibernate-core-4.3.11.final.jar:4.3.11.final] 

the proposed solution upgrade oracle driver 10g 11g. purpose replaced ojdbc14.jar ojdbc6.jar (actually ojdbc6_g.jar debug symbols). after application doesn't start more exception

org.hibernate.exception.genericjdbcexception: not open connection     @ org.hibernate.exception.internal.standardsqlexceptionconverter.convert(standardsqlexceptionconverter.java:54) ~[hibernate-core-4.3.11.final.jar:4.3.11.final]     @ org.hibernate.engine.jdbc.spi.sqlexceptionhelper.convert(sqlexceptionhelper.java:126) ~[hibernate-core-4.3.11.final.jar:4.3.11.final]     @ org.hibernate.engine.jdbc.spi.sqlexceptionhelper.convert(sqlexceptionhelper.java:112) ~[hibernate-core-4.3.11.final.jar:4.3.11.final]     @ org.hibernate.engine.jdbc.internal.logicalconnectionimpl.obtainconnection(logicalconnectionimpl.java:235) ~[hibernate-core-4.3.11.final.jar:4.3.11.final]     @ org.hibernate.engine.jdbc.internal.logicalconnectionimpl.getconnection(logicalconnectionimpl.java:171) ~[hibernate-core-4.3.11.final.jar:4.3.11.final]     @ org.hibernate.engine.transaction.internal.jdbc.jdbctransaction.dobegin(jdbctransaction.java:67) ~[hibernate-core-4.3.11.final.jar:4.3.11.final]     @ org.hibernate.engine.transaction.spi.abstracttransactionimpl.begin(abstracttransactionimpl.java:162) ~[hibernate-core-4.3.11.final.jar:4.3.11.final]     @ org.hibernate.internal.sessionimpl.begintransaction(sessionimpl.java:1471) ~[hibernate-core-4.3.11.final.jar:4.3.11.final] caused by: java.sql.sqlexception: connections not acquired underlying database!     @ com.mchange.v2.sql.sqlutils.tosqlexception(sqlutils.java:106) ~[mchange-commons-java-0.2.3.3.jar:na]     @ com.mchange.v2.c3p0.impl.c3p0pooledconnectionpool.checkoutpooledconnection(c3p0pooledconnectionpool.java:677) ~[c3p0-0.9.2.jar:0.9.2]     @ com.mchange.v2.c3p0.impl.abstractpoolbackeddatasource.getconnection(abstractpoolbackeddatasource.java:134) ~[c3p0-0.9.2.jar:0.9.2]     @ org.hibernate.engine.jdbc.connections.internal.datasourceconnectionproviderimpl.getconnection(datasourceconnectionproviderimpl.java:139) ~[hibernate-core-4.3.11.final.jar:4.3.11.final]     @ org.hibernate.internal.abstractsessionimpl$noncontextualjdbcconnectionaccess.obtainconnection(abstractsessionimpl.java:380) ~[hibernate-core-4.3.11.final.jar:4.3.11.final]     @ org.hibernate.engine.jdbc.internal.logicalconnectionimpl.obtainconnection(logicalconnectionimpl.java:228) ~[hibernate-core-4.3.11.final.jar:4.3.11.final]     ... 27 common frames omitted caused by: com.mchange.v2.resourcepool.cannotacquireresourceexception: resourcepool not acquire resource primary factory or source.     @ com.mchange.v2.resourcepool.basicresourcepool.awaitavailable(basicresourcepool.java:1406) ~[c3p0-0.9.2.jar:0.9.2]     @ com.mchange.v2.resourcepool.basicresourcepool.prelimcheckoutresource(basicresourcepool.java:594) ~[c3p0-0.9.2.jar:0.9.2]     @ com.mchange.v2.resourcepool.basicresourcepool.checkoutresource(basicresourcepool.java:514) ~[c3p0-0.9.2.jar:0.9.2]     @ com.mchange.v2.c3p0.impl.c3p0pooledconnectionpool.checkoutandmarkconnectioninuse(c3p0pooledconnectionpool.java:743) ~[c3p0-0.9.2.jar:0.9.2]     @ com.mchange.v2.c3p0.impl.c3p0pooledconnectionpool.checkoutpooledconnection(c3p0pooledconnectionpool.java:670) ~[c3p0-0.9.2.jar:0.9.2]     ... 31 common frames omitted 

i not see neither c3p0 not oracle 11g driver. appeared due c3p0 0.9.2 using log4j instead of slf4j, after adding log4j-over-slf4j can see oracle driver throwing exception, c3p0 logging warning (sic!)

warn  com.mchange.v2.resourcepool.basicresourcepool - com.mchange.v2.resourcepool.basicresourcepool$scatteredacquiretask@412960b2 -- acquisition attempt failed!!! clearing pending acquires. while trying acquire needed new resource, failed succeed more maximum number of allowed acquisition attempts (30). last acquisition attempt exception: java.sql.sqlexception: ora-00604: error occurred @ recursive sql level 1 ora-01882: timezone region  not found     @ oracle.jdbc.driver.t4cttioer.processerror(t4cttioer.java:459) ~[ojdbc6_g.jar:11.2.0.4.0]     @ oracle.jdbc.driver.t4cttioer.processerror(t4cttioer.java:392) ~[ojdbc6_g.jar:11.2.0.4.0]     @ oracle.jdbc.driver.t4cttioer.processerror(t4cttioer.java:384) ~[ojdbc6_g.jar:11.2.0.4.0]     @ oracle.jdbc.driver.t4cttifun.processerror(t4cttifun.java:767) ~[ojdbc6_g.jar:11.2.0.4.0]     @ oracle.jdbc.driver.t4cttioauthenticate.processerror(t4cttioauthenticate.java:450) ~[ojdbc6_g.jar:11.2.0.4.0]     @ oracle.jdbc.driver.t4cttifun.receive(t4cttifun.java:539) ~[ojdbc6_g.jar:11.2.0.4.0]     @ oracle.jdbc.driver.t4cttifun.dorpc(t4cttifun.java:235) ~[ojdbc6_g.jar:11.2.0.4.0]     @ oracle.jdbc.driver.t4cttioauthenticate.dooauth(t4cttioauthenticate.java:382) ~[ojdbc6_g.jar:11.2.0.4.0]     @ oracle.jdbc.driver.t4cttioauthenticate.dooauth(t4cttioauthenticate.java:822) ~[ojdbc6_g.jar:11.2.0.4.0]     @ oracle.jdbc.driver.t4cconnection.logon(t4cconnection.java:477) ~[ojdbc6_g.jar:11.2.0.4.0]     @ oracle.jdbc.driver.physicalconnection.<init>(physicalconnection.java:564) ~[ojdbc6_g.jar:11.2.0.4.0]     @ oracle.jdbc.driver.t4cconnection.<init>(t4cconnection.java:251) ~[ojdbc6_g.jar:11.2.0.4.0]     @ oracle.jdbc.driver.t4cdriverextension.getconnection(t4cdriverextension.java:29) ~[ojdbc6_g.jar:11.2.0.4.0]     @ oracle.jdbc.driver.oracledriver.connect(oracledriver.java:563) ~[ojdbc6_g.jar:11.2.0.4.0]     @ com.mchange.v2.c3p0.drivermanagerdatasource.getconnection(drivermanagerdatasource.java:134) ~[c3p0-0.9.2.jar:0.9.2]     @ com.mchange.v2.c3p0.wrapperconnectionpooldatasource.getpooledconnection(wrapperconnectionpooldatasource.java:183) ~[c3p0-0.9.2.jar:0.9.2]     @ com.mchange.v2.c3p0.wrapperconnectionpooldatasource.getpooledconnection(wrapperconnectionpooldatasource.java:172) ~[c3p0-0.9.2.jar:0.9.2]     @ com.mchange.v2.c3p0.impl.c3p0pooledconnectionpool$1pooledconnectionresourcepoolmanager.acquireresource(c3p0pooledconnectionpool.java:188) ~[c3p0-0.9.2.jar:0.9.2]     @ com.mchange.v2.resourcepool.basicresourcepool.doacquire(basicresourcepool.java:1074) ~[c3p0-0.9.2.jar:0.9.2]     @ com.mchange.v2.resourcepool.basicresourcepool.doacquireanddecrementpendingacquireswithinlockonsuccess(basicresourcepool.java:1061) ~[c3p0-0.9.2.jar:0.9.2]     @ com.mchange.v2.resourcepool.basicresourcepool.access$800(basicresourcepool.java:32) ~[c3p0-0.9.2.jar:0.9.2]     @ com.mchange.v2.resourcepool.basicresourcepool$scatteredacquiretask.run(basicresourcepool.java:1798) ~[c3p0-0.9.2.jar:0.9.2]     @ com.mchange.v2.async.threadpoolasynchronousrunner$poolthread.run(threadpoolasynchronousrunner.java:636) [mchange-commons-java-0.2.3.3.jar:na] 

this problem can cured providing parameter -duser.timezone=gmt command starting jre. question why i'm running java 8 on linux have that? time zone set:

$ date +'%:z %z' +03:00 eest 

why have set additionally variable?

jdbc 11.2 onwards uses timezone name (usually obtained os) when connecting server. there numerous reasons this, based around obviating numerous dst related issues occur if connect using fixed offset utc.

however, if database doesn't understand timezone id, error thrown.

there various ways of dealing this, preferable being update server version understand timezone or patch existing server latest timezone patch available.

alternatively, change timezone client uses either setting tz in environment before execution or using -duser.timezone=xxxx change in jvm.

finally, can use -doracle.jdbc.timezoneasregion=false revert sending fixed offset on connection. not recommended can reintroduce incorrect dst related behaviour.


Comments