我有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