Какой лучший способ выполнить следующее?
Я могу придумать несколько способов, которые могут сработать. Есть ли другие, и какой из них лучше?
используйте @TransactionManagement(type=BEAN)
и UserTransaction
, и явно откатитесь назад после поимки исключения. например:
catch (Exception e) {
e.printStackTrace();
utx.rollback();
}
Используйте управляемые контейнером транзакции, укажите @TransactionAttribute(value=NOT_SUPPORTED)
на onMessage
и затем делегируйте активность БД в отдельный метод с @TransactionAttribute(value=REQUIRED)
.
Оставьте обработку транзакций в покое и переконфигурируйте свойство retry в сервере. Я использую Glassfish 3.1.1, и не совсем понимаю, как его настроить.
Оставить все в покое и явно проверить сообщение на повторную доставку в теле onMessage
, и выйти, если оно повторно доставлено. (message.getJMSRedelivered()
?)
Что здесь хорошо работает? Есть ли стандартный/лучший способ решения этой проблемы?