<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-13  評(píng)論-9  文章-9  trackbacks-0
    類(lèi):
    public interface CustomerDAO {
    public void createCustomer(Customer customer);
    }

    public class HibernateCustomerDAO implements CustomerDAO {

    private HibernateTemplate hibernateTemplate = null;

    public void setSessionFactory(SessionFactory sessionFactory) {
    this.hibernateTemplate = new HibernateTemplate(sessionFactory, false);
    }

    public void createCustomer(Customer customer) {
    this.hibernateTemplate.save(customer);
    }
    }
    配置文件:
    <bean id="customerDAOTarget" class="test.usecase.HibernateCustomerDAO">
     <property name="sessionFactory"><ref bean="sessionFactory"/></property>
    </bean>

    <bean id="transactionManager" class="org.springframework.orm.hibernate.HibernateTransactionManager">
     <property name="sessionFactory"><ref bean="sessionFactory"/></property>
    </bean>

    <bean id="customerDAO" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
     <property name="transactionManager"><ref bean="transactionManager"/></property>
     <property name="target"><ref bean="customerDAOTarget"/></property>
     <property name="transactionAttributes">
      <props>
       <prop key="create*">PROPAGATION_REQUIRED</prop>
       <prop key="*">PROPAGATION_REQUIRED</prop>
      </props>
     </property>
    </bean>
    上述Spring配置片斷定義了業(yè)務(wù)對(duì)象HibernateCustomerDAO,它包裹了Hibernate SessionFactory。注意,默認(rèn)時(shí),Spring中定義的JavaBean都是單例的,HibernateCustomerDAO也不例外。這意味:多個(gè)線程可能同時(shí)執(zhí)行createCustomer()方法。

      其次,配置了Hibernate事務(wù)管理器,它包裹了同一Hibernate SessionFactory實(shí)例。在事務(wù)管理器每次執(zhí)行時(shí),它都會(huì)完成如下幾件事情。其一,檢查Hibernate Session是否綁定到當(dāng)前線程。如果已綁定,則直接使用它。如果還未綁定,事務(wù)管理器將告知Hibernate SessionFactory創(chuàng)建新的Session,然后將創(chuàng)建的Session綁定到當(dāng)前線程。其二,如果當(dāng)前沒(méi)有處于活動(dòng)的事務(wù),則事務(wù)管理器將啟動(dòng)新的事務(wù),并將Session包裹進(jìn)來(lái)。否則,直接參與到活動(dòng)事務(wù)中。

      整個(gè)過(guò)程是通過(guò)使用Spring提供的TransactionProxyFactoryBean實(shí)現(xiàn)的。當(dāng)然,這是一種以聲明方式實(shí)現(xiàn)的事務(wù)管理過(guò)程。 TransactionProxyFactoryBean能夠?yàn)闃I(yè)務(wù)對(duì)象創(chuàng)建代理對(duì)象,從而通過(guò)事務(wù)管理器管理事務(wù)。當(dāng)每次通過(guò)代理對(duì)象調(diào)用createCustomer()方法時(shí),事務(wù)管理器將根據(jù)事務(wù)屬性管理事務(wù)。當(dāng)前,Spring除了提供HibernateTransactionManager事務(wù)管理器外,還為JDBC數(shù)據(jù)源、JDO、TopLink提供了相應(yīng)的事務(wù)管理器。

      再來(lái)看看業(yè)務(wù)對(duì)象吧!當(dāng)調(diào)用createCustomer()方法時(shí),HibernateTemplate將查找綁定到當(dāng)前線程的Hibernate Session。由于上述配置文件片斷傳入到HibernateTemplate構(gòu)建器的第二個(gè)參數(shù)為false,因此如果沒(méi)有綁定Hibernate Session,則將拋出未受查異常。這對(duì)于那些未正確配置事務(wù)管理功能的場(chǎng)和特別有用(注意,事務(wù)管理器很重要)。一旦事務(wù)管理配置好后,Hibernate Session將綁定到當(dāng)前線程,從而啟動(dòng)事務(wù)。請(qǐng)注意,HibernateTemplate不會(huì)去檢查事務(wù)是否激活,也不會(huì)顯示地啟動(dòng)或終止事務(wù)。也請(qǐng)注意,如果在聲明的方法(事務(wù)屬性中給出的)中拋出了未受查異常,則當(dāng)前活動(dòng)事務(wù)將回滾。

    posted on 2006-06-19 15:31 Dragonofson 閱讀(1356) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): Spring
    主站蜘蛛池模板: 国产精品无码免费专区午夜| 亚洲国产精品无码AAA片| 亚洲最大在线视频| 中文字幕乱码系列免费| 亚洲午夜无码片在线观看影院猛| 国产在亚洲线视频观看| 国产免费久久精品| 国产大陆亚洲精品国产| 亚洲成A∨人片天堂网无码| 色噜噜的亚洲男人的天堂| 国产婷婷高清在线观看免费| 男女超爽视频免费播放| 久久久久亚洲爆乳少妇无| 国产大片免费天天看| 国产亚洲综合色就色| 免费毛片a线观看| 久久亚洲私人国产精品| 国产精品色拉拉免费看| 亚洲欧洲国产综合| 最近最新中文字幕完整版免费高清| 亚洲小说图区综合在线| 亚洲 无码 在线 专区| 在线免费播放一级毛片 | 免费在线看片网站| 一级特黄特色的免费大片视频| 亚洲色偷拍另类无码专区| 久久A级毛片免费观看| 亚洲日韩精品A∨片无码加勒比| 亚洲av再在线观看| 嫩草在线视频www免费观看| 亚洲欧洲免费视频| 四虎在线免费播放| 一级毛片免费毛片毛片| 亚洲国产人成网站在线电影动漫| 毛片免费观看的视频在线| 黄页网站在线免费观看| 精品日韩亚洲AV无码| 色吊丝永久在线观看最新免费| 国产在线精品一区免费香蕉| 亚洲精品国产手机| 亚洲精品国产精品乱码不卡 |