Spring予備忘却——事務管理(事務抽象)

6761 ワード

3.1 Spring事務の抽象
   Springは一貫した事務管理の抽象を提供しています.この抽象はSpringの最も重要な抽象の一つで、次のような利点があります.         ? JTA、JDBC、Hibernate、iBATISデータベース層、JDOなど、異なる事務APIのための一貫したプログラミングモデルを提供します.         ? 大多数の事務APIより簡単で、使いやすいプログラミング事務管理APIを提供します.         ? Springデータを統合して抽象的にアクセスします.         ? Spring宣言式事務管理対応   従来、J 2 EE開発者は二つの事務管理の選択があります.グローバルトランザクションはアプリケーションサーバによって管理され、JTAを使用する.ローカルトランザクションは、リソースに関連するものです.例えば、
JDBCと接続する事務.大域的なトランザクションは、複数のトランザクションのリソース(単一のトランザクション性のリソースを使用する多くのアプリケーションが必要であることを指摘する)に対して使用することができる.局部の事務を使って、服を使います.
サービスは、トランザクション管理に参加する必要がなく、複数のリソースを越えるトランザクションの正確さを確保するのに役立つことができません.   全体的な事務には著しく不利な点があり、コードはJTAを使用する必要がある.また、JTAのUserTransationは、一般的にJNDIから取得する必要があります.これは私がJTAのために.
JNDIとJTAを同時に使う必要があります.すべてのグローバルトランザクションを使用することは、アプリケーションコードの再使用性を制限することが明らかであり、JTAは通常アプリケーションサーバの環境でしか使用できないからである.   大域的な事務を使用するのに良い方法は、EJBのCMT(容器管理の事務)によるものである.EJBのCMTは不要です
事務に関するJNDIの検索は、EJB自体を使うには、必ずJNDIを使う必要があります.それは大多数を除去します.全部ではないです.Javaコードを書いて事務をコントロールする必要があります.めざましい
欠点は、CMTがJTAとアプリケーションサーバ環境に結合されており、EJBを使用して業務ロジックを実現することを選択しているだけで、或いは少なくとも一つの事務化EJBの外観(Facade)があってこそ、使えます.
それを使います   局所的なトランザクションは容易に使用されるが、多くのトランザクションリソースには使用できず、侵入する傾向があるプログラミングモデルには明白な欠点がある.例えば、JDBCを使って事務管理のコードを接続することはできません.
グローバルのJTA事務に使用されます.    Springはこれらの問題を解決した.アプリケーション開発者が任意の環境で一貫したプログラミングモデルを使用できるようにします.あなたのコードを一度だけ書いてもいいです.これは環境によって違うものです.
管理戦略の中で有益である.Springは声明式とプログラミング式の事務管理を同時に提供します.プログラミング式事務管理を使用して、開発者はSpring事務の抽象を直接使用して、この抽象はいかなる下の事務の基礎の上で使うことができます.最初のステートメントモデルを使用して、開発者は通常本を使います.
少ない事務関連コードを書くので、Springまたは他の任意のAPIに依存しません.Springは同時に二つのトランザクションプログラミングモデルをサポートしています.宣言式事務に対してSpringは各種事務管理器(EJBはJTAのみ対応)をサポートし、Springにより 
AOPモジュールは、Springが提供する声明式事務サポートを実現することができます(企業応用は業務ロジック操作を完了する際に、事務サービスを借りる必要がありますので、事務抽象をAOPのAsppectとしています.
とても合理的です.SpringはTransaction ProxyFactoryBean類を提供しており、音声明式事務の使用を実現しています.プログラミングされたトランザクションに対しても、Springは様々なトランザクションマネージャを提供しています.Springが提供するすべての事務マネージャは、既存の事務に対してAPI(例えば、Hibernate、JDBC、JTA)を実装するだけであり、それ自体は具体的な事務実現を提供していない.
.すべてのトランザクションマネージャの中で最も基本的なのは、Platform Transation Managerインターフェースです.
public interface PlatformTransactionManager {
    TransactionStatus getTransaction(TransactionDefinition definition)
        throws TransactionException;
    void commit(TransactionStatus status) throws TransactionException;
    void rollback(TransactionStatus status) throws TransactionException;
}
Springはいくつかの実装を提供しており、異なるトランザクションのために使用されます.
たとえば:
ハイベルナーTransactionager:ハイベルナー事務
DataSourceTransactionager:JDBC事務
JTA Transation Manager:JTA事務
ヒップホップを例にとると、ヒップホップトレーナーを借りることになります.私たちはハイバーネイトのLocarSession Factoryを定義する必要があります.アプリケーションはそれを使ってハイバーネイトの会話を獲得します.開発者はSession Factoryの値取りを提供し、Springにこの依存性を注入できるようにしなければならない.実際には、ヒップホップトレーナーは、事務処理の具体的な仕事をヒップホップのnet.sf.hibernation.Transationの対象に委任します.したがって、comitとrollbackはTransationの対象に委託されます.
 

     destroy-method="close">
    ${jdbc.driverClassName}
    ${jdbc.url}
    ${jdbc.username}
    ${jdbc.password}

    
    
        org/springframework/samples/petclinic/hibernate/petclinic.hbm.xml
    
    
        
            ${hibernate.dialect}
        
    

 
     lang="EN-US" style="font-size:9pt">