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.user开发者_StackOverflowname=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?
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
.
精彩评论