(Bahar Hala biraz yeni) atar o.Bahar: @Transactional @Scheduled yöntemi ben bir DAO çağırmak için olsun böylece, aynı zamanda <code>@Scheduled</code> ve <code>@Transactional</code> olan bir hizmet yöntemi olması gerekir</p> <p>TransactionException
Beyanatlı işlemler etkinleştirilir, işlem yöneticisi hazırda bekleme oturumunu temel alan bir org.springframework.orm.hibernate3.HibernateTransactionManager
'dur.
Hizmet sınıfı, CGLIB proxy kullanıldığından hiçbir arabirim uygulamıyor.
Bu kurulum, genel olarak iyi çalışır (web yığını yani. Struts denilen yöntemler), ancak bu yöntem, zamanlayıcı tarafından çağrıldığında bir istisna ortaya çıkarır.
hizmet yöntemi (sınıf ClientWakeAndTerminateManager
olarak adlandırılır):
<!-- switch on the transactional infrastructure -->
<tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true"/>
<!-- Utility class to execute transactional code where use of annotation is not possible -->
<bean class="org.springframework.transaction.support.TransactionTemplate" id="txTemplate">
<constructor-arg name="transactionManager" ref="transactionManager"/>
</bean>
<!-- Transaction manager based on Hibernate -->
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="hibernateSessionFactory"/>
</bean>
durum yığın: başvurum bağlam
@Scheduled(initialDelay = 5000, fixedRateString = "${rmi.server.threads.clientsScheduleManagement.rate}")
@Transactional(readOnly = true)
public void runCheck(){
//Call a read-only DAO method (the DAO is @Autowired as a class field)
//do some stuff with the data loaded from DB
}
Buradan ilgili kısımlar, burada
kod ilgili bitlerdir izlenme:[ERROR] : Unexpected error occurred in scheduled task.
org.springframework.transaction.TransactionSystemException: Could not commit Hibernate transaction; nested exception is org.hibernate.TransactionException: Transaction not successfully started
at org.springframework.orm.hibernate3.HibernateTransactionManager.doCommit(HibernateTransactionManager.java:661)
at org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:755)
at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:724)
at org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning(TransactionAspectSupport.java:475)
at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:270)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:94)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:631)
at ch.unine.sitel.lis.rmi.shared.ClientWakeAndTerminateManager$$EnhancerByCGLIB$$d8be4f34.runCheck(<generated>)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at org.springframework.scheduling.support.ScheduledMethodRunnable.run(ScheduledMethodRunnable.java:64)
at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:53)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
at java.util.concurrent.FutureTask$Sync.innerRunAndReset(FutureTask.java:351)
at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:178)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:178)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
at java.lang.Thread.run(Thread.java:722)
Caused by: org.hibernate.TransactionException: Transaction not successfully started
at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:127)
at org.springframework.orm.hibernate3.HibernateTransactionManager.doCommit(HibernateTransactionManager.java:657)
... 22 more
Yığın izlemesi, bir işlem vekilinin gerçekten kullanıldığını söylüyor, bu yüzden bu özel durumu anlamıyorum. Yardım et !
DÜZENLEME: tarafından @Transactional
ve @Scheduled
ek not ayrı çalıştı
:
@Scheduled
yöntemini contaisn yeni sınıf/fasulye oluşturma
@Scheduled
özgün yöntemimden kaldırıldı, ancak@Transactional
Ancak yine de aynı özel durumla karşılaşıyorum. Ayrıca, DAO yöntemine @Transactional
'u koyup hizmet yöntemimden kaldırmayı denedim: aynı sonuç.
zaten kararlı ya da işlem işlemek veya – wedens
Eğer dao yöntemini gösterebilir geri almak çalışır geri alındı zaman buna yol açabilecek hareketi geri alır emin? – wedens
Tamam, DAO yöntemim suçlu olanıydı. Şüphelenmeye başladım ve sonra yorumun bana iki kez bakmamı sağladı. Bu yöntem bazı sol-over manuel oturum taahhüt içeriyordu (Ben son zamanlarda bu uygulamayı modernize ve "yaylıyorum"), bu yüzden işlem proxy'si çağrıda bulunduğunda taahhüt edildi çünkü başarısız oldu zaten! Zaman ayırdığın için teşekkürler. Cevabınızı DAO yönteminden bahsetmek için düzenlerseniz kabul edeceğim. –