Transcript 04-EXCP
Исключения в EJB Кряжев Василий [email protected] Рассматриваемые темы Обзор исключений в Java Исключения в EJB 1-2 Рассматриваемые темы Обзор исключений в Java Проверяемые исключения Непроверяемые исключения Исключения в EJB 1-3 Проверяемые исключения За обработкой проверяемых (checked) исключений следит компилятор. Правило “обработай или объяви” Код помещен в блок try catch Сигнатура метода содержит блок throws 1-4 Непроверяемые исключения За обработкой непроверяемых (unchecked) исключений компилятор не следит java.lang.RuntimeException java.lang.Error 1-5 Рассматриваемые темы Обзор исключений в Java Исключения в EJB Системные исключения (system exceptions) Исключения уровня приложения (application exceptions) Выбрасывание и обработка исключений 1-6 Типы исключений в EJB Системные исключения (system exceptions) Исключения уровня приложения (application exceptions) 1-7 System Exception Системные исключения идентифицируют ошибки на уровне инфрастуктуры java.rmi.RemoteException java.lang.RuntimeException не помеченные как ошибки уровня приложения (application exceptions) 1-8 Application Exception Исключения уровня приложения идентифицируют что произошла ошибка бизнес логики Часть дизайна приложения, доставляются клиенту “как есть” Могут быть как проверяемые так и непроверяемые, помечаются аннотацией @ApplicationException или через <application-exception> в дескрипторе развертывания 1-9 Application Exception Декларирование на основе аннотации: @Target(TYPE) @Retention(RUNTIME) public @interface ApplicationException { boolean rollback() default false; } @ApplicationException (rollback = true) public class BadCommentsException extends RuntimeException { public BadCommentsException(String message) { super(message); } } 1-10 Application Exception Декларирование в дескрипторе развертывания: <ejb-jar> … <assembly-descriptor> <application-exception> <exception-class>java.lang.NullPointerException</exception-class> <rollback>true</rollback> </application-exception> </assembly-descriptor> </ejb-jar> ejb-jar.xml 1-11 System Exceptions Контейнер автоматически обрабатывает системные исключения и всегда: Откатывает транзакцию Журналирует сообщение об ошибке Уничтожает bean instance Возвращает клиенту подкласс javax.ejb.EJBException или java.rmi.RemoteException 1-12 Выбрасывание исключения уровня приложения Ответственность Bean Provider: Гарантировать что состояние bean instance останется целостным. Попытка клиента продолжить работу не должна приводить к потере целостности Если для application exception условие отката транзакции не было определено, то перед тем как бросить исключение, нужно пометить транзакцию для отката EJBContext.setRollbackOnly 1-13 Обработка исключений уровня приложения Поймав application exception клиент может продолжить вызывать методы бина Транзакционный клиент может узнать помечена ли транзакция для отката Если клиент это enterprise bean, то можно вызвать EJBContext.getRollbackOnly Другие типы клиентов могут воспользоваться UserTransaction.getStatus 1-14 Лабораторная EJB Exception Handling 1-15 Выводы В этом модуле, мы узнали: Модель обработки исключений в EJB Чем отличаются системные исключениями от исключений уровня приложения Как использовать аннотацию @ApplicationException чтобы контролировать обработку исключений в EJB Как контролировать транзакционное поведение при возникновении исключений 1-16 Недоделки Не выдержан темп Большие заголовки и отсутствие подзаголовков Добавить - жизненный сценарий в качестве иллюстрации и подробный разбор 1-17