大型网站开发 书籍,wordpress 媒体库 链接,建设求职网站,谷歌推广开户php cdi在Java EE中#xff0c;在执行事务性业务方法期间引发的异常导致事务回滚。 但是#xff0c;只有系统异常#xff08;即运行时异常#xff09;才是这种情况#xff0c;该方法异常未在方法签名中声明。 对于应用程序异常#xff08;即检查的异常#xff09;或任何… php cdi 在Java EE中在执行事务性业务方法期间引发的异常导致事务回滚。 但是只有系统异常即运行时异常才是这种情况该方法异常未在方法签名中声明。 对于应用程序异常即检查的异常或任何带ApplicationException注释的异常不会自动回滚事务。 有时这会引起企业开发人员的困惑。 对于EJB业务方法还可以通过指定ApplicationException(rollback true)来强制事务回退应用程序异常。 但是仅当EJB中的托管bean时才考虑使用此注释。 CDI还可以使用Transactional事务上执行业务方法。 此注释使我们拥有更多控制权。 使用Transactional我们不仅可以定义事务类型例如REQUIRED或REQUIRES_NEW 而且可以定义我们要回滚或不希望回滚的异常类型 public class CarManufacturer {InjectCarFactory carFactory;InjectEventCarCreated createdCars;PersistenceContextEntityManager entityManager;Transactional(rollbackOn CarCreationException.class,dontRollbackOn NotificationException.class)public Car manufactureCar(Specification specification) {Car car carFactory.createCar(specification);entityManager.persist(car);createdCars.fire(new CarCreated(car.getIdentification()));return car;}} CarCreationException发生CarCreationException 事务将被回滚但不是NotificationException 。 翻译自: https://www.javacodegeeks.com/2018/01/transactional-exception-handling-cdi.htmlphp cdi