- 浏览: 127439 次
- 性别:
- 来自: 北京
最新评论
-
ynlxc:
亲,关注你的书4个月了,真是等到花儿也谢了。。。可否发些试读章 ...
《流程的永恒之道-一个工作流与BPM项目的备战培训及实施记》之目录结构 -
heguojun:
songjingjing520 写道[flash=200,20 ...
spring中使用mule的配置经验总结 -
songjingjing520:
[flash=200,200][/flash][url][/u ...
spring中使用mule的配置经验总结 -
chengguogen:
jbpm jpdl task-> form 只能写死 不 ...
应用jBPM4解决中国特色的流程需求 -
guofengcn:
这本书出版了吗?
《Head First Process-深入浅出流程》连载
在一个framework的设计中,异常框架的设计占据着很重要的位置,因为它会直接影响到整个应用的健壮性、稳定性和易用性,因此笔者结合自己在产品开发中的经验给出了一个异常框架的设计及实现与大家共享,有考虑不周或欠妥的地方还望大家一起讨论,共同提高。
异常框架的总体结构图
11.1异常框架总体结构图
如上图所示,
java
平台框架的异常机制包括程序异常及业务异常。对于程序异常和业务异常我们设计一个
BaseException
基类,
BaseException
是一个
unchecked exception
(即继承于
RuntimeException
),
javaeye
上有一篇关于
checked exception
和
unchecked exception
的讨论长达几十页,偶在此就不多做解释了,基于此平台框架进行开发的应用可以对
BaseException
进行派生,例如
BizFocus-workflow
封装了
PersistenceException
和
ServiceException
来对应于持久层异常和业务层异常。持久层和业务层的异常在捕获之后通过
log4j
输出到了程序日志,然后继续向外抛给展现层的
Action
控制类,
Action
不需要对异常进行捕获,因为
BizFocus-workflow
提供了一个基于
webwork
的异常拦截器(
ExceptionInterceptor
)对所有的
Action
的异常进行拦截。拦截后不同的异常在异常的国际化文件中取得异常提示信息展示给最终用户。
1.2.1
异常信息的国际化封装
如图
1.1
所示,异常信息的国际化封装主要由
Messages
接口及其实现类
MessageImpl
和
Message_CN.properties
、
Message.properties
两个国际化文件组成。
Messages
接口如下:
public interface Messages {
public static final int ERROR_UNKNOWN = 0;
public static final int ERROR_SYSTEM = 1;
public static final int ERROR_WORKFLOW = 2;
public static final int NO_DECISIONVALUE_SET = 3;
………//
其它的异常代码
}
MessageImpl
实现类的代码如下:
public class MessageImpl implements Messages {
public MessageImpl() {
}
public static String getFormattedMessage(int i, Object aobj[]) {
String s;
try {
s = bundle.getString(String.valueOf(i));
if (aobj != null)
s = MessageFormat.format(s, aobj);
}
catch (MissingResourceException missingresourceexception) {
s = missingresourceexception.getMessage();
}
return s;
}
private static ResourceBundle bundle = ResourceBundle.getBundle("com.xxx.common.MessagesCN");
Message.properties
国际化文件如下:
0 = Unknown error
1 = System error
2 = Workflow error
3 = No decision vlaue was set
……
其它异常信息
Message_CN.properties
文件内容如下:
0 =
未知的错误
1 =
系统错误
2 =
工作流错误
3 =
您没有设置工作流分支节点的决策值
……
其它异常信息
1.2.2
业务层和持久层异常的国际化处理
对于业务层和持久层异常的处理可以按照如下方式进行:
try {
//
业务逻辑代码
……
} catch (XXXException ex) {
if (log.isDebugEnabled())//
如果是
debug
状态,直接输出异常的堆栈调用顺序
ex.printStackTrace();
else//
不是
debug
状态,则只输出异常信息到日志文件
log.error(BaseException.getLocalizedMessage(Messages.ERROR_WORKFLOWENGINE, null), ex);
throw new ServiceException(ex);//
最后将异常抛给外层
}
1.2.3
展现层异常的国际化处理
持久层和业务层的异常首先抛给了展现层的
Action
,在
Action
中对
Exception
不做任何处理直接抛出,例如
Action
的代码如下:
public String execute() throws Exception {//
将
Exception
直接抛出
//
控制逻辑的代码
……
}
在上一节中,
Action
将
Exception
直接抛出,因此在
webwork
拦截器中,对
Exception
进行拦截,将拦截的
Exception
进行分类,根据分类取得相关的异常提示信息,然后传给统一的异常显示页面,用户在异常页面上就会看到不同的异常信息。
ExceptionInterceptor
代码示例如下:
public class ExceptionInterceptor implements Interceptor {
private static final Log log = LogFactory.getLog(ExceptionInterceptor.class);
public static final String EXCEPTION = "exception";
public void destroy() {
//To change body of implemented methods use File | Settings | File Templates.
}
public void init() {
//To change body of implemented methods use File | Settings | File Templates.
}
public String intercept(ActionInvocation invocation) throws Exception {
String tipMessge = null;//
中文提示信息
String detailMessage = null;//
详细的错误信息
try {
return invocation.invoke();
} catch (Exception e) {
if (e instanceof PersistenceException){//
判断程序异常的类型
//
从国际化文件中取得相应的错误提示信息
tipMessge = ErrorMessage.getLocalizedMessage(Messages.ERROR_PERSISTENCELAYER);
}else if(e instanceof ServiceException){//
判断程序异常的类型
tipMessge = ErrorMessage.getLocalizedMessage(Messages.ERROR_SERVICELAYER);
}
//
详细的错误信息栈
detailMessage = invocation.getAction();
return EXCEPTION;//webwork
将导向
EXCEPTION
对应的错误信息页面,
common/exception.ftl
}
}
}
上述代码是一个比较详细的异常拦截器的代码,业务端可以基于此拦截器进行继承,然后就可以很详细地定制自己在开发过程中的异常。
common/exception.ftl
页面的代码如下:
<table align="left" class="common_input_table" style="width:100%;height:100%">
<tr>
<td align="center" class="common_td_lable">${action.getText('bizfocus.ui.errorPageTitle')}</td>
</tr>
<tr>
<td align="center" class="common_td_text" >
<div align="center">
<br><br><br><br>
<@ww.if test="errorMessage==null">
` <font color="red">${action.getText('bizfocus.ui.errormessage')}</font>
</@ww.if>
<@ww.else>
<a href=”detailMessage.action?detailMessage=<@ww.property value=’detailMessage’/>”> <font color="red"><@ww.property value="tipMessage"/></font>
</@ww.else>
</div>
</td>
</tr>
</table>
1.3
业务异常的扩展
1.3.1Exception
的继承机制
业务异常的处理,是在开发过程中经常遇到的问题,例如工作流引擎提供的根据业务数据自动决策分支节点的路由功能中,如果业务数据没有传递给工作流引擎,则应该抛出一个没有设置决策数据的业务异常
(NoDecisionValueSetException)
,因此在开发业务的过程中,开发者可以根据实际的业务情况进行异常类的定制开发,最后这些业务异常同样被开发者自己扩展的异常拦截器进行拦截,最后根据业务异常的种类将不同的业务异常提示信息展示给最终用户(例如:
“
您没有设置决策数据给工作流引擎
”
)。
发表评论
-
关于clone的问题
2007-07-24 20:58 884偶今天真是郁闷呀,在 ... -
自己基于spring和hibernate封装的framework
2007-07-24 21:03 1020这两个月一直忙于写工作流论文的事,所以也没有记什么东西,上一周 ... -
applet的运行
2007-07-24 21:12 916applet在浏览器中运行时,首先由jre负责将applet及 ... -
java变量
2007-07-24 21:18 1053类中有几种变量,分别是:局部变量(英文可以为:local\au ... -
mule中协议服务的查找
2007-07-24 21:20 868在mule中提供了tcp、vm、http、soap、jms、u ... -
基于Spring、hibernate、webwork的工作流终于推出了
2007-07-24 21:23 1130前段时间一直在忙于工作流的改版,经过将3个多月的努力,公司基于 ... -
EAI深层解析之我见
2007-07-25 23:41 1244EAI深层解析之我见 1、 EAI概念概述 早期EAI是相对狭 ... -
SCA、JBI之比较
2007-07-26 00:35 2378SCA最早是由IBM、BEA、Oracle、SAP四大家发起的 ... -
基于webwork和过滤器实现无代码侵入的原子级界面权限
2007-07-29 22:53 778在我们开发产品或项目 ... -
参加IBM SCA技术培训有感
2007-08-27 16:46 1085周六去参加了IBM的技术 ... -
实现xwork配置文件的自动加载
2008-03-25 23:09 1556本公司的业务开发平台 ... -
AIX+weblogic性能诊断记录1
2008-07-24 13:41 1966公司的产品在一个大集中式的项目中,上线试运行的过程中,性能一直 ... -
由于Spring的单态引起的线程阻塞的问题
2008-09-13 10:05 1975线程阻塞的问题 关键字:Spring, 单例,同步,线程 ... -
EJB的HOME接口的高速缓存
2007-04-29 11:25 1940EJB的HOME接口的高速缓存- - 公司的platform ... -
又发现了一个ESB的产品
2005-03-04 10:29 1007Artix是一系列高性能Web 服务集成产品,它使企业能够使用 ... -
static块的执行
2005-03-15 11:02 1026今天在javaeye上看到的一个帖子,摘引如下:"j ... -
J2EE的模块化部署
2005-03-16 15:26 1932下面的文章转帖自http://www.it315.org/ar ... -
spring中使用mule的配置经验总结
2005-09-23 17:38 5850在spring中使用mule时,有两种主要的方式,一种是将mu ... -
mule中协议服务的查找
2005-09-23 17:38 1460在mule中提供了tcp、vm、http、soap、jms、u ... -
郁闷死的axis集成问题
2005-09-27 23:00 1250在自己的webapp中集成axis时,始终出现:Process ...
相关推荐
总的来说,Java平台的统一异常框架设计旨在提供一个健壮、稳定且易于使用的异常处理机制,它通过异常的层次结构、国际化和拦截器,有效地管理和呈现应用程序可能出现的各种异常情况,提高了系统的可维护性和用户体验...
要实现全局异常统一处理,Java提供了多种机制,包括Java的异常处理机制、AOP(面向切面编程)等。其中,使用Java异常处理机制实现全局异常统一处理是最常见的方式。 在Java异常处理机制中,当一个方法抛出异常时,...
# OnlineExamSystem 基于SSM框架开发的一款在线考试系统 项目简介: 前端框架使用的主要是easyui和jquery 后端框架使用的主要是Spring、SpringMVC、...使用SpringMVC提供的全局异常处理器进行统一异常处理。
《基于Java任务发布接收平台设计与实现》 在信息技术飞速发展的今天,企业对高效的任务管理和协作需求日益增强。基于Java的任务发布接收平台应运而生,它旨在提供一个便捷、安全、可扩展的环境,使得任务的发布、...
Java图书管理系统的设计与实现是一个典型的企业级应用项目,它涵盖了软件工程中的多个重要知识点,包括系统分析、设计、编码和测试等阶段。本系统主要基于Java编程语言,结合SQL数据库技术,为用户提供了一套完整的...
统一异常处理会区分前端是否ajax请求,自动返回json数据格式,要求开发人员在处理ajax请求时统一封装成一个对象返回,以符合代码统一规范。 此工程在idea环境编写,导入请自己新建工程手工复制代码导入。
Java框架论坛系统是一种基于Java技术实现的在线讨论平台,它主要利用了Struts框架进行构建。Struts是Apache软件基金会下的一个开源项目,是MVC(Model-View-Controller)设计模式的一种实现,广泛应用于Java Web开发...
7. **异常处理**:框架提供了统一的异常处理机制,可以捕获并处理各种运行时异常,确保程序的健壮性。 8. **持续集成与部署**:配合Jenkins、GitLab CI/CD等工具,可以实现自动化构建、测试和部署,加快软件交付...
10. **异常处理**:项目会包含统一的异常处理机制,确保在出现错误时,能够提供友好的错误提示,而不是直接暴露系统错误信息。 11. **安全性**:考虑到实际应用,项目可能实现了用户认证与授权,如使用Spring ...
设计一个异常处理框架可以统一管理异常,提高代码的可维护性和可读性,同时能够提供详细的错误信息,帮助开发者快速定位问题。 通过对比Spring框架的异常处理,可以借鉴其优雅的异常转换和处理机制,如@...
Java异步编程框架Promise是用于处理异步操作的一个重要工具,尤其在Java中,Promise的概念被广泛应用于多种场景下进行高效的数据处理和结果获取。Promise框架主要作用在于简化异步编程模型,使其更加易于理解和使用...
5. **异常处理**:框架需要处理SQL执行过程中可能出现的异常,提供统一的错误处理机制,以便开发者可以方便地捕获和处理问题。 6. **性能优化**:考虑到效率,框架可能会包含一些性能优化策略,比如预编译的SQL语句...
【Java+SSH框架开发毕业设计】是一个典型的Java后端开发项目,主要采用了Spring、Struts2和Hibernate这三大主流开源框架。这些框架的组合在Web应用程序开发中被广泛应用,尤其在企业级应用中,能够有效地提高开发...
SpringCloud Finchley Gateway 统一异常处理是指通过自定义实现 ErrorWebExceptionHandler 接口来处理系统级异常,以便统一处理错误信息。通过使用 DefaultErrorWebExceptionHandler 或 ...
在IT行业中,调度数据网资源的统一管理与自动化测试框架的设计与实现是至关重要的环节,尤其是在大型企业或数据中心中。这种框架能够提高测试效率,确保网络资源的稳定性和安全性,并减少人为错误。以下是对该主题的...
### 基于JAVA+EE平台的项目管理系统的设计与实现 #### 概述 随着信息技术的快速发展,软件项目管理已成为企业提升竞争力的关键因素之一。基于JAVA+EE平台的项目管理系统旨在利用先进的技术手段来提高软件项目的管理...
Java异常处理和集合框架是Java编程中的两个核心概念,它们对于编写健壮、高效和易于维护的代码至关重要。在这个主题中,我们将深入探讨这两个领域的关键知识点。 首先,让我们来看看Java异常处理。在Java中,异常是...
10. **异常处理**:框架可能会提供统一的异常处理机制,便于开发者对错误进行集中管理和报告。 11. **测试支持**:为了促进单元测试和集成测试,迷你框架可能包含了测试工具和辅助类,帮助开发者编写和运行测试。 ...
9. **异常处理**:SpringMVC提供了统一的异常处理机制,可以自定义异常处理器,将异常信息转化为用户友好的错误页面。 10. **单元测试与集成测试**:SpringMVC项目通常使用JUnit、Mockito等工具进行单元测试,对于...