石英 2.2.1+jboss EAP 6.4 ClassNotFoundException oracle.sql.BLOB [英] quartz 2.2.1+jboss EAP 6.4 ClassNotFoundException oracle.sql.BLOB

查看:31
本文介绍了石英 2.2.1+jboss EAP 6.4 ClassNotFoundException oracle.sql.BLOB的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试构建一个石英调度程序 ejb 应用程序并将其部署在 JBOSS EAP 6.4 上.此外,我正在尝试使用使用 Oracle 11g 数据库的quartz JDBC 作业存储来执行此操作.

现在,问题是每当我尝试安排工作时,都会遇到此异常:

18:45:01,024 ERROR [org.jboss.msc.service.fail] (ServerService Thread Pool -- 50) MSC000001: 无法启动服务 jboss.deployment.unit."com.hp.heimdall.jar".component.QuartzBootstraper.START: org.jboss.msc.service.StartException in service jboss.deployment.unit."com.hp.heimdall.jar".component.QuartzBootstraper.START: java.lang.IllegalStateException: JBAS011048:构建组件实例失败在 org.jboss.as.ee.component.ComponentStartService$1.run(ComponentStartService.java:57) [jboss-as-ee-7.5.0.Final-redhat-21.jar:7.5.0.Final-redhat-21]在 java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [rt.jar:1.8.0_40]在 java.util.concurrent.FutureTask.run(FutureTask.java:266) [rt.jar:1.8.0_40]在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [rt.jar:1.8.0_40]在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [rt.jar:1.8.0_40]在 java.lang.Thread.run(Thread.java:745) [rt.jar:1.8.0_40]在 org.jboss.threads.JBossThread.run(JBossThread.java:122)引起:java.lang.IllegalStateException:JBAS011048:构建组件实例失败在 org.jboss.as.ee.component.BasicComponent.constructComponentInstance(BasicComponent.java:164) [jboss-as-ee-7.5.0.Final-redhat-21.jar:7.5.0.Final-redhat-21]在 org.jboss.as.ee.component.BasicComponent.constructComponentInstance(BasicComponent.java:135) [jboss-as-ee-7.5.0.Final-redhat-21.jar:7.5.0.Final-redhat-21]在 org.jboss.as.ee.component.BasicComponent.createInstance(BasicComponent.java:90) [jboss-as-ee-7.5.0.Final-redhat-21.jar:7.5.0.Final-redhat-21]在 org.jboss.as.ejb3.component.singleton.SingletonComponent.getComponentInstance(SingletonComponent.java:122)在 org.jboss.as.ejb3.component.singleton.SingletonComponent.start(SingletonComponent.java:137)在 org.jboss.as.ee.component.ComponentStartService$1.run(ComponentStartService.java:54) [jboss-as-ee-7.5.0.Final-redhat-21.jar:7.5.0.Final-redhat-21]... 6个引起:javax.ejb.EJBException:JBAS014580:意外错误在 org.jboss.as.ejb3.tx.CMTTxInterceptor.handleExceptionInOurTx(CMTTxInterceptor.java:188)在 org.jboss.as.ejb3.tx.CMTTxInterceptor.invokeInOurTx(CMTTxInterceptor.java:282)在 org.jboss.as.ejb3.tx.CMTTxInterceptor.requiresNew(CMTTxInterceptor.java:367)在 org.jboss.as.ejb3.tx.LifecycleCMTTxInterceptor.processInvocation(LifecycleCMTTxInterceptor.java:66)在 org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) [jboss-invocation-1.1.2.Final-redhat-1.jar:1.1.2.Final-redhat-1]在 org.jboss.as.ejb3.component.interceptors.CurrentInvocationContextInterceptor.processInvocation(CurrentInvocationContextInterceptor.java:41)在 org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) [jboss-invocation-1.1.2.Final-redhat-1.jar:1.1.2.Final-redhat-1]在 org.jboss.invocation.ContextClassLoaderInterceptor.processInvocation(ContextClassLoaderInterceptor.java:70) [jboss-invocation-1.1.2.Final-redhat-1.jar:1.1.2.Final-redhat-1]在 org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) [jboss-invocation-1.1.2.Final-redhat-1.jar:1.1.2.Final-redhat-1]在 org.jboss.invocation.ChainedInterceptor.processInvocation(ChainedInterceptor.java:61) [jboss-invocation-1.1.2.Final-redhat-1.jar:1.1.2.Final-redhat-1]在 org.jboss.as.ee.component.BasicComponent.constructComponentInstance(BasicComponent.java:162) [jboss-as-ee-7.5.0.Final-redhat-21.jar:7.5.0.Final-redhat-21]……还有 11 个引起:java.lang.NoClassDefFoundError:oracle/sql/BLOB在 org.quartz.impl.jdbcjobstore.oracle.OracleDelegate.writeDataToBlob(OracleDelegate.java:592)在 org.quartz.impl.jdbcjobstore.oracle.OracleDelegate.insertJobDetail(OracleDelegate.java:183)在 org.quartz.impl.jdbcjobstore.JobStoreSupport.storeJob(JobStoreSupport.java:1112)在 org.quartz.impl.jdbcjobstore.JobStoreSupport$2.executeVoid(JobStoreSupport.java:1062)在 org.quartz.impl.jdbcjobstore.JobStoreSupport$VoidTransactionCallback.execute(JobStoreSupport.java:3703)在 org.quartz.impl.jdbcjobstore.JobStoreSupport$VoidTransactionCallback.execute(JobStoreSupport.java:3701)在 org.quartz.impl.jdbcjobstore.JobStoreSupport.executeInNonManagedTXLock(JobStoreSupport.java:3787)在 org.quartz.impl.jdbcjobstore.JobStoreTX.executeInLock(JobStoreTX.java:93)在 org.quartz.impl.jdbcjobstore.JobStoreSupport.storeJobAndTrigger(JobStoreSupport.java:1058)在 org.quartz.core.QuartzScheduler.scheduleJob(QuartzScheduler.java:886)在 org.quartz.impl.StdScheduler.scheduleJob(StdScheduler.java:249)在 Quartz_POC.com.hp.heimdall.QuartzAvailabilityTest.runTest(QuartzAvailabilityTest.java:69)在 Quartz_POC.com.hp.heimdall.QuartzBootstraper.init(QuartzBootstraper.java:22)在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [rt.jar:1.8.0_40]在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) [rt.jar:1.8.0_40]在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) [rt.jar:1.8.0_40]在 java.lang.reflect.Method.invoke(Method.java:497) [rt.jar:1.8.0_40]在 org.jboss.as.ee.component.ManagedReferenceLifecycleMethodInterceptor.processInvocation(ManagedReferenceLifecycleMethodInterceptor.java:96) [jboss-as-ee-7.5.0.Final-redhat-21.jar:7.5.0.Final-redhat-21]在 org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) [jboss-invocation-1.1.2.Final-redhat-1.jar:1.1.2.Final-redhat-1]在 org.jboss.invocation.WeavedInterceptor.processInvocation(WeavedInterceptor.java:53) [jboss-invocation-1.1.2.Final-redhat-1.jar:1.1.2.Final-redhat-1]在 org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) [jboss-invocation-1.1.2.Final-redhat-1.jar:1.1.2.Final-redhat-1]在 org.jboss.as.ee.component.ComponentInstantiatorInterceptor.processInvocation(ComponentInstantiatorInterceptor.java:76) [jboss-as-ee-7.5.0.Final-redhat-21.jar:7.5.0.Final-redhat-21]在 org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) [jboss-invocation-1.1.2.Final-redhat-1.jar:1.1.2.Final-redhat-1]在 org.jboss.invocation.WeavedInterceptor.processInvocation(WeavedInterceptor.java:53) [jboss-invocation-1.1.2.Final-redhat-1.jar:1.1.2.Final-redhat-1]在 org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) [jboss-invocation-1.1.2.Final-redhat-1.jar:1.1.2.Final-redhat-1]在 org.jboss.as.ee.component.NamespaceContextInterceptor.processInvocation(NamespaceContextInterceptor.java:50) [jboss-as-ee-7.5.0.Final-redhat-21.jar:7.5.0.Final-redhat-21]在 org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) [jboss-invocation-1.1.2.Final-redhat-1.jar:1.1.2.Final-redhat-1]在 org.jboss.as.ejb3.tx.CMTTxInterceptor.invokeInOurTx(CMTTxInterceptor.java:280)……还有 20 个引起:java.lang.ClassNotFoundException: oracle.sql.BLOB from [Module "org.quartz:main" from local module loader @9e89d68 (finder: local module finder @3b192d32 (roots: C:UsersabdelgamEAP-6.4.0modules,C:UsersabdelgamEAP-6.4.0modulessystemlayersase))]在 org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:213) [jboss-modules.jar:1.3.6.Final-redhat-1]在 org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:459) [jboss-modules.jar:1.3.6.Final-redhat-1]在 org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:408) [jboss-modules.jar:1.3.6.Final-redhat-1]在 org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:389) [jboss-modules.jar:1.3.6.Final-redhat-1]在 org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:134) [jboss-modules.jar:1.3.6.Final-redhat-1]... 48 更多

配置

已安装的模块

在我的 JBOSS_HOME/modules 中,我安装了以下模块:

  1. 石英2.2.1模块.xml :

<块引用>

<module xmlns="urn:jboss:module:1.1" name="org.quartz"><资源><resource-root path="quartz-2.2.1.jar"/></资源><依赖项><模块名称="javax.api"/><模块名称="org.slf4j"/><模块名称="com.c3p0"/></依赖项></模块>

  1. oracle jdbc 驱动模块.xml:

<块引用>

<module xmlns="urn:jboss:module:1.1" name="com.oracle"><资源><resource-root path="ojdbc6.jar"/></资源><依赖项><模块名称="javax.api"/><模块名称="javax.transaction.api"/></依赖项></模块>

  1. c3p0 模块.xml:

<块引用>

<module xmlns="urn:jboss:module:1.1" name="com.c3p0"><资源><resource-root path="c3p0-0.9.1.1.jar"/><resource-root path="c3p0-0.9.1.1-jdk1.3.jar"/><resource-root path="c3p0-oracle-thin-extras-0.9.1.1.jar"/></资源><依赖项><模块名称="javax.api"/><模块名称="javax.transaction.api"/><模块名称="org.hibernate"/></依赖项></模块>

quartz.properties

# StdSchedulerFactory 使用的默认属性文件# 创建一个 Quartz 调度器实例,如果不同# 未明确指定属性文件.#org.quartz.scheduler.instanceName: DefaultQuartzSchedulerorg.quartz.scheduler.rmi.export:假org.quartz.scheduler.rmi.proxy: 假org.quartz.scheduler.wrapJobExecutionInUserTransaction: 假org.quartz.threadPool.class: org.quartz.simpl.SimpleThreadPoolorg.quartz.threadPool.threadCount: 10org.quartz.threadPool.threadPriority: 5org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread:真#==============================================================================# 配置JdbcJobStore#==============================================================================org.quartz.jobStore.misfireThreshold = 60000#org.quartz.jobStore.class=org.quartz.impl.jdbcjobstore.JobStoreTXorg.quartz.jobStore.driverDelegateClass=org.quartz.impl.jdbcjobstore.oracle.OracleDelegateorg.quartz.jobStore.useProperties=falseorg.quartz.jobStore.dataSource=quartzDSorg.quartz.jobStore.tablePrefix=QRTZ_org.quartz.jobStore.isClustered=false#==============================================================================# 配置数据源#==============================================================================org.quartz.dataSource.quartzDS.jndiURL=java:jboss/datasources/quartzDS

jboss-deployment-structure.xml

<部署><依赖项><module name="org.quartz" export="TRUE"/><模块名称="com.c3p0" export="TRUE"/><module name="com.oracle" export="TRUE"/></依赖项></部署></jboss-deployment-structure>

pom.xml

<modelVersion>4.0.0</modelVersion><groupId>Quartz-POC</groupId><artifactId>com.hp.heimdall</artifactId><version>0.0.1-SNAPSHOT</version><packaging>ejb</packaging><name>com.hp.heimdall</name><属性><endorsed.dir>${project.build.directory}/endorsed</endorsed.dir><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></属性><依赖项><依赖><groupId>javax</groupId><artifactId>javaee-api</artifactId><version>7.0</version><范围>提供</范围></依赖><依赖><groupId>org.quartz-scheduler</groupId><artifactId>quartz</artifactId><version>2.2.1</version></依赖></依赖项><构建><插件><插件><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.1</version><配置><来源>1.8</来源><目标>1.8</目标><编译器参数><endorseddirs>${endorsed.dir}</endorseddirs></compilerArguments></配置></插件><插件><groupId>org.apache.maven.plugins</groupId><artifactId>maven-ejb-plugin</artifactId><version>2.3</version><配置><存档><manifestEntries><Dependencies>org.quartz 导出,com.c3p0 导出,com.oracle 导出</Dependencies></manifestEntries></归档><ejbVersion>3.1</ejbVersion></配置></插件><插件><groupId>org.apache.maven.plugins</groupId><artifactId>maven-dependency-plugin</artifactId><version>2.6</version><执行><执行><阶段>验证</阶段><目标><目标>复制</目标></目标><配置><outputDirectory>${endorsed.dir}</outputDirectory><silent>true</silent><artifactItems><artifactItem><groupId>javax</groupId><artifactId>javaee-endorsed-api</artifactId><version>7.0</version><type>jar</type></artifactItem></artifactItems></配置></执行></执行></插件></插件></build></项目>

服务器配置standalone.xml"

数据源

<datasource jta="true" jndi-name="java:jboss/datasources/quartzDS" pool-name="quartzDS" enabled="true" use-java-context="true" use-ccm="真"><connection-url>jdbc:oracle:thin:@127.0.0.1:1521:orcl</connection-url><driver-class>oracle.jdbc.OracleDriver</driver-class><driver>OracleJDBCDriver</driver><安全><user-name>quartz_user</user-name><password>quartz_user</password></安全><验证><valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.oracle.OracleValidConnectionChecker"/><stale-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.oracle.OracleStaleConnectionChecker"/><exception-sorter class-name="org.jboss.jca.adapters.jdbc.extensions.oracle.OracleExceptionSorter"/></验证><超时><set-tx-query-timeout>false</set-tx-query-timeout><blocking-timeout-millis>0</blocking-timeout-millis><idle-timeout-minutes>0</idle-timeout-minutes><query-timeout>0</query-timeout><use-try-lock>0</use-try-lock><allocation-retry>0</allocation-retry><allocation-retry-wait-millis>0</allocation-retry-wait-millis></超时><声明><share-prepared-statements>false</share-prepared-statements></语句></数据源>

驱动程序

<driver name="OracleJDBCDriver" module="com.oracle"><xa-datasource-class>oracle.jdbc.xa.OracleXADataSource</xa-datasource-class></司机><驱动程序名称=h2"模块=com.h2database.h2"><xa-datasource-class>org.h2.jdbcx.JdbcDataSource</xa-datasource-class></司机></驱动程序>

谁能告诉我这个 ClassNotFoundException 的原因??

解决方案

据:

svn.terracotta.org/svn/quartz/trunk/quartz-oracle/src/main/java/org/quartz/impl/jdbcjobstore/oracle/OracleDelegate.java

第 592+ 行的源代码看起来像

if (blob instanceof oracle.sql.BLOB) {//是 oracle blob?((oracle.sql.BLOB) blob).putBytes(1, data);((oracle.sql.BLOB) blob).trim(data.length);返回斑点;

这依赖于 oracle.sql.BLOB.如果你使用 org.quartz.jobStore.driverDelegateClass=org.quartz.impl.jdbcjobstore.oracle.OracleDelegate 你需要在quartz模块定义中添加对oracle驱动的显式依赖,或者作为资源添加驱动程序 jar.

例如:

<module xmlns="urn:jboss:module:1.1" name="org.quartz"><资源><resource-root path="quartz-2.2.1.jar"/></资源><依赖项><模块名称="javax.api"/><模块名称="org.slf4j"/><模块名称="com.c3p0"/><模块名称="com.oracle"/></依赖项></模块>

I'm trying to build a quartz scheduler ejb app and have it deployed on JBOSS EAP 6.4. Additionally, I'm trying to do so using quartz JDBC jobstore using an Oracle 11g database.

Now, the problem is that whenever I try to schedule a job, I get this exception :

18:45:01,024 ERROR [org.jboss.msc.service.fail] (ServerService Thread Pool -- 50) MSC000001: Failed to start service jboss.deployment.unit."com.hp.heimdall.jar".component.QuartzBootstraper.START: org.jboss.msc.service.StartException in service jboss.deployment.unit."com.hp.heimdall.jar".component.QuartzBootstraper.START: java.lang.IllegalStateException: JBAS011048: Failed to construct component instance
    at org.jboss.as.ee.component.ComponentStartService$1.run(ComponentStartService.java:57) [jboss-as-ee-7.5.0.Final-redhat-21.jar:7.5.0.Final-redhat-21]
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [rt.jar:1.8.0_40]
    at java.util.concurrent.FutureTask.run(FutureTask.java:266) [rt.jar:1.8.0_40]
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [rt.jar:1.8.0_40]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [rt.jar:1.8.0_40]
    at java.lang.Thread.run(Thread.java:745) [rt.jar:1.8.0_40]
    at org.jboss.threads.JBossThread.run(JBossThread.java:122)
Caused by: java.lang.IllegalStateException: JBAS011048: Failed to construct component instance
    at org.jboss.as.ee.component.BasicComponent.constructComponentInstance(BasicComponent.java:164) [jboss-as-ee-7.5.0.Final-redhat-21.jar:7.5.0.Final-redhat-21]
    at org.jboss.as.ee.component.BasicComponent.constructComponentInstance(BasicComponent.java:135) [jboss-as-ee-7.5.0.Final-redhat-21.jar:7.5.0.Final-redhat-21]
    at org.jboss.as.ee.component.BasicComponent.createInstance(BasicComponent.java:90) [jboss-as-ee-7.5.0.Final-redhat-21.jar:7.5.0.Final-redhat-21]
    at org.jboss.as.ejb3.component.singleton.SingletonComponent.getComponentInstance(SingletonComponent.java:122)
    at org.jboss.as.ejb3.component.singleton.SingletonComponent.start(SingletonComponent.java:137)
    at org.jboss.as.ee.component.ComponentStartService$1.run(ComponentStartService.java:54) [jboss-as-ee-7.5.0.Final-redhat-21.jar:7.5.0.Final-redhat-21]
    ... 6 more


Caused by: javax.ejb.EJBException: JBAS014580: Unexpected Error
    at org.jboss.as.ejb3.tx.CMTTxInterceptor.handleExceptionInOurTx(CMTTxInterceptor.java:188)
    at org.jboss.as.ejb3.tx.CMTTxInterceptor.invokeInOurTx(CMTTxInterceptor.java:282)
    at org.jboss.as.ejb3.tx.CMTTxInterceptor.requiresNew(CMTTxInterceptor.java:367)
    at org.jboss.as.ejb3.tx.LifecycleCMTTxInterceptor.processInvocation(LifecycleCMTTxInterceptor.java:66)
    at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) [jboss-invocation-1.1.2.Final-redhat-1.jar:1.1.2.Final-redhat-1]
    at org.jboss.as.ejb3.component.interceptors.CurrentInvocationContextInterceptor.processInvocation(CurrentInvocationContextInterceptor.java:41)
    at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) [jboss-invocation-1.1.2.Final-redhat-1.jar:1.1.2.Final-redhat-1]
    at org.jboss.invocation.ContextClassLoaderInterceptor.processInvocation(ContextClassLoaderInterceptor.java:70) [jboss-invocation-1.1.2.Final-redhat-1.jar:1.1.2.Final-redhat-1]
    at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) [jboss-invocation-1.1.2.Final-redhat-1.jar:1.1.2.Final-redhat-1]
    at org.jboss.invocation.ChainedInterceptor.processInvocation(ChainedInterceptor.java:61) [jboss-invocation-1.1.2.Final-redhat-1.jar:1.1.2.Final-redhat-1]
    at org.jboss.as.ee.component.BasicComponent.constructComponentInstance(BasicComponent.java:162) [jboss-as-ee-7.5.0.Final-redhat-21.jar:7.5.0.Final-redhat-21]
    ... 11 more


Caused by: java.lang.NoClassDefFoundError: oracle/sql/BLOB
    at org.quartz.impl.jdbcjobstore.oracle.OracleDelegate.writeDataToBlob(OracleDelegate.java:592)
    at org.quartz.impl.jdbcjobstore.oracle.OracleDelegate.insertJobDetail(OracleDelegate.java:183)
    at org.quartz.impl.jdbcjobstore.JobStoreSupport.storeJob(JobStoreSupport.java:1112)
    at org.quartz.impl.jdbcjobstore.JobStoreSupport$2.executeVoid(JobStoreSupport.java:1062)
    at org.quartz.impl.jdbcjobstore.JobStoreSupport$VoidTransactionCallback.execute(JobStoreSupport.java:3703)
    at org.quartz.impl.jdbcjobstore.JobStoreSupport$VoidTransactionCallback.execute(JobStoreSupport.java:3701)
    at org.quartz.impl.jdbcjobstore.JobStoreSupport.executeInNonManagedTXLock(JobStoreSupport.java:3787)
    at org.quartz.impl.jdbcjobstore.JobStoreTX.executeInLock(JobStoreTX.java:93)
    at org.quartz.impl.jdbcjobstore.JobStoreSupport.storeJobAndTrigger(JobStoreSupport.java:1058)
    at org.quartz.core.QuartzScheduler.scheduleJob(QuartzScheduler.java:886)
    at org.quartz.impl.StdScheduler.scheduleJob(StdScheduler.java:249)
    at Quartz_POC.com.hp.heimdall.QuartzAvailabilityTest.runTest(QuartzAvailabilityTest.java:69)
    at Quartz_POC.com.hp.heimdall.QuartzBootstraper.init(QuartzBootstraper.java:22)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [rt.jar:1.8.0_40]
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) [rt.jar:1.8.0_40]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) [rt.jar:1.8.0_40]
    at java.lang.reflect.Method.invoke(Method.java:497) [rt.jar:1.8.0_40]
    at org.jboss.as.ee.component.ManagedReferenceLifecycleMethodInterceptor.processInvocation(ManagedReferenceLifecycleMethodInterceptor.java:96) [jboss-as-ee-7.5.0.Final-redhat-21.jar:7.5.0.Final-redhat-21]
    at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) [jboss-invocation-1.1.2.Final-redhat-1.jar:1.1.2.Final-redhat-1]
    at org.jboss.invocation.WeavedInterceptor.processInvocation(WeavedInterceptor.java:53) [jboss-invocation-1.1.2.Final-redhat-1.jar:1.1.2.Final-redhat-1]
    at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) [jboss-invocation-1.1.2.Final-redhat-1.jar:1.1.2.Final-redhat-1]
    at org.jboss.as.ee.component.ComponentInstantiatorInterceptor.processInvocation(ComponentInstantiatorInterceptor.java:76) [jboss-as-ee-7.5.0.Final-redhat-21.jar:7.5.0.Final-redhat-21]
    at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) [jboss-invocation-1.1.2.Final-redhat-1.jar:1.1.2.Final-redhat-1]
    at org.jboss.invocation.WeavedInterceptor.processInvocation(WeavedInterceptor.java:53) [jboss-invocation-1.1.2.Final-redhat-1.jar:1.1.2.Final-redhat-1]
    at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) [jboss-invocation-1.1.2.Final-redhat-1.jar:1.1.2.Final-redhat-1]
    at org.jboss.as.ee.component.NamespaceContextInterceptor.processInvocation(NamespaceContextInterceptor.java:50) [jboss-as-ee-7.5.0.Final-redhat-21.jar:7.5.0.Final-redhat-21]
    at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) [jboss-invocation-1.1.2.Final-redhat-1.jar:1.1.2.Final-redhat-1]
    at org.jboss.as.ejb3.tx.CMTTxInterceptor.invokeInOurTx(CMTTxInterceptor.java:280)
    ... 20 more


Caused by: java.lang.ClassNotFoundException: oracle.sql.BLOB from [Module "org.quartz:main" from local module loader @9e89d68 (finder: local module finder @3b192d32 (roots: C:UsersabdelgamEAP-6.4.0modules,C:UsersabdelgamEAP-6.4.0modulessystemlayersase))]
    at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:213) [jboss-modules.jar:1.3.6.Final-redhat-1]
    at org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:459) [jboss-modules.jar:1.3.6.Final-redhat-1]
    at org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:408) [jboss-modules.jar:1.3.6.Final-redhat-1]
    at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:389) [jboss-modules.jar:1.3.6.Final-redhat-1]
    at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:134) [jboss-modules.jar:1.3.6.Final-redhat-1]
    ... 48 more

Configurations

Installed Modules

In my JBOSS_HOME/modules I installed the following modules:

  1. quartz 2.2.1 module.xml :

<?xml version="1.0" ?>

<module xmlns="urn:jboss:module:1.1" name="org.quartz">

    <resources>
        <resource-root path="quartz-2.2.1.jar"/>
    </resources>

    <dependencies>
        <module name="javax.api"/>
        <module name="org.slf4j"/>
        <module name="com.c3p0"/>
    </dependencies>
</module>

  1. oracle jdbc driver module.xml:

<?xml version="1.0" ?>

<module xmlns="urn:jboss:module:1.1" name="com.oracle">
    <resources>
        <resource-root path="ojdbc6.jar"/>
    </resources>
    <dependencies>
        <module name="javax.api"/>
        <module name="javax.transaction.api"/>
    </dependencies>
</module>

  1. c3p0 module.xml:

<?xml version="1.0" ?>

<module xmlns="urn:jboss:module:1.1" name="com.c3p0">
    <resources>
        <resource-root path="c3p0-0.9.1.1.jar"/>
        <resource-root path="c3p0-0.9.1.1-jdk1.3.jar"/>
        <resource-root path="c3p0-oracle-thin-extras-0.9.1.1.jar"/>
    </resources>
    <dependencies>
        <module name="javax.api"/>
        <module name="javax.transaction.api"/>
        <module name="org.hibernate"/>
    </dependencies>
</module>

quartz.properties

# Default Properties file for use by StdSchedulerFactory
# to create a Quartz Scheduler Instance, if a different
# properties file is not explicitly specified.
#

org.quartz.scheduler.instanceName: DefaultQuartzScheduler
org.quartz.scheduler.rmi.export: false
org.quartz.scheduler.rmi.proxy: false
org.quartz.scheduler.wrapJobExecutionInUserTransaction: false

org.quartz.threadPool.class: org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount: 10
org.quartz.threadPool.threadPriority: 5
org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread: true

#============================================================================
# Configure JdbcJobStore  
#============================================================================

org.quartz.jobStore.misfireThreshold = 60000
#
org.quartz.jobStore.class=org.quartz.impl.jdbcjobstore.JobStoreTX
org.quartz.jobStore.driverDelegateClass=org.quartz.impl.jdbcjobstore.oracle.OracleDelegate
org.quartz.jobStore.useProperties=false
org.quartz.jobStore.dataSource=quartzDS
org.quartz.jobStore.tablePrefix=QRTZ_
org.quartz.jobStore.isClustered=false

#============================================================================
# Configure Datasources  
#============================================================================


org.quartz.dataSource.quartzDS.jndiURL=java:jboss/datasources/quartzDS

jboss-deployment-structure.xml

<jboss-deployment-structure>

   <deployment>

      <dependencies>
         <module name="org.quartz" export="TRUE" />
         <module name="com.c3p0" export="TRUE" />
         <module name="com.oracle" export="TRUE" />
      </dependencies>

   </deployment>

</jboss-deployment-structure>

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>Quartz-POC</groupId>
    <artifactId>com.hp.heimdall</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>ejb</packaging>

    <name>com.hp.heimdall</name>

    <properties>
        <endorsed.dir>${project.build.directory}/endorsed</endorsed.dir>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <dependency>
            <groupId>javax</groupId>
            <artifactId>javaee-api</artifactId>
            <version>7.0</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.quartz-scheduler</groupId>
            <artifactId>quartz</artifactId>
            <version>2.2.1</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <compilerArguments>
                        <endorseddirs>${endorsed.dir}</endorseddirs>
                    </compilerArguments>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-ejb-plugin</artifactId>
                <version>2.3</version>
                <configuration>
                    <archive>
                        <manifestEntries>
                            <Dependencies>org.quartz export, com.c3p0 export, com.oracle export</Dependencies>
                        </manifestEntries>
                    </archive>
                    <ejbVersion>3.1</ejbVersion>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <version>2.6</version>
                <executions>
                    <execution>
                        <phase>validate</phase>
                        <goals>
                            <goal>copy</goal>
                        </goals>
                        <configuration>
                            <outputDirectory>${endorsed.dir}</outputDirectory>
                            <silent>true</silent>
                            <artifactItems>
                                <artifactItem>
                                    <groupId>javax</groupId>
                                    <artifactId>javaee-endorsed-api</artifactId>
                                    <version>7.0</version>
                                    <type>jar</type>
                                </artifactItem>
                            </artifactItems>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

</project>

Server Config "standalone.xml"

Datasource

<datasource jta="true" jndi-name="java:jboss/datasources/quartzDS" pool-name="quartzDS" enabled="true" use-java-context="true" use-ccm="true">
                    <connection-url>jdbc:oracle:thin:@127.0.0.1:1521:orcl</connection-url>
                    <driver-class>oracle.jdbc.OracleDriver</driver-class>
                    <driver>OracleJDBCDriver</driver>
                    <security>
                        <user-name>quartz_user</user-name>
                        <password>quartz_user</password>
                    </security>
                    <validation>
                        <valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.oracle.OracleValidConnectionChecker"/>
                        <stale-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.oracle.OracleStaleConnectionChecker"/>
                        <exception-sorter class-name="org.jboss.jca.adapters.jdbc.extensions.oracle.OracleExceptionSorter"/>
                    </validation>
                    <timeout>
                        <set-tx-query-timeout>false</set-tx-query-timeout>
                        <blocking-timeout-millis>0</blocking-timeout-millis>
                        <idle-timeout-minutes>0</idle-timeout-minutes>
                        <query-timeout>0</query-timeout>
                        <use-try-lock>0</use-try-lock>
                        <allocation-retry>0</allocation-retry>
                        <allocation-retry-wait-millis>0</allocation-retry-wait-millis>
                    </timeout>
                    <statement>
                        <share-prepared-statements>false</share-prepared-statements>
                    </statement>
                </datasource>

Drivers

<drivers>
                    <driver name="OracleJDBCDriver" module="com.oracle">
                        <xa-datasource-class>oracle.jdbc.xa.OracleXADataSource</xa-datasource-class>
                    </driver>
                    <driver name="h2" module="com.h2database.h2">
                        <xa-datasource-class>org.h2.jdbcx.JdbcDataSource</xa-datasource-class>
                    </driver>
                </drivers>

Can anyone tell me the reason for this ClassNotFoundException??

解决方案

According to:

svn.terracotta.org/svn/quartz/trunk/quartz-oracle/src/main/java/org/quartz/impl/jdbcjobstore/oracle/OracleDelegate.java

the source there in line 592+ look like

if (blob instanceof oracle.sql.BLOB) { // is it an oracle blob?
            ((oracle.sql.BLOB) blob).putBytes(1, data);
            ((oracle.sql.BLOB) blob).trim(data.length);
            return blob;

this have a dependency to oracle.sql.BLOB. And if you use org.quartz.jobStore.driverDelegateClass=org.quartz.impl.jdbcjobstore.oracle.OracleDelegate you need add the explicit dependency to oracle driver in the quartz module definition, or alternatively add as resource the driver jar.

Eg:

<?xml version="1.0" ?>
<module xmlns="urn:jboss:module:1.1" name="org.quartz">
    <resources>
        <resource-root path="quartz-2.2.1.jar"/>
    </resources>
    <dependencies>
        <module name="javax.api"/>
        <module name="org.slf4j"/>
        <module name="com.c3p0"/>
        <module name="com.oracle"/>
    </dependencies>
</module>

这篇关于石英 2.2.1+jboss EAP 6.4 ClassNotFoundException oracle.sql.BLOB的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆