configuring a shared MySQL datasource in tomcat

I’ve been using a datasource and somehow lost some of my settings which meant that it stopped working. In order to get my configuration back, I did the following:

In server.xml (tomcat/conf/server.xml), I declared the following datasource (in the GlobalNamingResources section):

 <Resource name="jdbc/mydb"
 type="javax.sql.DataSource"
 auth="Container"
 driverClassName="com.mysql.jdbc.Driver"
 maxActive="20"
 maxIdle="10"
 maxWait="10000"
 username="myuser"
 password="****"
 url="jdbc:mysql://localhost:3306/mydb"
 />

in context.xml (src/main/webapp/META-INF/context.xml), I declared the following resource link:

  <ResourceLink
 name="jdbc/mydb"
 global="jdbc/mydb"
 type="javax.sql.DataSource"
 />

in web.xml (src/main/webapp/WEB-INF/web.xml), I use the following resource reference:

 <resource-ref>
 <res-ref-name>jdbc/mydb</res-ref-name>
 <res-type>javax.sql.DataSource</res-type>
 <res-auth>Container</res-auth>
 <res-sharing-scope>Shareable</res-sharing-scope>
 </resource-ref>

in persistence.xml, I use the following:

<persistence version="1.0" 
        xmlns="http://java.sun.com/xml/ns/persistence" 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
        xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
 <persistence-unit name="mydbPU" transaction-type="RESOURCE_LOCAL">
 <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
 <non-jta-data-source>java:/comp/env/jdbc/mydb</non-jta-data-source>
 <exclude-unlisted-classes>false</exclude-unlisted-classes>
 <properties>
 <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/>
 <property name="hibernate.cache.provider_class" value="org.hibernate.cache.NoCacheProvider"/>
 </properties>
 </persistence-unit>
</persistence>

If you do not configure the data source correctly, you will get some strange errors of the likes:

  • Illegal access: this web application instance has been stopped already. Could not load com.mysql.jdbc.SQLError.
  • Could not find datasource: java:/comp/env/jdbc/xxxx
  • javax.naming.NameNotFoundException: Name jdbc is not bound in this Context
  • java.sql.SQLException: No suitable driver
  • org.hibernate.HibernateException: Hibernate Dialect must be explicitly set
  • java.sql.SQLException: Cannot create JDBC driver of class ” for connect URL ‘null’
  • Context [/xxxx] startup failed due to previous errors

Leave a comment

Blog at WordPress.com.