The following instructions are based on the instructions for Tomcat-5.x, available at http://tomcat.apache.org/tomcat-5.5-doc/jndi-datasource-examples-howto.html which is current at the time this document was written.
      First, install the .jar file that comes with
      Connector/J in $CATALINA_HOME/common/lib so
      that it is available to all applications installed in the
      container.
    
      Next, configure the JNDI DataSource by adding a declaration
      resource to $CATALINA_HOME/conf/server.xml in
      the context that defines your web application:
    
  <Context ....>
  ...
  <Resource name="jdbc/MySQLDB"
               auth="Container"
               type="javax.sql.DataSource"/>
  <ResourceParams name="jdbc/MySQLDB">
    <parameter>
      <name>factory</name>
      <value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
    </parameter>
    <parameter>
      <name>maxActive</name>
      <value>10</value>
    </parameter>
    <parameter>
      <name>maxIdle</name>
      <value>5</value>
    </parameter>
    <parameter>
      <name>validationQuery</name>
      <value>SELECT 1</value>
    </parameter>
    <parameter>
      <name>testOnBorrow</name>
      <value>true</value>
    </parameter>
    <parameter>
      <name>testWhileIdle</name>
      <value>true</value>
    </parameter>
    <parameter>
      <name>timeBetweenEvictionRunsMillis</name>
      <value>10000</value>
    </parameter>
    <parameter>
      <name>minEvictableIdleTimeMillis</name>
      <value>60000</value>
    </parameter>
    <parameter>
     <name>username</name>
     <value>someuser</value>
    </parameter>
    <parameter>
     <name>password</name>
     <value>somepass</value>
    </parameter>
    <parameter>
       <name>driverClassName</name>
       <value>com.mysql.jdbc.Driver</value>
    </parameter>
    <parameter>
      <name>url</name>
      <value>jdbc:mysql://localhost:3306/test</value>
    </parameter>
  </ResourceParams>
</Context>
      Note that Connector/J 5.1.3 introduced a facility whereby, rather
      than use a validationQuery value of
      SELECT 1, it is possible to use
      validationQuery with a value set to /*
      ping */. This sends a ping to the server which then
      returns a fake result set. This is a lighter weight solution. It
      also has the advantage that if using
      ReplicationConnection or
      LoadBalancedConnection type connections, the
      ping will be sent across all active connections. The following XML
      snippet illustrates how to select this option:
    
<parameter> <name>validationQuery</name> <value>/* ping */</value> </parameter>
      Note that /* ping */ has to be specified
      exactly.
    
In general, follow the installation instructions that come with your version of Tomcat, as the way you configure datasources in Tomcat changes from time to time, and if you use the wrong syntax in your XML file, you will most likely end up with an exception similar to the following:
Error: java.sql.SQLException: Cannot load JDBC driver class 'null ' SQL state: null
      Note that the auto-loading of drivers having the
      META-INF/service/java.sql.Driver class in
      JDBC 4.0 and above causes an improper undeployment of the
      Connector/J driver in Tomcat on Windows. Namely, the Connector/J
      jar remains locked. This is an initialization problem that is not
      related to the driver. The possible workarounds, if viable, are as
      follows: use "antiResourceLocking=true" as a
      Tomcat Context attribute, or remove the
      META-INF/ directory.