【发布时间】:2012-07-10 19:05:31
【问题描述】:
我有这样的事情:
1) DAO 类 带有方法,用于执行事务,例如withdrawSum(int idAccount, float amount) 和putSum(int idAccount, float amount),它们使用 java.sql.Connection 和 java.sql.PreparedStatement 类对 DB 执行原子操作。
2) java.lang.reflect.InvocationHandler implementationor,whick用于事务前获取连接,事务后提交/回滚:
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
Connection connection = null;
try{
connection = DaoUtil.INSTANCE.getConnection();
connection.setAutoCommit(false);
method.invoke(connection, args);
connection.commit();
} catch(InvocationTargetException ex){
connection.rollback();
} finally{
DaoUtil.INSTANCE.closeConnection(connection);
}
return null;
}
3) 事务管理器,它创建代理实例并在其帮助下调用执行事务的方法,如下所示:
TransactionManager transManager = new TransactionManager();
InvocationHandler transHandler = new MyInvocationHandler(transManager);
TransactionManager proxy = (TransactionManager) Proxy.newProxyInstance(
transManager.getClass().getClassLoader(), transManager.getClass().getInterfaces(), transHandler);
proxy.transferMoney(withdrawAccountid, putAccountId, transactionSum);
.....
public void transferMoney(int withdrawAccountid, int putAccountId, float transactionSum){
AccountDao.getInstance().withdrawSum(withdrawAccountid, transactionSum);
AccountDao.getInstance().putSum(putAccountId, transactionSum);
}
问题是:要在DAO方法中执行语句,我需要初始化Connection对象。它被初始化并传递给 InvocationHandler 的 invoke 方法。它应该如何在 DAO 方法中正确初始化?有任何想法吗?提前致谢。
【问题讨论】:
标签: java reflection transactions