我有3层的EJB:处理JPA交易异常
第一种是持久性:
@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);
}
}
}
第三个是一个Web调用业务EJB的服务。
问题是,业务EJB不捕获数据库异常,例如封装在EJB异常中的Mysql连接器抛出的约束违反异常。我可以在Rest服务EJB上处理这个异常,但不能在业务EJB上处理。我认为这与交易有关。
我不确定哪些事务属性应该添加到持久性EJB和业务EJB中,以让我在业务EJB中捕获这些类型的异常。
为什么不能在业务层处理异常?你有没有看到任何异常? – 2013-04-23 05:23:53
,因为异常发生在业务方法范围之外的事务中。 – mmohab 2013-04-23 14:23:46