SE452: Using JNDI in Tomcat [3/18] Previous pageContentsNext page

  1. Install your driver (the .jar file - in this case hsqldb.jar) in $CATALINA_HOME/common/lib
  2. Edit your web.xml file to include the resource
  3. Setup the server.xml file with the Factory inside your Context
  4. Code your application to use JNDI instead of dynamic loading (or environment variables)

Examples:

web.xml edits

<resource-ref> 
  <description> Resource reference to a factory for java.sql.Connection instances 
  that may be used for talking to a particular database that is configured in the 
  server.xml file (or the context.xml file supplied and placed in the conf/Catalina/localhost
  directory).
  </description> 
  <res-ref-name>jdbc/EmployeeDB</res-ref-name> 
  <res-type>javax.sql.DataSource</res-type> 
  <res-auth>Container</res-auth> 
</resource-ref> 

Make sure the ordering is in conformance to the web application deployment descriptor DTD! (You can probably put it at the end of your file)

Setup your server.xml (or add a config.xml snippet to your conf/Catalina/localhost directory) with the settings for the DataSource Factory for your database

<!--
    Document   : Context.xml
    Created on : September 22, 2003, 10:00 PM
    Author     : Matthew Wright
    Description:
        A context node for this webapp.
-->

<Context path="/se452" docBase="se452" debug="9">
    <Resource name="jdbc/EmployeeDB" auth="Container"
            type="javax.sql.DataSource"/>

    <ResourceParams name="jdbc/EmployeeDB">
      <parameter>
        <name>username</name>
	<value>sa</value>
      </parameter>
      <parameter>
        <name>password</name>
        <value></value>
      </parameter>
      <parameter>
        <name>driverClassName</name>
        <value>org.hsqldb.jdbcDriver</value>
      </parameter>
      <parameter>
        <name>url</name>
	<value>jdbc:hsqldb:hsql:c:\temp\hw</value>
      </parameter>
      <parameter>
        <name>maxActive</name>
        <value>8</value>
      </parameter>
      <parameter>
        <name>maxIdle</name>
        <value>4</value>
      </parameter>
  </ResourceParams>

</Context>
    

Now, use JNDI code to get the InitialContext and obtain a reference to the DataSource

    Context initCtx = new InitialContext();
    Context envCtx = (Context)initCtx.lookup("java:comp/env");
    DataSource ds = (DataSource) envCtx.lookup("jdbc/EmployeeDB"); 
    Connection conn = ds.getConnection(); 
    //... use this connection to access the database
    conn.close(); 
    

Previous pageContentsNext page