SQLインタフェースコンテナ制御 <バージョン0.3.1の概要へ戻る>

SorMap バージョン0.3.1からは、SQLインタフェースを使ってSQLインタフェースコンテナ(SQLインタフェースとSQLXML, JDBCコネクションなどをつなぐコンテナ
オブジェクト)と対話できるようになりました。

例えば、従来のSorMapであればSQLインタフェースのインスタンス作成後にUBTC(ユーザベーストランザクション制御)の制御やオートコミットモードの制御
などを行うことができませんでしたが、本バージョンのSQLインタフェースコンテナ制御を用いて、SQLインタフェースを用いて上記のフラグをはじめ、
トランザクションのコミットやロールバックなどを行えるようになります。
SQLインタフェースコンテナと対話する方法は簡単です。

通常、SQLインタフェースはSQLXMLのSQL命令と一対一になるようにメソッドを定義しますが、それに加えて
"特定のシグニチャ"と"名前"を持つメソッドをSQLインタフェースに用意するだけです。

以下のサンプルコードをご覧ください。
  1. package org.dyndns.nuda.sormap.sample;
  2. import java.util.List;
  3. import org.dyndns.nuda.mapper.annotation.JDBCQuery;
  4. @JDBCQuery(sqlxml = "org/dyndns/nuda/sormap/sample/query.xml")
  5. public interface SampleInterface {
  6. public List<TestSchemeBean> select();
  7. public List<TestSchemeBean> selectBy();
  8. public void insert(List<TestSchemeBean> params);
  9. public void insert(TestSchemeBean param);
  10. public void update(List<TestSchemeBean> params);
  11. public void update(TestSchemeBean param);
  12. public void delete(List<TestSchemeBean> params);
  13. public void delete(TestSchemeBean param);
  14. }
いたって平凡なSQLインタフェースです。

ここに、UBTCの制御をおこなうためのメソッドを追加で定義します。
  1. package org.dyndns.nuda.sormap.sample;
  2. import java.util.List;
  3. import org.dyndns.nuda.mapper.annotation.JDBCQuery;
  4. @JDBCQuery(sqlxml = "org/dyndns/nuda/sormap/sample/query.xml")
  5. public interface SampleInterface {
  6. public List<TestSchemeBean> select();
  7. public List<TestSchemeBean> selectBy();
  8. public void insert(List<TestSchemeBean> params);
  9. public void insert(TestSchemeBean param);
  10. public void update(List<TestSchemeBean> params);
  11. public void update(TestSchemeBean param);
  12. public void delete(List<TestSchemeBean> params);
  13. public void delete(TestSchemeBean param);
  14. // ここから↓
  15. /**
  16. * ユーザベーストランザクション機能を制御します
  17. *
  18. * @param useManualTransaction
  19. * ユーザベーストランザクション機能ON:true / ユーザベーストランザクション機能OFF:false
  20. */
  21. public void useManualTransaction(boolean useManualTransaction);
  22. /**
  23. * 現在設定されているユーザベーストランザクション機能の状態を取得します
  24. *
  25. * @return useManualTransaction ユーザベーストランザクション機能ON:true / ユーザベーストランザクション機能OFF:false
  26. */
  27. public boolean isUseManualTransaction();
  28.     // ここまで↑
  29. }
上記サンプルコードのように、useManualTransactionメソッドおよびisUseManualTransactionメソッドを(上記のシグニチャ通りに)定義すると
SQLインタフェースからUBTCの状態制御を行えるようになります。

なお、上記サンプルコードでは単純にメソッド定義を追加しただけですが、インタフェース継承でも同様の結果が得られます。

以下のインタフェースをご覧ください。
  1. package org.dyndns.nuda.mapper.helper.command;
  2. import org.dyndns.nuda.mapper.helper.SQLInterfaceControllerCommand;
  3. /**
  4. * ユーザベーストランザクション制御機能を操作するためのSQLインタフェースコンテナ制御コマンドです
  5. *
  6. * @author nkoseki
  7. *
  8. */
  9. public interface UseManualTransactionCommand extends
  10. SQLInterfaceControllerCommand {
  11. /**
  12. * ユーザベーストランザクション機能を制御します
  13. *
  14. * @param useManualTransaction
  15. * ユーザベーストランザクション機能ON:true / ユーザベーストランザクション機能OFF:false
  16. */
  17. public void useManualTransaction(boolean useManualTransaction);
  18. /**
  19. * 現在設定されているユーザベーストランザクション機能の状態を取得します
  20. *
  21. * @return useManualTransaction ユーザベーストランザクション機能ON:true / ユーザベーストランザクション機能OFF:false
  22. */
  23. public boolean isUseManualTransaction();
  24. }
上記インタフェースは、サンプルコードではなく、本バージョンで実際に導入されたインタフェースです。

このインタフェースを継承した形で、先ほどのSQLインタフェースを定義しなおします。
  1. package org.dyndns.nuda.sormap.sample;
  2. import java.util.List;
  3. import org.dyndns.nuda.mapper.annotation.JDBCQuery;
  4. import org.dyndns.nuda.mapper.helper.command.UseManualTransactionCommand;
  5. @JDBCQuery(sqlxml = "org/dyndns/nuda/sormap/sample/query.xml")
  6. public interface SampleInterface extends UseManualTransactionCommand {
  7. public List<TestSchemeBean> select();
  8. public List<TestSchemeBean> selectBy();
  9. public void insert(List<TestSchemeBean> params);
  10. public void insert(TestSchemeBean param);
  11. public void update(List<TestSchemeBean> params);
  12. public void update(TestSchemeBean param);
  13. public void delete(List<TestSchemeBean> params);
  14. public void delete(TestSchemeBean param);
  15. }
これで、先ほどのサンプルコードと同様に、SampleInterfaceインタフェースにはuseManualTransactionメソッドおよびisUseManualTransactionメソッド
が存在することになります。

この状態で、SQLインタフェースを生成すると、UBTCの状態の途中変更が上記メソッドから可能になります。

このようなインタフェースのことをSorMapでは「SQLインタフェースコンテナ制御コマンド」と呼んでいます。

下記に、現在SQLインタフェースコンテナを制御可能なインタフェースの一覧を示します
No.インタフェース名概要
1org.dyndns.nuda.mapper.helper.command.GetConnectionCommandSQLインタフェースコンテナが参照するJDBCコネクションオブジェクトの取得を行うSQLインタフェースコンテナ制御コマンドです
2org.dyndns.nuda.mapper.helper.command.UseAutoCommitCommand自動コミットモードの制御を行うためのSQLインタフェースコンテナ制御コマンドです
3org.dyndns.nuda.mapper.helper.command.UseManualTransactionCommandUBTCの制御を行うためのSQLインタフェースコンテナ制御コマンドです
4org.dyndns.nuda.mapper.helper.command.TransactionCommandトランザクションの制御(コミットやロールバック)を行うためのSQLインタフェースコンテナ制御コマンドです
※なお、各インタフェースの詳細に関してはSorMapバージョン0.3.1に同梱されているJavaDocをご覧ください。