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