私は次のようなものを持っています:
1) DBでアトミック操作を実行するためにjava.sql.Connectionクラスとjava.sql.PreparedStatementクラスなどのトランザクションを実行するために使用されるメソッドを持つDAOクラス。
2)java.lang.reflect。InvocationHandler実装者、whickは、トランザクションの前に接続を取得し、トランザクションの後にコミット/ロールバックするために使用されます。withdrawSum(int idAccount, float amount)
putSum(int idAccount, float amount)
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メソッドでどのように正しく初期化する必要がありますか?何か案は?前もって感謝します。