I'm pretty sure it's a bug in DBCP2 but the issue was complicated and I didn't have time to do any more than fix it at the time. Maybe it doesn't affect all dbs though because I'm surprised no one else has raised the issue. I can't say what affect it might have on other database servers.
On 9 March 2016 at 03:35, Jacques Le Roux <jacques.le.r...@les7arts.com> wrote: > Hi Scott, > > I think it's a good question from Vyom. Is that only specific to MySQL? A > specific MySQL version? > > Thanks > > Jacques > > > Le 29/02/2016 13:31, Vyom Jain a écrit : > >> Thanks, shouldn't this be committed in SVN then? >> >> -- >> Vyom >> >> On 29 February 2016 at 14:51, Scott Gray <scott.g...@hotwaxsystems.com> >> wrote: >> >> Actually yes, I have encountered this. I fixed it with the following >>> class, which you would then use in the DBCPConnectionFactory class in >>> place >>> of the PoolableManagedConnectionFactory. >>> >>> /** >>> >>> * An extension to the DBCP2 PoolableManagedConnectionFactory that >>> ensures >>> that >>> >>> * PoolableConnections are always set to setCacheState(false). This is >>> needed >>> >>> * because otherwise PoolableConnections will cache the autoCommit >>> setting >>> of the >>> >>> * underlying connection even though the flag on the underlying >>> connection >>> is often set >>> >>> * directly (specifically by LocalXAConnectionFactory.LocalXAResource, >>> see >>> start() >>> >>> * and commit()). >>> >>> */ >>> >>> public class DBCPPoolableManagedConnectionFactory extends >>> PoolableManagedConnectionFactory { >>> >>> >>> @Override >>> >>> public synchronized PooledObject<PoolableConnection> makeObject() >>> throws >>> Exception { >>> >>> PooledObject<PoolableConnection> pooledObject = >>> super.makeObject(); >>> >>> pooledObject.getObject().setCacheState(false); >>> >>> return pooledObject; >>> >>> } >>> >>> >>> public DBCPPoolableManagedConnectionFactory(XAConnectionFactory >>> connFactory, ObjectName dataSourceJmxName) { >>> >>> super(connFactory, dataSourceJmxName); >>> >>> } >>> >>> >>> } >>> >>> Regards >>> Scott >>> >>> On 26 February 2016 at 19:48, Vyom Jain <vyom0...@gmail.com> wrote: >>> >>> Hello Everyone, >>>> >>>> I've been observing frequent errors such as >>>> "org.ofbiz.entity.GenericDataSourceException: Unable to esablish a >>>> connection with the database. (Unable to acquire a new connection from >>>> >>> the >>> >>>> pool)". While OFBiz restart helps for sometime, but we would like to >>>> >>> avoid >>> >>>> frequent restarts. >>>> >>>> I'm wondering if someone else has faced same issues or would like to >>>> >>> share >>> >>>> their thoughts. Could it be that upgrade to DBCP2 has introduced new >>>> >>> bugs? >>> >>>> I'm using OFBiz trunk (revision 1704086) + MySQL v5.6 + MySQL JDBC >>>> driver >>>> v5.1.38 + JDK 7. This version uses Apache DBCP2. >>>> >>>> entityengine.xml configuration - >>>> - pool-minsize = "2" >>>> - pool-maxsize = "250" >>>> - time-between-eviction-runs-millis="600000" [used to give same errors >>>> >>> with >>> >>>> -1] >>>> >>>> Below is the stacktrace of associated with one of these errors - >>>> >>>> org.ofbiz.entity.GenericDataSourceException: Unable to esablish a >>>> connection with the database. (Unable to acquire a new connection from >>>> >>> the >>> >>>> pool). Rolling back transaction. >>>> org.ofbiz.entity.GenericDataSourceException: Unable to esablish a >>>> connection with the database. (Unable to acquire a new connection from >>>> >>> the >>> >>>> pool) >>>> at >>>> org.ofbiz.entity.jdbc.SQLProcessor.getConnection(SQLProcessor.java:263) >>>> ~[ofbiz-entity.jar:?] >>>> at >>>> >>>> >>> org.ofbiz.entity.jdbc.SQLProcessor.prepareStatement(SQLProcessor.java:366) >>> >>>> ~[ofbiz-entity.jar:?] >>>> at >>>> >>>> >>> org.ofbiz.entity.jdbc.SQLProcessor.prepareStatement(SQLProcessor.java:350) >>> >>>> ~[ofbiz-entity.jar:?] >>>> at >>>> org.ofbiz.entity.datasource.GenericDAO.select(GenericDAO.java:521) >>>> ~[ofbiz-entity.jar:?] >>>> at >>>> org.ofbiz.entity.datasource.GenericDAO.select(GenericDAO.java:492) >>>> ~[ofbiz-entity.jar:?] >>>> at >>>> >>>> >>>> >>> org.ofbiz.entity.datasource.GenericHelperDAO.findByPrimaryKey(GenericHelperDAO.java:80) >>> >>>> ~[ofbiz-entity.jar:?] >>>> at >>>> org.ofbiz.entity.GenericDelegator.findOne(GenericDelegator.java:1580) >>>> [ofbiz-entity.jar:?] >>>> at com.mycompany.CustomEvents.addToCart(CustomEvents.java:544) >>>> [ofbiz-mycompanyerp.jar:?] >>>> at sun.reflect.GeneratedMethodAccessor202.invoke(Unknown Source) >>>> >>> ~[?:?] >>> >>>> at >>>> >>>> >>>> >>> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) >>> >>>> ~[?:1.7.0_79] >>>> at java.lang.reflect.Method.invoke(Method.java:606) ~[?:1.7.0_79] >>>> at >>>> org.ofbiz.webapp.event.JavaEventHandler.invoke(JavaEventHandler.java:92) >>>> [ofbiz-webapp.jar:?] >>>> at >>>> org.ofbiz.webapp.event.JavaEventHandler.invoke(JavaEventHandler.java:78) >>>> [ofbiz-webapp.jar:?] >>>> at >>>> >>>> org.ofbiz.webapp.control.RequestHandler.runEvent(RequestHandler.java:759) >>>> [ofbiz-webapp.jar:?] >>>> at >>>> >>>> >>> org.ofbiz.webapp.control.RequestHandler.doRequest(RequestHandler.java:476) >>> >>>> [ofbiz-webapp.jar:?] >>>> at >>>> org.ofbiz.webapp.control.ControlServlet.doGet(ControlServlet.java:213) >>>> [ofbiz-webapp.jar:?] >>>> at >>>> org.ofbiz.webapp.control.ControlServlet.doPost(ControlServlet.java:88) >>>> [ofbiz-webapp.jar:?] >>>> at javax.servlet.http.HttpServlet.service(HttpServlet.java:646) >>>> [servlet-api-3.0.jar:?] >>>> at javax.servlet.http.HttpServlet.service(HttpServlet.java:727) >>>> [servlet-api-3.0.jar:?] >>>> at >>>> >>>> >>>> >>> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303) >>> >>>> [tomcat-7.0.64-catalina.jar:7.0.64] >>>> at >>>> >>>> >>>> >>> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) >>> >>>> [tomcat-7.0.64-catalina.jar:7.0.64] >>>> at >>>> org.ofbiz.webapp.control.ContextFilter.doFilter(ContextFilter.java:324) >>>> [ofbiz-webapp.jar:?] >>>> at >>>> >>>> >>>> >>> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) >>> >>>> [tomcat-7.0.64-catalina.jar:7.0.64] >>>> at >>>> >>>> >>>> >>> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) >>> >>>> [tomcat-7.0.64-catalina.jar:7.0.64] >>>> at >>>> >>>> >>>> >>> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220) >>> >>>> [tomcat-7.0.64-catalina.jar:7.0.64] >>>> at >>>> >>>> >>>> >>> org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122) >>> >>>> [tomcat-7.0.64-catalina.jar:7.0.64] >>>> at >>>> >>>> >>>> >>> org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:505) >>> >>>> [tomcat-7.0.64-catalina.jar:7.0.64] >>>> at >>>> >>>> >>>> >>> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170) >>> >>>> [tomcat-7.0.64-catalina.jar:7.0.64] >>>> at >>>> >>>> >>>> >>> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103) >>> >>>> [tomcat-7.0.64-catalina.jar:7.0.64] >>>> at >>>> >>>> >>>> >>> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116) >>> >>>> [tomcat-7.0.64-catalina.jar:7.0.64] >>>> at >>>> >>>> org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:956) >>>> [tomcat-7.0.64-catalina.jar:7.0.64] >>>> at >>>> >>>> >>> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:423) >>> >>>> [tomcat-7.0.64-catalina.jar:7.0.64] >>>> at >>>> org.apache.coyote.ajp.AjpProcessor.process(AjpProcessor.java:190) >>>> [tomcat-7.0.64-tomcat-coyote.jar:7.0.64] >>>> at >>>> >>>> >>>> >>> org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:625) >>> >>>> [tomcat-7.0.64-tomcat-coyote.jar:7.0.64] >>>> at >>>> >>>> >>>> org.apache.tomcat.util.net >>> .JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316) >>> >>>> [tomcat-7.0.64-tomcat-coyote.jar:7.0.64] >>>> at >>>> >>>> >>>> >>> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) >>> >>>> [?:1.7.0_79] >>>> at >>>> >>>> >>>> >>> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) >>> >>>> [?:1.7.0_79] >>>> at >>>> >>>> >>>> >>> org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) >>> >>>> [tomcat-7.0.64-tomcat-coyote.jar:7.0.64] >>>> at java.lang.Thread.run(Thread.java:745) [?:1.7.0_79] >>>> Caused by: java.sql.SQLException: Unable to acquire a new connection >>>> from >>>> the pool >>>> at >>>> >>>> >>>> >>> org.apache.commons.dbcp2.managed.ManagedConnection.updateTransactionStatus(ManagedConnection.java:130) >>> >>>> ~[commons-dbcp2-2.1.jar:2.1] >>>> at >>>> >>>> >>>> >>> org.apache.commons.dbcp2.managed.ManagedConnection.<init>(ManagedConnection.java:60) >>> >>>> ~[commons-dbcp2-2.1.jar:2.1] >>>> at >>>> >>>> >>>> >>> org.apache.commons.dbcp2.managed.ManagedDataSource.getConnection(ManagedDataSource.java:82) >>> >>>> ~[commons-dbcp2-2.1.jar:2.1] >>>> at >>>> >>>> >>>> >>> org.ofbiz.entity.connection.DebugManagedDataSource.getConnection(DebugManagedDataSource.java:52) >>> >>>> ~[ofbiz-entity.jar:?] >>>> at >>>> >>>> >>>> >>> org.ofbiz.entity.connection.DBCPConnectionFactory.getConnection(DBCPConnectionFactory.java:63) >>> >>>> ~[ofbiz-entity.jar:?] >>>> at >>>> >>>> >>>> >>> org.ofbiz.geronimo.GeronimoTransactionFactory.getConnection(GeronimoTransactionFactory.java:83) >>> >>>> ~[ofbiz-geronimo.jar:?] >>>> at >>>> org.ofbiz.entity.jdbc.SQLProcessor.getConnection(SQLProcessor.java:260) >>>> ~[ofbiz-entity.jar:?] >>>> ... 38 more >>>> Caused by: java.util.NoSuchElementException: Timeout waiting for idle >>>> object >>>> at >>>> >>>> >>>> >>> org.apache.commons.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:449) >>> >>>> ~[commons-pool2-2.3.jar:2.3] >>>> at >>>> >>>> >>>> >>> org.apache.commons.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:363) >>> >>>> ~[commons-pool2-2.3.jar:2.3] >>>> at >>>> >>>> >>>> >>> org.apache.commons.dbcp2.managed.ManagedConnection.updateTransactionStatus(ManagedConnection.java:127) >>> >>>> ~[commons-dbcp2-2.1.jar:2.1] >>>> at >>>> >>>> >>>> >>> org.apache.commons.dbcp2.managed.ManagedConnection.<init>(ManagedConnection.java:60) >>> >>>> ~[commons-dbcp2-2.1.jar:2.1] >>>> at >>>> >>>> >>>> >>> org.apache.commons.dbcp2.managed.ManagedDataSource.getConnection(ManagedDataSource.java:82) >>> >>>> ~[commons-dbcp2-2.1.jar:2.1] >>>> at >>>> >>>> >>>> >>> org.ofbiz.entity.connection.DebugManagedDataSource.getConnection(DebugManagedDataSource.java:52) >>> >>>> ~[ofbiz-entity.jar:?] >>>> at >>>> >>>> >>>> >>> org.ofbiz.entity.connection.DBCPConnectionFactory.getConnection(DBCPConnectionFactory.java:63) >>> >>>> ~[ofbiz-entity.jar:?] >>>> at >>>> >>>> >>>> >>> org.ofbiz.geronimo.GeronimoTransactionFactory.getConnection(GeronimoTransactionFactory.java:83) >>> >>>> ~[ofbiz-geronimo.jar:?] >>>> at >>>> org.ofbiz.entity.jdbc.SQLProcessor.getConnection(SQLProcessor.java:260) >>>> ~[ofbiz-entity.jar:?] >>>> ... 38 more >>>> >>>> -- >>>> Vyom >>>> >>>>