`
sgp2004
  • 浏览: 20248 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

action可否直接使用spring的声明式事务?

    博客分类:
  • ssh
阅读更多
由于图省事,而且系统比较小,感觉service层比较繁琐,就直接在action里调用的dao
现在想使用事务 action代码大致如下
public ActionForward addOrg(
orginfoDAO.insert(orginfo);
userDAO.insert(userInfo);
}


action里有这样的两个操作,分别用两个dao去处理,我想加上事务处理,使用的spring配置好像还是1.X的(见笑)
使用HibernateTransactionManager 和TransactionProxyFactoryBean类去管理事务,在target里设置target为action的bean name
    
  <bean id="transactionManager"   
       class="org.springframework.orm.hibernate3.HibernateTransactionManager">
      <bean id="orgManagerProxy" lazy-init="true"   
         class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
            <property name="transactionManager"><ref bean="transactionManager"/>
            </property>
            <property name="transactionAttributes">
                <props>
                    <prop key="insert*">PROPAGATION_REQUIRED,-Exception</prop>
                    <prop  
                    key="add*">PROPAGATION_REQUIRED,Exception</prop>                      
                    <prop key="*">PROPAGATION_REQUIRED,readOnly</prop>
                </props>
            </property>
             <property name="target">    
	             <ref="/userOrgManager">
            </property> 
       </bean>  

action bean定义如下
 <bean  name="/userOrgManager"
	           class="web.manager.ManagerAction">
	           <property name="baseDAO">
	             <ref local="baseDAO"/>
	           </property>
	           <property name="userDAO">
	             <ref local="userDAO"/>
	           </property> 
	           <property name="orginfoDAO">
	             <ref local="orginfoDAO"/>
	           </property>         
	    </bean>  


但是这样配置是不生效的,直接使用TransactionProxyFactoryBean去管理dao的话,只能是单个dao进入事务管理,比较郁闷,如果有service层的话,可以用action去调用包装好的带事务的service,但现在这样配置后使用action依然是没有包装过的原始action,不知道怎么配比较好,还是非得加service层呢?希望大家指教。我用编程式事务去管理是可以的,但是比较麻烦,想用直接注入实现一下。
分享到:
评论
8 楼 sgp2004 2008-12-24  
daquan198163 写道
<bean name="/userOrgManager" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">  
     <property name="transactionManager"><ref bean="transactionManager"/></property>  
           <property name="transactionAttributes">  
               <props>  
                   <prop key="insert*">PROPAGATION_REQUIRED,-Exception</prop>  
                  <prop    
                   key="add*">PROPAGATION_REQUIRED,Exception</prop>                        
                   <prop key="*">PROPAGATION_REQUIRED,readOnly</prop>  
               </props>  
           </property>  
           <property name="target">      
              <bean  class="web.manager.ManagerAction">  
                  <property name="baseDAO">  
                     <ref local="baseDAO"/>  
                  </property>  
                  <property name="userDAO">  
                     <ref local="userDAO"/>  
                  </property>   
                  <property name="orginfoDAO">  
                     <ref local="orginfoDAO"/>  
                  </property>           
              </bean>  
           </property>   
      </bean>


谢谢大哥的详细解答 我用这个配置可以运行,但是还是没起作用
transactionAttributes里还必须把<prop key="*">给去了才行,不知道为什么action里调用的orginfoDAO.insert(orginfo);  不包括在 <prop key="insert*">内,也不算在 <prop    key="add*">里,action用到的方法是addOrg(),加上<prop key="*">它就说是readonly的,不能进行insert操作。
我的baseDAO是userDAO和orginfoDAO的父类,是使用hibernateTemplate进行操作的,hibernate.connection.autocommit设置为true,不然不用事务没法保存数据,我查了查有人说这个配置下声明式事务也是有效的,spring会自动更改代理dean的autocommit属性
7 楼 sgp2004 2008-12-24  
herowzz 写道

如果你没有用opensessioninview的话在调用dao之后hibernateTemplete会自动关闭session


这个不是的吧?我直接在action里使用编程式事务是可以的
6 楼 sgp2004 2008-12-24  
daquan198163 写道

框架调用的是/userOrgManager这个bean,你的事务配置根本不会起作用

嗯 我就是不知道怎么才能起作用 呵呵
必须得用service层么?
5 楼 daquan198163 2008-12-23  
<bean name="/userOrgManager" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">  
     <property name="transactionManager"><ref bean="transactionManager"/></property>  
           <property name="transactionAttributes">  
               <props>  
                   <prop key="insert*">PROPAGATION_REQUIRED,-Exception</prop>  
                  <prop    
                   key="add*">PROPAGATION_REQUIRED,Exception</prop>                        
                   <prop key="*">PROPAGATION_REQUIRED,readOnly</prop>  
               </props>  
           </property>  
           <property name="target">      
              <bean  class="web.manager.ManagerAction">  
                  <property name="baseDAO">  
                     <ref local="baseDAO"/>  
                  </property>  
                  <property name="userDAO">  
                     <ref local="userDAO"/>  
                  </property>   
                  <property name="orginfoDAO">  
                     <ref local="orginfoDAO"/>  
                  </property>           
              </bean>  
           </property>   
      </bean>
4 楼 daquan198163 2008-12-23  
框架调用的是/userOrgManager这个bean,你的事务配置根本不会起作用
3 楼 herowzz 2008-12-23  
如果你没有用opensessioninview的话在调用dao之后hibernateTemplete会自动关闭session
2 楼 sgp2004 2008-12-23  
抛出异常的爱 写道

可以.....还可以opensessioninview

那请问我是哪里配置出问题了?谢谢指点!
1 楼 抛出异常的爱 2008-12-23  
可以.....
还可以opensessioninview

相关推荐

    spring声明式事务配置方法.docx

    Spring声明式事务管理是Spring框架中的一个重要特性,它允许开发者在不修改代码的情况下,通过配置来控制事务的边界。这种方式极大地简化了事务管理,使得事务处理与业务逻辑解耦,提高了代码的可维护性和可测试性。...

    Spring声明式事务配置模板2.x

    综上所述,Spring 2.x的声明式事务配置模板主要由`applicationContext.xml`中的事务管理器配置和注解驱动的事务管理两部分组成,结合`@Transactional`注解在业务逻辑中的使用,可以实现自动化、高效且易于维护的事务...

    Spring in Action 中文版 pdf

    书中会讲解如何集成这些技术,以及使用Spring的声明式事务管理。 6. **Web开发**:Spring MVC是Spring框架的一部分,用于构建Web应用程序。书中将详细讲述如何设置MVC项目、控制器、视图解析器和模型-视图-控制器...

    struts2.3+spring3.2+mybatis3.1整合注释行事务处理(含jar包)

    在这个项目中,我们看到的是一个基于Struts2.3、Spring3.2和MyBatis3.1的集成应用,其中使用了注释式的事务管理。 首先,让我们来详细了解一下这三个框架: 1. **Struts2**:这是一个基于MVC设计模式的Java Web...

    Spring in action中文版(第4版)

    从内容中可以提炼出关于Spring框架的多个知识点,包括但不限于Spring的声明式事务管理、依赖注入、Spring MVC、Spring Boot等核心概念。 标题中的“Spring in action”指的是使用Spring进行开发的实践经验,而...

    Spring in Action 第四版英文原版+源码

    6. **Spring AOP**:介绍面向切面编程的概念,如何定义和应用切面,以及如何使用Spring的声明式事务管理。 7. **Spring Boot**:讨论Spring Boot的快速启动特性,如何简化Spring应用的配置和部署。 8. **Spring ...

    Spring+in+action+中文版(第4版)

    - **1.2.3 事务管理**:Spring 提供了强大的声明式事务管理支持。 - **1.2.4 数据访问抽象**:Spring 对数据访问进行了抽象,提供了统一的数据访问接口。 - **1.2.5 Web 支持**:Spring 包含了Web开发所需的大部分...

    三大主流框架集成加上spring申明式事务的DEMO

    申明式事务管理是Spring框架的一个强大特性,它允许开发者在不直接编写事务管理代码的情况下,通过配置或注解来控制事务的边界。在转账业务中,事务的正确管理至关重要,因为涉及资金的转移必须确保原子性、一致性、...

    Spring in action 2nd

    - **实现方式**:Spring提供了声明式事务管理和编程式事务管理两种方式,其中声明式事务管理通过注解或XML配置来简化事务处理逻辑。 4. **Web层开发**: - **Spring MVC框架**:Spring MVC是Spring框架中的一个...

    spring in action的jar包

    《Spring in Action》是关于Spring框架的一本经典书籍,它深入浅出地介绍了Spring的核心概念和技术。这个"spring in action的jar包"很可能是书中提到的一些必要的库文件,用于配合书中的实例代码运行。这些jar包是...

    spring_in_action-sixth-edition.pdf

    Spring 实战包括使用 Spring Boot 构建 Web 应用程序、使用 Spring Data 构建数据访问层、使用 Spring Security 构建安全应用程序等。 10. Spring 生命周期 Spring 生命周期是指 Spring 应用程序从启动到关闭的...

    Spring in Action 中文版 第五部分(Spring in Action CN.005)

    Spring in Action CN.001&lt;br&gt;Spring in Action CN.002&lt;br&gt;Spring in Action CN.003&lt;br&gt;Spring in Action CN.004&lt;br&gt;Spring in Action CN.005&lt;br&gt;Spring in Action CN.006&lt;br&gt;Spring in Action CN.007&lt;br&gt;Spring in ...

    spring in action 中文版6-11.zip

    它简化了事务管理,提供了声明式和编程式事务处理方式。 4. **Spring MVC**:Spring的Web MVC框架提供了一种模块化、可扩展的方式来构建Web应用程序。它包括DispatcherServlet、Model-View-Controller模式、视图...

    Spring In action 4

    Spring是一个广泛使用的Java企业级应用开发框架,它简化了应用程序的构建、管理和测试,同时也支持多种编程模型,如面向切面编程(AOP)和声明式事务管理。 1. **Spring框架基础** - **依赖注入(Dependency ...

    Spring In Action中文 第六部分

    ·声明式事务与事务管理; ·与其他Web框架集成:Struts、WebWork、Tapestry、Velocity; ·访问J2EE服务,如JMS和EJB; ·使用AOP解决交叉问题; ·企业组应用系统最佳实践。 “……一种解释...

    Spring In Action中文 第七部分

    ·声明式事务与事务管理; ·与其他Web框架集成:Struts、WebWork、Tapestry、Velocity; ·访问J2EE服务,如JMS和EJB; ·使用AOP解决交叉问题; ·企业组应用系统最佳实践。 “……一种解释...

    Spring in Action 2nd Edition

    - **Spring事务管理**:Spring框架提供了一套声明式事务管理方案,可以通过注解(如`@Transactional`)或XML配置来实现。 4. **远程服务调用** - **概念**:远程服务调用是指在一个分布式系统中,不同节点之间的...

    Spring in Action 第二版

    9. **事务管理**:Spring提供了声明式和编程式事务管理,使开发者能够轻松地处理复杂的事务需求。书中将展示如何在Spring应用中配置和使用事务管理。 10. **消息传递**:Spring框架也支持消息传递,如JMS(Java ...

Global site tag (gtag.js) - Google Analytics