You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tomcat.apache.org by "Luke (Terry) Vanderfluit" <lu...@chipcity.com.au> on 2004/09/14 04:26:01 UTC

RE: [OFF-TOPIC]RE: Some pretty basic Tomcat ConnectionPooling Questions????

Hi,

further to this thread I have now implemented the database connection as
follows:

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
To get a database connection via an external class
see below the code that does this:

1. the init() method that gets the DataSource from an external
connection.
2. a method that queries the database and gets the connection from an
external class.
3. the DBConnection class itself
4. a destroy method that sets the DataSource to null within the calling
class.

I'm pretty sure that doing 'conn = DBConnection.getDBConnection()' is a
good move so as not duplicate code.

<question>
However, I'm not sure about 'ds = DBConnection.getDataSource()'...
that might just as well go as code in the init() method itself.
What is more efficient?
</question>

<question>
Alistair had some interesting comments, namely that
1. We should rename the DBConnection class to DBConnectionFactory. I
have often wondered what a factory is in this sense, could you
elaborate?
2. Adding a finalize() method in the external class 
--> wouldn't that nullify the DataSource before we are finished with it?
--> isn't that doubling up with the destroy() method?
--> how much better would it be to nullify the DataSource in a
finalize() method, a destroy() method or both?
3. I'd like to find out more about 'adding a static reference to itself
and adding a static method called getInstance()' 
--> how much more efficient would that be?
--> how do I implement that?
</question>

This is very interesting and I'm sure it leads to a lot cleaner runnning
of the application.


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1. The init() method withing the calling servlet:
// "init" does DataSource lookup
   public void init(ServletConfig config) throws ServletException {
      super.init(config);
      try {ds = DBConnection.getDataSource();}
      catch (Exception e) {}
   } // end init()
===============
2. A method within the calling servlet that uses the external class to
set up a Database connection:
// this method populates a bean
   private void populateCLBean() {
      conn = DBConnection.getDBConnection();
      try {
         Statement stmt = conn.createStatement();
         ResultSet rst = stmt.executeQuery("select * from category;");
         while(rst.next()) {
            Category c  = new Category();
            c.setCategoryName(rst.getString("categoryname"));
            clBean.addCategory(c);
            } // end while block
         rst.close();
         stmt.close();
         conn.close();
         } // end try block
      catch(Exception e) {
         }
      } // end method populateCLBean()
================
3. The external class:
package mb;

import java.sql.Connection;
import java.sql.SQLException;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;

public class DBConnection
{
   private static String message;
   private static Connection conn = null;
   private static InitialContext ctx = null;
   private static DataSource ds = null;
   public static DataSource getDataSource() {
      try {
         ctx = new InitialContext();
         ds = (DataSource)ctx.lookup("java:comp/env/jdbc/mb");
      } // end try block
      catch(Exception e) {
      } // end catch block
      return ds;
   } // end method getDataSource()

   public static Connection getDBConnection() {
      try {
         conn = ds.getConnection();
      } // end try block
      catch(Exception e) {
      }
      return conn;
   } // end method getDBConnection()
} // end class DBConnection
==================
4. The destroy method within the calling class.
   public void destroy() {
   ds = null;
   } //end method destroy()
==================
-- 
========================
Luke (Terry) Vanderfluit 
Mobile: 0421 276 282     
========================


---------------------------------------------------------------------
To unsubscribe, e-mail: tomcat-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tomcat-user-help@jakarta.apache.org