Hello Experts.
I am using appfuse, spring, and hibernate to create my project. I have a
userManager, and a userDao for access to my "user" table. I am trying to
run a quartz(1.5.2) cron job to iterate through my user table and edit an
integer field (add some amount) for every user record. The method that I am
calling from quartz is located within the userManager.
the quartz configuration is below:
*******************************
<bean id="topOffJobDetail"
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject" ref ="userManager"/>
<property
name="targetMethod"><value>topOffInvites</value></property>
</bean>
<bean id="topOffCronTrigger"
class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail" ref="topOffJobDetail"/>
<property name="cronExpression">
<value>* 30 * * * ?</value>
</property>
</bean>
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref local="topOffCronTrigger"/>
</list>
</property>
</bean>
**************************************************
I have even configured this method in my transaction attributes as follows:
<bean id="userManager" parent="txProxyTemplate">
<property name="target">
<bean class="com.ilr.razorpoints.service.impl.UserManagerImpl">
<property name="userDao" ref="userDao"/>
</bean>
</property>
<!-- Override default transaction attributes b/c of
UserExistsException -->
<property name="transactionAttributes">
<props>
<prop
key="save*">PROPAGATION_REQUIRED,-UserExistsException</prop>
<prop key="remove*">PROPAGATION_REQUIRED</prop>
<prop key="topOff*">PROPAGATION_REQUIRED</prop>
<prop key="*">PROPAGATION_REQUIRED, readOnly</prop>
</props>
</property>
<!-- This property is overriden in applicationContext-security.xml
to add
method-level role security -->
<property name="preInterceptors">
<list>
<ref bean="userSecurityInterceptor"/>
</list>
</property>
</bean>
Everytime the cronjob runs I get this error (everytime it tries to persist a
a user after editing it.)
**************************************
org.springframework.dao.InvalidDataAccessApiUsageException: Write operations
are not allowed in read-only mode (FlushMode.NEVER) - turn your Session into
FlushMode.AUTO or remove 'readOnly' marker from transaction definition
at
org.springframework.orm.hibernate3.HibernateTemplate.checkWriteOperationAllowed(HibernateTemplate.java:1098)
at
org.springframework.orm.hibernate3.HibernateTemplate$18.doInHibernate(HibernateTemplate.java:692)
at
org.springframework.orm.hibernate3.HibernateTemplate.execute(HibernateTemplate.java:366)
at
org.springframework.orm.hibernate3.HibernateTemplate.saveOrUpdate(HibernateTemplate.java:690)
at
com.ilr.razorpoints.dao.hibernate.UserDaoHibernate.saveUser(UserDaoHibernate.java:60)
at
com.ilr.razorpoints.service.impl.UserManagerImpl.topOffInvites(UserManagerImpl.java:99)
at sun.reflect.GeneratedMethodAccessor90.invoke(Unknown Source)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:324)
at
org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:287)
at
org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:181)
at
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:148)
at
org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96)
at
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:170)
at
org.acegisecurity.intercept.method.aopalliance.MethodSecurityInterceptor.invoke(MethodSecurityInterceptor.java:80)
at
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:170)
at
org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:176)
at $Proxy1.topOffInvites(Unknown Source)
at sun.reflect.GeneratedMethodAccessor89.invoke(Unknown Source)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:324)
at org.springframework.util.MethodInvoker.invoke(MethodInvoker.java:248)
at
org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean$MethodInvokingJob.executeInternal(MethodInvokingJobDetailFactoryBean.java:165)
at
org.springframework.scheduling.quartz.QuartzJobBean.execute(QuartzJobBean.java:90)
at org.quartz.core.JobRunShell.run(JobRunShell.java:203)
at
org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:520)
[razorpoints] DEBUG [DefaultQuartzScheduler_Worker-3]
UserManagerImpl.testQuartz(83) | Quartz is working!!!
[razorpoints] DEBUG [DefaultQuartzScheduler_Worker-7]
UserManagerImpl.topOffInvites(87) | entering top off!
[razorpoints] DEBUG [DefaultQuartzScheduler_Worker-7]
UserManagerImpl.topOffInvites(97) | user mraible now has 6 invites left
[razorpoints] DEBUG [DefaultQuartzScheduler_Worker-7]
UserDaoHibernate.saveUser(57) | user's id: 2
[razorpoints] DEBUG [DefaultQuartzScheduler_Worker-7]
UserManagerImpl.topOffInvites(101) | error in saving user mraible
org.springframework.dao.InvalidDataAccessApiUsageException: Write operations
are not allowed in read-only mode (FlushMode.NEVER) - turn your Session into
FlushMode.AUTO or remove 'readOnly' marker from transaction definition
at
org.springframework.orm.hibernate3.HibernateTemplate.checkWriteOperationAllowed(HibernateTemplate.java:1098)
at
org.springframework.orm.hibernate3.HibernateTemplate$18.doInHibernate(HibernateTemplate.java:692)
at
org.springframework.orm.hibernate3.HibernateTemplate.execute(HibernateTemplate.java:366)
at
org.springframework.orm.hibernate3.HibernateTemplate.saveOrUpdate(HibernateTemplate.java:690)
at
com.ilr.razorpoints.dao.hibernate.UserDaoHibernate.saveUser(UserDaoHibernate.java:60)
at
com.ilr.razorpoints.service.impl.UserManagerImpl.topOffInvites(UserManagerImpl.java:99)
at sun.reflect.GeneratedMethodAccessor90.invoke(Unknown Source)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:324)
at
org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:287)
at
org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:181)
at
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:148)
at
org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96)
at
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:170)
at
org.acegisecurity.intercept.method.aopalliance.MethodSecurityInterceptor.invoke(MethodSecurityInterceptor.java:80)
at
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:170)
at
org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:176)
at $Proxy1.topOffInvites(Unknown Source)
at sun.reflect.GeneratedMethodAccessor89.invoke(Unknown Source)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:324)
at org.springframework.util.MethodInvoker.invoke(MethodInvoker.java:248)
at
org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean$MethodInvokingJob.executeInternal(MethodInvokingJobDetailFactoryBean.java:165)
at
org.springframework.scheduling.quartz.QuartzJobBean.execute(QuartzJobBean.java:90)
at org.quartz.core.JobRunShell.run(JobRunShell.java:203)
at
org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:520)
[razorpoints] DEBUG [DefaultQuartzScheduler_Worker-7]
UserManagerImpl.topOffInvites(97) | user tomcat now has 6 invites left
[razorpoints] DEBUG [DefaultQuartzScheduler_Worker-7]
UserDaoHibernate.saveUser(57) | user's id: 1
[razorpoints] DEBUG [DefaultQuartzScheduler_Worker-7]
UserManagerImpl.topOffInvites(101) | error in saving user tomcat
*****************************************
I believe there is some kind of transaction issue. Any help is greatly
appreciated.
--
View this message in context:
http://www.nabble.com/Appfuse-Spring-Hibernate-Quartz-InvalidDataAccessApiUsageException-tf2808582s2369.html#a7836549
Sent from the AppFuse - User mailing list archive at Nabble.com.
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]