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

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

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

    隨筆-13  評論-9  文章-9  trackbacks-0
    類:
    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ù)對象HibernateCustomerDAO,它包裹了Hibernate SessionFactory。注意,默認(rèn)時,Spring中定義的JavaBean都是單例的,HibernateCustomerDAO也不例外。這意味:多個線程可能同時執(zhí)行createCustomer()方法。

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

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

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

    posted on 2006-06-19 15:31 Dragonofson 閱讀(1356) 評論(0)  編輯  收藏 所屬分類: Spring
    主站蜘蛛池模板: 最刺激黄a大片免费网站| 农村寡妇一级毛片免费看视频| 黄床大片免费30分钟国产精品 | 免费在线黄色电影| 免费日韩在线视频| 国产精品久久久久久亚洲小说| 丁香花在线观看免费观看| 亚洲欧洲中文日产| 国产一卡2卡3卡4卡无卡免费视频 国产一卡二卡3卡四卡免费 | 免费看一级做a爰片久久| 亚洲Av永久无码精品黑人| 无码永久免费AV网站| 亚洲综合小说另类图片动图| 国产99视频精品免费观看7| 亚洲综合丁香婷婷六月香| 成年人性生活免费视频| 亚洲av最新在线观看网址| 免费看片免费播放| 美女尿口扒开图片免费| 亚洲精品亚洲人成人网| 久久aa毛片免费播放嗯啊| 亚洲女人18毛片水真多| 日本大片在线看黄a∨免费| 深夜特黄a级毛片免费播放| 国产av无码专区亚洲av果冻传媒 | 人人狠狠综合久久亚洲高清| 国产男女爽爽爽免费视频| 亚洲VA中文字幕无码毛片| 日本高清在线免费| 亚洲av永久无码| 久久久久亚洲精品男人的天堂| 久久久久国产精品免费看| 亚洲中文无码av永久| 四虎影在线永久免费四虎地址8848aa | 免费的涩涩视频在线播放| 日韩精品视频在线观看免费| 久久99国产亚洲高清观看首页 | 亚洲s码欧洲m码吹潮| 亚洲国产精华液网站w| 毛片a级毛片免费播放下载| 日韩毛片一区视频免费|