JTA против локальных транзакций - PullRequest
0 голосов
/ 04 октября 2018
  1. Являются ли локальные транзакции и BMT одинаковыми?
  2. Нужен ли транзакцииManager для локальных транзакций?

    Я считал транзакциюManager неэффективной для локальных транзакций.это правильно?

  3. JTA предоставляет резерв для CMT и BMT?

Ответы [ 2 ]

0 голосов
/ 23 октября 2018

Нет никакой разницы в обработке локальных или глобальных транзакций в отношении BMT или CMT.

BMT и CMT определяют только то, как могут быть определены начало и конец транзакций.В CMT это определяется вызовами аннотированных методов, в BMT начало и конец транзакций определяются с помощью объекта UserTransaction.

Если необходима глобальная транзакция или лучше распределенная транзакция, тогда Transactionmanagerорганизуйте это независимо от BMT или CMT.

Эти глобальные транзакции или двухфазное принятие становятся необходимыми, как только задействовано более одного ресурса транзакции.Например, если вы используете компонент MessageDriven, который вызывает компонент, аннотированный как «обработка транзакций Beanmanaged» и вносящий изменения в СУБД.В этом случае двухфазная фиксация выполняется для ресурсов, очереди сообщений и СУБД.

Итак, чтобы ответить на ваши вопросы:

  1. Нет, ответ см. Выше.
  2. Вы не можете выполнять транзакции с более чем одним ресурсом без менеджера транзакций.Контейнер, предоставляющий распределенные транзакции, как это обычно делают J2EE-контейнеры, будет обрабатывать все транзакции с использованием Transactionmanager.В jboss вы можете настроить источники данных как "no jta", в этом случае вы явно освобождаете их от двухфазных коммитов, но я думаю, что jboss -actionmanager будет обрабатывать db-соединения такого источника данных, несмотря на это.
  3. Да, если под «дать положение» вы имеете в виду «поддерживает»
0 голосов
/ 04 октября 2018

Ниже приведено несколько пунктов для вашего вопроса по порядку.

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

    Компоненты корпоративного компонента можно подразделить на две категории: компоненты, использующие транзакции, управляемые контейнером ( CMT ), и компоненты, использующие транзакции, управляемые компонентом (* 1011)* BMT ).

    A local transaction containment (LTC) используется для определения поведения сервера приложений в неопределенном контексте транзакции.LTC - это ограниченная область действия, в которой можно получить доступ к нулю, одной или нескольким локальным транзакциям менеджера ресурсов (RMLT).LTC определяет границу, на которой все RMLT должны быть завершены;любые неполные RMLT разрешаются в соответствии с политикой контейнером.LTC является локальным для экземпляра компонента;он не распределяется между компонентами, даже если эти компоненты управляются одним и тем же контейнером.LTC запускаются контейнером перед отправкой метода в компонент J2EE (например, корпоративный компонент или сервлет) всякий раз, когда отправка происходит в отсутствие глобального контекста транзакции.LTC завершаются контейнером в зависимости от настроенной приложением границы LTC, например, в конце отправки метода.Нет программного интерфейса для поддержки LTC;LTC управляются исключительно контейнером и настраиваются разработчиком приложения через атрибуты транзакции в дескрипторе развертывания приложения.

    Локальное удержание транзакции не может существовать одновременно с глобальной транзакцией.Если диспетчеризация компонента приложения происходит в отсутствие глобальной транзакции, контейнер всегда устанавливает LTC для компонентов J2EE на J2EE 1.3 или более поздней версии.

  2. Если приложение использует два или более ресурсов,Внешний менеджер транзакций необходим для координации обновлений всех менеджеров ресурсов в глобальной транзакции.

    для получения дополнительной информации.на Менеджеры транзакций : https://access.redhat.com/documentation/en-US/Fuse_ESB_Enterprise/7.1/html/EIP_Transaction_Guide/files/TxnManagers-WhatIs.html

  3. Корпоративные компоненты BMT, клиентские компоненты приложений и веб-компоненты могут использовать интерфейс UserTransaction API транзакций Java (JTA) для определения разграниченияглобальная транзакция.Чтобы получить интерфейс UserTransaction, используйте поиск по интерфейсу именования и каталогов Java (JNDI) в java: comp / UserTransaction или используйте метод getUserTransaction из объекта SessionContext.

    Интерфейс UserTransaction недоступен для CMT корпоративные бины. Если корпоративные бины CMT пытаются получить этот интерфейс, в соответствии со спецификацией Enterprise JavaBeans (EJB) создается исключение.

    Веб-компонент или корпоративный бин ( CMT)или BMT ) может получить интерфейс ExtendedJTATransaction через поиск java:comp/websphere/ExtendedJTATransaction.Этот интерфейс обеспечивает доступ к идентификатору транзакции и механизму получения уведомления о завершении транзакции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...