Spring宣言式事務戦略

4408 ワード

宣言式事務管理:
Springは声明式事務管理も提供しています.これはSpring AOPで実現されました.
Springで事務管理を行う通常の方法は、AOP(スライス指向プログラミング)の方式を利用して、通常のjavaタイプのカプセル化事務制御であり、これは動的エージェントによって実現されるものであり、インターフェースは遅延実用化されているため、springはこの期間にスクリーンを通して、事務スライスをロードする.原理はこのようにして、具体的な詳細はjdkにおける動的エージェントに関する文書を参照してください.本文は主にspringの中で事務制御をする方法を説明します.動的エージェントの重要な特徴は、インターフェースに対するものです.だから、私達のdaoは動的エージェントを通してspringに事務を引き継ぐために、daoの前にインターフェースを抽象化しなければなりません.もちろん、このようなインターフェースがないならば、springはCGLOIBを使って問題を解決しますが、springの推薦の方式ではないので、議論しません.
Springの大多数のユーザは声明式事務管理を選択します.これは少なくとも応用コードの選択に影響を与えるので、非侵入性の軽量容器との考え方は一致しています.
EJB CMTとSpring宣言式事務管理の類似性と相違点を考慮することから有益である.それらの基本的な方法は似ています.事務管理を別々の方法に指定できます.必要であれば、サービスコンテキストでsetRollbackOnlyを呼び出すことができます.違いは以下の通りです.
  • はJTAにEJB CMTのように結合されていません.Spring宣言式事務管理は任意の環境で使用できます.設定ファイルを変更するだけで、JDBC、JDO、Hbernateまたは他の事務機構と一緒に仕事ができます.
  • Springは、宣言式事務管理を通常のJavaオブジェクトに適用することができ、EJB
  • のような特別なクラスだけではない.
  • Springは声明式のロールバック規則を提供します.EJBは対応する特性がないので、この特性について以下で議論します.ロールバックは、プログラム式の
  • だけではなく、式の制御を宣言することができます.
  • SpringはAOPを通じて業務行為をカスタマイズすることができます.例えば、必要ならば、ロールバックにカスタマイズを挿入することができます.事務通知のように、任意の通知を追加することもできます.EJB CMTを使って、setRollbackOnlyを使う以外に、容器の事務管理に影響を与えることができません.
  • Springは、ハイエンドのアプリケーションサーバによって提供される遠隔呼び出しを越えるトランザクションコンテキスト伝播を提供しない.これらの特性が必要なら、EJBを使うことを勧めます.しかし、これらの特性を簡単に使用しないでください.通常、私たちはビジネスが遠隔呼び出しを越えることを望んでいません.
    ロールバック規則の概念は重要です.どの異常が自動ロールバックを起こすべきかを指定できます.私たちは設定ファイルでJavaコードではなく、宣言の方式で指定します.したがって、私たちはまだTransaction Stortsオブジェクトを呼び出すことができますが、現在のビジネスをロールバックする方法は、MyApplication Exceptionなどのルールを指定することができます.これは顕著な利点があり、事業対象は事務インフラに依存する必要がない.例えば、これらは通常、任意のSpring API、トランザクションまたは他のものを導入する必要がない.
    EJBのデフォルト行動はシステム異常(通常は運行時異常)に遭遇し、EJB容器が自動的にロールバックします.EJB CMTはアプリケーション異常(java.rmi.RemoteException以外のcheced異常を除く)に遭遇した場合、自動的にリセットされません.Spring声明式事務管理はEJBの約束を守っていますが(unchecked異常自動ロールバックに遭遇しました)、これはカスタマイズできます.
    私たちのテストによって、Spring宣言式事務管理の性能はEJB CMTに勝ると思います.
    通常はTransaction ProxyFactoryBeanによりSpring事務代理を設置する.私たちは目標の対象を事務代理店に包装する必要があります.このターゲットは普通Javaオブジェクトのbeanです.Transaction ProxyFactoryBeanを定義するには、関連するPlatform Transactionagerの引用と事務の属性を提供しなければなりません.トランザクション属性は、上記のトランザクション定義を含んでいます.
    <bean id="petStore" 
        class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
        <property name="transactionManager"><ref bean="transactionManager"/></property>
        <property name="target"><ref bean="petStoreTarget"/></property>
        <property name="transactionAttributes">
            <props>
                <prop key="insert*">PROPAGATION_REQUIRED,-MyCheckedException</prop>
                <prop key="update*">PROPAGATION_REQUIRED</prop>
                <prop key="*">PROPAGATION_REQUIRED,readOnly</prop>
            </props>
        </property>
    </bean>
    事務代理は目的のオブジェクトのインターフェースを実現します.ここはidがpet StreTargetのbeanです.(CGLOIBを使用しても、特定のクラスのエージェントが実現できます.proxyTarget Class属性をtrueとして設定すればいいです.ターゲットオブジェクトがインターフェースを実現していないなら、自動的にこの属性をtrueとして設定します.通常は、プログラムではなくインターフェースに向かってほしいです.)事務代理を指定するためにプロxyInterfaces属性を使用してもいいです.(一般的には良い考えです.org.springframe ebook.aop.frame ebook.ProxyCofigから継承またはすべてのAOP代理工場が共有する属性を通じてTransactoryBenをカスタマイズすることもできます.
    ここのtransactionAttributes属性はorg.spring frame ebook.trantions.interceptort.Name Match Transation AttributeSourceにおける属性フォーマットを定義しています.これはワイルドカードのメソッド名のマッピングが直感的です.insert*のマッピングの値にはロールバック規則が含まれています.クラスは自動的にロールバックします.ロールバック規則はカンマ区切りで定義できます.-プレフィックス強制ロールバック、+プレフィックス指定提出(uncheckedを投げた場合でも、異常時には事務を提出することができます.もちろん、自分で何をしているのか分かります.)
    Transaction ProxyFactoryBeanは、「preInterceptors」と「postInterceptors」属性設定「前」または「後」通知を通じて、追加のブロッキング行為を提供することを許可します.任意の数量の「前」と「後」通知を設定できます.これらのタイプはAdvisorでもいいです.MethodInterceptorまたは現在のSpringによってサポートされている通知タイプ(例えば、ThrowAdvice、AfterReturningtAdviceまたはBeforeAdviceなどは、デフォルトでサポートされています)これらの通知はインスタンス共有モードをサポートしなければなりません.状態があるmaxinなどの高レベルのAOP特性が必要なら、汎用のorg.springframewark.aop.frame ebook.ProxyFactoryBenではなく、Transactory ProxyFactoryBenユーティリティ創設者を使用した方がいいです.
    自動代理を設定することもできます.AOPフレームを設定し、単独の代理定義クラスを必要とせずにクラスの代理を生成できます.
    A Springに添付したすべてのビジネス戦略PROPAGATIONuMANDATORY PROOPAAGATIONUNEstd PROOPAGATOOPUUUUUUUUUUOPUUUUUUUUUUUUUUUUUUUUUOOOOPUUUUUUUUUUUUUUUUUUUUUUNENENENENENEOOOOONNNNNNNNNNNNNNNNNNNUNENENENENENENENENENENENENENEOOOOPAPAPAPAPAPATATATATATAUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUD ISO LATIONS UREPEATABLE_ISO LATIONUSERIALIZABLE