spring声明式事务如何配置?

romanitc 2011-11-14 02:29:27
我是用s2sh,事务是配置在service层,但我在service层的方法中调用两个dao层的插入方法A方法和B方法,在这两个方法之中故意写一段异常代码测试事务是否回滚,测试时程序是报错了,但A方法不会回滚,不知道是什么原因?请问一下大家是怎样配置声明式事务??

我的配置

<bean id="txManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sf" />
</bean>

<aop:config>
<aop:pointcut id="bussinessService"
expression="execution(public * com.tfl.shop.service.*.*(..))" />
<aop:advisor pointcut-ref="bussinessService"
advice-ref="txAdvice" />
</aop:config>

<tx:advice id="txAdvice" transaction-manager="txManager">
<tx:attributes>

<tx:method name="*" read-only="true" />

<tx:method name="add*" propagation="REQUIRED"/>

<tx:method name="update*" propagation="REQUIRED"/>

<tx:method name="delete*" propagation="REQUIRED"/>

</tx:attributes>
</tx:advice>


我的包目录如下:
com.tfl.shop.action
com.tfl.shop.common
com.tfl.shop.dao
com.tfl.shop.dao.impl
com.tfl.shop.manage
com.tfl.shop.manage.impl
com.tfl.shop.model
com.tfl.shop.service
com.tfl.shop.vo





...全文
695 45 打赏 收藏 转发到动态 举报
写回复
用AI写文章
45 条回复
切换为时间正序
请发表友善的回复…
发表回复
romanitc 2011-11-22
  • 打赏
  • 举报
回复
谢谢你的资料,问题还是没解决,我再研究一下。先结贴了![Quote=引用 41 楼 canace_lemon 的回复:]

引用 40 楼 romantic_pk 的回复:
没收到哦,兄弟

引用 39 楼 canace_lemon 的回复:

引用 37 楼 romantic_pk 的回复:
谢谢,我的邮箱是:josephxiaochong@163.com QQ:380824406

引用 36 楼 canace_lemon 的回复:

楼主留下联系邮箱把!! 我发个Spring事务配置文档给你……
[/Quote]
茄子煸土豆 2011-11-21
  • 打赏
  • 举报
回复
你配置的事务 SERVICE 方法名称必须要跟你设置的能匹配
我是用s2sh,事务是配置在service层,但我在service层的方法中调用两个dao层的插入方法A方法和B方法,在这两个方法之中故意写一段异常代码测试事务是否回滚,测试时程序是报错了,但A方法不会回滚,不知道是什么原因?请问一下大家是怎样配置声明式事务??

我的配置

XML code

<bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory" ref="sf" /> </bean> <aop:config> <aop:pointcut id="bussinessService" expression="execution(public * com.tfl.shop.service.*.*(..))" /> <aop:advisor pointcut-ref="bussinessService" advice-ref="txAdvice" /> </aop:config> <tx:advice id="txAdvice" transaction-manager="txManager"> <tx:attributes> <tx:method name="*" read-only="true" /> <tx:method name="add*" propagation="REQUIRED"/> <tx:method name="update*" propagation="REQUIRED"/> <tx:method name="delete*" propagation="REQUIRED"/> </tx:attributes> </tx:advice>



你设的SERVICE方法中的方法名必须以 add,update,delete 开头命门规则。

2。楼上几位也说了,你必须声明抛出哪种异常时,SERVICE事务会回滚。

希望对你有用
Jlins 2011-11-21
  • 打赏
  • 举报
回复
只有运行时异常才会回滚的
Canace_lemon 2011-11-21
  • 打赏
  • 举报
回复
[Quote=引用 40 楼 romantic_pk 的回复:]
没收到哦,兄弟

引用 39 楼 canace_lemon 的回复:

引用 37 楼 romantic_pk 的回复:
谢谢,我的邮箱是:josephxiaochong@163.com QQ:380824406

引用 36 楼 canace_lemon 的回复:

楼主留下联系邮箱把!! 我发个Spring事务配置文档给你, 你自己慢慢看!!


已发送,记得查收。 没……
[/Quote]
上次发的你QQ邮箱,这次发你的163的邮箱,, 你查收一下,, 里面介绍的很详细
romanitc 2011-11-21
  • 打赏
  • 举报
回复
没收到哦,兄弟[Quote=引用 39 楼 canace_lemon 的回复:]

引用 37 楼 romantic_pk 的回复:
谢谢,我的邮箱是:josephxiaochong@163.com QQ:380824406

引用 36 楼 canace_lemon 的回复:

楼主留下联系邮箱把!! 我发个Spring事务配置文档给你, 你自己慢慢看!!


已发送,记得查收。 没收到,再联系我吧
[/Quote]
Canace_lemon 2011-11-21
  • 打赏
  • 举报
回复
[Quote=引用 37 楼 romantic_pk 的回复:]
谢谢,我的邮箱是:josephxiaochong@163.com QQ:380824406

引用 36 楼 canace_lemon 的回复:

楼主留下联系邮箱把!! 我发个Spring事务配置文档给你, 你自己慢慢看!!
[/Quote]

已发送,记得查收。 没收到,再联系我吧
zhouyusunquan 2011-11-21
  • 打赏
  • 举报
回复
不知道你说的那种?
<!-- 定义一个事务拦截器 -->
<tx:advice id="txAdvice" transaction-manager="txManager">
<tx:attributes>
<tx:method name="get*" read-only="true" />
<tx:method name="*" />
</tx:attributes>
</tx:advice>

<!--定义模块的service切入 -->
<aop:config>
<aop:pointcut id="customerPoint"
expression="execution(* com.quanguowuliu.service..*.*(..))" />
<aop:advisor advice-ref="txAdvice"
pointcut-ref="customerPoint" />
</aop:config>

第二种注解
@Service
@Transactional
标示上就可以了
romanitc 2011-11-21
  • 打赏
  • 举报
回复
谢谢,我的邮箱是:josephxiaochong@163.com QQ:380824406
[Quote=引用 36 楼 canace_lemon 的回复:]

楼主留下联系邮箱把!! 我发个Spring事务配置文档给你, 你自己慢慢看!!
[/Quote]
Canace_lemon 2011-11-19
  • 打赏
  • 举报
回复
楼主留下联系邮箱把!! 我发个Spring事务配置文档给你, 你自己慢慢看!!
比丘 2011-11-18
  • 打赏
  • 举报
回复

<!-- 事务管理 -->
<bean id="tranManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
<tx:advice id="advice" transaction-manager="tranManager">
<tx:attributes>
<tx:method name="add*" propagation="REQUIRED" rollback-for="java.lang.Exception"/>
<tx:method name="delete*" propagation="REQUIRED" rollback-for="java.lang.Exception"/>
<tx:method name="update*" propagation="REQUIRED" rollback-for="java.lang.Exception"/>
<tx:method name="*" propagation="REQUIRED" read-only="true"/>
</tx:attributes>
</tx:advice>
<aop:config>
<aop:pointcut id="bizMethods" expression="execution(* com.orderfood.biz..*.*(..))"/>
<aop:advisor advice-ref="advice" pointcut-ref="bizMethods"/>
</aop:config>



这是我的事务配置


public void deleteMenu(int menuId) throws Exception{
this.menuDao.deleteMenu(menuId);
}

这是对应的事务监控方法
阿诺 2011-11-18
  • 打赏
  • 举报
回复
有点 难度 呵呵 路过 学习
比丘 2011-11-18
  • 打赏
  • 举报
回复
配置一个切面,和需要拦截的类和方法
<aop:pointcut id="bizMethods" expression="execution(* com.orderfood.biz..*.*(..))"/>
比丘 2011-11-18
  • 打赏
  • 举报
回复
[Quote=引用 32 楼 romantic_pk 的回复:]

请问这一句是怎么解释:
<aop:pointcut id="bizMethods" expression="execution(* com.orderfood.biz..*.*(..))"/>

还有这里一定要抛throws Exception??

引用 31 楼 q358417681 的回复:

Java code

<!-- 事务管理 -->
<bean id="tra……
[/Quote]

<aop:pointcut id="bizMethods" expression="execution(* com.orderfood.biz..*.*(..))"/>
这一句是说明事务管理的路径,
<tx:method name="update*" propagation="REQUIRED" rollback-for="java.lang.Exception"/>
rollback-for指明异常类型
romanitc 2011-11-18
  • 打赏
  • 举报
回复
请问这一句是怎么解释:
<aop:pointcut id="bizMethods" expression="execution(* com.orderfood.biz..*.*(..))"/>

还有这里一定要抛throws Exception??

[Quote=引用 31 楼 q358417681 的回复:]

Java code

<!-- 事务管理 -->
<bean id="tranManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"></property>
……
[/Quote]
creso 2011-11-17
  • 打赏
  • 举报
回复
<!-- 配置自动扫描路径扫描类中的元注释来实现bean管理 -->
<context:component-scan base-package="com.softfz.dao.impl" />
<context:component-scan base-package="com.softfz.service.impl" />
romanitc 2011-11-17
  • 打赏
  • 举报
回复
我没有用springMvc,只用s2sh框架。。。[Quote=引用 25 楼 scrack 的回复:]

你用没有 SpringMvc 之前遇到过这个问题 是因为
事物没有起作用 被springmvc的框架包住了
[/Quote]
scrack 2011-11-17
  • 打赏
  • 举报
回复
你用没有 SpringMvc 之前遇到过这个问题 是因为
事物没有起作用 被springmvc的框架包住了

romanitc 2011-11-17
  • 打赏
  • 举报
回复
我service层里的方法都是public的。。。哎。。。还没解决呢。。[Quote=引用 23 楼 kouyisc 的回复:]

Java code

<property name="sessionFactory" ref="sf" />除了检查一下这里以外 我看不出你的配置里面哪里有问题了。。。
你的类应该是public修饰的吧、?你配置的是public类切入。。
[/Quote]
nanjiwubingqq 2011-11-17
  • 打赏
  • 举报
回复
貌似要加一个配置,识别异常后执行回滚
romanitc 2011-11-17
  • 打赏
  • 举报
回复
请问这个是配置事务的吗?[Quote=引用 27 楼 creso 的回复:]

<!-- 配置自动扫描路径扫描类中的元注释来实现bean管理 -->
<context:component-scan base-package="com.softfz.dao.impl" />
<context:component-scan base-package="com.softfz.service.impl" />
[/Quote]
加载更多回复(23)

67,515

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧