iteye_10987 2009-08-14 13:23
浏览 385
已采纳

struts的Action中使用spring的@Transactional注解事务出错

使用spring的注解式事务配置, 在action的方法中直接使用事务遇到的问题.

例如: 在testAction 中有两个方法


public class testAction extends BaseAction{
@Transactional
public String test1() throws Exception {
dosomething();
}

public String test2() throws Exception {
dosomething();
}
}


struts.xml配置

<action name="test_*" class="testAction" method="{1}">
<result>test.ftl</result>
</action>

只要在上例testAction两个方法任意一个加上@Transactional注解, 用test_test1.do访问时就会报错java.lang.NoSuchMethodException: $Proxy9.test1().
访问未配置@Transactional的方法也一样, 例如test_test2.do也会一样报错java.lang.NoSuchMethodException: $Proxy9.test2(). 
大概知道是因为配置事务后产生代理, 但是为什么产生的代理实例会找不到方法??
问题补充
呵呵, 多谢楼上的回复, 确实是这样. 配置proxy-target-class="true"就行了, 非常感谢...
  • 写回答

1条回答 默认 最新

  • iteye_2966 2009-08-14 13:23
    关注

    应该是spring默认采用了JDK动态代理来实现事务的吧, 这时候代理的是接口, 而你的两个方法都不是接口方法
    可以改成代理到类, 依稀记得有一个叫targetClass之类的属性配置

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿
  • ¥15 回答4f系统的像差计算
  • ¥15 java如何提取出pdf里的文字?
  • ¥100 求三轴之间相互配合画圆以及直线的算法
  • ¥100 c语言,请帮蒟蒻写一个题的范例作参考
  • ¥15 名为“Product”的列已属于此 DataTable
  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题