updateStmt.setString(1, contact.getFirstName()); updateStmt.setString(2, contact.getLastName()); updateStmt.setInt(3, contact.getContactId()); return updateStmt.executeUpdate(); } catch (SQLException ex) { throw new DaoException(ex); } }
使用JDBC transactionManager的时候,DAO框架会调用Connection 对象中的commit和rollback方法来控制事务处理。所以事务会在Connection层被处理,而不参与全局事务处理。
JTA
如果项目是J2EE应用,那么使用应用服务器提供的连接池会更有利,因为它将比SIMPLE 或者DBCP 连接池有更好的性能。同样的,使用J2EE应用,RDBMS是唯一的处理源,除了RDBMS还需要包含JCA、MQ Server等功能。因为不能在连接层开始和处理事务,而要特别的在全局事务处理时在一个UserTransaction对象中调用begin()和commit()方法。所以对于这类请求,可以使用JTA 作为transctionManager,既可以向JNDI URL提供数据源连接池,也可以在里面包含UserTransaction对象。
清单8:
|