javaoracle-databasemavencargocargo-maven2-plugin

ClassNotFoundException: oracle.jdbc.OracleDriver when running tests using cargo maven2 plugin


I'm trying to run some functional tests on the cargo maven2 plugin.These tests run fine on the local tomcat server when launched without using the cargo maven2 plugin. The plugin itself boots successfully but when I run the tests they return 500 error code with the following trace:

Caused by: org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot load JDBC driver class 'oracle.jdbc.OracleDriver'
 at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createConnectionFactory(BasicDataSource.java:1429)
 at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1371)
 at org.apache.tomcat.dbcp.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1044)

 ... 109 more
Caused by: java.lang.ClassNotFoundException: oracle.jdbc.OracleDriver
 at java.lang.ClassLoader.findClass(ClassLoader.java:531)
 at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at persistence.spi.hibernate.TransformingClassLoader.loadClass(TransformingClassLoader.java:46)
 at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
 at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createConnectionFactory(BasicDataSource.java:14  

I have added ojdbc 6 jar in my pom and excluded references to ojdbc 5 and ojdbc 14.

Here's my cargo configuration:

       <plugin>
        <groupId>org.codehaus.cargo</groupId>
        <artifactId>cargo-maven2-plugin</artifactId>
        <version>1.4.14</version>
        <configuration>
           <container>
              <containerId>tomcat7x</containerId>
              <type>installed</type>
              <zipUrlInstaller>
                 <url>http://archive.apache.org/dist/tomcat/tomcat-7/v7.0.70/bin/apache-tomcat-7.0.70.zip</url>
                 <downloadDir>${project.build.directory}/downloads</downloadDir>
                 <extractDir>${project.build.directory}/extracts</extractDir>
              </zipUrlInstaller>
              <systemProperties>
                 <java.io.tmpdir>target/tmp</java.io.tmpdir>
              </systemProperties>
              <output>${project.build.directory}/cargo-container.log</output>
              <log>${project.build.directory}/cargo.log</log>
           </container>
           <deployables>
              <deployable>
                 <groupId>x.rest</groupId>
                 <artifactId>x-war</artifactId>
                 <type>war</type>
              </deployable>
           </deployables>
           <configuration>
              <type>standalone</type>
              <home>${project.build.directory}/tomcat7x/container</home>
              <properties>
                 <cargo.tomcat.ajp.port>9414</cargo.tomcat.ajp.port>
                                  <cargo.servlet.port>9484</cargo.servlet.port>
                 <cargo.rmi.port>9496</cargo.rmi.port>
                 <cargo.logging>high</cargo.logging>
                 <war>${project.build.directory}/x-war.war</war>
                 <!-- This section was added by me but didn't fix the problem -->
                 <cargo.datasource.datasource>
                    cargo.datasource.jndi=jdbc/DB|
                    cargo.datasource.type=javax.sql.DataSource|
                    cargo.datasource.driver=oracle.jdbc.OracleDriver|
                    cargo.datasource.url=jdbc:oracle:thin:abc/abc@domain.net:22:node1|
                    cargo.datasource.username=abc|
                    cargo.datasource.password=abc
                </cargo.datasource.datasource>
              </properties>
              <configfiles>
                 <configfile>
                    <file>${project.basedir}/src/test/resources/war-dependencies/stable-dev/context.xml</file>
                    <todir>conf</todir>
                    <tofile>context.xml</tofile>
                 </configfile>
              </configfiles>
              <files>
                 <file>
                    <file>${project.basedir}/src/test/resources/war-dependencies/stable-dev/service.keystore</file>
                    <todir>shared/classes</todir>
                 </file>
              </files>
           </configuration>
        </configuration>
        <executions>
           <!-- The executions here deal only with INTEGRATION-TEST phase. We are NOT hitting REST Service via tests in the TEST phase. We need to be assured that our container is already 
              up and running. So cargo is started in PRE-INTEGRATION-TEST phase. -->
           <execution>
              <id>start-container</id>
              <phase>pre-integration-test</phase>
              <goals>
                 <goal>stop</goal>
              </goals>
           </execution>
         <!--    <execution>
              <id>stop-container</id>
              <phase>post-integration-test</phase>
              <goals>
                 <goal>stop</goal>
              </goals>
           </execution>-->
        </executions>
     </plugin>   

I am a newbie to the web service world so any suggestions/pointers would be appreciated. May be I'm missing some configuration somewhere?


Solution

  • Got it to work. I had to add ojdbc6 as a dependency within the container section.