samtiger


          QQ:418148757
          Name:yangchuan
          數(shù)據(jù)加載中……
          關(guān)于spring+hibernate的事務(wù)的簡(jiǎn)單配置(這里用的mysql數(shù)據(jù)庫(kù))
             今天晚上有同事提到這個(gè)spring的事務(wù)配置,其實(shí)我也就知道兩種最簡(jiǎn)單的配置。恩,還是寫(xiě)個(gè)例子測(cè)試一下吧。環(huán)境是:spring2.04+hibernate3.1吧

            

          首先,我使用的mysql,設(shè)置mysql為InnoDB類(lèi)型。
          事務(wù)管理的控制應(yīng)該放到業(yè)務(wù)邏輯層。你可以寫(xiě)個(gè)處理業(yè)務(wù)邏輯的JavaBean,在該JavaBean中調(diào)用DAO(或則是HibernateTemplate()的crud操作),然后把該Bean的方法納入spring的事務(wù)管理。

          方法一:xml文件定義如下:
                  //聲明事務(wù)管理器
           <bean id="transactionManager"
            class="org.springframework.orm.hibernate3.HibernateTransactionManager">
            <property name="sessionFactory" ref="sessionFactory" />
           </bean>
                  //聲明事務(wù)代理,使用抽象屬性(abstract="true") 方便所有的業(yè)務(wù)類(lèi)都擁有這個(gè)事務(wù)代理
           <bean id="baseTransactionProxy"
            class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"
            abstract="true">
            <property name="transactionManager" ref="transactionManager" />
            <property name="transactionAttributes">
             <props>
              <prop key="add*">PROPAGATION_REQUIRED,-Exception</prop>
             </props>
            </property>
           </bean>

                 
           <bean id="userManager" parent="baseTransactionProxy">
            <property name="target" >
                                    //具體的實(shí)現(xiàn)了業(yè)務(wù)邏輯的JavaBean
             <bean class="org.zdpuyao.srm.service.imp.UserManageImp">
              <property name="sessionFactory">
               <ref local="sessionFactory" />
              </property>
             </bean>
            </property>
           </bean>
          org.zdpuyao.srm.service.imp.UserManageImp就是我們的實(shí)現(xiàn)業(yè)務(wù)邏輯的JavaBean。我們通過(guò)parent元素聲明其事務(wù)支持。
          在測(cè)試的時(shí)候,就用
          UserManage um=(UserManage) context.getBean("userManager");來(lái)取得bean對(duì)象(注意上邊的"userManager"配置)

          具體類(lèi)
          package org.zdpuyao.srm.service.imp;

          public class UserManageImp extends HibernateDaoSupport implements UserManage {

           public void addUser(Object obj) {
            
            TblBsDepartmentType dept; //=(TblBsDepartmentType)temp.find("from TblBsDepartmentType").get(0);
            dept = new TblBsDepartmentType();
            dept.setBdtyName("java12");
            getHibernateTemplate().save(dept);
            
            ///throw new  ("ssss");
            //throw new RuntimeSQLException("sssss");
            
            /*TblBsUserType user = (TblBsUserType)obj;
            user.setTblBsDepartmentType(dept);
            temp.save(user);*/

           }

          }


          具體測(cè)試類(lèi):
          public class TestUser extends TestCase {

           protected void setUp() throws Exception {
            
            super.setUp();
           }
           
           private BeanFactory getFactory()
           {
            Resource res=new FileSystemResource("\\WebRoot\\WEB-INF\\applicationContext.xml");
            BeanFactory factory=new XmlBeanFactory(res);
            return factory;
           }
           private UserManage getUserManage()
           {
            BeanFactory factory=getFactory();
            UserManage um=(UserManage) factory.getBean("userManager");
            return um;
            
           }

           public void testAddUser() throws Exception {
             
            TblBsUserType user = new TblBsUserType();
            
            user.setButyId(Long.valueOf(12345645));
            user.setButyName("yangchuan");
            user.setButyPassword("12345");
            getUserManage().addUser(user);
            
            //excuteJDBCTranscation();
           }
          }



          ///////////////////////////////////////////
          方法二:xml文件定義如下:
              
              1: 第一步:
                
          <bean id="transactionManager"
            class="org.springframework.orm.hibernate3.HibernateTransactionManager">
            <property name="sessionFactory" ref="sessionFactory" />
           </bean>


              1: 第二步:
           <bean id="userManager"
            class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"
            abstract="false">
            <property name="transactionManager" ref="transactionManager" />
            <property name="target">
             <ref local="userManagerimp" />
            </property>
            <property name="transactionAttributes">
             <props>
              <prop key="add*">PROPAGATION_REQUIRED,-Exception</prop>
             </props>
            </property>
           </bean>

           

              1: 第三步:
           <bean id="userManagerimp"
            class="org.zdpuyao.srm.service.imp.UserManageImp">
            <property name="sessionFactory">
             <ref local="sessionFactory" />
            </property>
           </bean>

          org.zdpuyao.srm.service.imp.UserManageImp就是我們的實(shí)現(xiàn)業(yè)務(wù)邏輯的JavaBean。
          在測(cè)試的時(shí)候,就用
          UserManage um=(UserManage) context.getBean("userManager");來(lái)取得bean對(duì)象

          具體類(lèi)
          package org.zdpuyao.srm.service.imp;

          public class UserManageImp extends HibernateDaoSupport implements UserManage {

           public void addUser(Object obj) {
            
            TblBsDepartmentType dept; //=(TblBsDepartmentType)temp.find("from TblBsDepartmentType").get(0);
            dept = new TblBsDepartmentType();
            dept.setBdtyName("java12");
            getHibernateTemplate().save(dept);
            
            ///throw new  ("ssss");
            //throw new RuntimeSQLException("sssss");
            
            /*TblBsUserType user = (TblBsUserType)obj;
            user.setTblBsDepartmentType(dept);
            temp.save(user);*/

           }

          }
          具體測(cè)試類(lèi):
          public class TestUser extends TestCase {

           protected void setUp() throws Exception {
            
            super.setUp();
           }
           
           private BeanFactory getFactory()
           {
            Resource res=new FileSystemResource("\\SRMnew\\WebRoot\\WEB-INF\\applicationContext.xml");
            BeanFactory factory=new XmlBeanFactory(res);
            return factory;
           }
           private UserManage getUserManage()
           {
            BeanFactory factory=getFactory();
            UserManage um=(UserManage) factory.getBean("userManager");
            return um;
            
           }

           public void testAddUser() throws Exception {
             
            TblBsUserType user = new TblBsUserType();
            
            user.setButyId(Long.valueOf(12345645));
            user.setButyName("yangchuan");
            user.setButyPassword("12345");
            getUserManage().addUser(user);
            
            //excuteJDBCTranscation();
           }
          }

          本人才疏學(xué)淺,涉java不深,如果以上配置有什么錯(cuò)誤或不足的地方,請(qǐng)您指出,將  不甚感激!如果還有別的配置,也請(qǐng)共享一份給我,將感激不盡。

            說(shuō)明:如果你的代碼報(bào):java.lang.ClassCastException: $Proxy7 cannot be cast to 。。。。。的錯(cuò)誤;
          解決方式有兩種:
           一種: 為org.springframework.transaction.interceptor.TransactionProxyFactoryBean的bean配置一個(gè)property屬性:proxyTargetClass ,并設(shè)置其值為true
          另一種:就是為你的dao類(lèi)寫(xiě)一個(gè)接口類(lèi),就是說(shuō)讓你的dao必須實(shí)現(xiàn)一個(gè)接口。

          posted on 2007-09-28 00:04 sam.chuan.yang 閱讀(2447) 評(píng)論(1)  編輯  收藏

          評(píng)論

          # re: 關(guān)于spring+hibernate的事務(wù)的簡(jiǎn)單配置(這里用的mysql數(shù)據(jù)庫(kù)) 2009-08-26 00:31 sss

          這兩個(gè)方法一樣的啊

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


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 崇信县| 高陵县| 惠东县| 凤翔县| 星子县| 榆中县| 芦溪县| 开平市| 淳化县| 姚安县| 天峻县| 化隆| 灵寿县| 太仓市| 宁陵县| 曲阜市| 临安市| 大石桥市| 泰宁县| 正定县| 阿勒泰市| 天全县| 进贤县| 斗六市| 蒲江县| 沽源县| 阿坝县| 鹤岗市| 雷波县| 锡林浩特市| 辛集市| 宜章县| 通渭县| 广德县| 龙山县| 扶绥县| 开阳县| 荔浦县| 子长县| 宣威市| 巴塘县|