Wednesday, July 23, 2008

Implement connection pooling in Tomcat 5.5 using Hibernate 3, MySQL 5
Culled from various sources:

Add JDBC driver, mysql-connector-java-5.1.5.jar to apache-tomcat-5.5.xx\common\lib

Add resource-ref to WEB-INF/web.xml
<web-app ...>

...

<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.
    </description>
    <res-ref-name>jdbc/MySqlDb</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
</resource-ref>

</web-app>
Add session-factory name attribute and property elements to WEB-INF/classes/hibernate.cfg.xml
<hibernate-configuration>
    <session-factory name="java:hibernate/SessionFactory">

        <!-- JNDI Connection -->
        <property name="hibernate.connection.datasource">
            java:comp/env/jdbc/MySqlDS
        </property>

        <property name="hibernate.dialect">
            org.hibernate.dialect.MySQLDialect
        </property>

...

    </session-factory>
</hibernate-configuration>
Add Resource to META-INF/context.xml, alternatively add Resource to GlobalResources in tomcat server.xml
<?xml version="1.0" encoding="UTF-8"?>

<Context path="/MyApp" reloadable="true">

  <Resource name="jdbc/MySqlDS" auth="Container"
    type="javax.sql.DataSource"
    maxActive="100" maxIdle="10" maxWait="10000"
    username="myUsername" password="myPassword"
    driverClassName="com.mysql.jdbc.Driver"
    url="jdbc:mysql://localhost:3306/bookstore?autoReconnect=true"/>

</Context>
That should work!