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
>

Reply via email to