Одна весенняя служба реализована в одном модуле развертывания Java (JVM). Другая весенняя услуга реализована в другой JVM. Выполнение вызова службы с 1-го jvm до 2-го jvm. Сервисный интерфейс может быть как для отдыха, так и для мыла поверх http. Необходимо поддерживать единую транзакцию по нескольким jvms, то есть, если какая-либо услуга не срабатывает, каждая вещь должна быть отброшена. Как это сделать. Любые примеры кода.Одиночная транзакция в нескольких java jvms
ответ
REST сталкивается с такой же проблемой, как веб-службы на основе SOAP в отношении атомных транзакций. Отсутствует связь с состоянием, и каждая операция немедленно совершается; выполнение ряда операций означает, что другие клиенты могут видеть промежуточные состояния.
Если вы, конечно, не позаботитесь об этом по дизайну. Сначала спросите себя: есть ли у меня стандартный набор атомных операций? Это обычно происходит. Например, для банковской операции удаление суммы с одной учетной записи и добавление одной и той же суммы в другую учетную запись часто является необходимой атомной операцией. Но вместо того, чтобы экспортировать только примитивные строительные блоки, REST API должен предоставить единую операцию «переноса», которая инкапсулирует весь процесс. Это обеспечивает желаемую атомарность, а также делает клиентский код намного проще. Эта оценка известна как услуги с низкой степенью детализации, или высокоуровневые пакетные операции.
Если нет простого предопределенного набора желаемых последовательностей атомной последовательности, проблема более серьезная. Общим решением является командный шаблон . Определите один метод REST, чтобы разграничить начало транзакции, а другой - разграничить его конец (запрос «совершить»). Все, что отправлено между этими наборами операций, ставится в очередь сервером, но не передается, пока не будет отправлен запрос на коммит.
Этот шаблон значительно усложняет работу сервера - он должен поддерживать состояние для каждого клиента. Как правило, первая операция («начать транзакцию») возвращает идентификатор транзакции (TID), а все последующие операции, вплоть до и включая фиксацию, должны включать этот TID в качестве параметра.
Это хорошая идея для обеспечения тайм-аута транзакций: если слишком много времени прошло с момента первоначального запроса «начать транзакцию» или с последнего шага, сервер имеет право прервать транзакцию. Это предотвращает потенциальную атаку DoS, которая заставляет сервер тратить ресурсы, удерживая слишком много транзакций открытым. Конструкция клиента должна иметь в виду, что каждая операция должна быть проверена для ответа на тайм-аут.
Также рекомендуется разрешить клиенту прервать транзакцию, предоставив API «отката».
Обычная забота, требуемая при разработке кода, который использует несколько параллельных транзакций, применяется, как обычно, в этом сложном сценарии проектирования. Если это вообще возможно, попробуйте ограничить использование транзакций и вместо этого поддержите пакетные операции высокого уровня.
Я не принимаю кредит этой информации, я просто директор, заслуга This article
Также почитайте Transactions in REST?
Вы можете получить несколько полезных примеров кода здесь http://www.it-soa.eu/en/resp/atomicrest/userguide/index.html
Использование глобальных транзакций (т. Е. JTA),
Использование ресурсов XA (РСУБД и JMS-соединения), сделайте «Full XA с 2PC».
Для дальнейшей ссылки на управление Spring сделки, в том числе сценарии/XA JTA, следующим образом: http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/#transaction
- 1. Одиночная транзакция по нескольким методам
- 2. Одиночная вкладка нескольких видов
- 3. Одиночная сборка из нескольких проектов
- 4. PostgreSQL большая одиночная транзакция медленнее, чем несколько транзакций
- 5. Одиночная транзакция по нескольким функциям модели с CodeIgniter
- 6. одиночная транзакция по сеансу Hibernate и простая jdbc
- 7. Разделы OSGI и множественные jvms
- 8. Запуск нескольких jvms для разных приложений на одном компьютере
- 9. Синхронизация для нескольких считывателей, одиночная запись?
- 10. Одиночная аутентификация для нескольких проектов grails
- 11. Одиночная поездка DB против нескольких попыток DB
- 12. Одиночная серия развертки для нескольких серий Highcharts
- 13. Одиночная легенда для нескольких barplots matplotlib
- 14. Django: Одиночная модель для нескольких таблиц
- 15. Одиночная конфигурация для нескольких проектов с MSBuild?
- 16. Безопасная отладка для производства JVMs
- 17. одиночная установка Rails для нескольких приложений
- 18. Как запустить jvms в текущей машине
- 19. Одиночная итерация по иерархии в Java 8
- 20. jvmmonitor не перечисляет JVMs в eclipse
- 21. кэширование значения, общего для двух jvms
- 22. Транзакция по нескольким EJB
- 23. Автономный JBOSS7 использует больше JVMS?
- 24. Java EE: транзакция Eclipselink отсутствует
- 25. Идентификатор объекта объекта через jvms?
- 26. Необходима транзакция при вызове нескольких методов EJB?
- 27. Одна транзакция для нескольких методов JpaRepositories
- 28. Весенняя транзакция и откат на нескольких таблицах
- 29. Java EE, что означает транзакция в EJB?
- 30. Что такое транзакция в java EE?