Хороший вопрос, Муравей
Я знаю, что вы хотите выдать исключение из базы данных, но когда это происходит, приложение в большинстве случаев не может восстановить свое первоначальное состояние или не знает, как его восстановить. Поэтому он должен обрабатываться как исключение времени выполнения . Некоторые проблемы в исключениях базы данных включают
- ошибка подключения к базе данных
- запрос неверный
- таблица или столбец не существует
Над вами видно, что приложение не сможет восстановить свое начальное состояние. Если вы считаете возможным восстановить его начальное состояние , вам следует использовать исключение приложения . Клиент получит то же исключение приложения, которое выдает ваш бизнес-метод. Если вы хотите получить точное исключение, выдаваемое вашим бизнес-методом, у вас есть два варианта:
- Используйте шаблон бизнес-делегата для доступа к вашему EJB
Как вы знаете, исключение во время выполнения заключено в EJBException, поэтому вы должны использовать что-то вроде
Предположим, у вас есть сессионный компонент без сохранения состояния
@Stateless
public class BeanImpl implements Bean {
public void doSomething() {
try {
// some code
} catch(SomeException e) {
throw new EJBException(e);
}
}
}
Итак, вы переносите свой сессионный компонент через бизнес-делегата
public class BeamBusinessDelegate implements Bean {
// your stateless session bean goes here
private Bean bean;
public BeamImpl() {
InitialContext i = new InitialContext();
bean = (Bean) i.lookup(<GLOBAL_JNDI_ADDRESS_OR_RELATIVE_ENVIRONMENT_NAMING_CONTEXT_ADDRESS>);
}
public void doSomething() {
try {
bean.doSomething()
} catch(EJBException e) {
throw e.getCause();
}
}
}
Или вы можете расширить EJBException в соответствии с вашими потребностями
public class DatabaseException extends EJBException {
}
Так в твоем бизнес-методе
@Stateless
public class BeanImpl implements Bean {
public void doSomething() {
try {
// some code
} catch(SomeException e) {
throw new DatabaseException();
}
}
}
С уважением,