jFinal事务拦截器抛出异常问题

longrmlife 发布于 2013/12/03 14:59
阅读 347
收藏 0

JFinal中有多个事务拦截器:Tx、TxByRegex、TxByActionKeys。。。

其中Tx拦截器在拦截后,如果拦截代码抛出异常,那么Tx也会抛出异常,代码如下:

try {
			conn = DbKit.getConnection();
			autoCommit = conn.getAutoCommit();
			DbKit.setThreadLocalConnection(conn);
			conn.setTransactionIsolation(getTransactionLevel());	// conn.setTransactionIsolation(transactionLevel);
			conn.setAutoCommit(false);
			invocation.invoke();
			conn.commit();
		} catch (Exception e) {
			if (conn != null)
				try {conn.rollback();} catch (Exception e1) {e1.printStackTrace();}
			throw new ActiveRecordException(e);
		}
		finally {
...



而TxByRegex和TxByActionKeys却不抛出异常,改为调用Db.tx方法:

try {
			conn = DbKit.getDataSource().getConnection();
			autoCommit = conn.getAutoCommit();
			DbKit.setThreadLocalConnection(conn);
			conn.setTransactionIsolation(transactionLevel);
			conn.setAutoCommit(false);
			boolean result = atom.run();
			if (result)
				conn.commit();
			else
				conn.rollback();
			return result;
		} catch (Exception e) {
			if (conn != null)
				try {conn.rollback();} catch (Exception e1) {e1.printStackTrace();}
			return false;	// throw new ActiveRecordException(e);
		} finally {
...



不知道为什么要这样处理?是基于什么考虑么?

我现在处理异常时很费劲(用TxByRegex和TxByActionKeys设置了全局拦截,想用Tx设置controller级别的拦截),

一个抛出异常,一个不抛出异常,难以统一处理,这个有什么办法解决么?


加载中
0
JFinal
JFinal
    JFinal 1.5 版本是全都会抛出异常的,建议升级。之前有一个版本的 Db.tx方法没有抛出异常,而是在有异常时直接返回了 false
longrmlife
longrmlife
原来这样啊,那我去升级一下,谢谢~
返回顶部
顶部