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