Just a question here, I am using a Data class to retrieve the datasource public class Data {
/** * Gets a [EMAIL PROTECTED] DataSource} for database connection usage. * @return The datasource for database connection. * @throws SQLException */ public static DataSource getDataSource() throws SQLException { if (ds == null) { DATASOURCE.info("DataSource is NULL "); MANY_CONNECTIONS.info("DataSource is NULL "); try { final Context initContext = new InitialContext(); ds = (BasicDataSource)initContext.lookup("java:/comp/env/jdbc/myDB"); initContext.close(); logDataSource(ds); return ds; } catch (final NamingException e) { e.printStackTrace(); throw new RuntimeException("Java naming exception when getting connection from tomcat pool: " + e.getMessage()); } } else { logDataSource(ds); return ds; } } } Collection branches = new BranchData().loadBranches(Data.getDataSource(), 1); Can the getDataSource method be static? Thanks, Sinoea > From: [EMAIL PROTECTED] > To: users@tomcat.apache.org > Subject: Re: Tomcat 5.5, JNDI Connection Pooling, Active connections keep > increasing.... > Date: Wed, 17 Sep 2008 12:25:17 +0200 > > > ----- Original Message ----- > From: "sinoea kaabi" > To: "Tomcat Users List" > Sent: Wednesday, September 17, 2008 11:31 AM > Subject: RE: Tomcat 5.5, JNDI Connection Pooling, Active connections keep > increasing.... > > > > Thanks, > First I will try to close resources before returning. > > Although I am sure that the finally blocks are reached, since I use logging > in the last finally block and the log is > outputted. > > try { > > } finally { > connection.close(); > Data.logConnection(connection); // this is logged > } > > But I'll give it a try anyway. > > Object object = null; > try { > > } finally { > close resources.. > } > return object; > > > The static methods are not thread-safe you say! > > So, what exactly does it mean when we say that Tomcat is thread safe for > requests. > Tomcat creates a new thread for each request, so somehow my static methods > are then thread safe (incdirectly, since it is managed by Tomcat). > > Request A> new Thread A> using my static method for loadBranches(...) > Request B> new Thread B> using my static method for loadBranches(...) > > Thread B must wait until Thread A is done. > > Since threads are managed by tomcat, no thread should be able to use a > static method that is used by another thread. > > Or in fact, you must be right, should I declare them synchronized? > > public static synchronized loadBranches(...) > > Thanks, > Sinoea > > ===================================== > > Yes your finally blocks are working.... I checked that... the book is right > ;) > > > On threading..... No.... just make the class *non* static.... > > Collection branches = *NEW* > BranchData().loadBranches(Data.getDataSource(), 1); > > so now each thread has its own class..... > > I imagine thats tomcats pool is already thread safe... > > synchronized will work... but its a bottle neck... it will make tomcat Q... > and there is a setting in tomcat somewhere where one can make it single > threaded... but again it will slow it down... you only use that when a coder > has cocked up ;) > > In threading the thing to watch is those global variables... so without > seeing your actual code its difficult to spot problems... > Thread safety is more of an art than a science... > > New should do it because every thread is getting its own class... so a class > is isolated, the connection and everything else is inside it... and they > cant mess with each other... in theory... if there are no shared globals... > > So I think whats happening in your static class is something like this... > > Thread 1 opens connection 1.... inside class > Thread 2 open connection 2.... also inside class > > Close connection 2 > Close connection 2 > > ie same connection is no closed twice and connection 1 slips out... that > wont happen if the class in not static... > > .... I think ;) > > have fun... > --------------------------------------------------------------------------- > HARBOR : http://www.kewlstuff.co.za/index.htm > The most powerful application server on earth. > The only real POJO Application Server. > See it in Action : http://www.kewlstuff.co.za/cd_tut_swf/whatisejb1.htm > --------------------------------------------------------------------------- > > > --------------------------------------------------------------------- > To start a new topic, e-mail: users@tomcat.apache.org > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > _________________________________________________________________ Win New York holidays with Kellogg’s & Live Search http://clk.atdmt.com/UKM/go/111354033/direct/01/ --------------------------------------------------------------------- To start a new topic, e-mail: users@tomcat.apache.org To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]