EJB-компоненты являются частью корпоративных приложений, которые обычно основаны на распределенных средах. Таким образом, помимо обычных исключений, которые могут возникнуть, могут быть исключения, такие как сбой связи, разрешения безопасности, отключение сервера и т. Д.
EJB-контейнер рассматривает исключения двумя способами:
-
Исключение приложения — если бизнес-правило нарушено или возникает исключение при выполнении бизнес-логики.
-
Системное исключение — Любое исключение, которое не вызвано бизнес-логикой или бизнес-кодом. RuntimeException, RemoteException являются SystemException. Например, ошибка во время поиска EJB. RuntimeException, RemoteException являются SystemException.
Исключение приложения — если бизнес-правило нарушено или возникает исключение при выполнении бизнес-логики.
Системное исключение — Любое исключение, которое не вызвано бизнес-логикой или бизнес-кодом. RuntimeException, RemoteException являются SystemException. Например, ошибка во время поиска EJB. RuntimeException, RemoteException являются SystemException.
Как EJB Container обрабатывает исключения?
Когда происходит исключение приложения , контейнер EJB перехватывает исключение, но возвращает его клиенту так же, как и он. Он не выполняет откат транзакции, если он не указан в коде методом EJBContext.setRollBackOnly (). EJB Container не переносит исключение в случае исключения приложения.
Когда возникает системное исключение , контейнер EJB перехватывает исключение, откатывает транзакцию и запускает задачи очистки. Он помещает исключение в RemoteException и отправляет его клиенту.
Обработка исключений приложения
Исключения приложений, как правило, вызываются в методах EJB Session, поскольку это методы, отвечающие за выполнение бизнес-логики. Исключение приложения должно быть объявлено в предложении throws бизнес-метода и должно быть выброшено в случае сбоя бизнес-логики.
@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.