tomcat-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Filip Hanik - Dev Lists <devli...@hanik.com>
Subject Re: Right way to close database connection pool
Date Wed, 05 Aug 2009 21:02:22 GMT
and if you don't want to depend on a specific implementation, use 
reflection



On 08/05/2009 11:10 AM, Mark Shifman wrote:
> I do it in a contextListener.
> something like this:
> public void contextDestroyed(ServletContextEvent event) {
> 			Context initContext = new InitialContext();
> 			Context envContext = (Context) initContext.lookup("java:/comp/env");
> 			((BasicDataSource) envContext.lookup("jdbc/myDS")).close();
> }
>
> Kirill Ilyukhin wrote:
>    
>> I use database connection pool which is described in webapp's
>> META-INF/context.html:
>> <Context>
>>    <Resource
>>      auth="Container"
>>      scope="Unshareable"
>>      name="jdbc/myDS"
>>      type="javax.sql.DataSource"
>>      driverClassName="org.postgresql.Driver"
>>      url="jdbc:postgresql://server/db"
>>      ...
>>      />
>> </Context>
>>
>> and in WEB-INF/web.xml:
>> <resource-ref>
>>    <res-ref-name>jdbc/myDS</res-ref-name>
>>    <res-type>javax.sql.DataSource</res-type>
>>    <res-auth>Container</res-auth>
>> </resource-ref>
>>
>> Then I do the following in my code:
>>    InitialContext ctx = new InitialContext();
>>    DataSource ds = (DataSource) ctx.lookup("java:comp/env/jdbc/myDS");
>>    ...
>>    Connection conn;
>>    try {
>>      conn = ds.getConnection();
>>      ...
>>    } finally {
>>      conn.close();
>>    }
>>
>>
>> The problem is that after I stop the webapp the connections to databae
>> server are staying alive. And when I start the webapp again I see new
>> connections are created.
>> As far as I understood from Tomcat bugs discussion this is the expected
>> behaviour. If so, am I supposed to close the DataSource in my code?
>> Surely I can do this in contextDestroyed(...) method of my
>> ServletContextListener, but
>> 1. DataSource has no exposed close() method and the only way to close it
>> is calling close() through reflection. Looks like dirty hack...
>> 2. The connection pool has been created somewhere inside Tomcat. I don't
>> think it's correct to close it from my code.
>>
>> What is the right way to close such a database connection pool? Is there
>> a way to make Tomcat close the pool when the context is being destroyed?
>>
>>
>> Thanks in advance,
>> Kirill.
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: users-unsubscribe@tomcat.apache.org
>> For additional commands, e-mail: users-help@tomcat.apache.org
>>
>>      
>
>    


Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message