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 <[email protected]> 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