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]

Reply via email to