The datasource object is threadsafe and a prime example of the factory
pattern. In my designs, I tend to retrieve a reference to it early on
and then store it somewhere convenient for the life of the request.
Then each db access method get's a connection, uses it and closes it
before returning. I'm also a fan of the architecture Chris Shultz
posted (only one try catch w/ try/catches in the finally block for each
db object):
try {
// get connection
// do something
} catch ( exception e ) {
// log or otherwise handle the error
// I tend to wrap the exception and rethrow it in a higher level
exception
} finally {
try { resultset.close() ; } catch (exception e1) {}
try { statement.close() ; } catch (exception e2) {}
try { connection.close() ; } catch (exception e3) {}
}
return ...
Obviously I'm being really terse here, but I think you see the general
idea. As an overall pattern, I tend to encapsulate db access in a small
number of methods like the one above, leaving the remainder of the
project free to work with beans/arrays/hashtables/whatever.
I also like Chris' ideas regarding how to diagnose the issue -- drop the
pool size down really small and see if the pool get's exhausted. What
you are seeing may be some wierd artifact of how DBCP manages it's
connection pool.
--David
sinoea kaabi wrote:
> Right, since I seem to be the only alien having this problem I would
> be happy to know how you write jdbc classes and (if any) a datasource manager.
>
> Do you create a separate class for retrieving connections or datasources.
> Are the methods static.
>
> How do your dao's code look like?
> For example when using a connection, statement, resultset. How and where do
> you close them, and do you return values afterwards.
>
> Do you use the factory pattern?
>
> Any code examples, step by step guide of something that
> works would be very helpful.
>
>
> Basically, a great step by step tutorial would be more helpful than trying to
> spot my problem as
> everyone seems to have a different opinion from the other.
> Frankly speaking, I believe there is no sufficient and a spot-on-clear
> documentation
> of what thread safe servlet containers really mean and the usage of static
> methods
> on these servlet containers.
> The current documentation can be understood in many different ways.
>
> What interests me more about this thread is that many people suggested to
> avoid using
> static methods in web applications.
>
> Avoiding static methods for DAO's is understandable, but avoiding static
> methods for retrieving a datasource
> seems strange.
>
> I have seen millions (if not zillions) code examples on the net where static
> methods are used for retrieving
> datasources.
>
> So I would be happy to see how others write code without static methods.
>
>
> Thanks,
> Sinoea
>
>
>> From: [EMAIL PROTECTED]
>> To: [email protected]
>> Date: Wed, 17 Sep 2008 22:26:16 -0500
>> Subject: RE: Tomcat 5.5, JNDI Connection Pooling, Active connections
>> keepincreasing....
>>
>>
>>> From: sinoea kaabi [mailto:[EMAIL PROTECTED]
>>> Subject: RE: Tomcat 5.5, JNDI Connection Pooling, Active
>>> connections keepincreasing....
>>>
>>> I could accept the fact that we should create new objects of Dao's,
>>> but for getting a datasource or connection it should make sense
>>> to have a utility class with static methods.
>>>
>> Absolutely - Johnny K's suggestion of doing a new every time is utter
>> nonsense.
>>
>>
>>> So is a connection a thread-safe object or not?
>>>
>> No, a connection is not thread-safe: it is designed to be be used by only
>> one thread at a time. If you have multiple threads accessing a connection
>> object *simultaneously*, you will have problems. On the other hand,
>> connection managers (e.g., the commons-dbcp code) are thread-safe; multiple
>> threads may call one simultaneously to acquire connection objects, and each
>> thread is guaranteed to be given a separate object.
>>
>> - Chuck
>>
>>
>> THIS COMMUNICATION MAY CONTAIN CONFIDENTIAL AND/OR OTHERWISE PROPRIETARY
>> MATERIAL and is thus for use only by the intended recipient. If you received
>> this in error, please contact the sender and delete the e-mail and its
>> attachments from all computers.
>>
>> ---------------------------------------------------------------------
>> To start a new topic, e-mail: [email protected]
>> To unsubscribe, e-mail: [EMAIL PROTECTED]
>> For additional commands, e-mail: [EMAIL PROTECTED]
>>
>>
>
> _________________________________________________________________
> Make a mini you and download it into Windows Live Messenger
> http://clk.atdmt.com/UKM/go/111354029/direct/01/
> ---------------------------------------------------------------------
> To start a new topic, e-mail: [email protected]
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>
---------------------------------------------------------------------
To start a new topic, e-mail: [email protected]
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]