无法在 Birt 4.6.0-20160607 中加载 JDBC 驱动程序 class

Cannot load JDBC Driver class in Birt 4.6.0-20160607

我有一个 Java EE 项目,其中我将 Birt 运行时作为 Maven 依赖项包含在内:

 <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>

引擎似乎已创建(至少我希望如此)。在我的报告中,我定义了数据源设置。

   <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>

不幸的是,Birt 似乎找不到 ojdbc 驱动程序(注意,我们使用的是 oracle 数据库),我们得到以下错误:

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.

我在 WEB-INF/lib 下的 Web 模块中包含以下 jar org.eclipse.birt.report.data.oda.jdbc_4.6.0.v201606072122.jar 但我仍然遇到相同的错误。

有没有办法通过将 ojdbc 添加为 maven 依赖项来解决这个问题,或者有其他解决方法吗?

更新: 我也尝试添加 org.eclipse.birt.report.data.oda.jdbc_4.6.0.v201606072122.jar 作为 Maven 依赖项.

<!-- 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>

我遇到了同样的错误。下面是堆栈跟踪的某些部分:

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)

更新 2: 我做了进一步的更改,但仍然没有成功。我在 WEB-INF 和 MEtA-INF

下的所有模块中添加了 org.eclipse.birt.report.data.oda.jdbc_4.6.0.v201606072122.jar 库

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

结果完全一样:

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

这里我还要说明一点。为了我们在应用程序中的持久性,我们在 wildfly 上使用了一个数据源,其中我们将 ojdbc 驱动程序用作 Wildfly 10 中的一个模块。

我慢慢地 运行 对 Birt + ojdbc 没有想法

终于解决了问题。我必须在本地 manen 存储库中安装 oda jdbc 驱动程序,并将其作为依赖项添加到我的 ejb 模块中。

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

此外,出于某种我还无法解释的原因,Birt 还需要我的 Web 模块中的 ojdbc6 驱动程序。老实说,我不明白为什么,因为整个 birt 实现和运行时都在 ejb 模块中。

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

问题已解决,现在正在生成报告。

我现在面临两个必须解决的新问题。

1) java.lang.OutOfMemoryError: Java heap space : 我在 Eclipse bugzilla 中发现这个问题可以用 ojdbc7个驱动程序。除非我将我的服务器 -Xmx 推到 1400mb 以上,否则不会生成报告

2) [org.eclipse.birt.report.data.oda.jdbc.JDBCDriverManager] (默认任务 20) DriverClassLoader 加载失败 class: oracle.jdbc.driver.OracleDriver: java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver:出于某种原因,当我想要生成一份报告时,我只遇到过一次这个错误。报告生成没有问题,异常再也不会出现。

至少报告现在有效,可以继续解决其他问题。