java - LockException: Failure obtaining db row lock: No operations -
i have working spring application , trying add quartz job scheduling it. i've copy/pasted/modified spring configuration project have working, 1 keeps throwing exception when starting up. i'm using quartz 2.2 , spring 3.2.1. i've included spring configuration , exception stack trace. diagnosing appreciated.
<!-- task scheduling --> <bean id="emailorganizerlink" class="it.cause.cron.emailorganizerlink" /> <bean id="emailorganizerlinkjob" class="org.springframework.scheduling.quartz.jobdetailfactorybean"> <property name="jobclass" value="it.cause.cron.emailorganizerlinkjob" /> <property name="durability" value="true" /> </bean> <bean id="emailorganizerlinktrigger" class="org.springframework.scheduling.quartz.crontriggerfactorybean"> <property name="jobdetail" ref="emailorganizerlinkjob" /> <!-- run every morning @ 5am (every minute testing) --> <property name="cronexpression" value="0 */1 * * * ?" /> </bean> <bean class="org.springframework.scheduling.quartz.schedulerfactorybean" lazy-init="false" autowire="no"> <property name="applicationcontextschedulercontextkey" value="applicationcontext" /> <property name="datasource" ref="datasource" /> <property name="transactionmanager" ref="transactionmanager" /> <property name="overwriteexistingjobs" value="true" /> <property name="waitforjobstocompleteonshutdown" value="true" /> <property name="autostartup" value="true" /> <property name="triggers"> <list> <ref bean="emailorganizerlinktrigger" /> </list> </property> <property name="quartzproperties"> <props> <prop key="org.quartz.scheduler.instancename">causeitbatchscheduler</prop> <prop key="org.quartz.scheduler.instanceid">auto</prop> <prop key="org.quartz.jobstore.misfirethreshold">300000</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">qrtz_</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> </props> </property> <property name="schedulercontextasmap"> <map> <entry key="emailorganizerlink" value-ref="emailorganizerlink" /> </map> </property> </bean> <context:property-placeholder location="classpath:hibernate.properties" /> <bean id="datasource" class="org.springframework.jdbc.datasource.drivermanagerdatasource"> <property name="driverclassname"> <value>${hibernate.connection.driver_class}</value> </property> <property name="url"> <value>${hibernate.connection.url}</value> </property> <property name="username"> <value>${hibernate.connection.username}</value> </property> <property name="password"> <value>${hibernate.connection.password}</value> </property> </bean> <bean id="transactionmanager" class="org.springframework.orm.jpa.jpatransactionmanager"> <property name="entitymanagerfactory" ref="entitymanagerfactory" /> </bean> <bean id="entitymanagerfactory" class="org.springframework.orm.jpa.localcontainerentitymanagerfactorybean"> <property name="datasource" ref="datasource" /> <property name="persistenceunitname" value="causeit" /> <property name="persistencexmllocation" value="classpath:meta-inf/persistence.xml" /> <property name="jpavendoradapter"> <bean class="org.springframework.orm.jpa.vendor.hibernatejpavendoradapter"> <property name="databaseplatform" value="${hibernate.dialect}" /> <property name="showsql" value="${hibernate.showsql}" /> <property name="generateddl" value="${hibernate.generateddl}" /> </bean> </property> <!-- <property name="jpaproperties"> <props> <prop key="hibernate.ejb.naming_strategy">org.hibernate.cfg.improvednamingstrategy</prop> </props> </property> --> </bean>
sep 24, 2013 10:47:41 org.quartz.impl.stdschedulerfactory instantiate info: using default implementation threadexecutor sep 24, 2013 10:47:41 org.quartz.core.schedulersignalerimpl info: initialized scheduler signaller of type: class org.quartz.core.schedulersignalerimpl sep 24, 2013 10:47:41 org.quartz.core.quartzscheduler info: quartz scheduler v.2.2.0 created. sep 24, 2013 10:47:42 org.quartz.impl.jdbcjobstore.jobstoresupport initialize info: using db table-based data access locking (synchronization). sep 24, 2013 10:47:42 org.quartz.impl.jdbcjobstore.jobstorecmt initialize info: jobstorecmt initialized. sep 24, 2013 10:47:42 org.quartz.core.quartzscheduler initialize info: scheduler meta-data: quartz scheduler (v2.2.0) 'org.springframework.scheduling.quartz.schedulerfactorybean#0' instanceid 'causeits-macbook-air.local1380034061295' scheduler class: 'org.quartz.core.quartzscheduler' - running locally. not started. in standby mode. number of jobs executed: 0 using thread pool 'org.quartz.simpl.simplethreadpool' - 5 threads. using job-store 'org.springframework.scheduling.quartz.localdatasourcejobstore' - supports persistence. , clustered. sep 24, 2013 10:47:42 org.quartz.impl.stdschedulerfactory instantiate info: quartz scheduler 'org.springframework.scheduling.quartz.schedulerfactorybean#0' initialized externally provided properties instance. sep 24, 2013 10:47:42 org.quartz.impl.stdschedulerfactory instantiate info: quartz scheduler version: 2.2.0 sep 24, 2013 10:47:42 org.quartz.core.quartzscheduler setjobfactory info: jobfactory set to: org.springframework.scheduling.quartz.adaptablejobfactory@3f5756de 2013-09-24 10:47:46,004 [error]: job registration exception overridden rollback exception org.quartz.impl.jdbcjobstore.lockexception: failure obtaining db row lock: no operations allowed after connection closed. [see nested exception: com.mysql.jdbc.exceptions.jdbc4.mysqlnontransientconnectionexception: no operations allowed after connection closed.] @ org.quartz.impl.jdbcjobstore.stdrowlocksemaphore.executesql(stdrowlocksemaphore.java:157) @ org.quartz.impl.jdbcjobstore.dbsemaphore.obtainlock(dbsemaphore.java:113) @ org.quartz.impl.jdbcjobstore.jobstorecmt.executeinlock(jobstorecmt.java:238) @ org.quartz.impl.jdbcjobstore.jobstoresupport.executeinlock(jobstoresupport.java:3701) @ org.quartz.impl.jdbcjobstore.jobstoresupport.storejob(jobstoresupport.java:1085) @ org.quartz.core.quartzscheduler.addjob(quartzscheduler.java:999) @ org.quartz.core.quartzscheduler.addjob(quartzscheduler.java:988) @ org.quartz.impl.stdscheduler.addjob(stdscheduler.java:268) @ org.springframework.scheduling.quartz.scheduleraccessor.addjobtoscheduler(scheduleraccessor.java:342) @ org.springframework.scheduling.quartz.scheduleraccessor.addtriggertoscheduler(scheduleraccessor.java:365) @ org.springframework.scheduling.quartz.scheduleraccessor.registerjobsandtriggers(scheduleraccessor.java:303) @ org.springframework.scheduling.quartz.schedulerfactorybean.afterpropertiesset(schedulerfactorybean.java:511) @ org.springframework.beans.factory.support.abstractautowirecapablebeanfactory.invokeinitmethods(abstractautowirecapablebeanfactory.java:1545) @ org.springframework.beans.factory.support.abstractautowirecapablebeanfactory.initializebean(abstractautowirecapablebeanfactory.java:1483) @ org.springframework.beans.factory.support.abstractautowirecapablebeanfactory.docreatebean(abstractautowirecapablebeanfactory.java:524) @ org.springframework.beans.factory.support.abstractautowirecapablebeanfactory.createbean(abstractautowirecapablebeanfactory.java:461) @ org.springframework.beans.factory.support.abstractbeanfactory$1.getobject(abstractbeanfactory.java:295) @ org.springframework.beans.factory.support.defaultsingletonbeanregistry.getsingleton(defaultsingletonbeanregistry.java:223) @ org.springframework.beans.factory.support.abstractbeanfactory.dogetbean(abstractbeanfactory.java:292) @ org.springframework.beans.factory.support.abstractbeanfactory.getbean(abstractbeanfactory.java:194) @ org.springframework.beans.factory.support.defaultlistablebeanfactory.preinstantiatesingletons(defaultlistablebeanfactory.java:608) @ org.springframework.context.support.abstractapplicationcontext.finishbeanfactoryinitialization(abstractapplicationcontext.java:932) @ org.springframework.context.support.abstractapplicationcontext.refresh(abstractapplicationcontext.java:479) @ org.springframework.web.context.contextloader.configureandrefreshwebapplicationcontext(contextloader.java:389) @ org.springframework.web.context.contextloader.initwebapplicationcontext(contextloader.java:294) @ org.springframework.web.context.contextloaderlistener.contextinitialized(contextloaderlistener.java:112) @ org.apache.catalina.core.standardcontext.listenerstart(standardcontext.java:4939) @ org.apache.catalina.core.standardcontext.startinternal(standardcontext.java:5434) @ org.apache.catalina.util.lifecyclebase.start(lifecyclebase.java:150) @ org.apache.catalina.core.containerbase$startchild.call(containerbase.java:1559) @ org.apache.catalina.core.containerbase$startchild.call(containerbase.java:1549) @ java.util.concurrent.futuretask$sync.innerrun(futuretask.java:303) @ java.util.concurrent.futuretask.run(futuretask.java:138) @ java.util.concurrent.threadpoolexecutor$worker.runtask(threadpoolexecutor.java:895) @ java.util.concurrent.threadpoolexecutor$worker.run(threadpoolexecutor.java:918) @ java.lang.thread.run(thread.java:680) caused by: com.mysql.jdbc.exceptions.jdbc4.mysqlnontransientconnectionexception: no operations allowed after connection closed. @ sun.reflect.nativeconstructoraccessorimpl.newinstance0(native method) @ sun.reflect.nativeconstructoraccessorimpl.newinstance(nativeconstructoraccessorimpl.java:39) @ sun.reflect.delegatingconstructoraccessorimpl.newinstance(delegatingconstructoraccessorimpl.java:27) @ java.lang.reflect.constructor.newinstance(constructor.java:513) @ com.mysql.jdbc.util.handlenewinstance(util.java:411) @ com.mysql.jdbc.util.getinstance(util.java:386) @ com.mysql.jdbc.sqlerror.createsqlexception(sqlerror.java:1015) @ com.mysql.jdbc.sqlerror.createsqlexception(sqlerror.java:989) @ com.mysql.jdbc.sqlerror.createsqlexception(sqlerror.java:975) @ com.mysql.jdbc.sqlerror.createsqlexception(sqlerror.java:920) @ com.mysql.jdbc.connectionimpl.throwconnectionclosedexception(connectionimpl.java:1304) @ com.mysql.jdbc.connectionimpl.checkclosed(connectionimpl.java:1296) @ com.mysql.jdbc.connectionimpl.preparestatement(connectionimpl.java:4511) @ com.mysql.jdbc.connectionimpl.preparestatement(connectionimpl.java:4476) @ sun.reflect.nativemethodaccessorimpl.invoke0(native method) @ sun.reflect.nativemethodaccessorimpl.invoke(nativemethodaccessorimpl.java:39) @ sun.reflect.delegatingmethodaccessorimpl.invoke(delegatingmethodaccessorimpl.java:25) @ java.lang.reflect.method.invoke(method.java:597) @ org.quartz.impl.jdbcjobstore.attributerestoringconnectioninvocationhandler.invoke(attributerestoringconnectioninvocationhandler.java:73) @ com.sun.proxy.$proxy68.preparestatement(unknown source) @ org.quartz.impl.jdbcjobstore.stdrowlocksemaphore.executesql(stdrowlocksemaphore.java:88) ... 35 more
in order make 2.2 scheduler work, need enter records in qrtz_lock table particular scheduler name.
insert qrtz_locks values('causeitbatchscheduler', 'trigger_access'); insert qrtz_locks values('causeitbatchscheduler','job_access'); insert qrtz_locks values('causeitbatchscheduler','calendar_access'); insert qrtz_locks values('causeitbatchscheduler','state_access'); insert qrtz_locks values('causeitbatchscheduler','misfire_access');
Comments
Post a Comment