1

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?

linuxNoob
  • 600
  • 2
  • 14
  • 30

2 Answers2

0

The reason you got no exception on tomcat might be due to the existing ojdbc6.jar file in the lib folder of Tomcat.

However, the oracle jdbc driver jar file cannot be found in the public maven repository due to the legal issue.

Here is the official instruction of getting oracle jdbc driver from maven repository

Get Oracle JDBC drivers from the Oracle Maven Repository - NetBeans, Eclipse & Intellij

There is another simple and straight forward solution.

Install the jar file directly to the local repository by copying the jar file at your local drive, open command prompt ,go the the current directory of the jar file and execute the following command

mvn install:install-file -DgroupId=com.oracle -DartifactId=ojdbc6 -Dpackaging=jar -Dversion=11.2.0.4.0 -Dfile=ojdbc6.jar -DgeneratePom=true
  • Thanks for your suggestion but I can see ojdbc6 -11.2.0.3 as part of the referenced libraries within my test project. Shouldn't that be enough for cargo to pick it up? – linuxNoob Aug 29 '16 at 15:57
0

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

linuxNoob
  • 600
  • 2
  • 14
  • 30