posts - 495,  comments - 11,  trackbacks - 0

          3聲明式管理Hibernate分布式事務

          通過Spring,還可以很方便地切換至另一種事務管理策略。比如需要提供分布式事務管理策略時,只要替換一下配置即可,如代碼10.29所示。

          代碼10.29 appContext-jta.xml

          <beans>

          <bean id="transactionManager"

          class="org.springframework.transaction.jta.JtaTransactionManager">

          ??? <property name="sessionFactory" >

          ????? <ref bean="sessionFactory" />

          ??? </property>

          </bean>

          <bean id="myDataSource1"

          class="org.springframework.jndi.JndiObjectFactoryBean">

          ????? <property name="jndiName">

          ????????? <value>java:comp/env/jdbc/myds1</value>

          ????? </property>

          </bean>

          <bean id="myDataSource2"

          class="org.springframework.jndi.JndiObjectFactoryBean">

          ????? <property name="jndiName">

          ????????? <value>java:comp/env/jdbc/myds2</value>

          ????? </property>

          </bean>

          <bean id="sessionFactory1"

          class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">

          ??? <property name="dataSource" ref="myDataSource1"/>

          ??? <property name="configLocations">

          ????? <value>hibernate.cfg1.xml</value>

          ??? </property>

          </bean>

          <bean id="sessionFactory2"

          class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">

          ??? <property name="dataSource" ref="myDataSource2"/>

          ??? <property name="configLocations">

          ????? <value>hibernate.cfg2.xml</value>

          ??? </property>

          </bean>

          <bean id="dao1"

          class="daopackage1.DaoImpl">

          ??? <property name="sessionFactory" ref="sessionFactory"/>

          </bean>

          <bean id="dao2"

          class="daopackage2.DaoImp2">

          ??? <property name="sessionFactory" ref="sessionFactory"/>

          </bean>

          </beans>

          <bean id="business" class="businesspackage.BusinessFacadeImpl">

          ??? <property name="dao1">

          ????? <ref bean="dao1"/>

          ??? </property>

          ??? <property name="dao2">

          ????? <ref bean="dao2"/>

          ??? </property>

          </bean>

          <bean id="businessProxy"

          class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">

          ??? <property name="transactionManager">

          ????? <ref bean="transactionManager" />

          ??? </property>

          ??? <property name="target">

          ????? <ref bean="business" />

          ??? </property>

          ??? <property name="transactionAttributes">

          ????? <props>

          ??????? <prop key="business*">PROPAGATION_REQUIRED</prop>

          ??????? <prop key="someOtherBusiness*">PROPAGATION_MANDATORY</prop>

          ????? </props>

          ??? </property>

          </bean>

          </beans>

          可以看到,對于橫跨多個Hibernate SessionFacotry的分布式事務,只需簡單地將JtaTransactionManagerLocalSessionFactoryBean的定義結合起來就可以了,其中每個DAO通過bean屬性得到各自的SessionFactory引用。

          說明:如果所有底層數據源都是支持事務的容器,那么只需要對一個業務對象應用JtaTransactionManager策略,該對象就可以橫跨多個DAO和多個Session Factory來劃分事務了。使用Spring的最大好處就是,可通過配置來聲明式地管理事務,無需對應用代碼作任何改動。

          posted on 2009-07-27 01:52 jadmin 閱讀(107) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 凌源市| 互助| 廊坊市| 开远市| 甘孜| 高雄县| 昭苏县| 遂平县| 绥中县| 合川市| 井陉县| 临桂县| 天峨县| 贞丰县| 双流县| 定日县| 剑川县| 西青区| 固安县| 镇原县| 沙田区| 象州县| 宜宾市| 乐至县| 哈尔滨市| 台安县| 高雄市| 古蔺县| 达拉特旗| 阿拉尔市| 米易县| 房产| 札达县| 诸暨市| 大关县| 公主岭市| 永昌县| 黑河市| 衡南县| 咸阳市| 那曲县|