【发布时间】:2013-04-15 19:24:02
【问题描述】:
我有 3 个 EJB:
第一个是为了持久化:
@Stateless
@TransactionAttribute(TransactionAttributeType.REQUIRED)
public class PersistenceService
{
@PersistenceContext(unitName="pc")
EntityManager em;
public <T> void create(T entity) {
em.persist(entity);
}
}
第二个是商务:
@Stateless
@TransactionAttribute(TransactionAttributeType.REQUIRED)
public class BusinessService implements
{
@EJB
PersistenceService persistenceService;
public <T> void register (User user) {
try{
// Do some business
persistenceService.persist(user);
// Do other business
}catch(Exception e){
// log exception
throw new BusinessException(e);
}
}
}
第三个是调用业务EJB的Web服务。
问题是业务EJB没有捕获数据库异常,例如由封装在EJB异常中的Mysql连接器抛出的约束冲突异常。我可以在 Rest 服务 EJB 中处理此异常,但不能在业务 EJB 中处理。我认为这与交易有关。
我不确定应该将哪些事务属性添加到 Persistence EJB 和业务 EJB 以让我在业务 EJB 中捕获这些类型的异常。
【问题讨论】:
-
为什么不能在业务层处理异常?你发现有什么例外吗?
-
因为异常发生在业务方法范围之外的事务中。
标签: jakarta-ee jpa exception-handling transactions