Mar*_*ada 16 java ejb-3.0 jpa-2.0
我在持久化实体时使用了EJB3/JPA,我很高兴它能够管理我的数据库相关任务.我唯一关心的是异常处理.保存实体时的示例代码总是有这种风格.我在网上阅读的大多数教程都有这种风格,也不考虑异常处理.
@Stateless
public class StudentFacade{
@PersistenceContext(unitName = "MyDBPU")
private EntityManager em;
public void save(Student student) {
em.persist(student);
}
}
Run Code Online (Sandbox Code Playgroud)
但我不知道EJB应用程序中最好的异常处理方式是什么?处理异常时最好的方法是什么?
这是其他人如何处理异常?会话外观上的try catch块?
@Stateless
public class StudentFacade{
@PersistenceContext(unitName = "MyDBPU")
private EntityManager em;
public void save(Student student) {
try {
em.persist(student);
} catch(Exception e) {
//log it or do something
}
}
}
Run Code Online (Sandbox Code Playgroud)
或让该方法抛出异常?
public void save(Student student) throws Exception {
em.persist(student);
}
Run Code Online (Sandbox Code Playgroud)
我不知道我的理解是否正确,因为我还在学习EJB.谢谢
Nav*_*abu 12
异常处理的想法是在任何失败的情况下在一个点上做一些逻辑.try catch将在您需要处理异常的最后一点使用,或者您需要将异常转换为另一个异常
说你的应用程序有很多层,即Action,Facade,Persist
委托异常 在这种情况下,Facade上引发的任何异常都可以抛出到上面的操作层.在操作中,将捕获特定异常并使用正确的错误消息进行处理.
//This is in Facade Layer
public void save(Student student) throws AppException{
//exceptions delegated to action layer
//call to Persist Layer
}
Run Code Online (Sandbox Code Playgroud)
将常规异常转换为应用程序异常 在持久性中说你得到和DBException一样sqlException.不应将此异常作为Action或Facade层发送,因此我们捕获特定异常然后抛出一个新异常(用户定义的应用程序异常)
//This is in Persist Layer
public void save(Student student) throws AppException{
//converting general exception to AppException and delegating to Facade Layer
try{
em.persist(student);//call to DB. This is in Persist Layer
}catch(Exception e){
throw new AppException("DB exception", e)
}
}
Run Code Online (Sandbox Code Playgroud)
在操作层中 您将捕获您的异常,然后在那里处理异常
//This is in Action layer
public void callSave(Student student){
try{
//call Facade layer
}catch(AppException e){
//Log error and handle
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
29149 次 |
| 最近记录: |