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

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

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

    posts - 495,  comments - 11,  trackbacks - 0

    2聲明式管理Hibernate本地事務(wù)

    Spring提供了一種統(tǒng)一的IoC方式來(lái)管理Hibernate事務(wù)(本地或者分布式事務(wù))。從Spring接手hibernate.cfg.xmlHibernate的基本配置文件)起,Hibernate事務(wù)便輕易交由Spring拖管了。

    說(shuō)明:在上一章介紹IBatisDAO的時(shí)候,曾經(jīng)針對(duì)事務(wù)和DAO的關(guān)系簡(jiǎn)單的進(jìn)行了探討。通常DAO的粒度應(yīng)該都是比較細(xì)的,即它們只是一些單步的CRUD操作,所以就需要引入一個(gè)業(yè)務(wù)對(duì)象來(lái)包裹DAO,這樣,就可以在業(yè)務(wù)對(duì)象的基礎(chǔ)上,提供更粗粒度的事務(wù)劃分了(比如跨越多個(gè)DAO的方法調(diào)用進(jìn)行事務(wù)管理)。

    為了能對(duì)DAO進(jìn)行更粗粒度的事務(wù)控制,需要為其增加一個(gè)業(yè)務(wù)對(duì)象。下面給出了該業(yè)務(wù)對(duì)象的接口和實(shí)現(xiàn),如代碼10.25~10.26所示。

    代碼10.25 StockFacade.java

    package chapter10.spring.hibernate;

    import chapter10.hibernate.domain.Category;

    public interface StockFacade {

    public void business1(Category category);

    public void someOtherBusiness();

    }

    代碼10.26 BusinessFacadeImpl.java

    public class BusinessFacadeImpl implements StockFacade {

    private StockDao stockDao;

    public void setStockDao(StockDao stockDao) {

    ??? this.stockDao = stockDao;

    }

    public void business1(Category category) {

    ??? stockDao.createCategoryCascade(category);

    ??? stockDao.retrieveProductBy(category);

    ??? stockDao.deleteCategoryCascade(category);

    }

    public void someOtherBusiness() {

    ??? //other implemention

    }

    }

    接著給出關(guān)于事務(wù)策略的配置,其中使用了Spring針對(duì)Hibernate3給出的HibernateTransactionManager,它提供了Hibernate的本地事務(wù)管理策略,如代碼10.27所示。

    代碼10.27 transaction-context.xml

    <?xml version="1.0" encoding="UTF-8"?>

    <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"

    "http://www.springframework.org/dtd/spring-beans.dtd">

    <beans>

    <bean id="transactionManager"

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

    ??? <property name="sessionFactory" >

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

    ??? </property>

    </bean>

    <bean id="business"

    class="chapter10.spring.hibernate.BusinessFacadeImpl">

    ??? <property name="stockDao">

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

    ??? </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>

    ??????? <!--運(yùn)行在當(dāng)前事務(wù)范圍內(nèi),如果當(dāng)前沒(méi)有啟動(dòng)事務(wù),那么創(chuàng)建一個(gè)新的事務(wù)-->

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

    ??????? <!--運(yùn)行在當(dāng)前事務(wù)范圍內(nèi),如果當(dāng)前沒(méi)有啟動(dòng)事務(wù),那么拋出異常-->

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

    ????? </props>

    ??? </property>

    </bean>

    </beans>

    代碼10.28 HibernateTransactionUsageTest.java

    package chapter10.spring.hibernate;

    import org.springframework.context.ApplicationContext;

    import org.springframework.context.support.ClassPathXmlApplicationContext;

    import chapter10.hibernate.domain.Category;

    import junit.framework.TestCase;

    public class HibernateTransactionUsageTest extends TestCase {

    private StockFacade stockBusiness;

    protected void setUp() throws Exception {

    ??? String path = "ch10/spring/hibernate/";

    ??? ApplicationContext ctx = new ClassPathXmlApplicationContext(

    ???????? new String[]{path+"dataAccessContext-support-local.xml",

    ???????????? path+"transaction-context.xml"});

    ??? stockBusiness = (StockFacade)ctx.getBean("businessProxy");

    }

    public void testTransctionUsage() {

    ??? Category category = new Category("RABBIT");

    ??? category.setName("Rabbit");

    ??? category.setDescn("Desciption of Rabbit");

    ??? stockBusiness.business1(category);

    }

    }

    posted on 2009-07-27 01:51 jadmin 閱讀(73) 評(píng)論(0)  編輯  收藏

    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 国产2021精品视频免费播放| 东方aⅴ免费观看久久av| 69影院毛片免费观看视频在线| 中文字幕专区在线亚洲| 免费无码婬片aaa直播表情| 四虎永久免费观看| 高h视频在线免费观看| 免费观看国产精品| 曰批全过程免费视频免费看| 免费国产精品视频| 国产高潮流白浆喷水免费A片 | 国产亚洲福利精品一区二区| 一区二区三区四区免费视频| 国产大片91精品免费观看男同| 亚洲熟妇AV一区二区三区浪潮| 国产麻豆一精品一AV一免费| 亚洲精品成人网站在线观看 | 亚洲人成色7777在线观看| 黄 色一级 成 人网站免费| 国产亚洲成av人片在线观看| 91精品国产免费久久国语蜜臀| 亚洲精品无码你懂的网站| 一级女人18片毛片免费视频| 欧美男同gv免费网站观看| 亚洲国产天堂久久综合网站| 四虎永久在线观看免费网站网址| 亚洲Av无码精品色午夜| 成人片黄网站色大片免费观看cn| 国产亚洲综合网曝门系列| 最近中文字幕免费2019| 亚洲国产成人AV在线播放| 无码一区二区三区免费视频| 亚洲欧美在线x视频| 亚洲国产精品无码久久久蜜芽| 一级免费黄色大片| 精品亚洲麻豆1区2区3区| 午夜精品一区二区三区免费视频| 亚洲av无码片在线观看| 无码区日韩特区永久免费系列 | 99免费视频观看| 久久亚洲熟女cc98cm|