我有 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 和 Business EJB 以让我在业务 EJB 中捕获这些类型的异常。