Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Using Maven to Deploy on Embedded Tomcat with a Datasource

I have a multi module maven web application, which uses hibernate.

I use the tomcat:run goal in order to run it on the embedded tomcat server of maven. Everything works fine so far.

But now I need to switch from an explicite jdbc configuration in the hibernate.properties to a datasource. I did the following:

  • changed hibernate.properties

from

hibernate.connection.driver_class=oracle.jdbc.OracleDriver
hibernate.connection.url=jdbc:somejdbcurl
hibernate.connection.username=aUser
hibernate.connection.password=aPassword

to

hibernate.connection.datasource=java:comp/env/jdbc/datasourcename
  • in web.xml I added
<resource-ref>
    <res-ref-name>jdbc/datasourcename</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
</resource-ref>
  • added a context.xml next to the web.xml with the following content:
<Context>
  <Resource name="jdbc/datasourcename"
         auth="Container"
         type="javax.sql.DataSource"
         username="aUser" password="aPassword"
         driverClassName="oracle.jdbc.OracleDriver"
         url="jdbc:somejdbcurl"
         maxActive="2" maxIdle="2"/>
</Context>

This doesn't work, which is expected, since I didn't find a way to provide the jar file, containing the Oracle jdbc driver. I expected a ClassNotFound Exception or something similar, but instead I got a

org.hibernate.exception.GenericJDBCException: Cannot open connection

with a root cause down in the stack:

Caused by: org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create JDBC driver of class '' for connect URL 'null'

Soooooo the questions are:

  • Why doesn't tomcat know that I want it to use the Oracle Driver?
  • How do I tell the tomcat about the jar file which contains the driver?
like image 597
Jens Schauder Avatar asked Jul 20 '10 13:07

Jens Schauder


1 Answers

You need to add the JDBC driver inside the plugin declaration:

<plugin>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>tomcat-maven-plugin</artifactId>
  <version>1.0</version>
  <configuration>
    ...
  </configuration>
  <dependencies>
    <dependency>
      <groupId>...</groupId>
      <artifactId>...</artifactId>
      <version>...</version>
    </dependency>
  </dependencies>
</plugin>

By the way, the default value for the contextFile is src/main/webapp/META-INF/context.xml.

like image 50
Pascal Thivent Avatar answered Oct 14 '22 21:10

Pascal Thivent