运行时异常后 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()事务不回滚

面试突击86:SpringBoot 事务不回滚?怎么解决?

GWT:分派传入 RPC 调用时出现异常

调度传入 RPC 调用时出现异常

来自 GWT 的 RPC 调用中的异常

Seata 多路服务调用时事务不回滚解决办法