я получил этот случай использования:Каков наилучший способ справиться с исключением из java MDB?
Эта диаграмма представляет модель предприятия. Технология Java EE на Weblogic 10.3 с использованием пружинного каркаса для IoC и АОП, JPA для сохранения с пружинной jpatemplate, интеграция пружин для кадра взаимодействия. Как вы можете видеть, нет связи между Сервисом и Шлюзом, так как весенняя интеграция добавляет весь необходимый магический сахар.
Теперь мне приходится иметь дело с обработкой исключений. Вся цепочка не имеет проверенных исключений: также доступ к данным не имеет проверенного исключения, поскольку jpatemplate обертывает все исключения sql в исключениях времени выполнения.
Так проверяется только исключение, которое я обрабатывать находится на MDB
@Override
@TransactionAttribute(TransactionAttributeType.REQUIRED)
public void onMessage(Message message) {
try {
TextMessage textMessage = (TextMessage) message;
String stringMessage = textMessage.getText();
OnlineEventMessage<? extends Serializable> event = eventMessageParser.parse(stringMessage);
legacyEventMessageService.handle(event);
} catch (JMSException e) {
logger.error("si e' verificato un errore JMS nel processamento dell'evento {}", message, e);
}
}
Я заметил, что если я получаю NPE, например, на какой-то компонент цепи сообщения откатывается на очереди JMS а процесс зацикливается.
Каков наилучший способ обработки исключений в этом сценарии? Поймать все runtimeExceptions в MDB?
Сердечные приветы Massimo
Я заметил ваш комментарий в связи с темой, и мне было интересно, что такое компромисс с использованием jpa вместо jpatemplate. –
В отличие от некоторых других API, которые много полезны или, по крайней мере, немного от шаблонов Spring, JPA API уже является хорошо разработанным и современным API. Компромисс с использованием jpatemplate заключается в том, что вы используете другой API, который не нуждается в API. Я не могу придумать преимуществ, и поэтому это не похоже на компромисс. –