調用事務的問題,我設置石英2.1.0在WebSphere在集羣模式下運行,使用JobStoreTX,我能org.quartz.scheduler.jmx.export這樣我就可以通過JMX訪問石英調度。與集羣石英通過JMX
問題是,當我要調用通過JMX一些方法,做一些與SQL我得到異常:
java.lang.Exception: Failure obtaining db row lock: Not in transaction.
at org.quartz.impl.jdbcjobstore.StdRowLockSemaphore.executeSQL(StdRowLockSemaphore.java:116)
at org.quartz.impl.jdbcjobstore.DBSemaphore.obtainLock(DBSemaphore.java:115)
at org.quartz.impl.jdbcjobstore.JobStoreCMT.executeInLock(JobStoreCMT.java:238)
at org.quartz.impl.jdbcjobstore.JobStoreSupport.removeTrigger(JobStoreSupport.java:1410)
at org.quartz.core.QuartzScheduler.unscheduleJob(QuartzScheduler.java:1026)
at org.quartz.core.QuartzScheduler.deleteJob(QuartzScheduler.java:934)
at org.quartz.core.QuartzSchedulerMBeanImpl.deleteJob(QuartzSchedulerMBeanImpl.java:352)
看來,調度中的所有操作都需要被封閉成一個事務,但是當調用通過JMX不存在事務。我應該如何解決它?
<property name="quartzProperties">
<props>
<prop key="org.quartz.scheduler.instanceName">myApp</prop>
<prop key="org.quartz.scheduler.instanceId">AUTO</prop>
<prop key="org.quartz.jobStore.misfireThreshold">60000</prop>
<prop key="org.quartz.jobStore.class">org.quartz.impl.jdbcjobstore.JobStoreTX</prop>
<prop key="org.quartz.jobStore.driverDelegateClass">org.quartz.impl.jdbcjobstore.StdJDBCDelegate</prop>
<prop key="org.quartz.jobStore.tablePrefix">q</prop>
<prop key="org.quartz.jobStore.isClustered">true</prop>
<prop key="org.quartz.threadPool.class">org.quartz.simpl.SimpleThreadPool</prop>
<prop key="org.quartz.threadPool.threadCount">5</prop>
<prop key="org.quartz.threadPool.threadPriority">5</prop>
<prop key="org.quartz.scheduler.skipUpdateCheck">true</prop>
<prop key="org.quartz.scheduler.jmx.export">true</prop>
<prop key="org.quartz.scheduler.jmx.objectName">quartz:type=QuartzScheduler,name=JmxScheduler</prop>
</props>
</property>
UPDATE:
我使用的彈簧,JobStoreTX
被overrided到LocalDataSourceJobStore
UPDATE2
<tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true" />
<jee:jndi-lookup id="dataSourceCron" jndi-name="jdbc/..." />
<bean id="scheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="applicationContextSchedulerContextKey" value="applicationContext" />
<property name="dataSource" ref="dataSourceCron" />
<property name="transactionManager" ref="transactionManager" />
<property name="overwriteExistingJobs" value="true" />
<property name="autoStartup" value="true" />
<property name="triggers" ref="jobTriggers" />
<property name="jobDetails" ref="jobDetails" />
(properties)
</bean>
你可以發表你的Spring配置的其他人呢? –
您可以發佈代碼/配置,瞭解如何將Spring與JMX集成,您如何在JMX –
中發佈Spring Bean,它已經在這裏。我只是將屬性jmx.export添加到true,然後公開MBean。你有什麼意思與春天融合?我正在使用SchedulerFactoryBean,這是我的春天上下文 – hudi