关于client log(泰克界面顶部的提示信息)和server端返回的异常信息处理的说明:
1-client log的实现方法:
在调用server端方法后,在callback对象中加入client log:
JobConductorService.Util.getInstance().requestGenerate(taskId, new AsyncCallback<String>() {
@Override
public void onFailure(Throwable e) {
LogBean logBean = new LogBean(e.getMessage(), Level.ERROR);
GlobalHandlerManager.instance().fireEvent(new LogMessageEvent(logBean));
LogManager.error(I18nUtils.getMessages().executionTask_message_generate_error() + e.getMessage());
}
@Override
public void onSuccess(String requestId) {
LogBean logBean = new LogBean(I18nUtils.getMessages().executionTask_message_generate_ok(), Level.OK);
GlobalHandlerManager.instance().fireEvent(new LogMessageEvent(logBean));
LogManager.ok(I18nUtils.getMessages().executionTask_message_generate_ok());
}
});
2-server端的异常处理:
server端会在返回前调用processException(e)做异常处理。
@Override
public void requestGenerate(int taskId) throws ClientBusinessException, ClientSystemException {
try {
ConductorCommand generateCommand = new ConductorCommandFactory().createGenerateCommand(taskId, getSessionUser());
generateCommand.execute();
} catch (Throwable e) {
processException(e);
}
}
另外还需要说明的多线程的异常处理。这篇讲解的比较好: http://blog.csdn.net/bluishglc/article/details/8216824
总结起来就是以下三点:
1-java多线程程序,各个线程需要在进程内将自己的异常处理掉。
2-如果想在线程之外处理异常,可以通过Thread类的setUncaughtExceptionHandler()。
3-如果父进程想要得到子进程的异常,可以收集子进程的exception,做成一个list返回。