EJB异常处理
2018-12-09 18:16 更新
EJB是通常基于分布式环境中的企业应用程序的一部分。所以除了正常的异常发生在代码中,可以在ejb的情况下,可以有例外喜欢通信失败,安全权限,服务器等ejb容器认为在两个方面存在异常。
应用程序异常 -如果业务规则是voilated或在执行业务逻辑发生异常。
系统异常 -这不是由业务逻辑或业务代码造成的任何异常。 运行时 Exception,远程异常都是 SystemException。例如,在EJB 查找错误。
EJB容器如何处理异常?
When Application Exceptionoccurs ejb容器拦截例外,但返回相同的客户机。它不回滚事务,除非它在代码中指定EJBContext.setRollBackOnly()方法。EJB容器不包装异常的应用程序异常。
当系统发生异常时,EJB容器拦截异常,回滚事务,并开始清理任务。它包装成例外和RemoteException抛出给客户端。
处理应用程序异常
应用程序异常在会话EJB方法,因为这些通常是抛出负责执行业务逻辑的方法。应用程序异常应宣布投业务方法的条款,应在案件的业务逻辑失败被抛出。
@Stateless
public class LibraryPersistentBean implements LibraryPersistentBeanRemote {
...
public List<Book> getBooks() throws NoBookAvailableException {
List<Book> books =
entityManager.createQuery("From Books").getResultList();
if(books.size == 0)
throw NoBookAvailableException
("No Book available in library.");
return books;
}
...
}
处理系统异常
系统异常可以在喜欢的命名查找失败的任何时间发生,而获取数据时发生SQL错误。在这种情况下,这种异常应出现EJBException包裹下,抛回给客户端。
@Stateless
public class LibraryPersistentBean implements LibraryPersistentBeanRemote {
...
public List<Book> getBooks() {
try {
List<Book> books =
entityManager.createQuery("From Books").getResultList();
} catch (CreateException ce){
throw (EJBException) new EJBException(ce).initCause(ce);
} catch (SqlException se){
throw (EJBException) new EJBException(se).initCause(se);
}
return books;
}
...
}
在客户端,处理EJBException异常。
public class EJBTester {
private void testEntityEjb(){
...
try{
LibraryPersistentBeanRemote libraryBean =
LibraryPersistentBeanRemote)ctx.lookup("LibraryPersistentBean/remote");
List<Book> booksList = libraryBean.getBooks();
} catch(EJBException e) {
Exception ne = (Exception) e.getCause();
if(ne.getClass().getName().equals("SqlException")){
System.out.println("Database error: "+ e.getMessage());
}
}
...
}
}
以上内容是否对您有帮助:
← EJB查询语言

免费 AI IDE


更多建议: