隨筆-348  評論-598  文章-0  trackbacks-0
               <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
                    
          <property name="sessionFactory">
                         
          <ref local="sessionFactory" />
                    
          </property>
               
          </bean>
                   
              
          <bean id="ordersDAOProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
                   
          <property name="transactionManager">
                        
          <ref bean="transactionManager" />
                   
          </property>
                   
          <property name="target">
                        
          <ref local="ordersDAO" />
                   
          </property>
                   
          <property name="transactionAttributes">
                        
          <props>
                             
          <prop key="insert*">PROPAGATION_REQUIRED</prop>
                             
          <prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
                             
          <prop key="is*">PROPAGATION_REQUIRED,readOnly</prop>
                        
          </props>
                   
          </property>
              
          </bean>
              
              
          <bean id="ordersDAO" class="com.gcoresoft.hibernate.OrdersDAO">
                  
          <property name="sessionFactory">
                      
          <ref local="sessionFactory" />
                  
          </property>
              
          </bean>

              
          <bean name="/addOrder" class="com.gcoresoft.struts.action.OrderAction" singleton="false">
                   
          <property name="ordersDAO">
                        
          <ref local="ordersDAOProxy" />
                   
          </property>
              
          </bean>
          這個是傳統的事務代理方式,下面的是目前開發中一種常用的事務代理方式(感謝Amigo姐姐)
           <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
                
          <property name="sessionFactory">
                 
          <ref local="sessionFactory" />
                
          </property>
               
          </bean>

              
          <bean id="transactionInterceptor" class="org.springframework.transaction.interceptor.TransactionInterceptor">
                  
          <!--  事務攔截器bean需要依賴注入一個事務管理器 -->
                  
          <property name="transactionManager" ref="transactionManager" />
                  
          <property name="transactionAttributes">
                      
          <!--  下面定義事務傳播屬性-->
                      
          <props>
                          
          <prop key="insert*">PROPAGATION_REQUIRED</prop>
                             
          <prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
                             
          <prop key="is*">PROPAGATION_REQUIRED,readOnly</prop>
                      
          </props>
                  
          </property>
              
          </bean>

              
          <!-- 定義BeanNameAutoProxyCreator-->
              
          <bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
                  
          <!--  指定對滿足哪些bean name的bean自動生成業務代理 -->
                  
          <property name="beanNames">
                      
          <!--  下面是所有需要自動創建事務代理的bean-->
                      
          <list>
                          
          <value>ordersDAO</value>
                      
          </list>
                      
          <!--  此處可增加其他需要自動創建事務代理的bean-->
                  
          </property>
                  
          <!--  下面定義BeanNameAutoProxyCreator所需的事務攔截器-->
                  
          <property name="interceptorNames">
                      
          <list>
                          
          <!-- 此處可增加其他新的Interceptor -->
                          
          <value>transactionInterceptor</value>
                      
          </list>
                  
          </property>
              
          </bean>

              
          <bean name="/addOrder" class="com.gcoresoft.struts.action.OrderAction" singleton="false">
               
          <property name="ordersDAO">
                
          <ref bean="ordersDAO" />
               
          </property>
              
          </bean>
          不過,如果想使用代理,OrderDAO就必須是一個接口的實現,public class OrdersDAO extends HibernateDaoSupport implements IOrdersDAO ,然后在相應的OrderAction里面
              private IOrdersDAO ordersDAO;
              
              
          /**
               * 
          @param ordersDAO
               
          */

              
          public void setOrdersDAO(IOrdersDAO ordersDAO)
              
          {
                  
          this.ordersDAO=ordersDAO;
              }
          這樣才能使用事務代理,而不能直接將OrdersDAO作為傳遞參數的類型,因為那樣程序會報錯
          Error creating bean with name '/addOrder' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Error setting property values; nested exception is PropertyAccessExceptionsException (1 errors)。

          P.S:MyEclipse里面可以使用Hibernate Reverse Engineering來生成DAO,然后用Eclipse的Refactor來Extract Interface,這樣就方便多了。呵呵!

          ---------------------------------------------------------
          專注移動開發

          Android, Windows Mobile, iPhone, J2ME, BlackBerry, Symbian
          posted on 2007-05-10 22:27 TiGERTiAN 閱讀(663) 評論(0)  編輯  收藏 所屬分類: Java
          主站蜘蛛池模板: 福州市| 周宁县| 滁州市| 横峰县| 宜川县| 原平市| 乌鲁木齐县| 扎赉特旗| 环江| 九龙坡区| 雷州市| 凉城县| 梓潼县| 古田县| 固原市| 江都市| 甘洛县| 枣强县| 景德镇市| 易门县| 和平区| 金湖县| 安龙县| 塘沽区| 建瓯市| 攀枝花市| 武功县| 察雅县| 夹江县| 汶上县| 钦州市| 垫江县| 光山县| 邵东县| 宜君县| 瓮安县| 句容市| 乌鲁木齐市| 贡山| 潮州市| 正蓝旗|