nope, you're using commons-dbcp, see the "factory" attribute in my config

Filip

On 10/30/2009 12:22 PM, Josh Gooding wrote:
Wait a second.  What I am seeing from you Filip and what I have in my
context.xml are similar:

<Context>
     <WatchedResource>WEB-INF/web.xml</WatchedResource>
     <Resource
         name="jdbc/RealmDB" auth="Container" type="javax.sql.DataSource"
         username="root" password="password"
driverClassName="com.mysql.jdbc.Driver"
         url="jdbc:mysql://localhost:3306/monk"
         maxActive="-1" maxIdle="5" maxWait="15"
         removeAbandoned="true" removeAbandonedTimeout="15"
         testWhileIdle="false" timeBetweenEvictionRunsMillis="54000"/>
     <Realm
         className="org.apache.catalina.realm.DataSourceRealm"
         dataSourceName="jdbc/RealmDB" localDataSource="true"
         digest="MD5"
         userTable="user" userNameCol="user_name" userCredCol="password"
         userRoleTable="tcrole" roleNameCol="role_name" />
</Context>

My ConnectionPool class:

import java.sql.Connection;
import java.sql.SQLException;

import javax.naming.InitialContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.sql.DataSource;

import aardvark.exceptions.AardvarkResourceException;


public class ConnectionPool implements ServletContextListener {

     @Override
     public void contextDestroyed(ServletContextEvent arg0) {}

     @Override
     public void contextInitialized(ServletContextEvent ci) {}

     public static synchronized Connection getConnection() throws
AardvarkResourceException {
         try {
             DataSource ds = (DataSource) new
InitialContext().lookup("java:/comp/env/jdbc/RealmDB");
             return ds.getConnection();
         } catch (Exception e) {
             throw new AardvarkResourceException(e);
         }
     }

     public static synchronized void recycleConnection(Connection c) {
         try {
             if (!c.isClosed()) {
                 c.close();
             }
         } catch (SQLException e) {
             // eat the exception, not much else to do.
         }
     }
}

Honestly, this should be a very simple fix to replace the current coding
with the new ConnectionPooling stuff.  If looks like the old project lead
used the javax.sql ConnectionPool over Tomcat's ConnectionPool coding.  I
wonder why?  Oh well I'm going to implement this and also change the
recycleConnection to close the statement and resultset as well.  That way I
can run the recycleConnection method and it will take care of everything
instead of having more spaghetti code.  Doing this much should increase the
servers performance.


On Fri, Oct 30, 2009 at 12:12 PM, Filip Hanik - Dev Lists<
devli...@hanik.com>  wrote:

look at jdbc-pool.html it has all the info, here are examples out of it

Configuration


<Resource name="jdbc/TestDB"
              auth="Container"
              type="javax.sql.DataSource"
              factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
              testWhileIdle="true"
              testOnBorrow="true"
              testOnReturn="false"
              validationQuery="SELECT 1"
              validationInterval="30000"
              timeBetweenEvictionRunsMillis="30000"
              maxActive="100"
              minIdle="10"
              maxWait="10000"
              initialSize="10"
              removeAbandonedTimeout="60"
              removeAbandoned="true"
              logAbandoned="true"
              minEvictableIdleTimeMillis="30000"
              jmxEnabled="true"
              jdbcInterceptors=

"org.apache.tomcat.jdbc.pool.interceptor.ConnectionState;org.apache.tomcat.jdbc.pool.interceptor.StatementFinalizer"
              username="root"
              password="password"
              driverClassName="com.mysql.jdbc.Driver"
              url="jdbc:mysql://localhost:3306/mysql"/>




Code:

import java.sql.Connection;
        import java.sql.ResultSet;
        import java.sql.Statement;

        import org.apache.tomcat.jdbc.pool.DataSource;
        import org.apache.tomcat.jdbc.pool.PoolProperties;

        public class SimplePOJOExample {

            public static void main(String[] args) throws Exception {
                PoolProperties p = new PoolProperties();
                p.setUrl("jdbc:mysql://localhost:3306/mysql");
                p.setDriverClassName("com.mysql.jdbc.Driver");
                p.setUsername("root");
                p.setPassword("password");
                p.setJmxEnabled(true);
                p.setTestWhileIdle(false);
                p.setTestOnBorrow(true);
                p.setValidationQuery("SELECT 1");
                p.setTestOnReturn(false);
                p.setValidationInterval(30000);
                p.setTimeBetweenEvictionRunsMillis(30000);
                p.setMaxActive(100);
                p.setInitialSize(10);
                p.setMaxWait(10000);
                p.setRemoveAbandonedTimeout(60);
                p.setMinEvictableIdleTimeMillis(30000);
                p.setMinIdle(10);
                p.setLogAbandoned(true);
                p.setRemoveAbandoned(true);

  
p.setJdbcInterceptors("org.apache.tomcat.jdbc.pool.interceptor.ConnectionState;"+

  "org.apache.tomcat.jdbc.pool.interceptor.StatementFinalizer");
                DataSource datasource = new DataSource();
                datasource.setPoolProperties(p);

                Connection con = null;
                try {
                  con = datasource.getConnection();
                  Statement st = con.createStatement();
                  ResultSet rs = st.executeQuery("select * from user");
                  int cnt = 1;
                  while (rs.next()) {
                      System.out.println((cnt++)+". Host:"
+rs.getString("Host")+
                        " User:"+rs.getString("User")+"
Password:"+rs.getString("Password"));
                  }
                  rs.close();
                  st.close();
                } finally {
                  if (con!=null) try {con.close();}catch (Exception ignore)
{}

                }
            }

        }


On 10/30/2009 09:54 AM, Filip Hanik - Dev Lists wrote:


http://svn.apache.org/viewvc/tomcat/trunk/modules/jdbc-pool/java/org/apache/tomcat/jdbc/pool/interceptor/StatementFinalizer.java?view=log

Filip

On 10/30/2009 08:34 AM, Josh Gooding wrote:

Hey what API holds the statementFinalizer?

On Fri, Oct 30, 2009 at 9:57 AM, Josh Gooding<josh.good...@gmail.com
wrote:
  AHHHHHH, I will read the API for the StatementFinalizer.  I was looking
at
something to do that.  Thank you Filip!


On Fri, Oct 30, 2009 at 9:53 AM, Filip Hanik - Dev Lists<
devli...@hanik.com>   wrote:

  hi Josh, calling Connection.close() does not close statements and
resultsets.
There is an interceptor you can configure called StatementFinalizer
that
does exactly that during the close call.

Filip



On 10/29/2009 07:17 PM, Josh Gooding wrote:

  I wrote some code on top of the Tomcat's ConnectionPool class.  In
regular
Java based programming if I close a ResultSet with connection.close(),
this
frees up both the statement and resultset's memory associated with the
connection if it was still open.  If I close a connection with
Tomcat's
ConnectionPool, does it also close the statement and resultset's
associated
with that particular connection or do I need to manually close them?

I know best practice is to not rely on anything to be closed
automatically,
but I inherited a code base and I am looking at making some pretty
significant changes to fix some problems, and this is one of them.

Thanks in advance,

- Josh




---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org



---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org



---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org




---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org

Reply via email to