隨筆-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 閱讀(667) 評論(0)  編輯  收藏 所屬分類: Java
          主站蜘蛛池模板: 定州市| 安福县| 封开县| 新宾| 时尚| 钟山县| 贡觉县| 通州区| 颍上县| 尼玛县| 祥云县| 玉田县| 阳原县| 疏附县| 正宁县| 余庆县| 文昌市| 都昌县| 濮阳市| 南康市| 东光县| 略阳县| 章丘市| 桦南县| 云龙县| 庆云县| 克什克腾旗| 芜湖市| 澎湖县| 汶上县| 景宁| 连江县| 江门市| 印江| 内黄县| 涪陵区| 洱源县| 额敏县| 稷山县| 潞城市| 山东|