jdon框架异常处理的缺陷

11-04-27 weiweishouwang
最近学习了一下jdon,跑了跑她自带的例子,发现一些问题。
jdon的拦截器catch住了Exception和Throwable级别的异常,如下所示:

// BeforeAfterMethodTarget的invoke函数
} catch (Exception ex) {
	Debug.logError(ex, module);
} catch (Throwable ex) {
	throw new Throwable(ex);
}
<p class="indent">

这样当被拦截的方法抛出业务异常时,被该拦截器拦截了,业务层不能捕捉到异常,如下所示:

        // TestServicePOJOImp的createUser函数
	public void createUser(EventModel em) {
		UserModel user = (UserModel) em.getModelIF();
		try {
			userRepository.insert(user);
			logger.debug(" userId:" + user.getUserId());
			logger.debug(" userName:" + user.getName());
		} catch (Exception ex) {
			logger.error(ex);
			em.setErrors(Constants.USER_SAVE_ERROR);
		}
	}
<p class="indent">

当userRepository.insert(user)执行出错的时候(比如说ora-00001 违反唯一索引),该SQLException被BeforeAfterMethodTarget里面的invoke函数所check住,createUser里面根本捕获不到异常,em.setErrors(Constants.USER_SAVE_ERROR)也不会被执行到,返回到界面上后显示Operate Successfully! return index。
这样的问题应该怎么解决,jdon的异常处理是不是做的不够好?
jdon的拦截器如果把Exception和Throwable异常都check住的话,那业务层怎么处理下层通过异常返回的出错信息了?

[该贴被weiweishouwang于2011-04-27 15:42修改过]

banq
2011-04-27 17:25
2011年04月27日 15:29 "@weiweishouwang"的内容
jdon的拦截器如果把Exception和Throwable异常都check住的话,那业务层怎么处理下层通过异常返回的出错信息了 ...


JF处理异常思路和一般不一样,认为业务层不必向前面抛业务异常,业务异常也是业务,抛出业务异常就向前端泄漏业务。

不过JF如果发现业务方法内异常,会报出"一些错误发生在你的方法中"。以起到提示用户。

猜你喜欢