spring 注解事务代理 与 struts2 chain 的冲突

先看简单的代码

一个 action类

package com.snail.quanzi.action;


@Scope("prototype")
@Controller("teiZiManager_tran")
public class TieZiManager_tran extends ActionSupport implements Preparable
 {
  private final static Logger logger = Logger
  .getLogger(TieZiManager_tran.class);
  private Integer zhuTiId;
  private Integer quanZiId;
  private Zhuti zhuti=new Zhuti();

  @Transactional
  (
    rollbackFor={Exception.class},
    propagation=Propagation.REQUIRED)
    public String publishZhuTi()
   {
        return SUCCESS;
   }

 

 public String findSomething()

{

   return SUCCESS;

}

 

 

 

 

 

 


@Resource(name = "baseDAO")
protected IBaseDAO baseDAO;
private HttpServletRequest request=null;
private HttpServletResponse response=null;
private HttpSession session=null ;
private Huiyuan huiyuan=null;
public void prepare() throws Exception
{
   this.request = ServletActionContext.getRequest();
   this.response=ServletActionContext.getResponse();
   this.session=this.request.getSession(false);
   this.huiyuan= (Huiyuan) session.getAttribute("User");
 
}
public void setBaseDAO(IBaseDAO baseDAO)
 {
  this.baseDAO = baseDAO;
 }
public Integer getZhuTiId()
 {
  return zhuTiId;
 }
public void setZhuTiId(Integer zhuTiId)
 {
  this.zhuTiId = zhuTiId;
 }
public Zhuti getZhuti()
 {
  return zhuti;
 }
public void setZhuti(Zhuti zhuti)
 {
  this.zhuti = zhuti;
 }
public Integer getQuanZiId()
 {
  return quanZiId;
 }
public void setQuanZiId(Integer quanZiId)
 {
  this.quanZiId = quanZiId;
 }
 }

 

上面代码有两个action :publishZhuti 和 findSomething .其中 publishZhuTi是有事务性的(通过spring注解事物,另外不要问我为什么在控制层加事务)。

此时当在通过findSomethong通过chain方式调用另一个action 会抛出ClassCastExcetion:package com.snail.quanzi.action.tieZiManager.

当时就怀疑是事物导致spring 采用cglib生成代理导致的问题。因为控制层 也就是action 无法使用动态代理

由于添加了事务导致spring 使用cglib为其生成代理。这样就出现了上面的错误。

可是内部机制是什么呢?

我这里的struts2 中使用的action都是交给spring管理的。既然spring生成了代理,那么交给struts的也应该是那个代理,也就是和原类没有关系了,那么为什么还会抛出这个异常呢?

 

你可能感兴趣的:(spring 注解事务代理 与 struts2 chain 的冲突)