Учебники

EJB — обработка исключений

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.