Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Как я могу прикрепить данные к транзакции JTA? (или однозначно идентифицировать его)

Автор вопроса: kwyjiboОтветов: 2

У меня есть функция getStockQuote(), которая получает текущую котировку акций для символа с фондового рынка.

Моя цель состоит в том, чтобы в транзакции JTA первый вызов getStockQuote() извлекал котировку акций, но все последующие вызовы в рамках одной и той же транзакции будут повторно использовать одну и ту же котировку акций (например, она не будет пытаться получить новую котировку). Если запускается другая транзакция или другая транзакция выполняется одновременно, я ожидаю, что другая транзакция получит свою собственную котировку акций при первом вызове.

Это делается для того, чтобы попытаться обеспечить согласованность внутри транзакции, чтобы все расчеты в рамках транзакции основывались на одной и той же цене акций.

Это похоже на то, как вы можете настроить провайдеров JPA так, чтобы они извлекали строку базы данных из базы данных только один раз и использовали кэшированное значение для последующего доступа к той же строке базы данных в рамках транзакции.

Есть ли у кого-нибудь советы о том, как этого можно достичь?

  • Я могу восстановить свой ответ позже, но ваш комментарий был правильным, и с текущим уровнем детализации я не могу уточнить. Используете ли вы EJB? Как управляются транзакции? Pascal Thivent 18.05.2010
  • По сути, весь этот код выполняется внутри сеансовых компонентов EJB3 без сохранения состояния, а транзакции управляются с помощью транзакций, управляемых контейнером. kwyjibo 18.05.2010

javatransactionsjta

Ответы

Ответ 1 · Pascal Thivent

Это потребует некоторого тестирования, но я думаю, что вы могли бы привязать цитату к ThreadLocal и заставьте свои компоненты реализовать SessionSynchronization, чтобы отвязать цитату от ThreadLocal после фиксации транзакции (и, таким образом, реализовать своего рода контекст области транзакции).

Ответ 2 · Sean Patrick Floyd

рассмотрите возможность использования Spring для управления транзакциями, он предоставляет эту функциональность из коробки:

http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/transaction.html#tx-propagation

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы