A static method can't have access to class instance variables. You could make it static, but it shouldn't reference any variables it didn't locally declare:
/** * Gets a [EMAIL PROTECTED] DataSource} for database connection usage. * @return The datasource for database connection. * @throws SQLException */ public static DataSource getDataSource() throws SQLException { Datasource ds = null ; try { Context initContext = new InitialContext(); ds = (DataSource)initContext.lookup("java:/comp/env/jdbc/myDB"); initContext.close(); return ds; } catch (final NamingException e) { e.printStackTrace(); throw new RuntimeException("Java naming exception when getting connection from tomcat pool: " + e.getMessage()); } } --David sinoea kaabi wrote: > 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] > > --------------------------------------------------------------------- To start a new topic, e-mail: users@tomcat.apache.org To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]