gpt4 book ai didi

java - 如何在 ActionIncation.invoke() 中获取异常

转载 作者:太空宇宙 更新时间:2023-11-04 14:49:12 26 4
gpt4 key购买 nike

首先,最终目的是我尝试将 DAO 连接注入(inject) SMD 上下文(Ajax),因此我将确保事务正在提交(或回滚),我的问题是我没有能够知道invoke()方法是否抛出异常,

我有以下拦截器:

public class SomeInterceptor implements Interceptor {
private static final long serialVersionUID = 1L;
@Override
public String intercept(ActionInvocation invocation) {
String result = "";
GenericDAO dao = new GenericDAO();
try {
dao.begin();
invocation.getInvocationContext().put("contextDao", dao);
result = invocation.invoke();
//attempt to solve
Object exception = invocation.getInvocationContext().getValueStack().findValue("exception");
if (exception != null && exception instanceof Exception){
dao.rollback();
} else {
dao.commit();
}
} catch (Exception ex) {
dao.rollback();
System.out.println("ROLLBACK!");
ex.printStackTrace();
} finally {
dao.close();
}
return result;
}
}

“尝试解决”行基于 this问题。在调用内部,我只是抛出一个 NullPointerException,现在的结果是异常在拦截器的 catch 之前被捕获,但这不是我设置的 catch,

@SMDMethod
public HashMap<String,String> someMethod() {
IGenericDAO dao = (IGenericDAO) ActionContext.getContext().get("contextDao");
//dao's deletes, updates that i want to rollback
HashMap<String,String> x = null;
x.put("x","x"); //<---- NPE!
return null;
}

我希望 ActionIn Vocation.invoke() 抛出异常,这样我就知道我需要回滚数据库 session 。欢迎任何成功实现此目的的方法,

编辑 1:我找到了this问题与我几乎相同,但我不明白如何使用回滚(在我看来总是在进行回滚)

问候

最佳答案

我没有找到任何方法来实现我想要的目标,而是通过这样做解决了这个场景:

public class SomeInterceptor implements Interceptor {
private static final long serialVersionUID = 1L;
@Override
public String intercept(ActionInvocation invocation) {
String result = "";
GenericDAO dao = new GenericDAO();
try {
dao.begin();
invocation.getInvocationContext().put("contextDao", dao);
result = invocation.invoke();
dao.rollback();
} catch (Exception ex) {
dao.rollback();
System.out.println("ROLLBACK!");
ex.printStackTrace();
} finally {
dao.close();
}
return result;
}
}

是的...我在拦截器中删除了“提交”指令,现在我被迫在使用上述 DAO 的任何调用结束时执行“提交”,

@SMDMethod
public HashMap<String,String> someMethod() {
IGenericDAO dao = (IGenericDAO) ActionContext.getContext().get("contextDao");
//dao's deletes, updates that i want to rollback
HashMap<String,String> x = null;
x.put("x","x"); //<---- NPE!
dao.commit(); //<---- COMMIT!
return null;
}

我不喜欢这个解决方案,但这是我所能做的。我在发布问题一天后就提出了这个问题,直到现在我才等到答案,

希望对大家有帮助

关于java - 如何在 ActionIncation.invoke() 中获取异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24005108/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com