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 >