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