spring事務管理の声明式事務管理

4967 ワード

spring事務管理の音響明式事務管理springは声明式事務管理を提供しています.これはaopを通じて実現されています.これは応用コードの選択に最も影響があります.
通常はTransaction ProxyFactoryBeanを通じて事務代理を実現します.ターゲットの包装が事務代理店に必要です.Transaction ProxyFactoryBeanを定義すると、Platform Transactionagerの実現に関する引用と事務的属性が必要です.
    以上のコードは、Platform Transation Managerの実現類の定義です.事務代理の定義では、このjavabeanを引用する.                        ここでは、Platform Transation Managerの実装とトランザクションのプロパティを適用したトランザクションエージェントを定義します.springの中の事務の策略spring事務の抽象的な肝心な点は事務の策略の概念です.この概念はorg.springframe ewark.transactions.Platform Transation Managerインターフェイスによって表されています.
public interface Platform Transation Manager{
    public abstract Transactures get Transation(Transaction Definition transactiond finition)        throws Transation Exception;
    public abstract void comit(Transactionstatus)        throws Transation Exception;
    public abstract void rollback(Transactures transactiontatus)        throws Transaction Exception;
getsTransactionは、Transaction Definitionパラメータのタイプに従って、Transaction Stortsタイプのオブジェクトを返し、Transaction Stortsオブジェクトは、新しいまたは既存のトランザクションを表すことができます.
Transaction Definitionインターフェース指定:
  • 事務分離:現在の事務と他の事務の分離の程度.例えば、この事務は他の事務で提出されていないデータを書くことができますか?
  • トランザクション伝播:通常、1つのトランザクションで実行されるすべてのコードがこのトランザクションで実行されます.しかし、1つのトランザクションコンテキストが既に存在する場合、いくつかのオプションは、例えば既存のトランザクションにおいて簡単に実行される(多くの場合)、1つのトランザクション方法の実行挙動を指定することができる.既存の事務を保留して、新しい事務を作成します.SpringはEJB CMTでおなじみの事務伝播オプションを提供します.
  • ビジネスタイムアウト:ビジネスはタイムアウト前にどれぐらい実行できますか?
  • 読み取り専用状態:読み取り専用トランザクションはデータを変更しません.読み取り専用のトランザクションは、場合によっては(例えば、ヒップホップを使用する場合)非常に有用な最適化
  • であってもよい.
    Platform Transaction Managerの実現はどのように定義されていますか?JDBCと一緒に働くにはまずjdbcデータソースを定義する必要があります.その後、DataSourceTransation Managerを使用して、データソース参照を提供します.bean id=「dataSource」      class=「org.apache.com mmons.dbcp.Baic DataSource」       destroy-method=「close」        {jdbc.driverClass Name}     $jdbc.url"    $jdbc.username"//value"    $jdbc.password
    Platform Transation Managerの定義は以下の通りです.    
    JTAを使うなら、JNDIで得られたコンテナデータソースとJtaTransation Managerを使って実現したいです.JtaTransactionagerはデータソースを知る必要がありません.または他の特定のリソースが必要ではありません.容器の大域的な事務管理を使用します.
    <bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
    <property name="jndiName"><value>jdbc/jpetstore</value></property>
    </bean>
    <bean id="transactionManager"
    class="org.springframework.transaction.jta.JtaTransactionManager"/>
     
      hibernate       
    
    

    , Hibernate LocalSessionFactory, Hibernate 。

    bean , ( , , Spring , )。

    ,“transactionManager” bean HibernateTransactionManager。
    DataSourceTransactionManager , HibernateTransactionManager SessionFactory 。

    <bean id="sessionFactory" class="org.springframework.orm.hibernate.LocalSessionFactoryBean">
    <property name="dataSource"><ref local="dataSource"/></property>
    <property name="mappingResources">
    <value>org/springframework/samples/petclinic/hibernate/petclinic.hbm.xml</value>
    </property>
    <property name="hibernateProperties">
    <props>
    <prop key="hibernate.dialect">${hibernate.dialect}</prop>
    </props>
    </property>
    </bean>
    <bean id="transactionManager"
    class="org.springframework.orm.hibernate.HibernateTransactionManager">
    <property name="sessionFactory"><ref local="sessionFactory"/></property>
    </bean>