Системное исключение или Исключение приложения
Вопрос
Меня смущает расплывчатый момент в определении и возможное влияние Application Exceptions
и System Exceptions
в EJB
.В частности, я не могу понять, определено ли Исключение как:
public class SomeException extends Exception{
...
}
собирается стать Application
или System Exception
.В соответствии со спецификацией Application Exception
всегда должно определяться с помощью аннотации @ApplicationException
.Следовательно, я делаю вывод, что приведенный выше класс не является Application Exception
даже несмотря на то, что это проверенное исключение.Возникающие у меня вопросы относятся к правильному синтаксису Java и, следовательно, к поведению EJB Container
в случае, если это Exception
должен быть реализован в рамках бизнес-метода Session Bean
(не Singleton
хотя):
@Stateless
@LocalBean
public class StatelessBean{
public void doStuff(){
throw new SomeException();
}
}
1) Следует ли SomeException
быть объявленным в предложении throw?
2) Выполняет ли Container
отбрасывает экземпляр после метода doStuff()
называется?
3) Если это, наконец, Sytem Exception
верно ли мое предположение, что System Exception
может быть проверенным, а может и нет RuntimeException
?
Обновить:
На мой взгляд, в соответствии со спецификацией не совсем ясно, что проверяемое исключение всегда должно быть Application Exception
.Что, если бы кто-то определил проверенный RuntimeException
?Должен ли он быть включен в throw
о каком методе?Является ли это System
или Application Exception
?
public class SomeException extends RuntimeException{
...
}
Решение
В спецификации говорится:
Исключения приложений, которые являются проверяемыми исключениями, могут быть определены как таковые путем перечисления в предложениях throws методов бизнес-интерфейса компонента, представления без интерфейса, домашнего интерфейса, интерфейса компонента и конечной точки веб-службы.Исключение приложения, являющееся непроверенным исключением, определяется как исключение приложения путем аннотирования его аннотацией метаданных ApplicationException или обозначения его в дескрипторе развертывания элементом application- exception.
Итак, приведенный выше класс является исключением приложения, поскольку это проверяемое исключение.И, конечно, это должно быть указано в предложении throws вашего метода, иначе код не будет компилироваться.И нет, экземпляр bean не будет удален после создания этого исключения, согласно спецификации.