我有一个三轮胎架构的应用程序。而且我不明白如何在这种情况下处理异常。我收集了一些问题:
1. 我是否需要创建一个通用异常,例如PersistentException
,并使所有 DAO 类方法仅抛出一种类型的异常 - PersistentException
?即在每个 DAO 方法(CRUD)中都这样做:
public create(Entity instance) {
try {
...// all operations here
} catch(Exception e) {
throw new PersistentException(e);
}
}
2. 可以为每个EJB 服务创建一个异常类(每个 EJB 接口一个异常)吗?
即假设我有一个 EJB bean,例如PersonManagementBean
, OrganizationManagementBean
,EmployeeManagementBean
具有相应的@local
和@remote
接口。它们暴露给客户端,即实际上它们是会话外观(因此它们位于服务层)。所以为每个 bean ( PersonManagementException
, OrganizationManagementException
, EmployeeManagementException
) 创建相应的异常类是个好主意吗?
或者最好只调用一个异常ServiceException
(如 DAO 的情况)?
3. 什么类型的异常可以抛出我的服务(繁忙)级别(通常情况下)?我可以将 DAO ( PersistentException
) 异常传播给客户端吗?IE
public void relocatePerson() {
try {
Person p = personDao.getPerson(); // can throw PersistentException
....
if (someCondition) {
throw new PersonManagementException(); // throwing same PersonManagementException
}
....
} catch(PersonManagementException e) {
throw e; //don't need to rewrap same exception
} catch(PersistentException e) {
throw e; // DO I need to throw it as PersistentException to client? Or it's better to rewrap it as PersonManagementException?
} catch(Exception e) {
throw new PersonManagementException(e) //throwing all exception as service specific exception
}
}
或者我需要将所有异常(在常见情况下)重新抛出为特定于服务的异常?
- “在一般情况下”我的意思是我知道在某些情况下,某些方法可能会抛出带有一些有用信息的额外异常(例如
ValidationException
有关哪些对象未通过验证规则的信息)