Код: Выделить всё
factory.setSessionTransacted(true);
factory.setConcurrency("1");
factory.setAutoStartup(true);
Код: Выделить всё
atomikosfactory.setMaxPoolSize(2);
Код: Выделить всё
@JmsListener(containerFactory = "jmsListenerContainerFactory", destination = "${queue-one}")
@Transactional
public void handleOne(final Message message)
{
final var payload = message.getPayload();
final var handler = getHandler(payload.getClass(););
handler.handleOne(payload);
}
@JmsListener(containerFactory = "jmsListenerContainerFactory", destination = "${queue-two}")
@Transactional
public void handleTwo(final Message message)
{
final var payload = message.getPayload();
final var handler = getHandler(payload.getClass(););
handler.handleTwo(payload);
}
Я пытался заставить свои методы handleOne и handleTwo вызывать один и тот же метод. который был помечен тегом @Synchronized, чтобы они никогда не запускались одновременно. Это работало постольку, поскольку одна из транзакций откатывалась при попытке доступа к ресурсу, но к тому времени уже выполнялись некоторые операции, откат которых невозможен. Позднее это привело к ошибкам, когда поток попытался запуститься снова после освобождения ресурса.
Подробнее здесь: https://stackoverflow.com/questions/791 ... ages-seque