(57)【特許請求の範囲】
【請求項１】
トランザクションミドルウェアマシン環境において、分散トランザクションのロックをサポートするためにコンピュータが実行する方法であって、
グローバルトランザクション識別子を用いて、トランザクションハッシュテーブルにおいて、ハッシュバケットを特定するステップを備え、前記トランザクションハッシュテーブルは、複数のハッシュバケットを含み、
前記トランザクションハッシュテーブルにおいて、前記ハッシュバケットをロックするステップと、
前記ハッシュバケットのロックが解除される前に、トランザクションテーブル内の１つ以上のグローバルトランザクションエントリ構造にアクセスするプロセスを１つのみに制限する設定を行なうステップとを備え、前記１つ以上のグローバルトランザクションエントリ構造は、前記トランザクションハッシュテーブルにおいてロックされた前記ハッシュバケットに関連付けられている、方法。
【請求項２】
トランザクションミドルウェアマシン環境において、分散トランザクションのロック機構を提供するためのシステムであって、
１つ以上のプロセッサと、
前記１つ以上のプロセッサ上で動作するトランザクションサーバとを備え、
前記トランザクションサーバは、
グローバルトランザクション識別子を用いて、複数のハッシュバケットを含むトランザクションハッシュテーブルにおいて、ハッシュバケットを特定し、
前記トランザクションハッシュテーブルにおいて、前記ハッシュバケットをロックし、
前記ハッシュバケットのロックが解除される前に、トランザクションテーブル内の１つ以上のグローバルトランザクションエントリ構造にアクセスするプロセスを１つのみに制限するように動作し、前記１つ以上のグローバルトランザクションエントリ構造は、前記トランザクションハッシュテーブルにおいてロックされた前記ハッシュバケットに関連付けられている、システム。
【請求項３】
前記トランザクションサーバは、別のグローバルトランザクション識別子を用いて、前記トランザクションハッシュテーブルにおいて、別のハッシュバケットを特定するように動
作する、請求項２に記載のシステム。
【請求項４】
前記トランザクションサーバは、前記トランザクションテーブル内の１つ以上の別のグローバルトランザクションエントリ構造に対する別のプロセスのアクセスを許可するように動作し、
前記１つ以上の別のグローバルトランザクションエントリ構造は、前記トランザクションハッシュテーブル内の前記別のハッシュバケットに関連付けられている、請求項３に記載のシステム。
【請求項５】
共有メモリは、前記トランザクションハッシュテーブルを格納する、請求項２〜４のいずれか１項に記載のシステム。
【請求項６】
前記トランザクションサーバは、
前記共有メモリをロックし、
新規グローバルトランザクション識別子および１つ以上の新規グローバルトランザクションエントリ構造を作成し、
前記１つ以上の新規グローバルトランザクションエントリ構造を前記トランザクションテーブルに追加し、
前記共有メモリのロックを解除するように、動作する、請求項５に記載のシステム。
【請求項７】
前記トランザクションサーバは、
前記トランザクションハッシュテーブルにおいて、前記新規グローバルトランザクション識別子に関連付けられた別のハッシュバケットをロックし、
前記１つ以上の新規グローバルトランザクションエントリ構造を前記トランザクションハッシュテーブル内の別のハッシュバケットにリンクし、
前記トランザクションハッシュテーブル内の前記別のハッシュバケットのロックを解除するように、動作する、請求項６に記載のシステム。
【請求項８】
前記トランザクションサーバは、
前記トランザクションハッシュテーブル内の前記ハッシュバケットから、前記１つ以上のグローバルトランザクションエントリ構造を切り離し、
前記トランザクションハッシュテーブル内の前記ハッシュバケットのロックを解除し、
前記共有メモリをロックし、
前記トランザクションテーブルから、前記１つ以上のグローバルトランザクションエントリ構造を削除し、
前記共有メモリのロックを解除するように、動作する、請求項５〜７のいずれか１項に記載のシステム。
【請求項９】
前記共有メモリは、グローバルトランザクション制御構造およびトランザクションログ制御構造を格納する、請求項５〜８のいずれか１項に記載のシステム。
【請求項１０】
前記トランザクションサーバは、グローバルトランザクション識別子を有するグローバルトランザクションに一セットのロックを与えるように動作し、前記ロックのセットは、共有メモリのロックと、前記グローバルトランザクション制御構造およびトランザクションログ制御構造のロックと、前記トランザクションハッシュテーブル内のハッシュバケットのロックを含む、請求項９に記載のシステム。
【請求項１１】
命令を記憶する機械読み取り可能なプログラムであって、当該命令は、実行されると、以下のステップをシステムに実行させ、当該以下のステップは、
グローバルトランザクション識別子を用いて、共有メモリに格納されたトランザクションハッシュテーブルにおいてハッシュバケットを特定するステップを備え、前記トランザクションハッシュテーブルは、複数のハッシュバケットを含み、
前記トランザクションハッシュテーブル内の前記ハッシュバケットをロックするステップと、
前記ハッシュバケットのロックが解除される前に、共有メモリに格納されたトランザクションテーブル内の１つ以上のグローバルトランザクションエントリ構造にアクセスするプロセスを１つのみに制限する設定を行なうステップとを備え、前記１つ以上のグローバルトランザクションエントリ構造は、前記トランザクションハッシュテーブルにおいてロックされた前記ハッシュバケットに関連付けられている、プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
著作権の表示
この特許文書の開示の一部には、著作権保護の対象となるものが含まれている。著作権者は、特許商標庁の特許ファイルまたは記録に掲載された特許文書または特許開示の複製に対しては異議を唱えないが、その他の場合、すべての著作権を留保する。
【０００２】
発明の分野
本発明は、一般的に、ミドルウェアなどのコンピュータシステムおよびソフトウェアに関し、特に、トランザクションミドルウェアマシン環境のサポートに関する。
【背景技術】
【０００３】
背景
トランザクションミドルウェアシステムまたはトランザクション指向ミドルウェアは、組織内のさまざまなトランザクションを処理することができるエンタープライズアプリケーションサーバを含む。高性能ネットワークおよびマルチプロセッサコンピュータなどの新技術の開発によって、トランザクションミドルウェアの性能をさらに改善する必要がある。これらは、本発明の実施形態が対処しようとする一般的領域である。
【発明の概要】
【課題を解決するための手段】
【０００４】
概要
本明細書は、トランザクションミドルウェアマシン環境において、分散トランザクションのロックをサポートすることができるシステムおよび方法を記載する。システムは、グローバルトランザクション識別子を用いて、トランザクションハッシュテーブルにおいて、ハッシュバケットを特定することができる。トランザクションハッシュテーブルは、複数のハッシュバケットを含む。システムは、トランザクションハッシュテーブルにおいて、ハッシュバケットをロックすることができる。システムは、ハッシュバケットのロックが解除される前に、トランザクションハッシュテーブル内の１つ以上のグローバルトランザクションエントリ構造にアクセスするプロセスを１つのみに制限することができる。この１つ以上のグローバルトランザクションエントリ構造は、トランザクションハッシュテーブルにおいてロックされたハッシュバケットに関連付けられている。
【図面の簡単な説明】
【０００５】
【図１】本発明の一実施形態に従って、トランザクションミドルウェアマシン環境内の共有メモリを示す図である。
【図２】本発明の一実施形態に従って、トランザクションロック機構をサポートするトランザクションミドルウェアマシン環境を示す図である。
【図３】本発明の一実施形態に従って、トランザクションミドルウェアマシン環境内のグローバルトランザクションテーブル（ＧＴＴ）にエントリの追加を示す図である。
【図４】本発明の一実施形態に従って、トランザクションミドルウェアマシン環境内のグローバルトランザクションテーブルからエントリ（ＧＴＴ）の削除を示す図である。
【図５】本発明の一実施形態に従って、トランザクションミドルウェアマシン環境内の粒状ロック機構（granular lock mechanism）の支持を示す図である。
【図６】本発明の一実施形態に従って、トランザクションミドルウェアマシン環境内のトランザクションロック機構の支持を示す例示的なフローチャートである。
【発明を実施するための形態】
【０００６】
詳細な説明
本明細書は、トランザクションミドルウェアマシン環境において、分散トランザクションのロックをサポートすることができるシステムおよび方法を記載する。
【０００７】
本発明の一実施形態によれば、迅速に用意することができ且つオンデマンドで拡張することができる大規模並列処理インメモリグリッドを含むＪａｖａ（登録商標）ＥＥアプリケーションサーバ複合体を提供するために、本発明のシステムは、６４ビットプロセッサ技術などの高性能ハードウェア、高性能大容量のメモリ、冗長インフィニバンド（InfiniBand）およびイーサネット（登録商標）ネットワーク、並びにＷｅｂＬｏｇｉｃ（登録商標）スイートなどのアプリケーションサーバまたはミドルウェア環境の組み合わせを含む。一実施形態によれば、本発明のシステムは、アプリケーションサーバグリッド、ストレージエリアネットワーク、およびインフィニバンド（ＩＢ）ネットワークを形成するフルラック、ハーフラックまたはクォーターラックもしくは他の構成として展開されることができる。ミドルウェアマシンソフトウェアは、アプリケーションサーバ、ミドルウェアおよび他の機能、例えば、ＷｅｂＬｏｇｉｃ  Ｓｅｒｖｅｒ、ＪＲｏｃｋｉｔもしくはＨｏｔｓｐｏｔ  ＪＶＭ、Ｏｒａｃｌｅ  Ｌｉｎｕｘ（登録商標）もしくはＳｏｌａｒｉｓ、およびＯｒａｃｌｅ（登録商標）  ＶＭなどを形成することができる。一実施形態によれば、本発明のシステムは、ＩＢネットワークを介して互いに通信する複数の計算ノード、ＩＢスイッチゲートウェイ、およびストレージノードまたはストレージユニットを含むことができる。ラック構成として実装される場合、ラックの未使用部分は、空のままにしてもよく、充填物で充填されてもよい。
【０００８】
本発明の一実施形態によれば、本明細書において「Ｓｕｎ  Ｏｒａｃｌｅ  Ｅｘａｌｏｇｉｃ」または「Ｅｘａｌｏｇｉｃ」と称されたシステムは、ＯｒａｃｌｅミドルウェアＳＷスイートまたはＷｅｂＬｏｇｉｃなどのミドルウェアまたはアプリケーションサーバソフトウェアをホストするために、展開容易な解決案である。本明細書に説明するように、一実施形態に従ったシステムは、ミドルウェアアプリケーションをホストするために必要とされる１つ以上のサーバ、ストレージユニット、ストレージネットワーク用のＩＢファブリック、およびすべての他の要素を含む「グリッドボックス」（grid in a box）である。例えば、リアルアプリケーションクラスタおよびＥｘａｌｏｇｉｃオープンストレージなどを使用する大規模並列グリッドアーキテクチャを活用することによって、すべての種類のミドルウェアアプリケーションに高性能を提供することができる。このシステムは、線形Ｉ／Ｏ拡張性によって改善した性能を提供し、使用および管理が簡単であり、ミッションクリティカルな可用性および信頼性を提供する。
【０００９】
本発明の一実施形態によれば、タキシード（TUXEDO）は、高性能分散型ビジネスアプリケーションの構築、実行および管理を可能にするソフトウェアモジュールのセットであり、トランザクションミドルウェアとして多くの複層アプリケーション開発ツールに使用されている。タキシードは、分散トランザクション処理を管理するために、分散コンピューティング環境に使用することができるミドルウェアプラットフォームである。タキシードは、無制限の拡張性および標準ベースの相互運用性を提供しながら、エンタープライズレガシーアプリケーションのロックを解除し、エンタープライズレガシーアプリケーションをサービス指向アーキテクチャに拡張するための有効なプラットフォームである。
【００１０】
本発明の一実施形態によれば、タキシードシステムのようなトランザクションミドルウェアシステムは、複数のプロセッサを備える高速マシン、例えばＥｘａｌｏｇｉｃミドルウェアマシン、および高性能ネットワーク接続、例えばインフィニバンド（ＩＢ）ネットワークを利用することができる。
【００１１】
共有メモリおよびロック
図１は、本発明の一実施形態に従って、トランザクションミドルウェアマシン環境内の共有メモリを示す図である。図１に示すように、共有メモリデータ構造１１０を用いて、ネームサービス、トランザクション管理およびランタイム制御をサポートするなどのさまざまな目的のために、トランザクションミドルウェアマシン環境１００において情報を保持することができる。
【００１２】
例えば、タキシードシステムは、少なくとも部分的に複製することができる分散型共有メモリである電子掲示板（ＢＢ）を利用することができる。また、タキシードシステムは、ＢＢを共有する一セットの協働作業するクライアントプロセスおよびサーバプロセスに、アプリケーションを分配することができる。
【００１３】
図１に示すように、共有メモリ１１０は、複数のトランザクション関連セクション、例えば、トランザクションハッシュテーブル１０１、トランザクションテーブル１０２、グローバルトランザクション制御構造１０３、およびトランザクションログ制御構造１０４を含むことができる。
【００１４】
トランザクションテーブル１０２は、複数のグローバルトランザクションエントリ構造１２１〜１２５を含むことができる。例えば、タキシード内のグローバルトランザクションテーブル（ＧＴＴ）１０２は、複数のグローバルトランザクションテーブルエントリ（ＧＴＴＥ）１２１〜１２５を含むことができる。グローバルトランザクションエントリ構造の各々は、異なるグローバルトランザクションに関する共有情報を含むことができる。
【００１５】
タキシード内のグローバルトランザクションハッシュテーブル、例えばトランザクションハッシュテーブル１０１を用いて、グローバルトランザクションテーブル１０２内の異なるエントリに高速にアクセスすることができる。グローバルトランザクションテーブルのハッシングは、グローバルトランザクション識別子（ＧＴＲＩＤ）に基づいて行うことができる。
【００１６】
グローバルトランザクション制御構造１０３は、異なるグローバルトランザクション上の各種制御情報を含む。例えば、タキシード内のＴＭＧＣＴＬ構造は、（マシンＩＤと共に）ＧＴＲＩＤの一意性を保証することができる時間およびカウンタ値を含む。また、新規ＧＴＲＩＤを作成する際に、ＴＭＧＣＴＬ構造を使用することができる。
【００１７】
トランザクションログ制御構造１０４は、異なるグローバルトランザクションログファイルの各種制御情報を含む。例えば、タキシード内のＴＭＴＬＧＣＴＬ構造は、トランザクションログ（ＴＬＯＧ）ファイルの状態に関する情報を含み、ＴＬＯＧファイルを更新する際に使用されることができる。
【００１８】
本発明の一実施形態によれば、複数のプロセスまたはスレッドが共有メモリ１１０上のデータを読み取るまたは書き込む際に、システムは、ロック１０５を用いて、ダーティ読み取りおよび／またはダーティ書き込みを回避することができる。プロセス（またはスレッド）が共有メモリ１１０にアクセスする際に、ロック１０５を適用することができる。これによって、共有メモリ１１０内に保護されたデータは、一度に１つのみのプロセスまたはスレッドにアクセスされる。
【００１９】
例えば、タキシードにおいて、ＢＢは、ユーザレベルセマフォを用いて保護される。このユーザレベルセマフォは、ＯＳカーネルによって提供されるセマフォよりも高速なロック機構である。このテストアンドセット（ＴＡＳ）の組立コンポーネントに基づいたユーザーセマフォは、臨界期において、ＢＢの異なるセクションに対して単一のアクセスを確保することができる。一方、ユーザレベルセマフォアルゴリズムは、ロックの順序を保証できない（すなわち、システムは、最先の要求者にロックを引き渡すことを保証することはできない）場合がある。
【００２０】
さらに、ロック１０５は、再帰することができる。すなわち、システムにおいて、同様のプロセスは、ロック１０５を繰り返して適用することができる。
【００２１】
利点として、ソフトウェア開発者は、任意の時点で特定のプロセスがロック１０５を保有している（または保有していない）か否かを心配する必要がないということである。また、ソフトウェア開発者は、ロック１０５を既存のコードに簡単に導入することができる。
【００２２】
トレードオフとは、ジャイアントロック（Giant lock）であるロック１０５を用いて、コードの大部分を任意の長さの時間帯にロックすることができることである。また、ソフトウェア開発者は、アプリケーションに対して粗い制御しかできない。例えば、アプリケーションプログラムに問題が生じる際に、ロック１０５に関与する根本的な原因を特定することは困難である。その理由は、ロック１０５が複数回に適用されるため、問題を生じさせるトリガーが、コードにおいて、ハング／デッドロックが発生した場所から遠くに位置する可能性があるからである。
【００２３】
また、ロック１０５は、粗い粒度（granularity）を有するため、トランザクションシナリオにおいて、高競合を引き起こすおよび／または高競合に遭遇する可能性がある。ロック１０５の粒度が粗くなればなるほど、ロック１０５が無関係なプロセスで停止する／ハングする可能性が高くなる。
【００２４】
トランザクションロックの配布
図２は、本発明の一実施形態に従って、トランザクションロック機構をサポートするトランザクションミドルウェアマシン環境を示す図である。図２に示すように、トランザクションミドルウェアマシン環境２００において、１つ以上のトランザクション２０３および２０４を使用することによって、トランザクションの性能を改善することができる。
【００２５】
本発明の一実施形態によれば、システムは、グローバルトランザクションテーブル（ＧＴＴ）２０２内の異なるグローバルトランザクションエントリ構造（例えば、ＧＴＴＥ２２１〜２２５）にアクセスするために、トランザクションハッシュテーブル２０１内の異なるハッシュバケット（例えば、バケット２１１〜２１７）に別々のトランザクションロックを適用することができる。各トランザクションハッシュリンクは、ユーザレベルセマフォに基づいた専用のロック（例えば、トランザクションロック２０３または２０４）を使用することができる。
【００２６】
システムは、例えば、ＧＴＲＩＤ  ２１０を用いてハッシュ関数を計算することによって、ハッシュバケット２１３を特定することができる。さらに、システムは、ＧＴＴエントリ２１３を操作するために、トランザクションハッシュテーブルバケット２１３をロックすることができる。システムは、ハッシュテーブルバケット２１３のロックを解除し、ＧＴＴエントリ２２２にアクセスしようとする別のプロセスのために、ロック２０３を外すことができる。
【００２７】
また、システムは、ＧＴＲＩＤ  ２２０を用いて、ハッシュバケット２１６を特定することができる。さらに、システムは、ＧＴＴエントリ２２３を操作するために、トランザクションハッシュテーブルバケット２１６をロックすることができる。システムは、ハッシュテーブルバケット２２３のロックを解除し、ＧＴＴエントリ２２３にアクセスしようとする別のプロセスのために、ロック２０４を外すことができる。
【００２８】
本発明の一実施形態によれば、トランザクションロック２０３および２０４は、非再帰的にすることができ、システムは、必要な場合のみまたはできるだけ短い期間でトランザクションロック２０３および２０４を保持しようとする可能性がある。
【００２９】
さらに、システムは、あるプロセスが現在ではトランザクションハッシュロックを保有しているか否かをすぐに知るために、制御構造（例えば、タキシードＲＴＥ）にトランザクションロックフラグを追加することができる。例えば、タキシード内のトランザクションロックフラグによって、ソフトウェア開発者は、BBLOCK（）ファンクションを呼び出す前に、トランザクションのロックを解除する必要があるか否かを容易に知ることができる。また、ソフトウェア開発者は、別のトランザクションのロックを要求する前に、あるアプリケーションがトランザクションロックを保有しているか否かを明確に知ることができる。
【００３０】
本発明の一実施形態によれば、トランザクションハッシュテーブルロックの数を固定しなくてもよく、大きい数字にしてもよい。例えば、タキシードにおいて、ＧＴＴハッシュテーブルのサイズをＧＴＴのサイズの倍にすることができる。
【００３１】
さらに、２つ以上のＧＴＴエントリが同一のハッシュバケットに帰属された場合、異なるＧＴＴエントリは、同様のトランザクションロック（すなわち、同様のトランザクションハッシュテーブルロック）を使用することができる。実装を容易にするために、システムにおいて、２つのハッシュ値は、１つのミューテックス（mutex）を共有することができ、追加のＢＢテーブルの作成を回避するために、ＧＴＴにハッシュミューテックスを配置することができる。
【００３２】
本発明の一実施形態によれば、トランザクションミドルウェアマシン環境２００は、トランザクションテーブルハッシュバケット２１３および２１４のトランザクションロック２０３および２０４に加えて、共有メモリのロック２０５を含むことができる。
【００３３】
例えば、タキシードにおいて、トランザクションテーブルエントリを割り当てるまたは割り当てを解除するときに、ＧＴＲＩＤのカウンタを増分するときに、および現在のＴＬＯＧページのカウンタを増分するときに、トランザクションロック２０３および２０４から独立するＢＢロック２０５を維持することができる。
【００３４】
さらに、ＴＭＧＣＴＬおよびＴＭＴＬＧＣＴＬデータ構造などの制御構造の操作が頻繁ではないため、ＢＢロック２０５を用いて、これらの制御構造を保護することができる。代替的に、ＴＭＧＣＴＬ構造の各々は、別々のロックを使用することも可能である。
【００３５】
図３は、本発明の一実施形態に従って、トランザクションミドルウェアマシン環境内のグローバルトランザクションテーブル（ＧＴＴ）にエントリの追加を示す図である。
【００３６】
ステップ３０１において、システムは、トランザクションミドルウェアマシン環境３００内の共有メモリ、例えばタキシードＢＢをロックすることができる。ステップ３０２において、システムは、新規ＧＴＲＩＤを作成することができる。ステップ３０３において、システムは、ＧＴＲＩＤに基づいて、新規ＧＴＴエントリを作成することができる。ステップ３０４において、システムは、トランザクションテーブル、例えばタキシードＴＭＧＴＴＥテーブルにＧＴＴエントリを追加することができる。ステップ３０５において、他のプロセスが共有メモリにアクセスできるように、システムは、共有メモリのロックを解除することができる。
【００３７】
ステップ３０６において、システムは、（例えば、ＧＴＲＩＤに基づくハッシングを用いて）トランザクションハッシュテーブルにおいて、ハッシュバケットを特定することができる。ステップ３０７において、システムは、トランザクションハッシュテーブルにおいて、ハッシュバケットをロックすることができる。ステップ３０８において、システムは、ＧＴＴエントリをトランザクションハッシュテーブル内のハッシュバケットにリンクすることができる。ステップ３０９において、システムは、ハッシュテーブルバケットのロックを解除することができる。
【００３８】
図４は、本発明の一実施形態に従って、トランザクションミドルウェアマシン環境内のグローバルトランザクションテーブルからエントリ（ＧＴＴ）の削除を示す図である。
【００３９】
ステップ４０１において、システムは、トランザクションミドルウェアマシン環境４００において、ＧＴＲＩＤを用いて、トランザクションハッシュテーブルにおいて、ハッシュバケットを特定することができる。ステップ４０２において、システムは、トランザクションハッシュテーブルにおいて、ハッシュバケットをロックすることができる。ステップ４０３において、システムは、トランザクションハッシュテーブル内のハッシュバケットからＧＴＴエントリを切り離すことができる。ステップ４０４において、他のプロセスがトランザクションハッシュテーブル内のハッシュバケットを再利用できるように、システムは、トランザクションハッシュテーブル内のハッシュバケットのロックを解除することができる。
【００４０】
ステップ４０５において、システムは、共有メモリをロックすることができる。ステップ４０６において、システムは、ＴＭＧＴＴＥテーブル内のＧＴＴエントリを削除することができる。ステップ４０７において、他のプロセスが共有メモリにアクセスできるように、システムは、共有メモリのロックを解除することができる。
【００４１】
図５は、本発明の一実施形態に従って、トランザクションミドルウェアマシン環境内の粒状ロック機構の支持を示す図である。図５に示すように、トランザクションミドルウェアマシン環境５００内の共有メモリ５０８は、複数のトランザクション関連セクション、例えば、（複数のハッシュバケット、例えばバケット５１１〜５１７を含む）トランザクションテーブル５０１、（複数のエントリ、例えばＧＴＴＥ５２１〜５２５を含む）トランザクションテーブル５０２、グローバルトランザクション制御構造５０３、およびトランザクションログ制御５０４を含むことができる。
【００４２】
トランザクションミドルウェアマシン環境５００によって、プロセス（またはスレッド）は、共有メモリ５０８上のロック５０７（グローバルトランザクション制御５０３およびトランザクションログ制御５０４などの）制御構造上のロック５０６を含む複数のロックを保有することができる。また、ハッシュバケット５１３に１つ以上のトランザクションロック、例えばトランザクションロック５０５を追加することができる。
【００４３】
本発明の一実施形態によれば、システムは、粒状ロック機構を用いて、異なるプロセスが複数のロックを使用するときに生じ得るロック依存性を対処することができる。
【００４４】
タキシードにおいて、ＢＢロック５０７をインタリーブ方式で異なる場所に使用することができる。ロック依存性は、例えば次のシナリオにおいて問題になる可能性がある。
【００４５】
ファンクションＡは、ＢＢロックを保有しながら、ファンクションＢを呼び出すことができる。よって、ファンクションＢは、再びＢＢをロックすることがある。また、ファンクションＢは、（トランザクションロックを用いて）ＧＴＴＥにアクセスし、ファンクションＣを呼び出すことがあり、これによって、ＢＢに３回目のロックをなすことになる。
【００４６】
単一のプロセス（またはスレッド）に保有されたさまざまなロックのうち、デッドロックを回避するために、システムは、ロックに部分配置方式を適用することができる。例えば、システムは、スコープまたは粒度に基づいて、異なるロックを配置することができる。
【００４７】
図５に示すように、共有メモリ５０８上の最も粗い粒度を有するロック５０７に、最小の番号を割り当てることができる。一方、最も細い粒度を有するトランザクションロック５０５に、最大の番号を割り当てることができる。システムは、制御構造上のロック５０６をその間に追加的に配置することができる。
【００４８】
システムは、任意の時点であるプロセスがトランザクションハッシュテーブル５０１内の１つのみのハッシュバケットをロックすることができること、換言すれば、このプロセスが、すでにハッシュバケットに１つのトランザクションロックを保有しているときに、別のハッシュバケットをロックすることができないことを保証することができる。これによって、システムは、トランザクションロック（または同様の番号が割り当てられたロック）の間に、デッドロックを回避することができる。
【００４９】
さらに、プロセスは、このプロセスがすでに保有しているロックに割り当てられたすべての数字のうち、最大の数字よりも大きい数字を有するロックしか取得できるように設定されている。
【００５０】
例えば、タキシードにおいて、ＢＢロックを保有しているスレッドＡは、トランザクションロックを保有することができる。その理由は、このトランザクションロックには、ＢＢロックに割り当てられた数字よりも大きな数字が割り当てられているからである。一方、トランザクションロックを保有しているスレッドＢは、ＢＢのロックを保有することができない。トランザクションロックがＢＢロックに割り当てられた数字よりも大きな数字が割り当てられているため、スレッドＢは、ＢＢロックを保有する前に、トランザクションロックを先に解除しなければならない。
【００５１】
また、スレッドＢがトランザクションロックを解放した後、スレッドＡは、トランザクションロックを取得することができる。スレッドＡが完了し、トランザクションロックおよびＢＢロックを解放した後、スレッドＢは、両方のロックを取得することができ、デッドロックすることなく、完了するまで実行される。
【００５２】
このように、システムは、プログラマが意図せず、システム内の異なるロックにデッドロックを導入することができる可能性を低減することによって、トランザクションの性能を改善することができる。
【００５３】
図６は、本発明の一実施形態に従って、トランザクションミドルウェアマシン環境内のトランザクションロック機構の支持を示す例示的なフローチャートである。図６に示すように、ステップ６０１において、システムは、グローバルトランザクション識別子を用いて、複数のハッシュバケットを含むトランザクションハッシュテーブルにおいて、ハッシュバケットを特定することができる。ステップ６０２において、システムは、トランザクションハッシュテーブルにおいて、ハッシュバケットロックすることができる。ステップ６０３において、システムは、ハッシュバケットのロックが解除される前に、トランザクションハッシュテーブル内の１つ以上のグローバルトランザクションエントリ構造にアクセスするプロセスを１つのみに制限することができる。この１つ以上のグローバルトランザクションエントリ構造は、トランザクションハッシュテーブルにおいてロックされたハッシュバケットに関連付けられている。
【００５４】
本発明は、１つ以上の従来の汎用または専用デジタルコンピュータ、コンピューティング装置、コンピューティング機械、または１つ以上のプロセッサ、メモリおよび／または本開示の教示に従ってプログラムされたコンピュータ読取可能記憶媒体を含むマイクロプロセッサを用いて、簡便に実施することができる。ソフトウェア分野の当業者には明らかなように、本開示の教示に基づいて、熟練したプログラマは、適切なソフトウェアコーディングを容易に用意することができる。
【００５５】
いくつかの実施形態において、本発明は、コンピュータプログラム製品（メディア）を含む。本発明のコンピュータプログラム製品は、本発明のいずれかのプロセスを実行するようにコンピュータをプログラムするために使用することができる命令をその上に／中に格納する記憶媒体またはコンピュータ読取可能媒体である。記憶媒体は、フロッピーディスク（登録商標）、光ディスク、ＤＶＤ、ＣＤ−ＲＯＭ、マイクロドライブおよび光磁気ディスクを含む任意の種類のディスク、ＲＯＭ、ＲＡＭ、ＥＰＲＯＭ、ＥＥＰＲＯＭ、ＤＲＡＭ、ＶＲＡＭ、フラッシュメモリデバイス、磁気または光カード、（分子メモリＩＣを含む）ナノシステム、または指令および／またはデータの格納に適した任意の種類の媒体またはデバイスを含むことができるが、これらに限定されない。
【００５６】
本発明の上記説明は、例示および説明のために提供されている。本発明を網羅的であることにまたは開示された形態に厳密に限定することを意図するものではない。多くの修正および変更は、当業者にとって明らかであろう。修正および変更は、開示された特徴の任意の適切な組み合わせを含む。実施形態は、本発明の原理およびその実際の応用を最善に説明するために選択され説明された。よって、当業者は、さまざまな実施形態により本発明を理解し、考えられる特定の用途に適したさまざまな修正を行うことができる。なお、本発明の範囲が添付の特許請求の範囲およびその等価物によって定義されることが意図される。
【図１】
0006397053.tif 000002
【図２】
0006397053.tif 000003
【図３】
0006397053.tif 000004
【図４】
0006397053.tif 000005
【図５】
0006397053.tif 000006
【図６】
0006397053.tif 000007