运行时异常后 GWT RPC 调用不回滚事务
Posted
技术标签:
【中文标题】运行时异常后 GWT RPC 调用不回滚事务【英文标题】:GWT RPC call doesn't rollback transaction after runtime exception 【发布时间】:2013-11-27 09:34:57 【问题描述】:我对 GWT 的了解还没有我想要的那么深。所以想问问熟悉GWT的人。
我在 GWT 2.3 中遇到回滚事务问题。比如说,GWT 进行服务的 RPC 调用,会抛出NullPointerException
。就我现在所见,doUnexpectedFailure
在类 AbstractRemoteServiceServlet
中的实现不会重新引发任何异常 - 它只是重置响应和日志记录异常。此外,该方法的文档说我应该重写此方法以处理 GWT 中的意外异常。有人处理过这个问题吗?有没有人覆盖doUnexpectedFailure
?我该如何纠正呢?
提前感谢您的任何评论,对不起我的英语!
【问题讨论】:
transaction 你的意思是JPA交易吗? 【参考方案1】:看一下手册:
http://www.gwtproject.org/doc/latest/tutorial/RPC.html
说,您的客户端中有一个服务:
private MyServiceAsync service= GWT.create(MyService.class);
现在,服务已创建
您的客户端中的调用如下所示:
// Set up the callback object.
AsyncCallback<MyModel> myCallback = new AsyncCallback<MyModel>()
public void onFailure(Throwable caught)
try
throw caught;
catch (NullPointerException e)
// TODO: Handle your NPE
public void onSuccess(MyModelresult)
// everything is ok
;
// Make the call to the stock price service.
service.doSomethingOnTheServer(callback);
在 onFailure 方法中,您可以在客户端处理您的 NPE。调用doUnexpectedFailure
-方法,因为您的 NPE 不是已检查异常。
【讨论】:
命名异常 - 你的意思是检查异常吗? @ElHoss 为什么在onFailure
方法中有一个try/catch?你可以做if (caught instanceof NullPointerException) //Handle NPE
任何未在 try/catch 块中捕获的异常都将被 UncaughtExceptionHandler - 定义的 f 捕获。 e.在你的入口点。例如,如果您的服务调用引发 NotAuthorizedException,则此异常将由 gloabl 异常处理程序处理。当然,您也可以使用 if 语句并在 else 情况下抛出异常。这将是相同的。以上是关于运行时异常后 GWT RPC 调用不回滚事务的主要内容,如果未能解决你的问题,请参考以下文章
SpringBoot设置 @Transactional ,并在异常处理中调用setRollbackOnly()事务不回滚