Java 如何在ActionInvocation.invoke()中获取异常
首先,最终目的是,我试图将DAO连接注入SMD上下文(Ajax),因此我将确保提交(或回滚)事务,我的问题是我无法知道invoke()方法是否引发异常 我有以下拦截器:Java 如何在ActionInvocation.invoke()中获取异常,java,struts2,interceptor,hibernate3,smd,Java,Struts2,Interceptor,Hibernate3,Smd,首先,最终目的是,我试图将DAO连接注入SMD上下文(Ajax),因此我将确保提交(或回滚)事务,我的问题是我无法知道invoke()方法是否引发异常 我有以下拦截器: public class SomeInterceptor implements Interceptor { private static final long serialVersionUID = 1L; @Override public String intercept(ActionInvocation
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;
}
}
“试图解决”这句话是以问题为基础的。在调用中,我只是抛出了一个NullPointerException,现在的结果是异常在拦截器的捕获之前被捕获,但是不是我设置的捕获
@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;
}
@SMDMethod
公共HashMap someMethod(){
IGenericDAO=(IGenericDAO)ActionContext.getContext().get(“contextDao”);
//dao的删除,我想回滚的更新
HashMap x=null;
x、 放(“x”,“x”);//我没有找到任何方法来实现我想要的目标,相反,我通过这样做解决了这个问题:
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;
}
@SMDMethod
公共HashMap someMethod(){
IGenericDAO=(IGenericDAO)ActionContext.getContext().get(“contextDao”);
//dao的删除,我想回滚的更新
HashMap x=null;
x、 put(“x”,“x”);//我想你应该在结果中找到错误
,而不是异常
。也许我错了。但至少试一次。我试过了,没用:/