我想使用Spring提供的聲明式事務管理功能。我已經按照參考文檔(即包括AOP,tx命名空間和使用<tx:annotation-driven />
標記)所述設置了Spring配置和bean,並且正在使用我希望進行事務處理的方法上的@Transactional註釋。使用@Transactional註釋問題
這是怎樣的代碼看起來像:
public interface Worker {
public workOnEvents(List<Events> eventsForACustomer);
}
public class WorkerImpl {
@Transactional
public workOnEvents(List<Events> eventsForACustomer) {
for(Event event : eventsForACustomer) {
// get DAO's based on event types at runtime,
// so we will have different DAO's acting within this loop
DAOFactory.getDAO(event.getType()).persistEvent(event);
}
}
}
現在,我想,如果任何在上面的循環中的DAO的無法處理的情況下,所有對數據庫的修改由來到其他的DAO製造在此之前的循環中,應該回滾。因此,爲了測試回滾,我列出了一些事件(e1,e2,e3),它們會導致DAO出現(d1,d2,d3),然後我故意拋出一個運行時異常DAO d2的persistEvent方法。但是,我得到的結果是,程序終止而不繼續循環中的事件e3,不處理拋出的異常。此外,由DAO d1保留的數據不會回滾。
請讓我知道我在這裏做錯了什麼?
請添加日誌。 – Padmarag 2010-03-05 06:40:53
顯示Dao工廠和一個任意的DAO類 – Bozho 2010-03-05 09:08:27
我將盡快發佈DAO代碼:)我的意思是說這是我的公司擁有的代碼,並且我發佈了一些樣例代碼在這裏,它基本上模擬了正在發生的事情。至於在DAO代碼中進行刷新,我已經檢查過了,情況並非如此。它可能會受到我的應用程序中的db configs或Hibernate設置默認值的影響。不過,我會回來一些示例代碼,可以儘可能地模擬我的情況。 – abhinav 2010-03-05 09:32:03