You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@commons.apache.org by Philip Arad <ph...@datatex.it> on 2008/04/26 04:27:36 UTC

WAITING on lock=org.apache.commons.pool.impl.GenericObjectPool

Hi

I am using commons-pool-1.3.jar with commons-dbcp-1.2.2.jar.
My program is using concurrent threads that each of them access the DB 
through
BasicDataSource. If I use 5 concurrent threads, the program is running 
without
any problem. The problem starts when I am using 10 threads:
Each thread is using the class ConnectionHelper to get a connection to 
the DB:

------------------------------------------------------------------------------------
package dataAccess.util;

import java.util.*;
import java.sql.*;
import javax.sql.*;
import org.w3c.dom.*;

import org.apache.commons.pool.*;
import org.apache.commons.pool.impl.*;
import org.apache.commons.dbcp.*;

import dataAccess.db.*;
import dataAccess.util.xml.*;

public class ConnectionHelper
{
    private ConnectionHelper()
    {

    }
    private static Hashtable<String,DataSource>iDataSources = null;

    public static synchronized Connection getConnection(String 
aJNDIName) throws Exception
    {
        if(iDataSources == null)
        {
            iDataSources = new Hashtable<String,DataSource>();
        }
        DataSource vDataSource = iDataSources.get(aJNDIName);
        if(vDataSource==null)
        {
            vDataSource = buildDataSource(aJNDIName);
        }
        Connection vConnection = vDataSource.getConnection();
        return vConnection;
    }

    private static DataSource buildDataSource(String aJNDIName) throws 
Exception
    {
        BasicDataSource vBDS = new BasicDataSource();

        String vXMLDSName = 
aJNDIName.substring(aJNDIName.indexOf(":/")+1).toUpperCase()+"-ds.xml";
        vXMLDSName = vXMLDSName.trim();
        XMLHelper vXMLHelper = new XMLHelper();

        Document vXMLDoc = vXMLHelper.retrieveXmlDocument(vXMLDSName);

        Element vRoot = vXMLDoc.getDocumentElement();
        NodeList vParamList = 
vRoot.getElementsByTagName("local-tx-datasource");
        Element vLocalTxDataSource = (Element)vParamList.item(0);

        String vURL = 
vXMLHelper.getFirstValue(vLocalTxDataSource,"connection-url");
        String vConnectionProperty = 
vXMLHelper.getFirstValue(vLocalTxDataSource,"connection-property");
        Element vPropertyElement = 
(Element)vXMLHelper.selectFirstNode(vXMLDoc,"/datasources/local-tx-datasource/connection-property");
        if(vPropertyElement!=null)
        {
            String vLibraryName = 
vXMLHelper.getAttributeAsString(vPropertyElement,"name");
            vURL = vURL + ";" + vLibraryName + "=" + vConnectionProperty;
        }
        vBDS.setUrl(vURL);

        String vDriverClassName = 
vXMLHelper.getFirstValue(vLocalTxDataSource,"driver-class");
        vBDS.setDriverClassName(vDriverClassName);

        String vUserName = 
vXMLHelper.getFirstValue(vLocalTxDataSource,"user-name");
        vBDS.setUsername(vUserName);

        String vPassword = 
vXMLHelper.getFirstValue(vLocalTxDataSource,"password");
        vBDS.setPassword(vPassword);

        String vMaxPoolSize = 
vXMLHelper.getFirstValue(vLocalTxDataSource,"max-pool-size");
        if(vMaxPoolSize.length()>0)
        {
            vBDS.setMaxActive(Integer.parseInt(vMaxPoolSize));
        }
        // Create a PoolableDataSource
        ObjectPool vConnectionPool = new GenericObjectPool(null);
        ConnectionFactory vConnectionFactory = new 
DataSourceConnectionFactory(vBDS);
        PoolableObjectFactory poolableConnectionFactory = new 
PoolableConnectionFactory(vConnectionFactory,vConnectionPool,null,null,false,true);
        DataSource vDataSource = new PoolingDataSource(vConnectionPool);
        iDataSources.put(aJNDIName,vDataSource);
        return vDataSource;
    }

    public static void trace(Object aMsg)
    {
        System.out.println("[ConnectionHelper] " + aMsg);
    }

}
------------------------------------------------------------------------------------
I keep all the DataSources in a Hashtable, so I can re-use it when needed.
When running the program with the threads, it stops executing after a while.
 From the FullThreadDump I receive:
------------------------------------------------------------------------------------
Connecting to localhost:1090
Full Java thread dump with locks info
"JMX server connection timeout 24" Id=24 in TIMED_WAITING on lock=[I@124d504
    at java.lang.Object.wait(Native Method)
    at 
com.sun.jmx.remote.internal.ServerCommunicatorAdmin$Timeout.run(ServerCommunicatorAdmin.java:150)
    at java.lang.Thread.run(Thread.java:619)

    Locked synchronizers: count = 0

"RMI TCP Connection(2)-10.0.0.1" Id=23 in RUNNABLE
    at sun.management.ThreadImpl.dumpThreads0(Native Method)
    at sun.management.ThreadImpl.dumpAllThreads(ThreadImpl.java:374)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at 
com.sun.jmx.mbeanserver.ConvertingMethod.invokeWithOpenReturn(ConvertingMethod.java:167)
    at 
com.sun.jmx.mbeanserver.MXBeanIntrospector.invokeM2(MXBeanIntrospector.java:96)
    at 
com.sun.jmx.mbeanserver.MXBeanIntrospector.invokeM2(MXBeanIntrospector.java:33)
    at 
com.sun.jmx.mbeanserver.MBeanIntrospector.invokeM(MBeanIntrospector.java:208)
    at com.sun.jmx.mbeanserver.PerInterface.invoke(PerInterface.java:120)
    at com.sun.jmx.mbeanserver.MBeanSupport.invoke(MBeanSupport.java:262)
    at javax.management.StandardMBean.invoke(StandardMBean.java:391)
    at 
com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:836)
    at 
com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:761)
    at 
javax.management.remote.rmi.RMIConnectionImpl.doOperation(RMIConnectionImpl.java:1426)
    at 
javax.management.remote.rmi.RMIConnectionImpl.access$200(RMIConnectionImpl.java:72)
    at 
javax.management.remote.rmi.RMIConnectionImpl$PrivilegedOperation.run(RMIConnectionImpl.java:1264)
    at 
javax.management.remote.rmi.RMIConnectionImpl.doPrivilegedOperation(RMIConnectionImpl.java:1359)
    at 
javax.management.remote.rmi.RMIConnectionImpl.invoke(RMIConnectionImpl.java:788)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:305)
    at sun.rmi.transport.Transport$1.run(Transport.java:159)
    at java.security.AccessController.doPrivileged(Native Method)
    at sun.rmi.transport.Transport.serviceCall(Transport.java:155)
    at 
sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:535)
    at 
sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:790)
    at 
sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:649)
    at 
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:885)
    at 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
    at java.lang.Thread.run(Thread.java:619)

    Locked synchronizers: count = 1
      - java.util.concurrent.locks.ReentrantLock$NonfairSync@11d329d

"RMI Scheduler(0)" Id=22 in TIMED_WAITING on 
lock=java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@1e61026
    at sun.misc.Unsafe.park(Native Method)
    at 
java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:198)
    at 
java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:1963)
    at java.util.concurrent.DelayQueue.take(DelayQueue.java:164)
    at 
java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:582)
    at 
java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:575)
    at 
java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:946)
    at 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:906)
    at java.lang.Thread.run(Thread.java:619)

    Locked synchronizers: count = 0

"RMI TCP Connection(1)-127.0.0.1" Id=21 in RUNNABLE (running in native)
    at java.net.SocketInputStream.socketRead0(Native Method)
    at java.net.SocketInputStream.read(SocketInputStream.java:129)
    at java.io.BufferedInputStream.fill(BufferedInputStream.java:218)
    at java.io.BufferedInputStream.read(BufferedInputStream.java:237)
      - locked java.io.BufferedInputStream@d507d3
    at java.io.FilterInputStream.read(FilterInputStream.java:66)
    at 
sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:517)
    at 
sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:790)
    at 
sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:649)
    at 
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:885)
    at 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
    at java.lang.Thread.run(Thread.java:619)

    Locked synchronizers: count = 1
      - java.util.concurrent.locks.ReentrantLock$NonfairSync@1f4c4a3

"Thread-10" Id=20 in BLOCKED on lock=java.lang.Class@99d56b
     owned by Thread-4 Id=14
    at 
dataAccess.util.ConnectionHelper.getConnection(ConnectionHelper.java:26)
    at 
dataAccess.util.DataAccessLocalImpl.getConnection(DataAccessLocalImpl.java:25)
    at 
dataAccess.db.BaseDataAccess.getPrimaryKeysColumnsNames(BaseDataAccess.java:1215)
    at dataAccess.db.BaseDataAccess.getFullColumns(BaseDataAccess.java:1321)
    at dataAccess.db.BaseDataAccess.getFullColumns(BaseDataAccess.java:1298)
    at dataAccess.db.BaseDataAccess.getFullColumns(BaseDataAccess.java:1272)
    at 
dataAccess.util.CreateStatement.createStatement(CreateStatement.java:63)
    at dataAccess.util.CreateStatement.process(CreateStatement.java:48)
    at 
dataAccess.db.thread.query.QueryRunnerThread.run(QueryRunnerThread.java:19)

    Locked synchronizers: count = 0

"Thread-9" Id=19 in BLOCKED on lock=java.lang.Class@99d56b
     owned by Thread-4 Id=14
    at 
dataAccess.util.ConnectionHelper.getConnection(ConnectionHelper.java:26)
    at 
dataAccess.util.DataAccessLocalImpl.getConnection(DataAccessLocalImpl.java:25)
    at 
dataAccess.db.BaseDataAccess.getPrimaryKeysColumnsNames(BaseDataAccess.java:1215)
    at dataAccess.db.BaseDataAccess.getFullColumns(BaseDataAccess.java:1321)
    at dataAccess.db.BaseDataAccess.getFullColumns(BaseDataAccess.java:1298)
    at dataAccess.db.BaseDataAccess.getFullColumns(BaseDataAccess.java:1272)
    at 
dataAccess.util.CreateStatement.createStatement(CreateStatement.java:63)
    at dataAccess.util.CreateStatement.process(CreateStatement.java:48)
    at 
dataAccess.db.thread.query.QueryRunnerThread.run(QueryRunnerThread.java:19)

    Locked synchronizers: count = 0

"Thread-8" Id=18 in BLOCKED on lock=java.lang.Class@99d56b
     owned by Thread-4 Id=14
    at 
dataAccess.util.ConnectionHelper.getConnection(ConnectionHelper.java:26)
    at 
dataAccess.util.DataAccessLocalImpl.getConnection(DataAccessLocalImpl.java:25)
    at 
dataAccess.db.BaseDataAccess.getPrimaryKeysColumnsNames(BaseDataAccess.java:1215)
    at dataAccess.db.BaseDataAccess.getFullColumns(BaseDataAccess.java:1321)
    at dataAccess.db.BaseDataAccess.getFullColumns(BaseDataAccess.java:1298)
    at dataAccess.db.BaseDataAccess.getFullColumns(BaseDataAccess.java:1272)
    at 
dataAccess.util.CreateStatement.createStatement(CreateStatement.java:63)
    at dataAccess.util.CreateStatement.process(CreateStatement.java:48)
    at 
dataAccess.db.thread.query.QueryRunnerThread.run(QueryRunnerThread.java:19)

    Locked synchronizers: count = 0

"Thread-7" Id=17 in BLOCKED on lock=java.lang.Class@99d56b
     owned by Thread-4 Id=14
    at 
dataAccess.util.ConnectionHelper.getConnection(ConnectionHelper.java:26)
    at 
dataAccess.util.DataAccessLocalImpl.getConnection(DataAccessLocalImpl.java:25)
    at 
dataAccess.db.BaseDataAccess.getPrimaryKeysColumnsNames(BaseDataAccess.java:1215)
    at dataAccess.db.BaseDataAccess.getFullColumns(BaseDataAccess.java:1321)
    at dataAccess.db.BaseDataAccess.getFullColumns(BaseDataAccess.java:1298)
    at dataAccess.db.BaseDataAccess.getFullColumns(BaseDataAccess.java:1272)
    at 
dataAccess.util.CreateStatement.createStatement(CreateStatement.java:63)
    at dataAccess.util.CreateStatement.process(CreateStatement.java:48)
    at 
dataAccess.db.thread.query.QueryRunnerThread.run(QueryRunnerThread.java:19)

    Locked synchronizers: count = 0

"Thread-6" Id=16 in BLOCKED on lock=java.lang.Class@99d56b
     owned by Thread-4 Id=14
    at 
dataAccess.util.ConnectionHelper.getConnection(ConnectionHelper.java:26)
    at 
dataAccess.util.DataAccessLocalImpl.getConnection(DataAccessLocalImpl.java:25)
    at 
dataAccess.db.BaseDataAccess.getPrimaryKeysColumnsNames(BaseDataAccess.java:1215)
    at dataAccess.db.BaseDataAccess.getFullColumns(BaseDataAccess.java:1321)
    at dataAccess.db.BaseDataAccess.getFullColumns(BaseDataAccess.java:1298)
    at dataAccess.db.BaseDataAccess.getFullColumns(BaseDataAccess.java:1272)
    at 
dataAccess.util.CreateStatement.createStatement(CreateStatement.java:63)
    at dataAccess.util.CreateStatement.process(CreateStatement.java:48)
    at 
dataAccess.db.thread.query.QueryRunnerThread.run(QueryRunnerThread.java:19)

    Locked synchronizers: count = 0

"Thread-5" Id=15 in BLOCKED on lock=java.lang.Class@99d56b
     owned by Thread-4 Id=14
    at 
dataAccess.util.ConnectionHelper.getConnection(ConnectionHelper.java:26)
    at 
dataAccess.util.DataAccessLocalImpl.getConnection(DataAccessLocalImpl.java:25)
    at 
dataAccess.db.BaseDataAccess.getPrimaryKeysColumnsNames(BaseDataAccess.java:1215)
    at dataAccess.db.BaseDataAccess.getFullColumns(BaseDataAccess.java:1321)
    at dataAccess.db.BaseDataAccess.getFullColumns(BaseDataAccess.java:1298)
    at dataAccess.db.BaseDataAccess.getFullColumns(BaseDataAccess.java:1272)
    at 
dataAccess.util.CreateStatement.createStatement(CreateStatement.java:63)
    at dataAccess.util.CreateStatement.process(CreateStatement.java:48)
    at 
dataAccess.db.thread.query.QueryRunnerThread.run(QueryRunnerThread.java:19)

    Locked synchronizers: count = 0

"Thread-4" Id=14 in WAITING on 
lock=org.apache.commons.pool.impl.GenericObjectPool@18a80d4
    at java.lang.Object.wait(Native Method)
    at java.lang.Object.wait(Object.java:485)
    at 
org.apache.commons.pool.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:942)
    at 
org.apache.commons.dbcp.PoolingDataSource.getConnection(PoolingDataSource.java:96)
    at 
dataAccess.util.ConnectionHelper.getConnection(ConnectionHelper.java:37)
      - locked java.lang.Class@99d56b
    at 
dataAccess.util.DataAccessLocalImpl.getConnection(DataAccessLocalImpl.java:25)
    at dataAccess.db.BaseDataAccess.getFullColumns(BaseDataAccess.java:1284)
    at dataAccess.db.BaseDataAccess.getFullColumns(BaseDataAccess.java:1272)
    at 
dataAccess.util.CreateStatement.createStatement(CreateStatement.java:63)
    at dataAccess.util.CreateStatement.process(CreateStatement.java:48)
    at 
dataAccess.db.thread.query.QueryRunnerThread.run(QueryRunnerThread.java:19)

    Locked synchronizers: count = 0

"Thread-3" Id=13 in BLOCKED on lock=java.lang.Class@99d56b
     owned by Thread-4 Id=14
    at 
dataAccess.util.ConnectionHelper.getConnection(ConnectionHelper.java:26)
    at 
dataAccess.util.DataAccessLocalImpl.getConnection(DataAccessLocalImpl.java:25)
    at 
dataAccess.db.BaseDataAccess.getPrimaryKeysColumnsNames(BaseDataAccess.java:1215)
    at dataAccess.db.BaseDataAccess.getFullColumns(BaseDataAccess.java:1321)
    at dataAccess.db.BaseDataAccess.getFullColumns(BaseDataAccess.java:1298)
    at dataAccess.db.BaseDataAccess.getFullColumns(BaseDataAccess.java:1272)
    at 
dataAccess.util.CreateStatement.createStatement(CreateStatement.java:63)
    at dataAccess.util.CreateStatement.process(CreateStatement.java:48)
    at 
dataAccess.db.thread.query.QueryRunnerThread.run(QueryRunnerThread.java:19)

    Locked synchronizers: count = 0

"Thread-2" Id=12 in BLOCKED on lock=java.lang.Class@99d56b
     owned by Thread-4 Id=14
    at 
dataAccess.util.ConnectionHelper.getConnection(ConnectionHelper.java:26)
    at 
dataAccess.util.DataAccessLocalImpl.getConnection(DataAccessLocalImpl.java:25)
    at dataAccess.db.BaseDataAccess.getFullColumns(BaseDataAccess.java:1284)
    at dataAccess.db.BaseDataAccess.getFullColumns(BaseDataAccess.java:1272)
    at 
dataAccess.util.CreateStatement.createStatement(CreateStatement.java:63)
    at dataAccess.util.CreateStatement.process(CreateStatement.java:48)
    at 
dataAccess.db.thread.query.QueryRunnerThread.run(QueryRunnerThread.java:19)

    Locked synchronizers: count = 0

"Thread-1" Id=11 in BLOCKED on lock=java.lang.Class@99d56b
     owned by Thread-4 Id=14
    at 
dataAccess.util.ConnectionHelper.getConnection(ConnectionHelper.java:26)
    at 
dataAccess.util.DataAccessLocalImpl.getConnection(DataAccessLocalImpl.java:25)
    at 
dataAccess.db.BaseDataAccess.getPrimaryKeysColumnsNames(BaseDataAccess.java:1215)
    at dataAccess.db.BaseDataAccess.getFullColumns(BaseDataAccess.java:1321)
    at dataAccess.db.BaseDataAccess.getFullColumns(BaseDataAccess.java:1298)
    at dataAccess.db.BaseDataAccess.getFullColumns(BaseDataAccess.java:1272)
    at 
dataAccess.util.CreateStatement.createStatement(CreateStatement.java:63)
    at dataAccess.util.CreateStatement.process(CreateStatement.java:48)
    at 
dataAccess.db.thread.query.QueryRunnerThread.run(QueryRunnerThread.java:19)

    Locked synchronizers: count = 0

"RMI TCP Accept-1090" Id=10 in RUNNABLE (running in native)
    at java.net.PlainSocketImpl.socketAccept(Native Method)
    at java.net.PlainSocketImpl.accept(PlainSocketImpl.java:384)
      - locked java.net.SocksSocketImpl@101da9
    at java.net.ServerSocket.implAccept(ServerSocket.java:453)
    at java.net.ServerSocket.accept(ServerSocket.java:421)
    at 
sun.rmi.transport.tcp.TCPTransport$AcceptLoop.executeAcceptLoop(TCPTransport.java:369)
    at 
sun.rmi.transport.tcp.TCPTransport$AcceptLoop.run(TCPTransport.java:341)
    at java.lang.Thread.run(Thread.java:619)

    Locked synchronizers: count = 0

"RMI TCP Accept-0" Id=9 in RUNNABLE (running in native)
    at java.net.PlainSocketImpl.socketAccept(Native Method)
    at java.net.PlainSocketImpl.accept(PlainSocketImpl.java:384)
      - locked java.net.SocksSocketImpl@b6421
    at java.net.ServerSocket.implAccept(ServerSocket.java:453)
    at java.net.ServerSocket.accept(ServerSocket.java:421)
    at 
sun.rmi.transport.tcp.TCPTransport$AcceptLoop.executeAcceptLoop(TCPTransport.java:369)
    at 
sun.rmi.transport.tcp.TCPTransport$AcceptLoop.run(TCPTransport.java:341)
    at java.lang.Thread.run(Thread.java:619)

    Locked synchronizers: count = 0

"Attach Listener" Id=5 in RUNNABLE

    Locked synchronizers: count = 0

"Signal Dispatcher" Id=4 in RUNNABLE

    Locked synchronizers: count = 0

"Finalizer" Id=3 in WAITING on 
lock=java.lang.ref.ReferenceQueue$Lock@1dacb2b
    at java.lang.Object.wait(Native Method)
    at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:116)
    at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:132)
    at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:159)

    Locked synchronizers: count = 0

"Reference Handler" Id=2 in WAITING on 
lock=java.lang.ref.Reference$Lock@15092c0
    at java.lang.Object.wait(Native Method)
    at java.lang.Object.wait(Object.java:485)
    at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:116)

    Locked synchronizers: count = 0

"main" Id=1 in RUNNABLE
    at java.lang.Thread.isAlive(Native Method)
    at 
dataAccess.db.thread.query.QueryRunnerThread.isRunning(QueryRunnerThread.java:30)
    at 
dataAccess.db.thread.query.ConcurrentQuery.checkForCompletions(ConcurrentQuery.java:95)
    at 
dataAccess.db.thread.query.ConcurrentQuery.resolve(ConcurrentQuery.java:116)
    at 
dataAccess.db.cmd.CreateStatementFactory.process(CreateStatementFactory.java:67)
    at 
dataAccess.db.cmd.CreateStatementFactory.<init>(CreateStatementFactory.java:35)
    at 
dataAccess.db.cmd.DB2SerFactory.createConverters(DB2SerFactory.java:50)
    at dataAccess.db.cmd.DB2SerFactory.<init>(DB2SerFactory.java:23)
    at 
dataAccess.db.cmd.DB2SerFactoryParam.<init>(DB2SerFactoryParam.java:49)
    at 
dataAccess.db.cmd.DB2SerFactoryParam.main(DB2SerFactoryParam.java:110)

    Locked synchronizers: count = 0


No deadlock found.
------------------------------------------------------------------------------------
Pay attention to "Thread-4":
------------------------------------------------------------------------------------
"Thread-4" Id=14 in WAITING on 
lock=org.apache.commons.pool.impl.GenericObjectPool@18a80d4
    at java.lang.Object.wait(Native Method)
    at java.lang.Object.wait(Object.java:485)
    at 
org.apache.commons.pool.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:942)
    at 
org.apache.commons.dbcp.PoolingDataSource.getConnection(PoolingDataSource.java:96)
    at 
dataAccess.util.ConnectionHelper.getConnection(ConnectionHelper.java:37)
      - locked java.lang.Class@99d56b
    at 
dataAccess.util.DataAccessLocalImpl.getConnection(DataAccessLocalImpl.java:25)
    at dataAccess.db.BaseDataAccess.getFullColumns(BaseDataAccess.java:1284)
    at dataAccess.db.BaseDataAccess.getFullColumns(BaseDataAccess.java:1272)
    at 
dataAccess.util.CreateStatement.createStatement(CreateStatement.java:63)
    at dataAccess.util.CreateStatement.process(CreateStatement.java:48)
    at 
dataAccess.db.thread.query.QueryRunnerThread.run(QueryRunnerThread.java:19)
------------------------------------------------------------------------------------

Can you tell me what should I do to solve this problem?

Regards
Philip



---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@commons.apache.org
For additional commands, e-mail: user-help@commons.apache.org


Re: Performance of commons-pool and commons-dbcp

Posted by Achim Westermann <a....@alkacon.com>.
Hi
I do think that I experienced locking issues with web applications that 
rely on commons pool / dbcp. I just have open a page and hold down F5 
with firefox and get in the application server log sth. like:

Sep 12, 2008 3:59:49 PM org.apache.catalina.core.ApplicationDispatcher 
invoke
SEVERE: Servlet.service() for servlet jsp threw exception
java.util.NoSuchElementException: Timeout waiting for idle object
	at 
org.apache.commons.pool.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:825)
	at org.apache.commons.dbcp.PoolingDriver.connect(PoolingDriver.java:176)
	at java.sql.DriverManager.getConnection(Unknown Source)
	at java.sql.DriverManager.getConnection(Unknown Source)
...


However I never spent time trying to optimize pool configuration.

kind regards,

Achim




Philip Arad schrieb:
> Hi
> 
> I would like to know if anyone has the experience of using commons-pool 
> and commons-dbcp
> with a heavy loaded server, that have to serve more then 1000,2000 or 
> more users at the same
> time.
> 
> Philip
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: user-unsubscribe@commons.apache.org
> For additional commands, e-mail: user-help@commons.apache.org
> 


---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@commons.apache.org
For additional commands, e-mail: user-help@commons.apache.org


Performance of commons-pool and commons-dbcp

Posted by Philip Arad <ph...@datatex.it>.
Hi

I would like to know if anyone has the experience of using commons-pool 
and commons-dbcp
with a heavy loaded server, that have to serve more then 1000,2000 or 
more users at the same
time.

Philip

---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@commons.apache.org
For additional commands, e-mail: user-help@commons.apache.org


Re: [dbcp] Re: WAITING on lock=org.apache.commons.pool.impl.GenericObjectPool

Posted by Philip Arad <ph...@datatex.it>.
Hi

Thanks for your advices.
Working perfectly even with 50 threads.

Philip

Phil Steitz wrote:
> On Sat, Apr 26, 2008 at 2:57 AM, Philip Arad <ph...@datatex.it> wrote:
>   
>> Hi
>>
>>  Thanks for your help.
>>  You are right, I am using commons-pool-1.4.jar.
>>  First I have setup the numbers of concurrent threads to 8, an ran the
>> program
>>  several times. It is executing correctly.
>>
>>  Then I have setup the following attributes on BasicDataSource:
>>        vBDS.setMaxActive(400);
>>        vBDS.setMinIdle(0);
>>        vBDS.setMaxWait(3000L);
>>  And set up the numbers of concurrent threads to 10.
>>  After running it again, I had to same problem.
>>  It seems like the setting of the attributes did not effect the
>> configuration
>>  of the BasicDataSource.
>>  Are there any parameters to setup on the PoolingDataSource?
>>  Is it possible that the connections are not returned to the pool after
>> being
>>  closed?
>>     
>
> Sorry, I had not looked carefully at the code in your initial post.
> Unless you want two layers of pooling for some reason, there is no
> need to wrap the BasicDataSource in a PoolingDataSource as you are
> doing here:
>
> // Create a PoolableDataSource
> ObjectPool vConnectionPool = new GenericObjectPool(null);
> ConnectionFactory vConnectionFactory = new DataSourceConnectionFactory(vBDS);
>
> Normally, you should be able to just return the BasicDataSource, vBDS,
> which already has a connection pool associated with it.
> Alternatively, you could create your own PoolingDataSource using a
> Driver- or DriverManagerConnectionFactory.  See the examples linked on
> the DBCP web page (ManualPoolingDataSourceExample,
> BasicDataSourceExample).
>
> The maxActive and maxWait properties are poperties of the underlying
> object pool.  BasicDataSource exposes these properties via getters and
> setters and creates a PoolingDataSource to source connections from the
> pool.  When you create a PoolingDataSource manually, you need to set
> the properties on the object pool directly.
>
> Phil
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: user-unsubscribe@commons.apache.org
> For additional commands, e-mail: user-help@commons.apache.org
>
>
>   

---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@commons.apache.org
For additional commands, e-mail: user-help@commons.apache.org


Re: [dbcp] Re: WAITING on lock=org.apache.commons.pool.impl.GenericObjectPool

Posted by Phil Steitz <ph...@gmail.com>.
On Sat, Apr 26, 2008 at 2:57 AM, Philip Arad <ph...@datatex.it> wrote:
> Hi
>
>  Thanks for your help.
>  You are right, I am using commons-pool-1.4.jar.
>  First I have setup the numbers of concurrent threads to 8, an ran the
> program
>  several times. It is executing correctly.
>
>  Then I have setup the following attributes on BasicDataSource:
>        vBDS.setMaxActive(400);
>        vBDS.setMinIdle(0);
>        vBDS.setMaxWait(3000L);
>  And set up the numbers of concurrent threads to 10.
>  After running it again, I had to same problem.
>  It seems like the setting of the attributes did not effect the
> configuration
>  of the BasicDataSource.
>  Are there any parameters to setup on the PoolingDataSource?
>  Is it possible that the connections are not returned to the pool after
> being
>  closed?

Sorry, I had not looked carefully at the code in your initial post.
Unless you want two layers of pooling for some reason, there is no
need to wrap the BasicDataSource in a PoolingDataSource as you are
doing here:

// Create a PoolableDataSource
ObjectPool vConnectionPool = new GenericObjectPool(null);
ConnectionFactory vConnectionFactory = new DataSourceConnectionFactory(vBDS);

Normally, you should be able to just return the BasicDataSource, vBDS,
which already has a connection pool associated with it.
Alternatively, you could create your own PoolingDataSource using a
Driver- or DriverManagerConnectionFactory.  See the examples linked on
the DBCP web page (ManualPoolingDataSourceExample,
BasicDataSourceExample).

The maxActive and maxWait properties are poperties of the underlying
object pool.  BasicDataSource exposes these properties via getters and
setters and creates a PoolingDataSource to source connections from the
pool.  When you create a PoolingDataSource manually, you need to set
the properties on the object pool directly.

Phil

---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@commons.apache.org
For additional commands, e-mail: user-help@commons.apache.org


Re: [dbcp] Re: WAITING on lock=org.apache.commons.pool.impl.GenericObjectPool

Posted by Hanson Char <ha...@gmail.com>.
>Is it possible that the connections are not returned to the pool after
being closed?

Or is it possible that the connections are never been closed from you
application ?

Hanson

On Sat, Apr 26, 2008 at 2:57 AM, Philip Arad <ph...@datatex.it> wrote:

> Hi
>
> Thanks for your help.
> You are right, I am using commons-pool-1.4.jar.
> First I have setup the numbers of concurrent threads to 8, an ran the
> program
> several times. It is executing correctly.
>
> Then I have setup the following attributes on BasicDataSource:
>       vBDS.setMaxActive(400);
>       vBDS.setMinIdle(0);
>       vBDS.setMaxWait(3000L);
> And set up the numbers of concurrent threads to 10.
> After running it again, I had to same problem.
> It seems like the setting of the attributes did not effect the
> configuration
> of the BasicDataSource.
> Are there any parameters to setup on the PoolingDataSource?
> Is it possible that the connections are not returned to the pool after
> being
> closed?
>
> Regards
> Philip
>
>
>
> Philip
>
>
> Phil Steitz wrote:
>
> > On Fri, Apr 25, 2008 at 7:27 PM, Philip Arad <ph...@datatex.it>
> > wrote:
> >
> >
> > > Hi
> > >
> > >  I am using commons-pool-1.3.jar with commons-dbcp-1.2.2.jar.
> > >
> > >
> >
> > Stack trace looks like pool 1.4, which is the latest release.
> >
> >
> >
> > >  My program is using concurrent threads that each of them access the
> > > DB
> > > through
> > >  BasicDataSource. If I use 5 concurrent threads, the program is
> > > running
> > > without
> > >  any problem. The problem starts when I am using 10 threads:
> > >  Each thread is using the class ConnectionHelper to get a connection
> > > to the
> > > DB:
> > >
> > >
> > >
> > <snip/>
> >
> >
> >
> > >
> > > ------------------------------------------------------------------------------------
> > >  "Thread-4" Id=14 in WAITING on
> > > lock=org.apache.commons.pool.impl.GenericObjectPool@18a80d4
> > >   at java.lang.Object.wait(Native Method)
> > >   at java.lang.Object.wait(Object.java:485)
> > >   at
> > >
> > > org.apache.commons.pool.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:942)
> > >   at
> > >
> > > org.apache.commons.dbcp.PoolingDataSource.getConnection(PoolingDataSource.java:96)
> > >   at
> > >
> > > dataAccess.util.ConnectionHelper.getConnection(ConnectionHelper.java:37)
> > >     - locked java.lang.Class@99d56b
> > >   at
> > >
> > > dataAccess.util.DataAccessLocalImpl.getConnection(DataAccessLocalImpl.java:25)
> > >   at
> > > dataAccess.db.BaseDataAccess.getFullColumns(BaseDataAccess.java:1284)
> > >   at
> > > dataAccess.db.BaseDataAccess.getFullColumns(BaseDataAccess.java:1272)
> > >   at
> > >
> > > dataAccess.util.CreateStatement.createStatement(CreateStatement.java:63)
> > >   at dataAccess.util.CreateStatement.process(CreateStatement.java:48)
> > >   at
> > >
> > > dataAccess.db.thread.query.QueryRunnerThread.run(QueryRunnerThread.java:19)
> > >
> > >
> > > ------------------------------------------------------------------------------------
> > >
> > >  Can you tell me what should I do to solve this problem?
> > >
> > >
> >
> > The thread above is waiting for a connection to become available.  The
> > default maxActive setting of BasicDataSource is 8, so if you want to
> > have more than 8 connections concurrently in use, you need to increase
> > this.  See the BasicDataSource javadoc.   See also the maxWait
> > property if you would prefer getConnection to time out and throw an
> > exception when there are no idle connections available.
> >
> > Phil
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: user-unsubscribe@commons.apache.org
> > For additional commands, e-mail: user-help@commons.apache.org
> >
> >
> >
> >
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: user-unsubscribe@commons.apache.org
> For additional commands, e-mail: user-help@commons.apache.org
>
>

Re: [dbcp] Re: WAITING on lock=org.apache.commons.pool.impl.GenericObjectPool

Posted by Philip Arad <ph...@datatex.it>.
Hi

Thanks for your help.
You are right, I am using commons-pool-1.4.jar.
First I have setup the numbers of concurrent threads to 8, an ran the 
program
several times. It is executing correctly.

Then I have setup the following attributes on BasicDataSource:
        vBDS.setMaxActive(400);
        vBDS.setMinIdle(0);
        vBDS.setMaxWait(3000L);
And set up the numbers of concurrent threads to 10.
After running it again, I had to same problem.
It seems like the setting of the attributes did not effect the configuration
of the BasicDataSource.
Are there any parameters to setup on the PoolingDataSource?
Is it possible that the connections are not returned to the pool after being
closed?

Regards
Philip



Philip

Phil Steitz wrote:
> On Fri, Apr 25, 2008 at 7:27 PM, Philip Arad <ph...@datatex.it> wrote:
>   
>> Hi
>>
>>  I am using commons-pool-1.3.jar with commons-dbcp-1.2.2.jar.
>>     
>
> Stack trace looks like pool 1.4, which is the latest release.
>
>   
>>  My program is using concurrent threads that each of them access the DB
>> through
>>  BasicDataSource. If I use 5 concurrent threads, the program is running
>> without
>>  any problem. The problem starts when I am using 10 threads:
>>  Each thread is using the class ConnectionHelper to get a connection to the
>> DB:
>>
>>     
> <snip/>
>
>   
>> ------------------------------------------------------------------------------------
>>  "Thread-4" Id=14 in WAITING on
>> lock=org.apache.commons.pool.impl.GenericObjectPool@18a80d4
>>    at java.lang.Object.wait(Native Method)
>>    at java.lang.Object.wait(Object.java:485)
>>    at
>> org.apache.commons.pool.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:942)
>>    at
>> org.apache.commons.dbcp.PoolingDataSource.getConnection(PoolingDataSource.java:96)
>>    at
>> dataAccess.util.ConnectionHelper.getConnection(ConnectionHelper.java:37)
>>      - locked java.lang.Class@99d56b
>>    at
>> dataAccess.util.DataAccessLocalImpl.getConnection(DataAccessLocalImpl.java:25)
>>    at dataAccess.db.BaseDataAccess.getFullColumns(BaseDataAccess.java:1284)
>>    at dataAccess.db.BaseDataAccess.getFullColumns(BaseDataAccess.java:1272)
>>    at
>> dataAccess.util.CreateStatement.createStatement(CreateStatement.java:63)
>>    at dataAccess.util.CreateStatement.process(CreateStatement.java:48)
>>    at
>> dataAccess.db.thread.query.QueryRunnerThread.run(QueryRunnerThread.java:19)
>>
>> ------------------------------------------------------------------------------------
>>
>>  Can you tell me what should I do to solve this problem?
>>     
>
> The thread above is waiting for a connection to become available.  The
> default maxActive setting of BasicDataSource is 8, so if you want to
> have more than 8 connections concurrently in use, you need to increase
> this.  See the BasicDataSource javadoc.   See also the maxWait
> property if you would prefer getConnection to time out and throw an
> exception when there are no idle connections available.
>
> Phil
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: user-unsubscribe@commons.apache.org
> For additional commands, e-mail: user-help@commons.apache.org
>
>
>   

---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@commons.apache.org
For additional commands, e-mail: user-help@commons.apache.org


[dbcp] Re: WAITING on lock=org.apache.commons.pool.impl.GenericObjectPool

Posted by Phil Steitz <ph...@gmail.com>.
On Fri, Apr 25, 2008 at 7:27 PM, Philip Arad <ph...@datatex.it> wrote:
> Hi
>
>  I am using commons-pool-1.3.jar with commons-dbcp-1.2.2.jar.

Stack trace looks like pool 1.4, which is the latest release.

>  My program is using concurrent threads that each of them access the DB
> through
>  BasicDataSource. If I use 5 concurrent threads, the program is running
> without
>  any problem. The problem starts when I am using 10 threads:
>  Each thread is using the class ConnectionHelper to get a connection to the
> DB:
>
<snip/>

> ------------------------------------------------------------------------------------
>  "Thread-4" Id=14 in WAITING on
> lock=org.apache.commons.pool.impl.GenericObjectPool@18a80d4
>    at java.lang.Object.wait(Native Method)
>    at java.lang.Object.wait(Object.java:485)
>    at
> org.apache.commons.pool.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:942)
>    at
> org.apache.commons.dbcp.PoolingDataSource.getConnection(PoolingDataSource.java:96)
>    at
> dataAccess.util.ConnectionHelper.getConnection(ConnectionHelper.java:37)
>      - locked java.lang.Class@99d56b
>    at
> dataAccess.util.DataAccessLocalImpl.getConnection(DataAccessLocalImpl.java:25)
>    at dataAccess.db.BaseDataAccess.getFullColumns(BaseDataAccess.java:1284)
>    at dataAccess.db.BaseDataAccess.getFullColumns(BaseDataAccess.java:1272)
>    at
> dataAccess.util.CreateStatement.createStatement(CreateStatement.java:63)
>    at dataAccess.util.CreateStatement.process(CreateStatement.java:48)
>    at
> dataAccess.db.thread.query.QueryRunnerThread.run(QueryRunnerThread.java:19)
>
> ------------------------------------------------------------------------------------
>
>  Can you tell me what should I do to solve this problem?

The thread above is waiting for a connection to become available.  The
default maxActive setting of BasicDataSource is 8, so if you want to
have more than 8 connections concurrently in use, you need to increase
this.  See the BasicDataSource javadoc.   See also the maxWait
property if you would prefer getConnection to time out and throw an
exception when there are no idle connections available.

Phil

---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@commons.apache.org
For additional commands, e-mail: user-help@commons.apache.org