锁定老帖子 主题:嵌套异常处理逻辑的问题!
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2004-09-23
因为系统要严格处理每一种异常情况的发生,对于每一种异常必须保证交易的完整。 这样的话,比如说一个等待响应时异常发生(对方关闭连接),流程进入异常处理,登记数据库流水表,可是登记数据库又可能抛出HibernateException异常,对于这个异常,我又得处理!处理里面, 又可能有异常抛出,我........(晕倒了!) 结果一个逻辑下来,看看代码,大部分都是异常处理得代码啦! 怎么办? 需要一个事件处理吗?一样不能摆脱异常的抛出。 怎么办? 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2004-09-23
标题招人烦,请楼主改过。楼主也不是新会员了,不该不懂规矩吧。
|
|
返回顶楼 | |
发表时间:2004-09-23
gigix,:( 想开一下玩笑,都被你打回来啦! 不玩了,说正经的。
仔细重新想了一下: 把异常归类: 1)正常出现的异常(连接中断) 2)不可挽回的异常(数据库down、配置文件突然被删掉导致的异常) 对于1)的处理应该属于业务处理的逻辑部分 2)的处理应该将整体流程导入一个比较合理的归途。 为了避免循环嵌套的异常,规定一些不可挽回的异常,以结束异常嵌套流程的处理。 |
|
返回顶楼 | |
发表时间:2004-09-23
firebody 写道 gigix,:( 想开一下玩笑,都被你打回来啦! 不玩了,说正经的。
仔细重新想了一下: 把异常归类: 1)正常出现的异常(连接中断) 2)不可挽回的异常(数据库down、配置文件突然被删掉导致的异常) 对于1)的处理应该属于业务处理的逻辑部分 2)的处理应该将整体流程导入一个比较合理的归途。 为了避免循环嵌套的异常,规定一些不可挽回的异常,以结束异常嵌套流程的处理。 大家有没有更好的办法,是不是我定义异常以及处理异常的逻辑错误了呢?checked Exception is a part of logic |
|
返回顶楼 | |
发表时间:2004-09-23
我的建议是把整个异常体系从RuntimeException继承下来,这样你可以在不影响接口的前提下加入更多的异常类型,client也可以随时选择自己能够处理的异常来处理。异常的分类还是必须的。
|
|
返回顶楼 | |
发表时间:2004-09-23
把整个逻辑写完整,包括乱七八糟的异常处理,
蓦然发现,java的Exception让我可爱的原本很整洁的代码变得好丑陋。 特别是异常处理逻辑里面还有可能抛出异常的情况,写下来简直一塌糊涂。 我都怀疑我的设计出了问题。可是,仔细想了想,我确实再没什么好的法子了。 |
|
返回顶楼 | |
发表时间:2004-09-23
firebody 写道 把整个逻辑写完整,包括乱七八糟的异常处理,
蓦然发现,java的Exception让我可爱的原本很整洁的代码变得好丑陋。 特别是异常处理逻辑里面还有可能抛出异常的情况,写下来简直一塌糊涂。 我都怀疑我的设计出了问题。可是,仔细想了想,我确实再没什么好的法子了。 把你的代码贴出来瞅瞅?这样空谈,不太好给你solution |
|
返回顶楼 | |
发表时间:2004-09-23
firebody 写道 比如说一个等待响应时异常发生(对方关闭连接),流程进入异常处理,登记数据库流水表,可是登记数据库又可能抛出HibernateException异常,对于这个异常,我又得处理!
我想在记录异常信息时没必要再处理异常了吧,通常对这个流水日志的准确性要求不是那么高的,可以直接忽略异常。至于操作完整性,应该靠事务来管理。 |
|
返回顶楼 | |
发表时间:2004-09-23
Trustno1
老师好!学生收到。 下面是一部分代码: TransactionConnection bankConn=container.getTransactionConnection(TransactionConnection.BANK,true);; try{ response=bankConn.writeMessage(request,true);; }catch(MessageWriteException e);{ log.debug("Exception occur:"+ExceptionLogUtil.getTraces(e););; response=container.getMessage(container.getConfig();.getConnectionConfig(TransactionConnection.LOCAL););; response.getMessageBean();.setRet_code("03");; //设置错误代码 record.setStatus(Record.STAT_ERROR);;//修改流水状态 record.setError_reason("向银行方发请求失败!");; try{ dao.updateRecord(record);; }catch(HibernateException err);{ log.debug(ExceptionLogUtil.getTraces(err););; [color=red]//错误的产生是因为数据库的问题,既然数据库出了问题,再进行相应的补记操作仍然会抛出异常,所以应该直接返回,跳出嵌套处理的逻辑 [/color] } return response; } |
|
返回顶楼 | |
发表时间:2004-09-23
catch到HibernateException err以后你要做什么样的处理?
还是和上面的错误处理一样么?如果是我建议这样 processErr(exception e,int times); { if(times>maxtimes); throw exception("严重出错:..........");; log.debug("Exception occur:"+ExceptionLogUtil.getTraces(e););; response=container.getMessage(container.getConfig();.getConnectionConfig(TransactionConnection.LOCAL););; response.getMessageBean();.setRet_code("03");; //设置错误代码 record.setStatus(Record.STAT_ERROR);;//修改流水状态 record.setError_reason("向银行方发请求失败!");; try{... dao.updateRecord(record);; }catch(HibernateException err); { processErr(e,maxtimes++);; } } |
|
返回顶楼 | |