(57)【特許請求の範囲】
【請求項１】
トランザクションを実行するアプリケーションプログラムから呼び出されるアプリケーションインタフェース部と、
前記トランザクションを制御するトランザクション管理部から呼び出されるトランザクション管理インタフェース部と、
前記アプリケーションインタフェース部および前記トランザクション管理インタフェース部からの指示に従って、リソースへのアクセスを制御するリソース管理部と通信するコネクション制御部と、
を含んで構成されるリソースアダプタ部を２以上含む計算機における、前記リソースアダプタ部間のプログラム制御方法であって、
前記計算機の記憶部は、
前記アプリケーションプログラムを識別するためのプログラム識別情報、前記リソース管理部および前記リソースアダプタ部の対応関係を管理する対応管理情報を記憶し、
前記計算機の処理部は、１つのトランザクションを実行するにあたって、前記アプリケーションプログラムが前記リソースアダプタ部にアクセスした際、
前記対応管理情報に、前記プログラム識別情報、前記リソース管理部および前記リソースアダプタ部の対応関係のレコードを追加する第１の手順と、
前記トランザクションを実行する前記アプリケーションプログラムの前記プログラム識別情報に対応付けられた同一の前記リソース管理部を共有する複数の前記リソースアダプタ部の中から、前記リソース管理部にアクセスする第１のリソースアダプタ部を決定する第２の手順と、
決定した前記第１のリソースアダプタ部以外の第２のリソースアダプタ部で、前記アプリケーションインタフェース部から、前記第１のリソースアダプタ部を構成する前記コネクション制御部に接続し、その接続した前記コネクション制御部によって前記リソース管理部にアクセスを要求する第３の手順と、
を含んで実行することを特徴とするプログラム制御方法。
【請求項２】
前記計算機の前記処理部は、前記第２の手順において、
所定の前記リソースアダプタ部の前記アプリケーションインタフェース部が前記アプリケーションプログラムから呼び出された場合に、前記対応管理情報を参照して、呼び出し時のパラメータとして入力した前記プログラム識別情報、および前記リソースアダプタ部が対応している前記リソース管理部を有するレコードがあったときに、前記レコードに対応するリソースアダプタ部を、前記リソース管理部にアクセスする前記第１のリソースアダプタ部として決定する
ことを特徴とする請求項１に記載のプログラム制御方法。
【請求項３】
前記計算機の前記処理部は、前記第３の手順を実行することで、
前記１つのトランザクションに対応付けられた複数の前記リソースアダプタ部によって、その中の１つの前記リソースアダプタ部に含まれる前記コネクション制御部を共有して前記リソース管理部にアクセスを要求する
ことを特徴とする請求項１または請求項２に記載のプログラム制御方法。
【請求項４】
前記計算機の前記処理部は、前記アプリケーションプログラムが前記リソースアダプタ部にアクセスした際、
前記１つのトランザクションに複数の前記リソースアダプタ部が対応付けられた場合に、前記トランザクション管理部の管理対象となる前記リソースアダプタ部を１つにすることで、前記トランザクションの決着処理を一相コミットで行う第４の手順
をさらに含んで実行することを特徴とする請求項１ないし請求項３のいずれか一項に記載のプログラム制御方法。
【請求項５】
前記対応管理情報は、
前記アプリケーションプログラムを識別する前記プログラム識別情報であるスレッド識別子と前記リソース管理部と前記リソースアダプタ部との対応関係を管理する第１の対応管理情報と、
前記リソースアダプタ部の相互の依存関係を管理する第２の対応管理情報とを有し、
前記第１の手順は、前記アプリケーションプログラムが前記リソースアダプタ部に操作要求した際、前記第１の対応管理情報に、前記スレッド識別子と前記リソース管理部と前記リソースアダプタ部の対応関係のレコードを追加すると共に、
前記スレッド識別子と同一且つ前記リソース管理部の識別子と同一の対応関係が既に１つだけ存在していたならば、前記第２の対応管理情報に、前記スレッド識別子、前記リソース管理部および前記リソースアダプタ部は前記第１の対応管理情報に既に存在しているリソースアダプタ部に依存する旨を示すレコードを追加し、
前記スレッド識別子と同一且つ前記リソース管理部の識別子と同一の対応関係が既に２以上存在していたならば、前記スレッド識別子が同一の前記リソース管理部を特定し、前記第２の対応管理情報に、前記スレッド識別子、前記リソース管理部および前記リソースアダプタ部は前記第１の対応管理情報に前記特定したリソースアダプタ部に依存する旨を示すレコードを追加する、
ことを特徴とする請求項１ないし請求項４のいずれか一項に記載のプログラム制御方法。
【請求項６】
前記計算機の前記処理部は、前記アプリケーションプログラムからトランザクション決着要求を受けたとき、
前記第１の対応管理情報から前記アプリケーションプログラムを識別する前記スレッド識別子に係るレコードを削除すると共に、前記トランザクションに係る前記リソースアダプタ部が他のリソースアダプタ部と連携していたならば、前記第２の対応管理情報から前記リソースアダプタ部を依存先とするレコードを削除する第５の手順
を更に含んで実行することを特徴とする請求項１ないし請求項５のいずれか一項に記載のプログラム制御方法。
【請求項７】
前記第１の手順は、前記アプリケーションプログラムが前記リソースアダプタ部に操作要求した際、前記第１の対応管理情報に、前記スレッド識別子と前記リソース管理部と前記リソースアダプタ部の対応関係のレコードを追加すると共に、更に前記スレッド識別子と同一且つ前記リソース管理部の識別子と同一の対応関係が既に存在していたならば、前記第２の対応管理情報に、前記スレッド識別子、前記リソース管理部および前記リソースアダプタ部は前記第１の対応管理情報に既に存在しているリソースアダプタ部に依存する旨を示すレコードを追加する、
ことを特徴とする請求項１ないし請求項６のいずれか一項に記載のプログラム制御方法。
【請求項８】
前記第２の手順は、前記第１の対応管理情報に基づいて、前記トランザクションを実行する前記アプリケーションプログラムの前記スレッド識別子に対応付けられた前記リソース管理部を決定し、前記第２の対応管理情報に基づいて、前記リソース管理部を共有する複数の前記リソースアダプタ部の中から前記リソース管理部にアクセスする前記第１のリソースアダプタ部を決定し、
前記第３の手順は、決定した前記第１のリソースアダプタ部以外の前記第２のリソースアダプタ部では、前記アプリケーションインタフェース部から、前記第１のリソースアダプタ部を構成する前記コネクション制御部に接続し、その接続した前記コネクション制御部によって前記リソース管理部にアクセスを要求する
ことを特徴とする請求項１ないし請求項７のいずれか一項に記載のプログラム制御方法。
【請求項９】
前記第４の手順は、前記１つのトランザクションに複数の前記リソースアダプタ部が対応付けられた場合に、前記トランザクション管理部の管理対象となる前記リソースアダプタ部を、前記第２の対応管理情報において依存先に指定されているリソースアダプタ部にすることで、前記トランザクションの決着処理を一相コミットで行う
ことを特徴とする請求項４ないし請求項８のいずれか一項に記載のプログラム制御方法。
【請求項１０】
トランザクションを実行するアプリケーションプログラムから呼び出されるアプリケーションインタフェース部と、
前記トランザクションを制御するトランザクション管理部から呼び出されるトランザクション管理インタフェース部と、
前記アプリケーションインタフェース部および前記トランザクション管理インタフェース部からの指示に従って、リソースへのアクセスを制御するリソース管理部と通信するコネクション制御部と、
を含んで構成されるリソースアダプタ部を２以上含む計算機であって、
前記計算機は、記憶部および処理部を含んで構成され、
前記記憶部は、
前記アプリケーションプログラムを識別するためのプログラム識別情報、前記リソース管理部および前記リソースアダプタ部の対応関係を管理する対応管理情報を記憶し、
前記処理部は、１つのトランザクションを実行するにあたって、前記アプリケーションプログラムが前記リソースアダプタ部にアクセスした際、
前記対応管理情報に、前記プログラム識別情報、前記リソース管理部および前記リソースアダプタ部の対応関係のレコードを追加し、
前記トランザクションを実行する前記アプリケーションプログラムの前記プログラム識別情報に対応付けられた同一の前記リソース管理部を共有する複数のリソースアダプタ部の中から、前記リソース管理部にアクセスする第１のリソースアダプタ部を決定し、
決定した前記第１のリソースアダプタ部以外の第２のリソースアダプタ部で、前記アプリケーションインタフェース部から、前記第１のリソースアダプタ部を構成するコネクション制御部に接続し、その接続した前記コネクション制御部によって前記リソース管理部にアクセスを要求する、
ことを特徴とする計算機。
【請求項１１】
前記計算機に請求項１ないし請求項９のいずれか一項に記載のプログラム制御方法を実行させることを特徴とする計算機制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のリソースアダプタが１つのリソースを共有するトランザクションシステムにおいて、一相コミットを可能にする技術に関する。
【背景技術】
【０００２】
≪トランザクションについて≫
多くのデータ処理システムが導入している概念にトランザクションがある。トランザクションとは、一連のシーケンスとして区切られたデータ処理であって、排他制御、障害回復などを行う管理単位である。１つのトランザクションは、データ処理のシーケンス全体の中でトランザクション開始命令を発行した時点からの、トランザクション終了命令を発行した時点までのデータ処理のシーケンスである。そして、１つのトランザクション内で実行されたデータ処理は、その成否に応じて、すべて実行されたか、または、全く実行されなかったかのいずれかになることが保証される。これによって、データの整合性の保証が容易に可能となる。
【０００３】
例えば、１つのデータベース内で２つのレコードを更新する場合、トランザクションを開始し、２つのレコードを更新し、トランザクションを終了することで１つのトランザクションとなる。このとき、データ処理が成功して必ず２つのレコードが両方とも更新されるか、または、データ処理が失敗して必ず２つのレコードが両方とも更新されないかのいずれかになる。すなわち、一方のレコードが更新され、他方のレコードが更新されないといった中途半端な状態にはならないことが、トランザクションによって保証される。データ処理の成功、失敗のいずれの場合も、２つのレコード間の整合性は保証される。
【０００４】
この例を実現するために、データベースは、トランザクション中に行われた更新情報を主記憶装置（メインメモリ）上のバッファに蓄積し、トランザクション終了命令を受けたときにその更新情報を二次記憶装置（ハードディスク装置など）に一度に書出して確定させる。途中で失敗した場合は、更新情報を破棄することですべての更新が実行されなかったことにする。
【０００５】
≪データベースが複数ある場合の処理≫
前記の例ではデータベースが１個であったが、データベースが複数ある場合には、トランザクション処理を行うためにさらに別の処理が必要である。例えば、２つのデータベースのレコードをそれぞれ更新する場合、トランザクションを開始し、データベース１のレコード１を更新し、データベース２のレコード２を更新し、トランザクションを終了することで１つのトランザンクションとするには、トランザクションを調停するトランザクションマネジャを新たに導入し、次のような処理が必要である。
【０００６】
まず、トランザクションの処理対象となる各々のデータベースは、トランザクション中に行われた更新情報を各々の主記憶装置上のバッファに蓄積する。
アプリケーションからトランザクション終了命令が発行されたときには、トランザクションマネジャが調停を行う。まず、トランザクションマネジャは、各々のデータベースに対してデータベースの更新情報を、確定にも取消しにも対応可能な形で一旦二次記憶装置に書出すように指示する。この処理をプリペアと呼ぶ。各々のデータベースは、プリペアが成功したか否かをトランザクションマネジャに応答する。トランザクションマネジャは、両方のデータベースのプリペアが成功した場合に、トランザクションログを二次記憶装置（サーバのハードディスク装置など）に書出してトランザクションが成功したことを確定させる。
【０００７】
次に、トランザクションマネジャは、各々のデータベースに対してデータベースの更新を確定させるように指示する。この処理をコミットと呼ぶ。各々のデータベースがコミットの終了をトランザクションマネジャに応答すると、トランザクション終了命令の処理が完了する。このように、プリペアとコミットの２段階でトランザクション終了処理を行う手順を二相コミットと呼ぶ。
【０００８】
≪二相コミットについて≫
二相コミット処理では、複数のデータベースの更新処理がすべて成功したか否かを確認するためにプリペアが必要であった。しかし、データベースが１個のみ存在する場合には、複数のデータベースについて確認する必要がないため、プリペアを省略して、トランザクションマネジャからデータベースにコミット処理するように指示することが可能である。この場合のコミット処理を一相コミットと呼ぶ。一相コミットの場合は、トランザクションマネジャがトランザクションログを二次記憶装置に書出す必要がなく、アプリケーションの実行性能が向上する。
【０００９】
このような二相コミット処理を行うためのモデルとして、例えば、非特許文献１に記載されたモデルが広く使われている。そのモデルでは、前記の例のデータベースを一般化して、リソースマネジャと呼び、前記の例のトランザクションをグローバルトランザクションと呼ぶ。グローバルトランザクションは複数存在するので一意な識別子をつけて区別する。この識別子をグローバルトランザクション識別子と呼ぶ。トランザクションマネジャが二相コミット処理を行う対象は、個々のリソースマネジャを単位とする。
【００１０】
このモデルでは、リソースマネジャの処理をトランザクションとして行う場合、リソースマネジャとトランザクションブランチ（トランザクションの実行に係る１以上の処理単位）を関連付けてから、リソースマネジャの処理を行う。この処理を関連付けと呼ぶ。また、リソースマネジャが行う一相コミット、プリペア、コミットの処理をまとめて決着と呼ぶ。関連付けはリソースマネジャごとに行われるが、決着はトランザクションブランチごとに行われる。そのため、トランザクションブランチに複数のリソースマネジャが関連する場合には、トランザクションマネジャは、それらのリソースマネジャから任意の１つを選んで決着を行う。トランザクションに含まれるトランザクションブランチが１個の場合には、一相コミットが実施される。
【００１１】
≪Ｊ２ＥＥ仕様によるリソースアダプタ≫
Ｊａｖａ（登録商標）による企業向けアプリケーションを構築するための仕様であるＪ２ＥＥ（Java 2 Enterprise Edition）では、データベースを含む外部リソースに接続するための標準的な仕様を定めている。ここでいう「接続」とは、通信路の確立を意味するとともに、通信路の確立による（外部プログラムの）呼び出し準備をすることや、通信路の確立によって（外部プログラムへの）要求発行を可能にすることをいう。この仕様に準拠することで、Ｊ２ＥＥ仕様を実現したプログラムであるアプリケーションサーバ（ＯＳ（Operating System）上のコンテナ）は、様々な外部リソースを共通の方法で扱うことができる。また、外部リソースも様々なアプリケーションサーバから使用可能になる。ここで、外部リソースの例としては、データベース管理システム、トランザクション処理システム、メッセージキューイングシステムなどが挙げられる。
【００１２】
アプリケーションから外部リソースに接続するためのソフトウェアドライバをリソースアダプタと呼ぶ。リソースアダプタは、Ｊ２ＥＥ仕様に準拠することで外部リソースとアプリケーション間の相互接続性を保証している。リソースアダプタを構成する主な要素として、アプリケーションからの操作要求を受け付けるアプリケーションインタフェース、トランザクションマネジャからの要求を受け付けるトランザクションマネジャインタフェース、および実際にリソースマネジャと処理をやりとりするリソースマネジャコネクションの３つがある。アプリケーションからの要求およびトランザクションマネジャからの要求は、各インタフェースが受け付けた後に、リソースマネジャとのやりとりを実行するコネクション制御部が、それらの要求内容を適当な形に変換してリソースマネジャに送る（非特許文献２参照）。
【００１３】
≪リソースアダプタの問題とその対応≫
外部リソースであるリソースマネジャに接続するリソースアダプタにおいて、複数のリソースアダプタが単一のリソースマネジャを共有してアクセスする構成では、実際に二次記憶装置に更新情報を書出す必要があるのは、単一のリソースマネジャのみであり、トランザクションマネジャのトランザクションログの書出しは不要である。しかし、リソースアダプタが複数存在すると、リソースアダプタの数だけリソースマネジャコネクション（リソースアダプタ１つに２以上のこともある）が生成されて不要に二相コミット処理が行われるため、トランザクションマネジャのトランザクションログが出力されてしまい、アプリケーションの実行性能を低下させていた。
【００１４】
このような場合に一相コミットを可能にする方法として、リソースアダプタをリソースアダプタラッパでラップし、同じリソースに属するリソースマネジャを利用するリソースアダプタラッパをグループ化して管理することでトランザクションマネジャに対してトランザクションブランチを単一に見せ、一相コミットを実施する技術がある（特許文献１参照）。
【特許文献１】特開２００４−２９５２７２号公報（段落００１５、図１）
【非特許文献１】“Distributed TP: The XA+ Specification, Version 2”、［online］、１９９４年７月、X/Open Company Ltd.、［２００５年６月２３日検索］、インターネット＜ＵＲＬ：http://www.opengroup.org/publications/catalog/s423.htm＞、pp.3
【非特許文献２】“J2EE Connector Architecture Specification”、［online］、２００４年６月２１日、Sun Microsystems, Inc.、［２００５年６月２３日検索］、インターネット＜ＵＲＬ：http://java.sun.com/j2ee/connector/download.html＞、pp.14-21,39-70,74-106
【発明の開示】
【発明が解決しようとする課題】
【００１５】
しかしながら、特許文献１に開示された技術では、トランザクション決着処理は任意の１個のリソースアダプタに対して行われるが、トランザクション決着処理前におけるリソースマネジャコネクションの生成や処理は、複数のリソースアダプタで行われる。これにより、トランザクションマネジャと、各リソースアダプタとの間の通信が必要になり、その通信コネクションが多くなるという問題がある。
【００１６】
本発明は、前記問題に鑑み、複数のリソースアダプタが１つのリソースマネジャを共有してアクセスする計算機において、一相コミットを可能にするとともに、リソースアダプタにおける消費資源を削減する手段を提供することを課題とする。
【課題を解決するための手段】
【００１７】
前記課題を解決する本発明は、トランザクションを実行するアプリケーションプログラムから呼び出されるアプリケーションインタフェース部と、トランザクションを制御するトランザクション管理部から呼び出されるトランザクション管理インタフェース部と、アプリケーションインタフェース部およびトランザクション管理インタフェース部からの指示に従って、リソースへのアクセスを制御するリソース管理部と通信するコネクション制御部とを含んで構成されるリソースアダプタ部を２以上含む計算機における、リソースアダプタ部間のプログラム制御方法であって、計算機の記憶部が、アプリケーションプログラムを識別するためのプログラム識別情報、リソース管理部およびリソースアダプタ部の対応関係を管理する対応管理情報を記憶し、計算機の処理部が、１つのトランザクションを実行するにあたって、このアプリケーションプログラムがこのリソースアダプタ部にアクセスした際、この対応管理情報に、プログラム識別情報、リソース管理部およびリソースアダプタ部の対応関係のレコードを追加する第１の手順と、そのトランザクションを実行するアプリケーションプログラムのプログラム識別情報に対応付けられた同一のリソース管理部を共有する複数のリソースアダプタ部の中から、リソース管理部にアクセスする第１のリソースアダプタ部を決定する第２の手順と、決定した第１のリソースアダプタ部以外の第２のリソースアダプタ部で、アプリケーションインタフェース部から、第１のリソースアダプタ部を構成するコネクション制御部に接続し、その接続したコネクション制御部によってリソース管理部にアクセスを要求する第３の手順とを含んで実行することを主な特徴とする。なお、本発明は、計算機および計算機制御プログラムを含む。
【発明の効果】
【００１８】
本発明によれば、複数のリソースアダプタが１つのリソースマネジャを共有してアクセスする計算機において、一相コミットを可能にするとともに、使用リソースを削減することができる。
【発明を実施するための最良の形態】
【００１９】
以下、本発明を実施するための最良の形態について図面を参照して詳細に説明する。
【００２０】
≪計算機のモジュール構成と概要≫
図１は、本発明の実施の形態に係る計算機におけるソフトウェアのモジュール構成を示す図である。計算機２００におけるソフトウェアは、プログラムモジュールとして、アプリケーションプログラム（以下、ＡＰという）１１５、リソースアダプタ（リソースアダプタ部）ＲＡ１（１２０）、リソースアダプタＲＡ２（１３０）、リソースアダプタＲＡ３（１４０）、トランザクションマネジャ（トランザクション管理部）１５０、コンテナ１６０、データベースアクセス制御（リソース管理部）ＤＢＭＳ１（１７０）、ＤＢＭＳ２（１８０）およびオペレーティングシステム２４０を含んで構成される。また、制御テーブルとして、リソースアダプタグループ管理テーブル（対応管理情報）１００を含む。
【００２１】
ＡＰ１１５は、トランザクションを実行するアプリケーションプログラムであり、リソースアダプタＲＡ１（１２０）、ＲＡ２（１３０）、ＲＡ３（１４０）およびトランザクションマネジャ１５０にアクセスする。具体的には、ＡＰ１１５は、計算機２００のＯＳ上でスレッドとして動作し、その中で各リソースアダプタのＡＰインタフェース（アプリケーションインタフェース部）やトランザクションマネジャ１５０をコールする。すなわち、リソースアダプタＲＡ１（１２０）のＡＰインタフェースＡＰＩ１（１２１）、リソースアダプタＲＡ２（１３０）のＡＰインタフェースＡＰＩ２（１３１）、リソースアダプタＲＡ３（１４０）のＡＰＩ３（１４１）およびトランザクションマネジャ１５０を呼び出す。
【００２２】
リソースアダプタＲＡ１（１２０）は、ＡＰ１１５から外部リソースに接続するためのソフトウェアドライバであり、ＡＰインタフェースＡＰＩ１（１２１）、ＤＢコネクション（コネクション制御部）ＤＢＣｏｎｎ１（１２２）およびＴＭ（Transaction Manager）インタフェース（トランザクション管理インタフェース部）ＴＭＡＰＩ１（１２３）を含んで構成される。ＡＰＩ１（１２１）は、ＡＰ１１５からコール（呼び出）されて、リソースアダプタグループ管理テーブル１００を参照し、ＤＢＣｏｎｎ１（１２２）に処理の指示を発行する。ＴＭＡＰＩ１（１２３）は、トランザクションマネジャ１５０からコール（呼び出）されて、ＤＢＣｏｎｎ１（１２２）に処理の指示を発行する。ＤＢＣｏｎｎ１（１２２）は、ＡＰＩ１（１２１）およびＴＭＡＰＩ１（１２３）から発行された処理の指示に従って、通信によってデータベースアクセス制御ＤＢＭＳ１（１７０）を呼び出す。リソースアダプタＲＡ２（１３０）は、ＲＡ１（１２０）と同様の構成である。
【００２３】
なお、ＤＢＣｏｎｎ１（１２２）やＤＢＣｏｎｎ２（１３２）は、Ｊａｖａ（登録商標）プログラムからデータベースへ接続するための規約であるＪＤＢＣ（Java DataBase Connectivity）に従っている。
【００２４】
リソースアダプタＲＡ３（１４０）は、ＡＰインタフェースＡＰＩ３（１４１）を含んで構成される。ＡＰＩ３（１４１）は、ＡＰ１１５からコールされて、リソースアダプタグループ管理テーブル１００を参照し、ＲＡ２（１３０）に含まれるＤＢＣｏｎｎ２（１３２）に処理の指示を発行する。リソースアダプタＲＡ３（１４０）は、ＲＡ２（１３０）に依存し、ＲＡ２（１３０）に含まれるＤＢＣｏｎｎ２（１３２）に対して処理を発行するため、ＤＢコネクションおよびＴＭインタフェースを生成する（準備する）必要がない。
【００２５】
トランザクションマネジャ１５０は、トランザクションを制御するプログラムであり、ＴＭＡＰＩ１（１２３）およびＴＭＡＰＩ２（１３３）に処理の指示を発行する（処理要求を送る）。コンテナ１６０は、計算機２００のＯＳ上で動作し、ＡＰ１１５、ＲＡ１（１２０）、ＲＡ２（１３０）およびＲＡ３（１４０）を管理する。データベースアクセス制御ＤＢＭＳ１（１７０）は、ＲＡ１（１２０）のＤＢＣｏｎｎ１（１２２）からの要求に応じて、ＤＢＣｏｎｎ１（１２２）が管理するＤＢにアクセスする。ＤＢＭＳ２（１８０）は、ＲＡ２（１３０）のＤＢＣｏｎｎ２（１３２）からの要求に応じて、ＤＢＣｏｎｎ２（１３２）が管理するＤＢにアクセスする。
【００２６】
コンテナ１６０は、Ｊａｖａ（登録商標）によるアプリケーションを構築するためのＪ２ＥＥ仕様を実現したプログラムである。オペレーティングシステム２４０は、計算機２００上で動作するＯＳである。なお、コンテナ１６０は、オペレーティングシステム２４０上で動作する。
【００２７】
≪テーブルの構成≫
リソースアダプタグループ管理テーブル１００は、複数のリソースアダプタが連携するために参照、更新される制御テーブルであり、トランザクション開始済みリソースアダプタ一覧１００ａおよびリソースアダプタ依存関係一覧１００ｂを含んで構成される。
【００２８】
トランザクション開始済みリソースアダプタ一覧１００ａは、項目として、スレッドの識別子（プログラム識別情報）であるＴＨＲＩＤ１０１と、リソースマネジャの識別子であるＲＭＩＤ１０２と、リソースアダプタの識別子であるＲＡＩＤ１０３とを含んで構成される。例えば、レコード１０４は、ＴＨＲＩＤ「Ｔ１」、ＲＭＩＤ「ＤＢＭＳ１」およびＲＡＩＤ「ＲＡ１」を含み、レコード１０５は、ＴＨＲＩＤ「Ｔ２」、ＲＭＩＤ「ＤＢＭＳ２」およびＲＡＩＤ「ＲＡ２」を含み、レコード１０６は、ＴＨＲＩＤ「Ｔ２」、ＲＭＩＤ「ＤＢＭＳ２」およびＲＡＩＤ「ＲＡ３」を含む。ＡＰ１１５がトランザクションを実行するときは、必ず同一スレッド上で実行するため、スレッド識別子ＴＨＲＩＤ１０１の値が同じである複数のレコードに対応する複数の処理は、同一のトランザクションの下で実行されていると判断できる。
【００２９】
リソースアダプタ依存関係一覧１００ｂは、項目として、スレッドの識別子であるＴＨＲＩＤ１０７と、リソースマネジャを識別するＲＭＩＤ１０８と、依存先のリソースアダプタを識別する依存先ＲＡＩＤ１０９と、それに依存するリソースアダプタを識別する依存ＲＡＩＤ１１０を含んで構成される。レコード１１１は、ＴＨＲＩＤ「Ｔ２」、ＲＭＩＤ「ＤＢＭＳ２」、依存先ＲＡＩＤ「ＲＡ２」、依存ＲＡＩＤ「ＲＡ３」を含む。
【００３０】
≪計算機のハードウェア構成≫
図２は、本発明の実施の形態に係る計算機のハードウェア構成を示す図である。計算機２００は、ＰＣ（Personal Computer）やサーバなどのコンピュータによって実現され、メモリ（記憶部）２１０、ハードディスク装置２２０、ＣＰＵ（Central Processing Unit、処理部）２３０、マウス２３１、ディスプレイ２３２、キーボード２３３およびこれらを相互接続するバス２３４を含んで構成される。メモリ２１０は、リソースアダプタグループ管理テーブル１００、ＡＰ１１５、リソースアダプタＲＡ１（１２０）、リソースアダプタＲＡ２（１３０）、リソースアダプタＲＡ３（１４０）、トランザクションマネジャ１５０、コンテナ１６０、データベースアクセス制御ＤＢＭＳ１（１７０）、ＤＢＭＳ２（１８０）およびオペレーティングシステム２４０を含んで記憶している。なお、これらの詳細については、既に説明した通りである。メモリ２１０は、ＲＡＭなどによって実現される。
【００３１】
ハードディスク装置２２０は、データベース記憶域２２１を有する。データベース記憶域２２１は、データベースアクセス制御１７０および１８０がアクセスするデータベースを記憶する領域である。ＣＰＵ２３０は、メモリ２１０に記憶された各プログラムをロードして実行することによって、計算機２００の機能を実現する。マウス２３１、ディスプレイ２３２およびキーボード２３３は、それぞれＡＰ１１５との間でデータの入出力を行うことによって、ユーザインタフェース（マン・マシンインタフェース）を実現する。
【００３２】
≪計算機の基本的なモジュール構成≫
図３は、計算機の基本的なモジュール構成を示す図である。この構成では、ＡＰ１１５が３つのリソースアダプタを用いて、３つのリソースマネジャにアクセスする。計算機２０１におけるソフトウェアは、プログラムモジュールとして、ＡＰ１１５、リソースアダプタＲＡ１（１２０）、ＲＡ２（１３０）、ＲＡ３（１４０）、トランザクションマネジャ１５０、コンテナ１６０、リソースマネジャＲＭ１（１９０）、ＲＭ２（１９１）、ＲＭ３（１９２）およびオペレーティングシステム２４０を含んで構成される。
【００３３】
リソースアダプタＲＡ１（１２０）、ＲＡ２（１３０）およびＲＡ３（１４０）は、それぞれリソースマネジャＲＭ１（１９０）、ＲＭ２（１９１）およびＲＭ３（１９２）とＡＰ１１５との通信を可能するためのソフトウェアドライバである。コンテナ１６０は、ＡＰ１１５、リソースアダプタＲＡ１（１２０）、ＲＡ２（１３０）およびＲＡ３（１４０）を管理している。トランザクションマネジャ１５０は、リソースアダプタＲＡ１（１２０）、ＲＡ２（１３０）およびＲＡ３（１４０）内にそれぞれ含まれるＴＭインタフェースＴＭＡＰＩ１（１２３）、ＴＭＡＰＩ２（１３３）およびＴＭＡＰＩ３（１４３）を管理し、トランザクション要求をそれぞれに発行する。リソースアダプタＲＡ１（１２０）、ＲＡ２（１３０）およびＲＡ３（１４０）内にそれぞれ含まれるＲＭコネクションＲＭＣｏｎｎ１（１２４）、ＲＭＣｏｎｎ２（１３４）およびＲＭＣｏｎｎ３（１４４）は、リソースマネジャＲＭ１（１９０）、ＲＭ２（１９１）およびＲＭ３（１９２）のそれぞれと実際に処理をやりとりするコネクションとなる。
【００３４】
この構成において、ＡＰ１１５がトランザクションを開始し、リソースアダプタＲＡ１（１２０）、ＲＡ２（１３０）およびＲＡ３（１４０）に対する操作を実行して、トランザクションを決着する場合、トランザクションマネジャ１５０は、複数のリソースマネジャに対する操作と判断し、二相コミットを実施する。これに対して、図１に示す構成においては、一相コミットを実施する。
【００３５】
≪計算機の処理≫
次に、図４ないし図７を用いて、トランザクション処理を一相コミットする手順の詳細について説明する。本発明の実施の形態では、ＡＰ１１５がトランザクションを開始し、そのトランザクションの処理の中で複数のリソースアダプタに対する操作を実行する場合に、その操作対象となった複数のリソースアダプタにつながるリソースマネジャが同一であるときに、リソースアダプタ間で連携することで一相コミットを可能とする。
【００３６】
図４および図５は、本発明の実施の形態における一相コミットを実現する処理の具体例を示すシーケンス図であり、図１で示す構成に対応するものである。この処理では、ＡＰ１１５が、トランザクションを開始して、まず、トランザクション内でリソースアダプタＲＡ２（１３０）に対する操作を行い、次に、ＲＡ３（１４０）に対する操作を行い、その後、トランザクションを決着する。なお、図１で示したＡＰ１１５のＲＡ１（１２０）に対する操作は、ＲＡ２（１３０）およびＲＡ３（１４０）に対する操作と異なるスレッドで実行している別のトランザクションに関するものであるので、図４および図５のシーケンス図に含めないことにする。
【００３７】
図４に示すように、計算機２００において、まず、トランザクションの実行のために、ＡＰ１１５がＴＭ（トランザクションマネジャ）１５０に対してトランザクション開始の指示を発行する（ステップＳ４００）。次に、ＡＰ１１５がＡＰＩ２（１３１）に対して操作する（ステップＳ４０１）。その例として、ＡＰＩ２（１３１）を通じた、メッセージ取り出し（メッセージ取得）の操作を示している。そして、ＡＰＩ２（１３１）は、リソースアダプタグループ管理テーブル１００を参照し、同一トランザクションに関連付いているリソースアダプタの存在有無を確認し、その確認内容に応じて更新する（ステップＳ４０２）。その詳細は、図６を用いて後記する。本シーケンスでは、ＡＰ１１５がトランザクション開始後の最初の操作となるため、同一トランザクションに参加しているリソースアダプタは存在しない。ここで、図１に示すリソースアダプタグループ管理テーブル１００のトランザクション開始済みリソースアダプタ一覧１００ａにレコード１０５を追加する。
【００３８】
続いて、ＡＰＩ２（１３１）は、ＲＡ２（１３０）に含まれるＤＢＣｏｎｎ２（１３２）を取得する（ステップＳ４０３）ために、コンテナ１６０を呼び出す。コンテナ１６０は、ＤＢＣｏｎｎ２（１３２）がまだ生成されていないため、ＲＡ２（１３０）に対してコネクション生成を要求し、ＲＡ２（１３０）からＤＢＣｏｎｎ２（１３２）がリターンされることで、ＤＢＣｏｎｎ２（１３２）が生成される（ステップＳ４０４）。そして、コンテナ１６０は、ステップＳ４０４で生成されたＤＢＣｏｎｎ２（１３２）からＴＭＡＰＩ２（１３３）を取得する（ステップＳ４０５）。コンテナ１６０は、ＴＭ１５０に対して、ステップＳ４０５で取得したＴＭＡＰＩ２（１３３）を渡す（ステップＳ４０６）ことで、トランザクションの関連付けを実行する。
【００３９】
ＴＭ１５０は、ステップＳ４０６で渡されたＴＭＡＰＩ２（１３３）を管理下に入れて、ステップＳ４００で開始したトランザクションに関連付けるために、ＴＭＡＰＩ２（１３３）に対してトランザクション開始を実行する（ステップＳ４０７）。ＡＰＩ２（１３１）は、取得したＤＢＣｏｎｎ２（１３２）に対してメッセージ取り出しの要求を発行する（ステップＳ４０８）。ＤＢＣｏｎｎ２（１３２）は、ＡＰＩ２（１３１）からの要求を受けて、ＤＢＭＳ２（１８０）にＳＱＬ（Structured Query Language）のＳＥＬＥＣＴ文を発行し（ステップＳ４０９）、該当するレコードを取得する。そして、その取得したレコードをメッセージの形式にして呼び出し元のＡＰＩ２（１３１）にリターンする。さらに、ＡＰＩ２（１３１）は、そのメッセージとともにＡＰ１１５にリターンする。
【００４０】
次に、図５に示すように、ＡＰ１１５は、ＡＰＩ３（１４１）への操作として業務データ更新の指示をＡＰＩ３（１４１）に発行する（ステップＳ５１０）。ＡＰＩ３（１４１）は、リソースアダプタグループ管理テーブル１００を参照し、ステップＳ４０２で図１に示すリソースアダプタグループ管理テーブル１００のトランザクション開始済みリソースアダプタ一覧１００ａにレコード１０５が追加されていることから、既に同一トランザクション内で実行しているリソースアダプタＲＡ２（１３０）が存在していることを認識する（ステップＳ５１１）。このときに、レコード１０６を追加し、さらにリソースアダプタ依存関係一覧１００ｂのレコード１１１を追加する。これによって、ＲＡ３（１４０）がＲＡ２（１３０）と連携することが、リソースアダプタグループ管理テーブル１００に示されることになる。リソースアダプタグループ管理テーブル１００に関する処理については、図６を用いて後記する。
【００４１】
ＡＰＩ３（１４１）は、既に同一トランザクション内で実行しているＲＡ２（１３０）が存在していることがわかったので、ＡＰＩ３（１４１）が含まれているＲＡ３（１４０）のＤＢコネクションを取得せず、ＲＡ２（１３０）のＤＢコネクションをコンテナ１６０から取得する（ステップＳ５１２）。ここで、コンテナ１６０は、既に生成済みのＤＢＣｏｎｎ２（１３２）が管理下にあるので、ＲＡ２（１３０）の新たなＤＢコネクションは生成せずにＤＢＣｏｎｎ２（１３２）をリターンする。つまり、従来の処理方式ならばＲＡ３（１４０）のＤＢコネクションが生成されるが、本発明の実施の形態ではＡＰＩ２（１３１）とＡＰＩ３（１４１）との間でＤＢＣｏｎｎ２（１３２）を共有することになり、ＤＢコネクションを１つ生成する必要がなくなるので、使用する消費リソースを削減することができる。ＡＰＩ２（１３１）は、取得したＤＢＣｏｎｎ２（１３２）に対して業務データ更新の要求を発行する（ステップＳ５１３）。ＤＢＣｏｎｎ２（１３２）は、ＳＱＬのＵＰＤＡＴＥ文をＤＢＭＳ２（１８０）に対して発行する（ステップＳ５１４）。
【００４２】
ＡＰ１１５は、ＡＰＩ２（１３１）への操作およびＡＰＩ３（１４１）への操作が完了すると、次にＴＭ１５０に対してトランザクション決着の要求を発行する（ステップＳ５１５）。ＴＭ１５０は、トランザクションに関連付いているのがＴＭＡＰＩ２（１３３）だけであると判断するので、ＴＭＡＰＩ２（１３３）に対してのみトランザクション決着要求を発行する（ステップＳ５１６）。従来の処理方式ならばＲＡ３（１４０）のＴＭインタフェースも決着の対象に含まれるので、二相コミットが必要となるが、本発明の実施の形態では決着対象がＴＭＡＰＩ２（１３３）の１つだけとなるので、コミットを一相化することができる。ＴＭＡＰＩ２（１３３）は、トランザクション決着要求を受け取ると、リソースアダプタグループ管理テーブル１００を参照して当該ＴＨＲＩＤに関連するレコードを削除する（ステップＳ５１７）。その詳細は、図７を用いて後記する。
【００４３】
図６は、リソースアダプタのＡＰインタフェースがＡＰから操作要求を受けたときに行うリソースアダプタグループ管理テーブルに関する処理を示すフローチャートである。ＡＰインタフェースは、ＡＰ１１５から呼び出されると、まず、トランザクション開始済みリソースアダプタ一覧１００ａを参照する（ステップＳ６０１）。そして、同一ＴＨＲＩＤ１０１かつ同一ＲＭＩＤ１０２で実行しているリソースアダプタが存在するか否か、また存在した場合、何個存在しているかを調べる（ステップＳ６０２）。ここで、ＴＨＲＩＤは、ＡＰ１１５からの要求パラメータとして入力する。また、ＲＭＩＤは、当該リソースアダプタが対応しているリソースマネジャの識別子である。
【００４４】
同一ＴＨＲＩＤ１０１かつ同一ＲＭＩＤ１０２で実行しているリソースアダプタが存在しない場合（ステップＳ６０２の「０」）、ステップＳ６０７の処理を行う。
【００４５】
同一ＴＨＲＩＤ１０１かつ同一ＲＭＩＤ１０２で実行しているリソースアダプタが１つ存在していた場合（ステップＳ６０２の「１」）、リソースアダプタ依存関係一覧１００ｂに、既にトランザクション実行中のリソースアダプタを依存先ＲＡＩＤ１０９、また当該リソースアダプタを依存ＲＡＩＤ１１０とするレコードを追加する（ステップＳ６０３）。
【００４６】
同一ＴＨＲＩＤ１０１かつ同一ＲＭＩＤ１０２で実行しているリソースアダプタが２つ以上存在していた場合（ステップＳ６０２の「２以上」）、リソースアダプタ依存関係一覧１００ｂを参照する（ステップＳ６０４）。そして、ＴＨＲＩＤ１０７が同一である依存先リソースアダプタの依存先ＲＡＩＤ１０９を特定する（ステップＳ６０５）。そのレコードに対して、ＡＰインタフェースが含まれるリソースアダプタの名称（ＲＡＩＤ）を２つ目以降の依存ＲＡＩＤ１１０として追加する（ステップＳ６０６）。
【００４７】
ＡＰインタフェースは、さらに、ステップＳ６０２の判定のいずれの場合にも、当該リソースアダプタの名称（ＲＡＩＤ）のレコードをトランザクション開始済みリソースアダプタ一覧１００ａに追加する（ステップＳ６０７）。
【００４８】
図７は、リソースアダプタのＴＭインタフェースがトランザクションマネジャからトランザクション決着要求を受けたときに行うリソースアダプタグループ管理テーブルに関する処理を示すフローチャートである。ＴＭインタフェースは、まず、リソースアダプタ依存関係一覧１００ｂを参照する（ステップＳ７０１）。そして、当該ＴＭインタフェースが含まれているリソースアダプタが別のリソースアダプタと連携していたか否かを判定する（ステップＳ７０２）。具体的には、依存先ＲＡＩＤ１０９が当該リソースアダプタであるレコードが登録されているか否かをチェックする。
【００４９】
別のリソースアダプタと連携していた場合（ステップＳ７０２のＹＥＳ）、当該リソースアダプタに含まれるＴＭインタフェースに対して決着要求がきているので、リソースアダプタ依存関係一覧１００ｂの依存先ＲＡＩＤ１０９としてレコードに登録されているはずである。そこで、リソースアダプタ依存関係一覧１００ｂから当該リソースアダプタを依存先ＲＡＩＤ１０９とするレコードを削除する（ステップＳ７０３）。別リソースアダプタと連携していなかった場合（ステップＳ７０２のＮＯ）、ステップＳ７０３の処理をスキップする。
【００５０】
ＴＭインタフェースは、さらに、ステップＳ７０２の判定のいずれの場合にも、トランザクション開始済みリソースアダプタ一覧１００ａから相互に関連付いているＴＨＲＩＤ１０１のレコードを削除する（ステップＳ７０４）。別のリソースアダプタと連携していた場合には、複数のリソースアダプタ（ＲＡＩＤ１０３）が同一のＴＨＲＩＤ１０１を持つレコードとして登録されているので、該当するレコードを削除する。
【００５１】
なお、ステップＳ７０３およびＳ７０４の処理は、具体例として、図１に示すリソースアダプタグループ管理テーブル１００のうち、リソースアダプタ依存関係一覧１００ｂにおけるレコード１１１、トランザクション開始済みリソースアダプタ一覧１００ａにおけるレコード１０５および１０６を削除することに相当する。
【００５２】
以上説明した本発明の実施の形態によれば、複数のリソースアダプタが単一のリソースマネジャを共有している場合であっても、一相コミットを行うことが可能である。また、トランザクションマネジャが限定されたリソースアダプタと通信を行い、その限定されたリソースアダプタがリソースマネジャと通信を行うので、計算機におけるトランザクションマネジャの通信回数やリソースマネジャとのコネクション資源を最低限に抑えることが可能である。以上によれば、アプリケーションの実行性能を向上させ、リソースアダプタの消費資源を削減することができる。
【００５３】
以上本発明の実施の形態について説明したが、図１に示す計算機２００のそれぞれで実行されるプログラム（計算機制御プログラムを含む）をコンピュータによる読み取り可能な記録媒体に記録し、この記録媒体に記録されたプログラムをコンピュータに読み込ませ、実行することにより、本発明の実施の形態に係る計算機が実現されるものとする。なお、プログラムをインターネットなどのネットワーク経由でコンピュータに提供するようにしてもよい。
【００５４】
以上本発明について好適な実施の形態について一例を示したが、本発明は前記実施の形態に限定されず、本発明の趣旨を逸脱しない範囲で適宜変更が可能である。例えば、計算機は１台の場合で説明したが、複数台で分散処理を行うようにしてもよい。また、データベース記憶域を持つハードディスク装置を、計算機とは別の装置に配置し、その間をネットワーク接続するようにしてもよい。
【図面の簡単な説明】
【００５５】
【図１】本発明の実施の形態に係る計算機におけるソフトウェアのモジュール構成を示す図である。
【図２】本発明の実施の形態に係る計算機のハードウェア構成を示す図である。
【図３】計算機の基本的なモジュール構成を示す図である。
【図４】本発明の実施の形態における一相コミットを実現する処理の具体例を示すシーケンス図である。
【図５】本発明の実施の形態における一相コミットを実現する処理の具体例を示すシーケンス図である。
【図６】本発明の実施の形態に係るトランザクション開始時に行うリソースアダプタグループ管理テーブルに関する処理を示すフローチャートである。
【図７】本発明の実施の形態に係るトランザクション決着時に行うリソースアダプタグループ管理テーブルに関する処理を示すフローチャートである。
【符号の説明】
【００５６】
１００  リソースアダプタグループ管理テーブル（対応管理情報）
１０１  ＴＨＲＩＤ（プログラム識別情報）
１０２  ＲＭＩＤ（リソース管理部）
１０３  ＲＡＩＤ（リソースアダプタ部）
１１５  ＡＰ（アプリケーションプログラム）
１２０  リソースアダプタ（リソースアダプタ部）
１３０  リソースアダプタ（第１のリソースアダプタ部）
１４０  リソースアダプタ（第２のリソースアダプタ部）
１２１、１３１、１４１  ＡＰインタフェース（アプリケーションインタフェース部）
１２２、１３２  ＤＢコネクション（コネクション制御部）
１２３、１３３  ＴＭインタフェース（トランザクション管理インタフェース部）
１５０  トランザクションマネジャ（トランザクション管理部）
１７０、１８０  データベースアクセス制御（リソース管理部）
２００  計算機
２１０  メモリ（記憶部）
２３０  ＣＰＵ（処理部）
【図１】
0004676825.tif 000002
【図２】
0004676825.tif 000003
【図３】
0004676825.tif 000004
【図４】
0004676825.tif 000005
【図５】
0004676825.tif 000006
【図６】
0004676825.tif 000007
【図７】
0004676825.tif 000008