Tôi đang sử dụng giao dịch dựa trên chú thích trong dự án Spring MVC 3.1 và giao dịch của tôi không được khôi phục khi ngoại lệ được ném.Giao dịch mùa xuân không quay trở lại ngoại lệ (nguồn dữ liệu Oracle JNDI)
Đây là mã dịch vụ của tôi
@Service
public class ImportService {
@Autowired
ImportMapper importMapper;
@Transactional(propagation=Propagation.REQUIRED, isolation=Isolation.READ_COMMITTED, rollbackFor=Throwable.class)
public void processImport() throws ServiceException, DatabaseException {
iImport import = new Import();
createImport(import);
throw new ServiceException("");
}
@Transactional(propagation=Propagation.REQUIRED, isolation=Isolation.READ_COMMITTED, rollbackFor=Throwable.class)
private void createImport(Import import) throws DatabaseException {
try {
importMapper.createImport(eventImport);
} catch (Exception e) {
throw new DatabaseException(e);
}
}
Vì vậy, hy vọng, phương pháp createImport nên được cuộn lại sau khi ngoại lệ được ném. Nhưng tiếc là nó không phải.
Tôi xác định nguồn dữ liệu của tôi trong context.xml máy chủ
<Resource name="datasource.import" auth="Container" type="javax.sql.DataSource"
maxActive="100" maxIdle="30" maxWait="10000"
username="user" password="password" driverClassName="oracle.jdbc.driver.OracleDriver"
url="jdbc:oracle:thin:@INFO" />
Và tôi đang tìm nó lên với JNDI:
<jee:jndi-lookup id="dataSource" jndi-name="datasource.import"/>
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
<tx:annotation-driven />
Tôi đang sử dụng một cơ sở dữ liệu Oracle, và JDBC spec nói rằng cam kết tự động là đúng theo mặc định. Tôi nghĩ rằng nếu tôi đặt nó thành sai một cách rõ ràng sẽ giúp ích, nhưng tôi không thể tìm ra cách để làm điều đó.
Có cách nào để khôi phục hoạt động, trong khi tra cứu nguồn dữ liệu Oracle của bạn bằng JNDI.
Tôi đã giải quyết được vấn đề của mình, nhưng vấn đề không phải là điều tôi nghĩ ban đầu. Các bean giao dịch được định nghĩa trong tệp ngữ cảnh sai. Tôi đã có chúng trong bối cảnh gốc. Câu hỏi này đã giúp tôi giải quyết vấn đề của mình: http://stackoverflow.com/questions/10538345/spring-transactional-annotations-ignored –
Câu hỏi này dường như không có chủ đề vì vấn đề thực tế không phải là vấn đề được mô tả trong văn bản . – APC