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
--
Vyom |
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 <[hidden email]> 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 > |
Thanks, shouldn't this be committed in SVN then?
-- Vyom On 29 February 2016 at 14:51, Scott Gray <[hidden email]> 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 <[hidden email]> 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 > > >
--
Vyom |
Administrator
|
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 <[hidden email]> > 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 <[hidden email]> 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 >>> |
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 <[hidden email]> 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 <[hidden email]> >> 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 <[hidden email]> 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 >>>> >>>> |
Maybe upgrading the jar to commons-dbcp2-2.1.1.jar will address the issue.
Best regards, Pierre Smits ORRTIZ.COM <http://www.orrtiz.com> OFBiz based solutions & services OFBiz Extensions Marketplace http://oem.ofbizci.net/oci-2/ On Wed, Mar 9, 2016 at 12:45 AM, Scott Gray <[hidden email]> wrote: > 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 <[hidden email]> > 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 <[hidden email]> > >> 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 <[hidden email]> 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 > >>>> > >>>> > |
Administrator
|
Before doing so we could check if there are any changes in PoolableManagedConnectionFactory else it's unlikely that the issue Scott fixed is fixed in
2.1.1 (we use 2.1) We could also work with commons to see if Scott's fix can/should be incorporated... (beware working with the commons team can be rough) Jacques Le 09/03/2016 09:27, Pierre Smits a écrit : > Maybe upgrading the jar to commons-dbcp2-2.1.1.jar will address the issue. > > Best regards, > > Pierre Smits > > ORRTIZ.COM <http://www.orrtiz.com> > OFBiz based solutions & services > > OFBiz Extensions Marketplace > http://oem.ofbizci.net/oci-2/ > > On Wed, Mar 9, 2016 at 12:45 AM, Scott Gray <[hidden email]> > wrote: > >> 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 <[hidden email]> >> 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 <[hidden email]> >>>> 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 <[hidden email]> 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 >>>>>> >>>>>> |
Free forum by Nabble | Edit this page |