samtiger


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

            

          首先,我使用的mysql,設(shè)置mysql為InnoDB類型。
          事務(wù)管理的控制應(yīng)該放到業(yè)務(wù)邏輯層。你可以寫個(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ù)類都擁有這個(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。我們通過parent元素聲明其事務(wù)支持。
          在測(cè)試的時(shí)候,就用
          UserManage um=(UserManage) context.getBean("userManager");來取得bean對(duì)象(注意上邊的"userManager"配置)

          具體類
          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è)試類:
          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");來取得bean對(duì)象

          具體類
          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è)試類:
          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)共享一份給我,將感激不盡。

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

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

          評(píng)論

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

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

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


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 宁武县| 固安县| 时尚| 武汉市| 澄江县| 定西市| 霍州市| 香格里拉县| 卓尼县| 和田县| 武城县| 桐庐县| 满城县| 武定县| 牡丹江市| 常熟市| 凤山市| 江北区| 常山县| 乐山市| 温泉县| 丰镇市| 玉山县| 沐川县| 西和县| 泾阳县| 交口县| 临江市| 石家庄市| 新巴尔虎左旗| 淮滨县| 凤阳县| 吴桥县| 南投县| 津南区| 定陶县| 阿鲁科尔沁旗| 佳木斯市| 抚松县| 区。| 宁化县|