我们的应用程序使用JSF、Spring和JPA技术。我们正在努力简化项目中的异常处理策略。
我们的应用程序结构如下:
UI(JSF) --> 管理的Bean --> 服务 --> DAO
我们在DAO层使用异常转换bean后处理器。这是在Spring应用程序上下文文件中配置的。
我们的应用程序结构如下:
UI(JSF) --> 管理的Bean --> 服务 --> DAO
我们在DAO层使用异常转换bean后处理器。这是在Spring应用程序上下文文件中配置的。
<bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor" />
Spring将所有数据库异常封装到“org.springframework.dao.DataAccessException”中。我们在DAO层不进行其他异常处理。
我们处理以下异常的策略如下:
表示层:
Class PresentationManangedBean{
try{
serviceMethod();
}catch(BusinessException be){
// Mapping exception messages to show on UI
}
catch(Exception e){
// Mapping exception messages to show on UI
}
}
服务层
@Component("service")
Class Service{
@Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = BusinessException.class)
public serviceMethod(){
try{
daoMethod();
}catch(DataAccessException cdae){
throws new BusinessException(); // Our Business/Custom exception
}
catch(Exception e){
throws new BusinessException(); // Our Business/Custom exception
}
}
}
DAO Layer
@Repository("dao")
Class DAO{
public daoMethod(){
// No exception is handled
// If any DataAccessException or RuntimeException is occurred this
// is thrown to ServiceLayer
}
}
问题: 我们只想确认上述方法是否符合最佳实践。如果不是,请建议我们处理异常(与事务管理相结合)的最佳方式是什么?
答案: 我们只是想确认上述方法是否符合最佳实践。如果不是,建议您采用什么最佳方式来处理异常(与事务管理相结合)。
org.springframework.transaction.TransactionSystemException
。这是我的问题 http://stackoverflow.com/questions/28295684/unable-to-wrap-dao-exception-in-service-layer-using-spring-mvc。我该如何解决这个问题? - Harmeet Singh Taara