add support for JNDI datasource JDBC driver jar dependencies for the run goal
-----------------------------------------------------------------------------
Key: MTOMCAT-50
URL: http://jira.codehaus.org/browse/MTOMCAT-50
Project: Maven 2.x Tomcat Plugin
Issue Type: Improvement
Affects Versions: 1.0-beta-1
Environment: os x 10.6.2, java 1.6.0_17, Maven 2.2.1 (r801777;
2009-08-06 12:16:01-0700)
Reporter: Jonathan Russell
I get a ClassNotFoundException for Oracle driver classes unless I drop the jdbc
driver jar into Java's extension directory when executing "mvn tomcat:run-war"
for my project. (see below)
If I were using an installed tomcat instance I know I could add the jar to the
${catalina.home}/lib directory. I don't know if it isn't supported, or if I
just haven't found good documentation on this, but I can't get this error to go
away unless I add the jar into a Java extension directory.
pom.xml excerpts:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>tomcat-maven-plugin</artifactId>
<configuration>
<path>/${artifactId}</path>
<mode>both</mode>
</configuration>
</plugin>
...
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc14</artifactId>
<version>10.2.0.4.0</version>
<scope>runtime</scope>
</dependency>
context.xml excerpt:
<?xml version="1.0" encoding="UTF-8"?>
<Context
path="/${artifactId}"
docBase="${project.build.finalName}.war"
debug="1"
reloadable="true"
crossContext="true"
>
<Resource name="${ev.jta-data-source}" auth="Container"
type="javax.sql.DataSource"
maxActive="4" maxIdle="2" maxWait="60000"
removeAbandoned="true" logAbandoned="true"
driverClassName="${ev.jdbc.driverClassName}"
url="${ev.connection.url}"
username="${ev.connection.username}"
password="${ev.connection.password}"
NetworkProtocol="tcp"
DataSourceName="oracle.jdbc.xa.client.OracleXADataSource"
NativeXA="true"
allowLocalTransactions="true"
LoginTimeout="0"
ExplicitCachingEnabled="false"
ImplicitCachingEnabled="false"
MaxStatements="0"
/>
...
</Context>
Stack trace:
...
Caused by: org.hibernate.exception.GenericJDBCException: Cannot open connection
at
org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:126)
at
org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:114)
at
org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
at
org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:52)
at
org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:449)
at
org.hibernate.jdbc.ConnectionManager.getConnection(ConnectionManager.java:167)
at
org.hibernate.jdbc.AbstractBatcher.prepareQueryStatement(AbstractBatcher.java:161)
at org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1577)
at org.hibernate.loader.Loader.doQuery(Loader.java:696)
at
org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:259)
at org.hibernate.loader.Loader.doList(Loader.java:2232)
at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2129)
at org.hibernate.loader.Loader.list(Loader.java:2124)
at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:401)
at
org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:363)
at
org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:196)
at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1149)
at org.hibernate.impl.QueryImpl.list(QueryImpl.java:102)
at com.ssn.dm.service.DM.query(DM.java:616)
... 48 more
Caused by: org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot load JDBC
driver class 'oracle.jdbc.OracleDriver'
at
org.apache.tomcat.dbcp.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1136)
at
org.apache.tomcat.dbcp.dbcp.BasicDataSource.getConnection(BasicDataSource.java:880)
at
org.hibernate.connection.DatasourceConnectionProvider.getConnection(DatasourceConnectionProvider.java:92)
at
org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:446)
... 62 more
Caused by: java.lang.ClassNotFoundException: oracle.jdbc.OracleDriver
at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:315)
at
org.codehaus.classworlds.RealmClassLoader.loadClassDirect(RealmClassLoader.java:195)
at
org.codehaus.classworlds.DefaultClassRealm.loadClass(DefaultClassRealm.java:255)
at
org.codehaus.classworlds.DefaultClassRealm.loadClass(DefaultClassRealm.java:274)
at
org.codehaus.classworlds.RealmClassLoader.loadClass(RealmClassLoader.java:214)
at java.lang.ClassLoader.loadClass(ClassLoader.java:250)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:398)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:169)
at
org.apache.tomcat.dbcp.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1130)
... 65 more
I would expect that the run-war goal would have the class loader configured to
load the jdbc driver jar from a well known location (e.g.
${configurationDir}/lib) automatically, or could handle copying the JDBC
dependencies and including them in some other way based on the plugin's
configuration.
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://jira.codehaus.org/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
---------------------------------------------------------------------
To unsubscribe from this list, please visit:
http://xircles.codehaus.org/manage_email