论坛首页 Java企业应用论坛

嵌套异常处理逻辑的问题!

浏览 15677 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2004-09-23  
:shock:
因为系统要严格处理每一种异常情况的发生,对于每一种异常必须保证交易的完整。
这样的话,比如说一个等待响应时异常发生(对方关闭连接),流程进入异常处理,登记数据库流水表,可是登记数据库又可能抛出HibernateException异常,对于这个异常,我又得处理!处理里面, 又可能有异常抛出,我........(晕倒了!)
结果一个逻辑下来,看看代码,大部分都是异常处理得代码啦!
怎么办?
需要一个事件处理吗?一样不能摆脱异常的抛出。
怎么办?
   发表时间:2004-09-23  
标题招人烦,请楼主改过。楼主也不是新会员了,不该不懂规矩吧。
0 请登录后投票
   发表时间:2004-09-23  
gigix,:( 想开一下玩笑,都被你打回来啦! 不玩了,说正经的。
仔细重新想了一下:
把异常归类:
1)正常出现的异常(连接中断)
2)不可挽回的异常(数据库down、配置文件突然被删掉导致的异常)

对于1)的处理应该属于业务处理的逻辑部分
2)的处理应该将整体流程导入一个比较合理的归途。
为了避免循环嵌套的异常,规定一些不可挽回的异常,以结束异常嵌套流程的处理。
0 请登录后投票
   发表时间:2004-09-23  
firebody 写道
gigix,:( 想开一下玩笑,都被你打回来啦! 不玩了,说正经的。
仔细重新想了一下:
把异常归类:
1)正常出现的异常(连接中断)
2)不可挽回的异常(数据库down、配置文件突然被删掉导致的异常)

对于1)的处理应该属于业务处理的逻辑部分
2)的处理应该将整体流程导入一个比较合理的归途。
为了避免循环嵌套的异常,规定一些不可挽回的异常,以结束异常嵌套流程的处理。

大家有没有更好的办法,是不是我定义异常以及处理异常的逻辑错误了呢?checked Exception is a part of logic
0 请登录后投票
   发表时间:2004-09-23  
我的建议是把整个异常体系从RuntimeException继承下来,这样你可以在不影响接口的前提下加入更多的异常类型,client也可以随时选择自己能够处理的异常来处理。异常的分类还是必须的。
0 请登录后投票
   发表时间:2004-09-23  
把整个逻辑写完整,包括乱七八糟的异常处理,
蓦然发现,java的Exception让我可爱的原本很整洁的代码变得好丑陋。
特别是异常处理逻辑里面还有可能抛出异常的情况,写下来简直一塌糊涂。
我都怀疑我的设计出了问题。可是,仔细想了想,我确实再没什么好的法子了。
0 请登录后投票
   发表时间:2004-09-23  
firebody 写道
把整个逻辑写完整,包括乱七八糟的异常处理,
蓦然发现,java的Exception让我可爱的原本很整洁的代码变得好丑陋。
特别是异常处理逻辑里面还有可能抛出异常的情况,写下来简直一塌糊涂。
我都怀疑我的设计出了问题。可是,仔细想了想,我确实再没什么好的法子了。

把你的代码贴出来瞅瞅?这样空谈,不太好给你solution
0 请登录后投票
   发表时间:2004-09-23  
firebody 写道
比如说一个等待响应时异常发生(对方关闭连接),流程进入异常处理,登记数据库流水表,可是登记数据库又可能抛出HibernateException异常,对于这个异常,我又得处理!


我想在记录异常信息时没必要再处理异常了吧,通常对这个流水日志的准确性要求不是那么高的,可以直接忽略异常。至于操作完整性,应该靠事务来管理。
0 请登录后投票
   发表时间: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;
		}
0 请登录后投票
   发表时间: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++);;   
                         } 
}
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics