加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – GWT服务异常记录的最佳实践

发布时间:2020-12-14 05:14:02 所属栏目:Java 来源:网络整理
导读:我决定将日志系统添加到我的gwt服务层.首先我想记录从该层抛出的所有异常.我有一个类似于 Spring的ServletDispatcher的对象,它调用其他服务.我以为我可以在那里添加日志记录,但是我意识到GWT服务会在ServletResponse中包含检查的异常,并将其取消选中为Unexpe
我决定将日志系统添加到我的gwt服务层.首先我想记录从该层抛出的所有异常.我有一个类似于 Spring的ServletDispatcher的对象,它调用其他服务.我以为我可以在那里添加日志记录,但是我意识到GWT服务会在ServletResponse中包含检查的异常,并将其取消选中为UnexpectedException.

有人可以分享他的经验吗?记录所有GWT服务的检查和未检查的异常的最佳方式是什么?

我发现解决方案建议扩展RemoteServiceServlet并覆盖默认异常流.但是我觉得这个解决方案太耗时了.居民知道任何更容易的变种吗?

解决方法

在服务器端,我们有一个RemoteServiceServlet的子类,用于所有服务实现.你提到这似乎是耗时的,但是这是代码的样子.你做一次,你完成了.
@Override
protected void doUnexpectedFailure(Throwable t) {
    t.printStackTrace(System.err);
    super.doUnexpectedFailure(t);
}

注意:我们实际上并没有将它发送到System.err,你可能也不应该这样做,但是你会得到这个想法.

在客户端,我们使用AsyncCallback的子类AsyncSuccessCallback.它大部分的RPC调用统一处理onFailure案例.我们的大部分回调代码都可以处理onSuccess事件,知道onFailure被处理.它也提供了一个单一的地方来更改此实现.

public abstract class AsyncSuccessCallback<T> implements AsyncCallback<T> {

    public void onFailure(Throwable t) {
        handleException(t);
    }

    protected void handleException(Throwable t) {
         Window.alert(t.getMessage());
    }

}

注意:我们实际上并没有使用Window.alert,而是再次得到想法.在这种情况下我们所做的是显示一个GWT DialogBox,该对话框显示一个窗体,该表单对接受错误报告的不同服务器执行POST.该表单允许用户在发生错误时键入他们正在做什么的描述.

在客户端,如果要获取堆栈跟踪,则需要编写一些额外的代码:

// for lineEnding,use "<br>" for HTML,"n" for text
public static final String getStackTrace(Throwable t,String lineEnding) {
    Object[] stackTrace = t.getStackTrace();
    if (stackTrace != null) {
        StringBuilder output = new StringBuilder();
        for (Object line : stackTrace) {
            output.append(line);
            output.append(lineEnding);
        }
        return output.toString();
    } else {
        return "[stack unavailable]";
    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读