EzJDBCでConnectionを取得する方法!
O/Rマッパーとして、いざと言う時にConnectionが利用できるか否かは大きな問題です。
今回はEzJDBCからConnectionを取得する方法を説明します。
正確には、EzTxクラス(トランザクション管理クラス)により、取得することが出来ます。
EzTxはConnectionを取得した場合でもトランザクションを管理する機能を持っています。
基本的な記述方法が下記の通りです。
// トランザクション開始
EzTx.begin();
try {
Connection c1 = EzTx.getConnection();
Connection c2 = EzTx.getConnection();
} finally {
// トランザクション終了
EzTx.end();
}
c1とc2は同一コネクションになる。
*コミット、ロールバックはConnectionに対して直接指定してもよいですし、EzTx#commitメソッド、EzTx#rollbackメソッドを呼び出してもokです。
コネクションの取得を委譲先のクラスで行う場合でも、呼び出し元でEzTx#biginを呼びだしておけばok!
// トランザクション開始
EzTx.begin();
try {
// 1つ目のコネクションを取得する移譲先のクラスの呼び出し
HogeService hogeService = new HogeService();
ListhogeList = hogeService.getHogeByName(...);
// 2つ目のコネクションを取得する移譲先のクラスの呼び出し
Listhoge2List = Hoge2Service.getHoge2ByEtc(...);
} finally {
// トランザクション終了
EzTx.end();
}
委譲先のメソッドはstaticでも問題なし!当然同一コネクションを利用しています。
別のコネクションを取得する場合は、EzTx#beginをネストして利用すればokです。
// トランザクション開始
EzTx.begin();
try {
Connection c1 = EzTx.getConnection();
// 別トランザクション開始
EzTx.begin();
Connection c2 = EzTx.getConnection();
} finally {
// トランザクション終了
EzTx.endAll();
// または以下の様に記述
// EzTx.end(); 2つ目のトランザクション終了
// EzTx.end(); 1つ目のトランザクション終了
}
ネストの数に制限はないので、自由に利用して下さい。
EzJDBCを利用した場合も同様です。
// トランザクション開始
EzTx.begin();
try {
ORDER ODR = new ORDER();
ListorderList = EzJDBC.form(ODR).find(Order.class);
CUSTOMER CUS = new CUSTOMER();
ListorderList = EzJDBC.form(CUS).find(Customer.class);
} finally {
// トランザクション終了
EzTx.end();
}
上記の場合は同一コネクションを利用しています。
// トランザクション開始
EzTx.begin();
try {
ORDER ODR = new ORDER();
ListorderList = EzJDBC.form(ODR).find(Order.class);
// 別トランザクション開始
EzTx.begin();
CUSTOMER CUS = new CUSTOMER();
ListorderList = EzJDBC.form(CUS).find(Customer.class);
} finally {
// トランザクション終了
EzTx.endAll();
// または以下の様に記述
// EzTx.end(); 2つ目のトランザクション終了
// EzTx.end(); 1つ目のトランザクション終了
}
上記の場合は2つのコネクションを利用しています。