3

春の使用:

  1. jta-transaction-manager は id を名前として使用して、以下のようにサービス層に REF として渡すことができますか?

  2. tx:jta-transaction-manager は 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>
4

1 に答える 1

16

tx:jta-transaction-manager以下のようにサービスレイヤーに REF として渡すことができるように、id を名前として使用できますか?

<tx:jta-transaction-manager>、Spring コンテキストで " transactionManager" という名前の Bean としてトランザクション マネージャを公開します。

tx:jta-transaction-managerJ2EEコンテナでのみ使用できますか?

Spring ドキュメントからの第 9 章トランザクション管理の引用:

トランザクション管理にアプリケーション サーバーは必要ですか?

Spring Framework のトランザクション管理サポートは、J2EE アプリケーションがいつアプリケーション サーバーを必要とするかについての従来の考え方を大きく変えます。

特に、EJB を介して宣言型トランザクションを行うためだけにアプリケーション サーバーは必要ありません。実際、強力な JTA 機能を備えたアプリケーション サーバーを使用している場合でも、Spring Framework の宣言型トランザクションは、EJB CMT よりも強力で生産的なプログラミング モデルを提供すると判断する可能性があります。

通常、アプリケーション サーバーの JTA 機能が必要になるのは、複数のトランザクション リソースを登録する必要がある場合だけです。多くのアプリケーションでは、複数のリソース間でトランザクションを処理できる必要はありません。たとえば、多くのハイエンド アプリケーションは、単一の高度にスケーラブルなデータベース (Oracle 9i RAC など) を使用します。Atomikos TransactionsJOTMなどのスタンドアロン トランザクション マネージャーは、他のオプションです。(もちろん、JMS や JCA などの他のアプリケーション サーバー機能が必要になる場合もあります。)

最も重要な点は、Spring Framework を使用すると、アプリケーションを本格的なアプリケーション サーバーにスケールアップするタイミングを選択できることです。EJB CMT や JTA を使用する代わりに、JDBC 接続などのローカル トランザクションを使用してコードを記述し、そのコードをグローバルなコンテナー管理トランザクション内で実行する必要が生じた場合に、多大な手直しを余儀なくされた時代は終わりました。Spring Framework では、構成のみを変更する必要があるため、コードを変更する必要はありません。

したがって、3 番目の段落で説明したように、複数のトランザクション リソースを操作する場合は、JTA 対応のアプリケーション サーバーを含むグローバル トランザクションが必要になります。また、JTA 対応アプリケーション サーバーとは、 AtomikosJOTMBitronixSimpleJTAJBossTSGeronimoTM/Jencksなどのスタンドアロン トランザクション マネージャーを備えた実際の J2EE コンテナーまたは非 J2EE コンテナー (Tomcat など) を意味します。

FWIW、私は JOTM について多くの不満を見てきました。GeronimoTM/Jencks にはドキュメントが不足していると思います。JBossTS ArjunaTS については何も言えません (堅実な製品であることを除いて)。SimpleJTA と Bitronix には優れたドキュメントがあり、 Atomikos は、多くのドキュメントにも記載されている印象的な製品です。個人的には、Bitronix または Atomikos を選択します。

PS: 正直なところ、これが中国語のように聞こえる場合は、単一のデータベースの使用を検討する必要があります (これがオプションである場合は、それを選択してください! ) または、以前の回答で書いたように、JBoss や GlassFish などの実際の J2EE コンテナーの使用を検討する必要があります。 . 問題はありませんが、この JTA のすべては些細なことではなく、なぜそれが必要なのかを本当に理解していない場合、JOTM パスを使用することはそれほど単純ではありません。

于 2009-12-27T00:01:05.587 に答える