Spring jta-транзакция-менеджер - PullRequest
3 голосов
/ 26 декабря 2009

Использование Пружина :

  1. может ли jta -action-manager использовать идентификатор в качестве имени, чтобы я мог передать его как REF моему уровню обслуживания, как показано ниже?

  2. это tx: jta-транзакция-менеджер может использоваться только для контейнера je22? Я имею в виду для Tomcat , мне нужно сделать это вручную, как показано ниже:

    <tx:jta-transaction-manager id="name_transactionmanager"/>
    
        <bean id="projectService" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
            <property name="transactionManager"
                      ref="name_transactionmanager"/>
            <property name="target">
                <bean
                  class="com.company.project.company.services.ServiceImpl"
                  init-method="init">
                     <property
                       name="HRappsdao"
                       ref="HRappsdao"/>
                     <property
                       name="projectdao"
                       ref="projectdao"/>
                </bean>
            </property>
            <property name="transactionAttributes">
                <props>
                    <prop key="store*">PROPAGATION_REQUIRED</prop>
                    <prop key="update*">PROPAGATION_REQUIRED</prop>
                    <prop key="remove*">PROPAGATION_REQUIRED</prop>
                    <prop key="bulkUpdate*">PROPAGATION_REQUIRED</prop>
                    <prop key="*">PROPAGATION_SUPPORTS,readOnly</prop>
                </props>
            </property>
        </bean>
    

На вопрос 2

    <bean id="transactionManager"
      class="org.springframework.transaction.jta.JtaTransactionManager">
        <property name="userTransaction">
            <bean class="org.springframework.transaction.jta.JotmFactoryBean"/>
        </property>
    </bean>

1 Ответ

16 голосов
/ 27 декабря 2009

Может ли tx:jta-transaction-manager использовать идентификатор в качестве имени, чтобы я мог передать его как REF моему уровню обслуживания, как показано ниже?

<tx:jta-transaction-manager> представляет диспетчер транзакций как Бин в контексте Spring с именем "transactionManager".

Может ли tx:jta-transaction-manager использоваться только с контейнером J2EE?

Цитирование Глава 9. Управление транзакциями из документации Spring:

Нужен ли сервер приложений для управления транзакциями?

транзакция Spring Framework поддержка управления значительно меняет традиционное мышление когда приложение J2EE требует сервер приложений.

В частности, вам не нужно Сервер приложений просто иметь декларативные транзакции через EJB. В факт, даже если у вас есть приложение сервер с мощными возможностями JTA, вы вполне можете решить, что весна Рамочные декларативные транзакции предложить больше силы и гораздо больше продуктивная модель программирования, чем EJB CMT.

Обычно вам нужно приложение возможность JTA сервера, только если вы нужно подключить несколько транзакционных ресурсы, и для многих приложений возможность обрабатывать транзакции через несколько ресурсов не является требование. Например, многие высокопроизводительные приложения используют один, очень масштабируемая база данных (например, Oracle 9i RAC). Автономная транзакция такие менеджеры, как транзакции Atomikos и JOTM - другие варианты. (Конечно вам может понадобиться другой сервер приложений такие возможности, как JMS и JCA.)

Наиболее важным моментом является то, что с Spring Framework вы можете выбрать когда масштабировать ваше приложение до полноценный сервер приложений. Ушел те дни, когда единственная альтернатива чтобы с помощью EJB CMT или JTA было написать код с использованием локальных транзакций, таких как те, на соединениях JDBC, и сталкиваются с здоровенная переделка, если вам когда-нибудь это нужно код для запуска в глобальном, Управляемые контейнером транзакции. С только Spring Framework Конфигурация должна измениться так, чтобы Ваш код не обязан.

Итак, как объяснено в третьем параграфе, если вы хотите работать с несколькими транзакционными ресурсами, вам понадобятся глобальные транзакции, которые включают сервер приложений с поддержкой JTA. И Сервер приложений с поддержкой JTA означает реальный контейнер J2EE или не J2EE-контейнер (например, Tomcat) с автономным диспетчером транзакций, таким как Atomikos , JOTM , Битроникс , SimpleJTA , JBossTS или GeronimoTM / Jencks .

FWIW, я видел много жалоб на JOTM, я думаю, что у GeronimoTM / Jencks нет документации, я не могу ничего сказать о JBossTS ArjunaTS (за исключением того, что это надежный продукт) SimpleJTA и Bitronix имеют и хорошую документацию, и Atomikos - впечатляющий продукт, также хорошо документированный. Лично я бы выбрал Битроникс или Атомикос.

PS: Честно говоря, если для вас это звучит как китайский, вам, возможно, следует рассмотреть возможность использования единой базы данных (если это вариант, пойти на это! ) или использовать реальный контейнер J2EE, такой как JBoss или GlassFish, как я написал в предыдущем ответе. Не обижайся, но все это JTA не тривиально, и путь JOTM не так прост, если ты не понимаешь, зачем он тебе нужен.

...