动态代理中事务处理无效


public class TargetHandle

{

    List<Target> list;

    public TargetHandle()

    {

        list = new ArrayList<Target>();

    }


    public void addTarget(Activity object, String methodName, Object ...params) 

    {

        list.add(new Target(object, methodName, params));

    }

    

    @Before(Tx.class)

    public boolean notifyX()

    {

        try 

        {

            for(Target target : list)

            {

                target.invoke();

            }

            return true;

        }

        catch(Exception e)

        {

            e.printStackTrace();

            return false;

        }

    }

}

public class Target

{

  ...

    public void invoke() throws Exception

    {

        Method method = object.getClass().getMethod(methodName, paramTypes);

        method.invoke(object, params);

    }

}

public abstract class EventNotifier

{

    TargetHandle handle = Enhancer.enhance(TargetHandle.class);

  ...

    public boolean notifyX()

    {

        return this.handle.notifyX();

    }

}



在这个notify 的handle中添加多个方法,每个方法有各种sql操作,  但是中途报错后事务没有回滚,,,   波哥,   请问这个是哪里操作出了问题吗?

评论区

lyh061619

2018-03-27 16:21

看你现在自己去扑捉了异常,无法触发到@Before(Tx.class)事物回滚,建议你先把异常类给屏蔽掉先,或者你手动往上抛,再后建议你看下,tx.class源码下谢谢。

JFinal9527

2018-03-27 17:31

回滚是根据是否有异常判断的,你都捕获异常了,怎么判断回滚

clatt

2018-03-27 17:50

我试了抛出异常, 是跑到tx.class里面来了, rollback也执行了,但是数据库还是插入数据了,

clatt

2018-03-27 17:51

@lyh061619 at com.jfinal.aop.Invocation.invoke(Invocation.java:82)
at com.jfinal.plugin.activerecord.tx.Tx.intercept(Tx.java:77)
at com.jfinal.aop.Invocation.invoke(Invocation.java:67)
at com.jfinal.aop.Callback.intercept(Callback.java:96)

clatt

2018-03-27 17:54

@lyh061619
@Before(Tx.class)
public boolean notifyX() throws Exception
{
// try
// {
for(Target target : list)
{
target.invoke();
}
return true;
// }
// catch(Exception e)
// {
// e.printStackTrace();
// return false;
// }
}

clatt

2018-03-27 17:58

@JFinal9527 抛出后也出现数据入库的问题了 : (

热门反馈

扫码入社