Connection connection = DriverManager.getConnection(url, username, password);
try {
connection.setAutoCommit(false);
// ...
connection.commit();
} catch (SQLException e) {
connection.rollback();
} finally {
connection.close();
}
EntityManagerFactory emf = Persistence.createEntityManagerFactory("my-persistence-unit");
EntityManager em = emf.createEntityManager();
try {
UserTransaction utx = (UserTransaction) new InitialContext().lookup("java:comp/UserTransaction");
utx.begin();
// ...
utx.commit();
} catch (Exception e) {
utx.rollback();
} finally {
em.close();
emf.close();
}
@Bean
public PlatformTransactionManager transactionManager(DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
@Bean
public Advisor transactionAdvisor(PlatformTransactionManager transactionManager) {
DefaultPointcutAdvisor advisor = new DefaultPointcutAdvisor();
advisor.setPointcut(new AnnotationMatchingPointcut(Transactional.class, true));
advisor.setAdvice(new TransactionInterceptor(transactionManager, new AnnotationTransactionAttributeSource()));
return advisor;
}
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Transactional
public @interface Transactional {
}
@Service
public class UserService {
@Transactional
public void addUser(User user) {
}
}