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]

Reply via email to