日前在项目中使用Quartz进行任务调度,在使用过程中遇到了一个问题:
在项目中,用户通过界面支持实现任务的添加,而任务调度器通过监控数据库的任务列表来实现任务调度操作.为了实现任务的可持续化存储,我采用了:
org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX
Quartz自行管理模式。
当前使用的数据源的连接方式:
org.quartz.dataSource.myDS.jndiURL =dataSource
org.quartz.dataSource.myDS.jndiAlwaysLookup = true
org.quartz.dataSource.myDS.java.naming.factory.initial=com.app.plantask.jndi.MyFactory
由于我的任务调度是有一个任务在系统中重复执行(其工作就是监控数据库的任务列表并控制任务的调度),在计划任务的添加时报以下错误:
log4j:WARN Please initialize the log4j system properly.
<2009-6-25 é???10ê±45·?41?? CST> <Error> <HTTP> <BEA-101017> <[weblogic.servlet.
internal.WebAppServletContext@1906773 - appName: 'webapp', name: 'webapp', conte
xt-path: '/webapp'] Root cause of ServletException.
org.quartz.JobPersistenceException: Couldn't store job: Driver's Blob representa
tion is of an unsupported type: weblogic.jdbc.wrapper.Blob_weblogic_jdbc_base_Ba
seBlob [See nested exception: java.sql.SQLException: Driver's Blob representatio
n is of an unsupported type: weblogic.jdbc.wrapper.Blob_weblogic_jdbc_base_BaseB
lob]
at org.quartz.impl.jdbcjobstore.JobStoreSupport.storeJob(JobStoreSupport
.java:1108)
at org.quartz.impl.jdbcjobstore.JobStoreSupport$4.execute(JobStoreSuppor
t.java:1075)
at org.quartz.impl.jdbcjobstore.JobStoreSupport$40.execute(JobStoreSuppo
rt.java:3688)
at org.quartz.impl.jdbcjobstore.JobStoreSupport.executeInNonManagedTXLoc
k(JobStoreSupport.java:3760)
at org.quartz.impl.jdbcjobstore.JobStoreTX.executeInLock(JobStoreTX.java
:93)
Truncated. see log file for complete stacktrace
java.sql.SQLException: Driver's Blob representation is of an unsupported type: w
eblogic.jdbc.wrapper.Blob_weblogic_jdbc_base_BaseBlob
at org.quartz.impl.jdbcjobstore.oracle.OracleDelegate.writeDataToBlob(Or
acleDelegate.java:649)
at org.quartz.impl.jdbcjobstore.oracle.OracleDelegate.insertJobDetail(Or
acleDelegate.java:210)
at org.quartz.impl.jdbcjobstore.JobStoreSupport.storeJob(JobStoreSupport
.java:1102)
at org.quartz.impl.jdbcjobstore.JobStoreSupport$4.execute(JobStoreSuppor
t.java:1075)
at org.quartz.impl.jdbcjobstore.JobStoreSupport$40.execute(JobStoreSuppo
rt.java:3688)
Truncated. see log file for complete stacktrace
>
<2009-6-25 é???10ê±45·?41?? CST> <Error> <Kernel> <BEA-000802> <ExecuteRequest f
ailed
java.lang.NullPointerException.
java.lang.NullPointerException
at com.sailing.framework.utils.ExceptionUtil.getMessage(ExceptionUtil.ja
va:23)
at jsp_servlet.__error._jspService(__error.java:355)
at weblogic.servlet.jsp.JspBase.service(JspBase.java:34)
at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run
(StubSecurityHelper.java:225)
at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecuri
tyHelper.java:127)
Truncated. see log file for complete stacktrace
在查找相关资料后:
将当前的JNDI连接方式修改为直连的方式:
org.quartz.dataSource.myDS.driver = oracle.jdbc.OracleDriver
org.quartz.dataSource.myDS.URL = jdbc:oracle:thin:@XXXXXXX:1521:dhcs
org.quartz.dataSource.myDS.user = XXXXX
org.quartz.dataSource.myDS.password = XXXXX
org.quartz.dataSource.myDS.maxConnections = 5
org.quartz.dataSource.myDS.validationQuery = select table_name from user_tables
再次添加的时候就成功了。