2

使用石英 1.8.5 和自由服务器时,我们得到以下异常。使用 tomcat-server (7.0.81) 时不会发生异常。

java.lang.NoClassDefFoundError: oracle/sql/BLOB
at org.quartz.impl.jdbcjobstore.oracle.OracleDelegate.writeDataToBlob(OracleDelegate.java:642)
at org.quartz.impl.jdbcjobstore.oracle.OracleDelegate.insertJobDetail(OracleDelegate.java:207)

pom.xml

<dependency>
    <groupId>org.quartz-scheduler</groupId>
    <artifactId>quartz</artifactId>
    <version>1.8.5</version>
</dependency>       
<dependency>
    <!-- ASYNC-METHOD-INVOCATION -->
    <groupId>org.quartz-scheduler</groupId>
    <artifactId>quartz-oracle</artifactId>
    <version>1.8.5</version>
</dependency>
<dependency>
    <groupId>com.oracle</groupId>
    <artifactId>ojdbc6</artifactId>
    <version>12.1.0.2.0</version>
    <scope>provided</scope>
</dependency>

数据源

<server>
  <library id="oracleDriver">
        <fileset dir="..\sw\oracle" includes="*.jar" scanInterval="120s" />
  </library>
  <!-- xa datasource -->
  <dataSource id="ORACLE_DS_XA" jndiName="jdbc/xxx/xxx" pool-name="xxx">
    <jdbcDriver libraryRef="oracleDriver" javax.sql.ConnectionPoolDataSource="oracle.jdbc.xa.client.OracleXADataSource" />
    <properties.oracle URL="jdbc:oracle:thin:@localhost:1521:sid" password="user" user="password" />
    <connectionManager minPoolSize="1" maxPoolSize="10" />
  </dataSource>
  <keyStore id="defaultKeyStore" password="password" />    
</server>

该异常的原因可能是什么?我们该如何解决这个问题?告诉我是否应该提供有关我们配置的更多信息。

TIA

4

1 回答 1

2

我也不是很熟悉,但是如果石英捆绑在您的应用程序中并且需要从您的 Oracle 驱动程序访问类,那么您需要将共享库公开给您的应用程序。

你可以通过在你的或块中添加一个<classloader>部分来做到这一点<application><webapplication>server.xml

例如

<application ...rest of your app configuration...>
   <classloader commonLibraryRef="oracleDriver"/>
</application>

如果您当前通过将应用程序放在dropins目录中来部署应用程序,则必须更改它以将应用程序部署到目录,并在 server.xml 中apps创建一个<application>或块。<webApplication>

文档链接:
部署应用程序并添加 server.xml 配置元素
参考(作为子元素包含) 元素<application>classloader
参考<webApplication>classloader作为子元素包含)

于 2018-08-16T10:44:54.473 回答