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