Локальная или глобальная транзакция - PullRequest
0 голосов
/ 24 октября 2018

Я написал код, который читает сообщение из одной темы JMS, обрабатывает его и помещает в другую тему JMS.Темы, связанные с JMS, находятся на разных серверах.Смотрите фрагмент кода ниже.Цель состоит в том, чтобы сделать шаги 1 и 3, т.е. чтение из одной темы и запись в другую тему транзакционными.Меня не волнует шаг 2. У нас здесь нет сервера приложений.

  public void process(){
    try{

    topic1Session = createTopic1Subscriber();
    topic2Session = createTopic2Publisher();

    // step 1 
    Message msg = readFromTopic1();
    // step 2 
    msg = doSomething(msg);
    // step 3 
    writeOnTopic2(msg);       

    // Commit if everything goes well
    topicSession1.commit();
    topicSession2.commit();
    }catch(Exception e){

    // rollback if anything fails
    topicSession1.rollBack();
    topicSession2.rollBack();
    }

Теперь у меня мало сомнений:

  1. Хватит ли этого фрагмента кодасделать это поведение транзакционным?
  2. Рассматривается ли это как вариант использования локальной или глобальной транзакции (обратите внимание, что задействованы два сервера JMS, но будет ли это действительно иметь значение, поскольку я работаю в сеансах JMS)?Я знаю много официальных документов, таких как весенние разговоры об этом, но нет четких границ для принятия решений, как в вышеупомянутом сценарии.

  3. Мне действительно нужен JTA здесь?И каков реальный вариант использования JTA?

...