Cannot load JDBC Driver class in Birt 4.6.0-20160607

1.4k views Asked by At

i am having a Java EE project in which i include the Birt runtime as a maven dependency:

 <dependency>
  <groupId>org.eclipse.birt.runtime</groupId>
  <artifactId>org.eclipse.birt.runtime</artifactId>
  <version>4.6.0-20160607</version>
  <exclusions>
    <exclusion>
        <groupId>org.eclipse.birt.runtime</groupId>
        <artifactId>org.apache.xerces</artifactId>
    </exclusion>
    <exclusion>
      <artifactId>org.apache.poi</artifactId>
      <groupId>org.eclipse.birt.runtime</groupId>
    </exclusion>
  </exclusions>
</dependency>

The engine seems to be created (i hope at least) . In my report i have defined the datasource settings.

   <data-sources>
        <oda-data-source extensionID="org.eclipse.birt.report.data.oda.jdbc" name="somename" id="43">
            <list-property name="privateDriverProperties">
                <ex-property>
                    <name>contentBidiFormatStr</name>
                    <value>ILYNN</value>
                </ex-property>
                <ex-property>
                    <name>metadataBidiFormatStr</name>
                    <value>ILYNN</value>
                </ex-property>
            </list-property>
            <property name="odaDriverClass">oracle.jdbc.driver.OracleDriver</property>
            <property name="odaURL">jdbc:oracle:thin:@host...</property>
            <property name="odaUser">username</property>
            <encrypted-property name="odaPassword" encryptionID="base64">password</encrypted-property>
        </oda-data-source>
    </data-sources>

Unfortunately it seems that Birt cannot find the ojdbc driver (Note, we use an oracle database) and we get the following error:

SEVERE [org.eclipse.birt.data.engine.odaconsumer] (default task-20) Unable to open connection.: org.eclipse.birt.report.data.oda.jdbc.JDBCException: Cannot load JDBC Driver class: oracle.jdbc.driver.OracleDriver.

I have included in my Web module under WEB-INF/lib the following jar org.eclipse.birt.report.data.oda.jdbc_4.6.0.v201606072122.jar but i am still getting the same error.

Is there any way to solve this by adding the ojdbc as a maven dependency or is there any other workaround ?

Update: I have tried to also to add the also the org.eclipse.birt.report.data.oda.jdbc_4.6.0.v201606072122.jar as a maven dependency.

<!-- Oracle JDBC driver -->
<dependency>
    <groupId>com.oracle</groupId>
    <artifactId>ojdbc6</artifactId>
    <version>11.2.0.4.0</version>
    <scope>provided</scope>
</dependency>

 <dependency>
     <groupId>org.eclipse.birt</groupId>
     <artifactId>ojdbc</artifactId>
     <scope>system</scope>
     <version>1.0</version>
     <systemPath>${basedir}\src\main\resources\lib\org.eclipse.birt.report.data.oda.jdbc_4.6.0.v201606072122.jar</systemPath>
 </dependency>

I am getting the same error. Bellow some part of the stacktrace:

2017-01-05 13:07:11,990 SEVERE [org.eclipse.birt.report.data.oda.jdbc.JDBCDriverManager] (default task-45) DriverClassLoader failed to load class: oracle.jdbc.driver.OracleDriver: java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver at org.eclipse.birt.core.framework.URLClassLoader.findClass1(URLClassLoader.java:188)

......

......

2017-01-05 13:07:12,020 SEVERE [org.eclipse.birt.data.engine.odaconsumer] (default task-45) Unable to open connection.: org.eclipse.birt.report.data.oda.jdbc.JDBCException: Cannot load JDBC Driver class: oracle.jdbc.driver.OracleDriver. at org.eclipse.birt.report.data.oda.jdbc.JDBCDriverManager.findDriver(JDBCDriverManager.java:881)

Update 2: I made further changes but still without success. I added the org.eclipse.birt.report.data.oda.jdbc_4.6.0.v201606072122.jar library in all my modules under WEB-INF and MEtA-INF

\src\main\webapp\WEB-INF\lib\org.eclipse.birt.report.data.oda.jdbc_4.6.0.v201606072122.jar

The results are quite the same:

2017-01-05 15:40:49,927 SEVERE [org.eclipse.birt.report.data.oda.jdbc.JDBCDriverManager] (default task-19) DriverClassLoader failed to load class: org.eclipse.birt.report.data.oda.jdbc: java.lang.ClassNotFoundException: org.eclipse.birt.report.data.oda.jdbc

I would also like to note here something. For our persistence in the application, we use a datasource on our wildfly in which we use the ojdbc driver as a module in Wildfly 10 .

I am slowly running out of ideas with Birt + ojdbc

1

There are 1 answers

0
Stephan On BEST ANSWER

Finally solved the problem. I had to install the oda jdbc driver in my local manen repository and add it as a dependency in my ejb module.

    <dependency>
         <groupId>org.eclipse.birt.ojdbc</groupId>
         <artifactId>odajdbc</artifactId>
         <version>4.6.0-201606072122</version>
     </dependency>

Furthermore, for some reason which i cannot yet explain, Birt required also the ojdbc6 driver in my web module. I honestly cannot understand why, since the entire birt implementation and runtime is in the ejb module.

    <dependency>
        <groupId>com.oracle</groupId>
        <artifactId>ojdbc6</artifactId>
        <version>11.2.0.4.0</version>
    </dependency>

That solved the problem and now the reports are getting generated.

I am now facing two new problems which i have to solve.

1) java.lang.OutOfMemoryError: Java heap space : I found in Eclipse bugzilla that this problem can be solved with the ojdbc7 driver. The reports are not generated unless i push my servers -Xmx above 1400mb

2) [org.eclipse.birt.report.data.oda.jdbc.JDBCDriverManager] (default task-20) DriverClassLoader failed to load class: oracle.jdbc.driver.OracleDriver: java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver: For some reason i get this error only one time when i want to generate a report. The report is generated without problems and the exception never appears again.

At least the reports are working now and can continue solving the other issues.