Я получил этот вариант использования:
На этой диаграмме представлена модель предприятия. Технология Java EE в Weblogic 10.3 с использованием платформы Spring для IoC и AOP, JPA для сохранения с Spring jpatemplate, интеграция Spring для фрейма взаимодействия. Как видите, между Сервисом и Шлюзом нет никакой связи, поскольку весенняя интеграция добавляет весь необходимый волшебный сахар.
Теперь мне нужно разобраться с обработкой исключений. Вся цепочка не имеет проверенных исключений: также доступ к данным не имеет проверенного исключения, поскольку 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, и процесс зацикливается.
Как лучше всего обрабатывать исключения в этом сценарии? Перехватить все исключения времени выполнения в MDB?
С уважением Массимо