(57)【要約】【課題】永続フレームワーク用単一キャッシュによる事象駆動型トランザクション状態の管理。【解決手段】マルチスレッド環境で永続フレームワークと関連付けられたトランザクションを管理するための方法を提供する。この方法は、各スレッドを一つのイベントキューと関連付けることから始まる。次に、各スレッドと関連付けられた第１のイベントキューに一つの事象が追加される。その事象は一つの永続オブジェクトと関連付けられる。次に、そのスレッド以外のスレッドからその永続オブジェクトに書き込みアクセスできないようにする。次に、その永続オブジェクトと関連付けられた第１のイベントキューに入っている事象が実行される。永続オブジェクトのトランザクション状態を管理可能なコンピュータ可読メディア及びシステムも提供する。【選択図】    図６
2004227569.tif 000002
【特許請求の範囲】
【請求項１】
マルチスレッド環境で永続フレームワークと関連付けられるトランザクションを管理する方法であって、
個々のスレッドをイベントキューと関連付け、
各スレッドと関連付けられた第１のイベントキューに永続オブジェクトと関連付けられた事象を追加し、
当該スレッド以外のスレッドが前記永続オブジェクトに書き込みアクセスするのを禁止し、
前記永続オブジェクトと関連付けられた前記第の１イベントキューに追加された前記事象を実行することを特徴とする方法。
【請求項２】
前記事象は、前記永続オブジェクトの削除、変更又は追加からなるグループから選択されることを特徴とする請求項１に記載の方法。
【請求項３】
各スレッドと関連付けられた第１のイベントキューに、永続オブジェクトと関連付けられた事象を追加する前記方法は、
前記第1のイベントキューにおける前記事象の順番を保存することを特徴とする請求項１に記載の方法。
【請求項４】
前記当該スレッド以外のスレッドが前記永続オブジェクトに書き込みアクセスするのを禁止する方法は、
前期イベントキューと関連付けられたキャッシュに入っている前記永続オブジェクトとロックを関連付けることを特徴とする請求項１に記載の方法。
【請求項５】
複数の事象を前記第の１イベントキューに追加し、
前記複数の事象の一部分を実行する、ことを特徴とする請求項１に記載の方法。
【請求項６】
マルチユーザ環境で永続オブジェクトのトランザクション状態を維持するための方法で、
メインキャッシュに保持されている永続オブジェクトを修正する要求を受け取り、
前記要求と関連付けられたイベントキューに前記メインキャッシュから前記永続オブジェクトをコピーし、
修正された永続オブジェクト及び対応するトランザクションを前記永続オブジェクトと一緒に前記イベントキューに保持し、
前記修正された永続オブジェクトを前記メインキャッシュ及び永続ストレージ装置に書き込み、
前記メインキャッシュ及び前記永続ストレージ装置から前記永続オブジェクトを削除する、ことを特徴とする方法。
【請求項７】
前記永続オブジェクトが前記メインキャッシュから前記イベントキューにコピーされると、前記メインキャッシュに保持されている前記永続オブジェクトへの書き込みアクセスを禁止する、ことを特徴とする請求項６に記載の方法。
【請求項８】
前記マルチユーザ環境の各ユーザは個別のイベントキューと関連付けられることを特徴とする請求項６に記載の方法。
【請求項９】
前記イベントキューと関連付けられた継続的な要求を前記イベントキューの一番下に追加することにより前記永続オブジェクトを修正する要求の受け取り順番を保存する、ことを特徴とする請求項６に記載の方法。
【請求項１０】
前記イベントキューは、前記マルチユーザ環境の単一ユーザに対応することを特徴とする請求項６に記載の方法。
【請求項１１】
複数のクライアントがアクセス可能な永続オブジェクトのトランザクション状態を維持するための方法であって、
複数のクライアントの各々を永続フレームワークの単一キャッシュと関連付けられた一つのイベントキューと関連付け、
永続オブジェクトを修正された永続オブジェクトに修正する要求を受け取ると共に前記永続オブジェクトを前記単一キャッシュに保持し、
前記修正された永続オブジェクトと、トランザクション状態インジケータ、及び前記永続オブジェクトのコピーをそれぞれのイベントキューに、該それぞれのイベントキューに保持された追加永続オブジェクトの継続的な修正の順番が分かるように保持し、
前記複数のクライアントのうち、当該クライアント以外のクライアントが前記単一キャッシュに保持されている前記永続オブジェクトに書き込みアクセスするのを禁止し、
前記それぞれのイベントキューに入っている前記修正された永続オブジェクトを前記単一キャッシュにコミットすること、からなることを特徴とする方法。
【請求項１２】
前記それぞれのイベントキューに保持されている前記追加永続オブジェクトの継続的な修正の一部分が、前記修正永続オブジェクトと共に前記単一キャッシュにコミットされることを特徴とする請求項１１に記載の方法。
【請求項１３】
前記一部分は、共通のトランザクション状態インジケータにより識別されることを特徴とする請求項１２に記載の方法。
【請求項１４】
前記それぞれのイベントキューに入っている前記修正永続オブジェクトが他のイベントキューに一切保持されないようにすることを特徴とする請求項１１に記載の方法。
【請求項１５】
前記永続オブジェクトをコミットした後、前記修正永続オブジェクト及び前記永続オブジェクトを前記それぞれのイベントキューから削除し、
前記単一キャッシュに入っている前記永続オブジェクトを前記修正永続オブジェクトで置き換え、前記修正永続オブジェクトは前記複数のクライアントによる書き込み及び読み取りアクセスが可能である、ことを特徴とする請求項１１に記載の方法。
【請求項１６】
コンピュータシステムで実行されるように構成されたコンピュータプログラム製品で、
各スレッドを一つのイベントキューと関連付けるためのプログラム命令と、
各スレッドと関連付けられた第１のイベントキューに、ある永続オブジェクトと関連付けられた事象を追加するプログラム命令と、
当該スレッド以外のスレッドが前記永続オブジェクトに書き込みアクセスするのを禁止するためのプログラム命令と、
前記永続オブジェクトと関連付けられた前記第1のイベントキューに入っている事象を実行するためのプログラム命令とを有することを特徴とするコンピュータプログラム製品。
【請求項１７】
前記事象は、前記永続オブジェクトの削除、変更、又は追加からなるグループから選択されることを特徴とする請求項１６に記載のコンピュータプログラム製品。
【請求項１８】
スレッドと関連付けられた第１のイベントキューに、永続オブジェクトと関連付けられた事象を追加するプログラム命令は、
前記第１のイベントキューにおける前記事象の順番を保存するためのプログラム命令を有することを特徴とする請求項１６に記載のコンピュータプログラム製品。
【請求項１９】
当該スレッド以外のスレッドが前記永続オブジェクトに書き込みアクセスするのを禁止するプログラム命令は、
ロックを、各イベントキューと関連付けられたキャッシュに入っている前記永続オブジェクトと関連付けるためのプログラム命令を有することを特徴とする請求項１６に記載のコンピュータプログラム製品。
【請求項２０】
複数の事象を前記第１のイベントキューに追加するためのプログラム命令と、
前記複数の事象の一部分を実行するためのプログラム命令と、
をさらに有することを特徴とする請求項１６に記載のコンピュータプログラム製品。
【請求項２１】
複数のクライアントがアクセス可能な永続オブジェクトのトランザクション状態を維持するためのプログラム命令を有するコンピュータ可読メディアであって、
複数のクライアントの各々を永続フレームワークの単一キャッシュと関連付けられた一つのイベントキューと関連付けるプログラム命令と、
前記単一キャッシュに保持される永続オブジェクトを、修正された永続オブジェクトを変更する修正を要求するプログラム命令と、
前記修正された永続オブジェクト、トランザクション状態インジケータ、及び前記永続オブジェクトのコピーを、それぞれのイベントキューに、前記それぞれのイベントキューに保持された追加永続オブジェクトの継続的な修正の順番がわかるように保持するプログラム命令と、
前記単一キャッシュに保持された前記永続オブジェクトへの書き込みアクセスを禁止するためのプログラム命令と、
前記それぞれのイベントキューに入っている前記修正永続オブジェクトを前記単一キャッシュにコミットするためのプログラム命令とを有することを特徴とするコンピュータ可読メディア。
【請求項２２】
前記それぞれのイベントキューに保持された前記追加永続オブジェクトの継続的な修正の一部分を、前記修正永続オブジェクトと共に前記単一キャッシュにコミットするためのプログラム命令を有することを特徴とする請求項２１に記載のコンピュータ可読メディア。
【請求項２３】
前記一部分は、共通のトランザクション状態インジケータにより識別されることを特徴とする請求項２２に記載のコンピュータ可読メディア。
【請求項２４】
前記それぞれのイベントキューに入っている前記修正永続オブジェクトが他のイベントキューに保持されないようにするためのプログラム命令を有することを特徴とする請求項２１に記載のコンピュータ可読メディア。
【請求項２５】
前記修正永続オブジェクトをコミットした後、前記それぞれのイベントキューから前記修正永続オブジェクト及び前記永続オブジェクトを削除するためのプログラム命令と、
前記単一キャッシュに入っている前記永続オブジェクトを前記修正永続オブジェクトで置き換えるためのプログラム命令とを有し、前記修正永続オブジェクトは前記複数のクライアントによる書き込み及び読み出しアクセスが可能であることを特徴とする請求項２１に記載のコンピュータ可読メディア。
【請求項２６】
永続オブジェクトのトランザクション状態を維持可能なシステムであって、
永続ストレージ装置を有し、
前記永続ストレージ装置と通信するサーバを有し、前記サーバは少なくとも一つの中央処理ユニット（ＣＰＵ）を有し、前記少なくとも一つのＣＰＵは永続オブジェクトを保持するメインキャッシュを有し、前記メインキャッシュは複数のイベントキューと関連付けられ、前記複数のイベントキューは各々一つのスレッドと関連付けられ、前記複数のイベントキューは各データを保持し、前記データは前記メインキャッシュからの前記永続オブジェクトのコピーと、前記永続オブジェクトのコピーに対応する修正と、前記永続オブジェクトの前記コピーの各々に対応するトランザクション状態とを含んでおり、単一イベントキューはそこに保持されている修正の少なくとも一つの部分集合の実行を許可できることを特徴とするシステム。
【請求項２７】
各スレッドは一つのクライアントと関連付けられることを特徴とする請求項２６に記載のシステム。
【請求項２８】
前記永続ストレージ装置は、リレーショナルデータベースと、階層型データベース、及びオブジェクトデータベースからなるグループから選択されたデータベースであることを特徴とする請求項２６に記載のシステム。
【請求項２９】
前記メインキャッシュは、前記永続オブジェクトの一つが前記複数のイベントキューの一つにコピーされると、前記永続オブジェクトのその一つに書き込みアクセスできないようにすることを特徴とする請求項２６に記載のシステム。
【請求項３０】
書き込みアクセスを防止するために、前記永続オブジェクトの一つにロックがかけられることを特徴とする請求項２６に記載のシステム。
【請求項３１】
前記イベントキュー内に保持されている前記修正の少なくとも前記部分集合は、あるトランザクション状態及びある特定の永続オブジェクトのうちの一つに基づいていることを特徴とする請求項２６に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般的には、情報の記憶及び検索システムに関し、より具体的には、情報及び検索システムで処理されるデータを管理するための方法及びシステムに関する発明である。
【背景技術】
【０００２】
電子コマース時代の到来とコンピュータネットワークの進展により、データ管理をこのようなネットワークと関連付けたデータベースにより処理する機会が増えてきている。例えば、リレーショナルデータベース、オブジェクトデータベース、階層型データベース、単層ファイルといった従来からあるデータベースを使用して、アプリケーションに必要な情報を検索することができる。このようなデータベースは、アプリケーションとは関係なくデータを保持することができる、永続ストレージの機能を有する。オブジェクト指向のソフトウェアにおいては、ストレージシステムを介して発生するトランザクションを管理するソフトウェアは、全ての永続オブジェクトのトランザクション状態を維持していなければならない。
【０００３】
図１は、永続フレームワークの概要図である。データベース１００は、データベーステーブル１０２のような表形式でデータを保有している。データベーステーブル１０２には色々なフィールドがある。例えば、販売用のアプリケーションであれば、データベーステーブル１０２のフィールドとして、識別番号、製品番号、製品説明などがある。そして、顧客が製品を発注したり、永続フレームワークに保存されているオーダーを変更したりするかもしれないので、トランザクションはきちんと管理されなければならない。テーブル１０４は説明のためであって、当業者であれば、アプリケーションが使用するデータの基になっているのはそのアプリケーションによって作成された永続オブジェクトであることが分かる。オブジェクト１０６ａ〜１０６ｎは、データベーステーブル１０２のある行と対応している。例えば、クライアント１０８は、以前にオーダーしたアイテムを修正１０９により変更することができる。この修正は、対応する永続オブジェクト、この場合はオブジェクト１（１０６ａ）に取り込まれる。オブジェクト１（１０６ａ）によって取り込まれた修正は、データベーステーブル１０２に対してコミットされ、データベーステーブルの対応する順番が更新される。
【０００４】
ある時点においては、データベース１００に保持されているデータと、アプリケーション上のデータ（テーブル１０４）との間に差違が生ずる。永続ストレージに保持されているデータとアプリケーション上のデータとの差異を管理する一般的な方法の一つは、キャッシュとトランザクション状態がそれぞれ一対一で対応するような、キャッシュとトランザクション状態を複数個用いる方法である。すなわち、各キャッシュは、ある特定のトランザクション状態のオブジェクトや属性と対応する永続オブジェクトを保持する。例えば、旧ダーティ（old-dirty）状態のオブジェクト全てが一つのキャッシュに保持され、旧クリーン（old-clean）状態のオブジェクトが別のキャッシュに保持されるといった具合に。
【０００５】
マルチキャッシュ法の一つの欠点は、マルチスレッド、マルチユーザなどをサポートできないことである。例えば、あるスレッドによりなされた変更を保存しようとすると、そのスレッドに対応するオブジェクトが複数のキャッシュに分散されるため、そのスレッドでなされた変更を保存することができない。さらに、永続オブジェクトが修正されたり作成された順番を保存することもできない。マルチキャッシュ法のもう一つの欠点は、ある特定のオブジェクトの探索するに、複数のキャッシュを探索しなければならないことである。そのために、特定のオブジェクトの探索が困難で複雑なものになる。
【０００６】
アプリケーション上のデータと永続ストレージに保持された対応するデータ間の差異を管理する別の方法としては、一つの大容量のキャッシュを使用する方法がある。各永続オブジェクトには、現在のトランザクション状態を保持するために追加の属性が与えられる。先に述べた方法では、同じトランザクション状態に属する永続オブジェクトのセット毎に一つの個別のキャッシュが用いられる。マルチキャッシュ法と同様に、ある特定のスレッドの変更を保存するのは単一の大型キャッシュでも無理である。さらに、コミットやロールバックの際、どのような処理をすればよいかを判断するためには、キャッシュ全体をスキャンしなければならない。
【０００７】
それゆえに、永続フレームワークにおけるトランザクションを効率よく管理する方法並びにシステムを提供するために先行技術の問題を解決する必要がある。
【０００８】
【特許文献１】米国特許出願公開第2002/0103814号明細書
【特許文献２】米国特許出願公開第2002/0103815号明細書
【発明の開示】
【発明が解決しようとする課題】
【０００９】
大まかに言えば、本発明は、マルチユーザ環境で永続オブジェクトの修正を管理するための方法を提供することで、こうした要求に応えるものである。本発明は、プロセスとして、システムとして、あるいはデバイスとしてなど、様々な方法で実現することができる。本発明の実施例を以下にいくつか説明する。
【課題を解決するための手段】
【００１０】
本発明は、マルチスレッド環境において、永続フレームワークと関連付けられたトランザクションを管理するための方法を提供する。この方法は、個々のスレッドをそれぞれ事象の待ち行列と関連付けることから始まる。事象は、一つの永続オブジェクトと関連付けられる。次に、その特定のスレッド以外のスレッドから永続オブジェクトに書き込みアクセスができないようにする。次に、その永続オブジェクトと関連付けられた第１のイベントキューに入っている事象が実行される。
【００１１】
本発明は、マルチユーザ環境において、永続オブジェクトのトランザクション状態を維持するための方法を提供する。この方法は、メインキャッシュに記憶されている一つの永続オブジェクトを修正する要求を受け取ることから始まる。次に、その永続オブジェクトが、メインキャッシュから、その要求と関連付けられたイベントキューにコピーされる。次に、一つの修正された永続オブジェクト及び一つの対応するトランザクション状態がその永続オブジェクトと共にイベントキューに保持される。次に、修正後の永続オブジェクトがメインキャッシュ及び一つの永続ストレージに書き込まれる。そして、その永続オブジェクトはメインキャッシュ及び永続ストレージから削除される。
【００１２】
また本発明は、複数のクライアントがアクセス可能な永続オブジェクトのトランザクション状態を維持するための方法を提供する。この方法は、複数のクライアントの中から各クライアントを一つのイベントキューと関連付けることから始まる。各イベントキューは、一つの永続フレームワークの単一キャッシュと関連付けられる。次に、ある永続オブジェクトの修正が要求される。永続オブジェクトは単一キャッシュに保持される。次に、修正後の永続オブジェクト、トランザクション状態インジケータ、永続オブジェクトのコピーが、それぞれのイベントキューに保持されている追加の永続オブジェクトの継続的な修正の順番がわかるように、それぞれのイベントキューに保持される。次に、他のクライアントが、単一キャッシュに保持されている永続オブジェクトに書き込みアクセスできないようにする。次に、それぞれのイベントキューに入っている修正後の永続オブジェクトが単一キャッシュにコミットされる。
【００１３】
さらに本発明は、コンピュータシステムで実行されるように構成されたコンピュータプログラム製品を提供する。コンピュータプログラム製品は、各スレッドを一つのイベントキューと関連付けるためのプログラム命令を有する。各スレッドと関連付けられた第１のイベントキューに事象を追加するためのプログラム命令も有する。ここでは、事象は一つの永続オブジェクトと関連付けられている。対応するスレッド以外のスレッドからその永続オブジェクトへの書き込みアクセスを禁止するプログラム命令及びその永続オブジェクトと関連付けられた第１のイベントキューに入っている事象を実行するためのプログラム命令を有する。
【００１４】
本発明は、複数のクライアントがアクセス可能な永続オブジェクトのトランザクション状態を維持するためのプログラム命令を有するコンピュータ可読メディアを提供する。このコンピュータ可読メディアは、複数のクライアントの各々を一つのイベントキューと関連付けるためのプログラム命令を有し、各イベントキューは一つの永続フレームワークのの単一キャッシュと関連付けられる。永続オブジェクトの修正を要求するためのプログラム命令を提供する。永続オブジェクトはその単一キャッシュに保持される。修正後の永続オブジェクト、トランザクション状態インジケータ、永続オブジェクトのコピーを、それぞれのイベントキューに保持されている追加の永続オブジェクトの連続した修正の順番が分かるように、それぞれのイベントキューに保持するためのプログラム命令を有する。他のクライアントが、単一キャッシュに保持された永続オブジェクトに書き込みアクセスできなくするためのプログラム命令を提供する。それぞれのイベントキューに入っている修正後の永続オブジェクトを単一キャッシュにコミットするためのプログラム命令も提供する。
【００１５】
また本発明は、永続オブジェクトのトランザクション状態を維持可能なシステムを提供する。このシステムは、永続ストレージ装置を有する。永続ストレージ装置と通信しているサーバもこのシステムの一部である。このサーバは、少なくとも一つの中央処理装置（ＣＰＵ）を有する。ＣＰＵは、永続オブジェクトを保持するように構成されたメインキャッシュを有する。メインキャッシュは、複数のイベントキューと関連付けられ、各イベントキューは、個別のスレッドと関連付けられる。各イベントキューは、さらにデータを保持するように構成され、データは、メインキャッシュからの永続オブジェクト各々のコピー、永続オブジェクトのそれぞれのコピーに対応する修正、及び永続オブジェクトのコピー各々に対応するトランザクション状態を含む。イベントキューは、保持されている修正の少なくも部分集合の実行を許可できる。
【００１６】
発明のその他の態様並びに効果は、添付の図面と共に、発明の原理を例を挙げて説明している以下の詳細な説明から明白になる。
【発明を実施するための最良の形態】
【００１７】
以下、本発明の実施形態を図面に基づいて説明する。
【実施例１】
【００１８】
発明を、永続ストレージ装置フレームワークの永続オブジェクトを管理するためのシステム及び方法として説明する。但し、これらの具体的な詳細を全て又は部分的に知らなくても本発明を実施できることは当業者なら容易に分かるであろう。その他の場合には、公知のプロセスの操作については、本発明を不要に不明瞭にしないために、細かく説明していない。図１については、「背景技術」の項で説明している。本明細書で用いている「約」とは、言及している値の＋／−１０％のことである。
【００１９】
本発明の実施例は、マルチスレッド環境において、複数のユーザが永続オブジェクトを修正、例えば、変更したり、追加したり、削除したりすることができる永続ストレージ装置を管理するための方法及び装置を提供するものである。この管理方法では、メインキャッシュと呼ばれる一つのキャッシュに、永続ストレージ装置から読み出された永続オブジェクトを保持する。例えば、ＭＲＵ（一番最近使用された：most recently used）法を用いて、前述の一つのキャッシュに保持する永続オブジェクトの数を管理する。すなわち、単一キャッシュがその記憶容量の限度に近づくと、一番最近使用された永続オブジェクトが単一キャッシュに保存され、古くなった永続オブジェクトは永続ストレージ装置に移される。典型的な永続ストレージ装置としては、リレーショナルデータベース、オブジェクトデータベース、階層型データベース、単層ファイルなどがある。そして、イベントキューに、各永続オブジェクトのトランザクション状態や永続オブジェクトが追加されたり、削除されたり、変更された順番が保持される。マルチスレッド環境においては、セッションと呼ばれる各スレッドが、永続オブジェクトに対する修正を実行し、各スレッドは個別のイベントキューと対応付けられる。従って、トランザクション状態は、イベントキューを使用することによって、キャッシュから切り離すことができる。
【００２０】
また、この管理方法は、修正されるオブジェクトへの書き込みアクセスを禁止することができる。例えば、あるセッションが永続オブジェクトを追加したり、変更したり、削除したりすると、その都度、メインキャッシュ又は永続ストレージ装置に保持されている永続オブジェクトにロックがかけられる。したがって、永続オブジェクトにロックをかけたセッションだけがその永続オブジェクトに対して読み書きのアクセスが可能となり、他のセッションには読み取りのみのアクセス権が与えられる。言うまでもなく、メインキャッシュでロックされている永続オブジェクトは、それをロックしたセッションがコミット又はロールバックの操作を実行するまではメインキャッシュに保持される。コミット又はロールバックの操作後、永続オブジェクトのロックが外され、他のセッションがそのオブジェクトに対する修正を実行できるようになる。なお、本明細書で使用しているセッション、スレッド、クライアントという言葉は、互いに置き換えて用いることができることは言うまでもない。
【００２１】
図２は、本発明の一実施例における、永続オブジェクトを管理するように構成されたシステムの概略図である。クライアント１（１１０ａ）〜クライアントｎ（１１０ｎ）は、インターネットなどの分散型ネットワーク１１２を介してサーバ１１４と通信している。サーバ１１４は中央処理装置（ＣＰＵ）１１６を有する。例えば、サーバ１１４は複数のＣＰＵを有する。ＣＰＵ１１６は、本明細書で説明する永続オブジェクトの管理方法を実行するように構成されている。サーバ１１４はデータベース１１８と通信している。データベース１１８は永続オブジェクトを保存する永続ストレージ装置を提供する。例えば、データベース１１８は、リレーショナルデータベース、オブジェクトデータベース、階層型データベース、単層ファイルなどでいい。なお、図２で説明しているシステムには、会社組織における販売、財務、経理システム、人的資源計画やその他の機能といった、永続フレームワークを使用する企業資源計画（ＥＲＰ）システムが含まれていて構わない。
【００２２】
例えば、クライアント１〜ｎ（１１０ａ〜１１０ｎ）は、オーダーをサーバ１１４に伝送するように構成されている。従って、ある時点においては、データベース１１８に保持されているデータと、サーバ１１４のアプリケーション上で処理されているデータとの間には違いが生ずる。例えば、ある顧客のオーダーがデータベース１１８にあるとする。そのオーダーされた商品の納品前に、顧客が商品の発注数を増やそうとしたとする。すると、オリジナルのオーダーは、サーバ１１４上のアプリケーションによって変更されるが、その変更がデータベースにコミットされるまでは、オリジナルのオーダーの修正はデータベース１１８に取り込まれない。なお、図の説明で販売用アプリケーションという表現は、説明のためであって、この管理スキームは任意の適切なアプリケーションに適用可能で、販売アプリケーションへの限定を意味するものではない。
【００２３】
図３Ａは、図２の永続オブジェクトを管理するように構成されたシステムのサーバの詳細を示した図である。クライアント１〜ｎ（１１０ａ〜１１０ｎ）はネットワーク１１２を介してサーバ１１４に販売データを送信する。一例として、クライアント２（１１０ｂ）はサーバ１１４にオーダーＡを送信する。オーダーＡはイベントキュー２（１２６ｂ）及びメインキャッシュ１２４に保持される。例えば、イベントキュー２（１２６ｂ）はスタックで構成される。クライアント２により、オーダーＡの追加という事象がコミットされると、オーダーＡのコピーがデータベース１１８に保持される。なお、クライアント１〜ｎ（１１０ａ〜１１０ｎ）は、各々イベントキュー１２６ａ〜１２６ｎと対応付けられる。すなわち、各クライアントは個別のイベントキューと関連付けられるので、イベントキューとクライアントとは一対一で対応する。
【００２４】
図３Ｂは、本発明の一実施例に基づき、永続オブジェクトの修正を管理するための方法を示した概略図である。図３Ｂでは、図３Ａにおける追加のオーダーＡが修正される。クライアント１１０ａはデータを送信して、オーダーＡをオーダーＡ’に修正する。例えば、オーダーＡの発注者は、オーダーした商品の数量や納品日、あるいはその他の販売データと関係するデータを変更するかもしれない。修正データ（オーダーＡ’）は、イベントキュー１２６ａのブロック１２８に保持される。ここで、対応するデータをイベントキュー１２６ａに受け取る際、メインキャッシュ１２４に入っているオーダーＡにロックがかけられ、オーダーＡ’がメインキャッシュにコピーされて、オーダーＡを置き換える。ここで、オーダーＡが古い永続オブジェクトでかつＭＲＵによりメインキャッシュ１２４を管理する場合は、オーダーＡは、メインキャッシュ１２４ではなく、データベース１１８等からなる永続ストレージ装置に保持される。オーダーＡがメインキャッシュ１２４に保持されない場合は、オーダーＡのコピーがデータベース１１８からメインキャッシュ１２４に入れられる。例えば、オーダーＡがメインキャッシュ１２４にコピーされると、オーダーＡにロックがかけられる。イベントキュー１２６ａのブロック１２８のデータがコミットされると、オーダーＡのロックが解除され、メインキャッシュ１２４及び／又はデータベース１１８のオーダーＡがオーダーＡ’に置き換えられる。なお、各イベントキューは、そのイベントキューに保持されている事象を時系列に提供する。例えば、事象の順番を維持するために、次の修正がイベントキュー１２６ａ〜１２６ｎの一番下に追加される。従って、時間的にもっと前に追加された事象がイベントキューの上の方に位置するのに対し、後から追加された事象はイベントキューの下のほうに位置する。
【００２５】
図４Ａは、本発明の実施例に基づいて、新しい値が追加された時に、イベントキューのあるブロック内に保持されているデータについて説明したブロック図である。ブロック１３０には、オーダーＡを新しい事象として識別するためのトランザクション状態インジケータと、オーダーＡの値、つまり、図３ＡにおいてオーダーＡに対応するデータとが含まれている。なお、トランザクション状態インジケータをデータとを一緒にして、各クライアントを個別のイベントキューと対応付けることにより、本発明の管理方法が永続オブジェクトを効率的に、規則正しく管理できるというのは特筆すべきことである。すなわち、トランザクション状態はメインキャッシュに保持されるのではなく、それぞれのイベントキューに保持され、ある特定のクライアントと関連付けられる。さらに、一旦クライアントがトランザクションをコミットするか又はロールバックしたら、そのクライアントと関連付けられたイベントキューだけがスキャンされ、メインキャッシュ及び永続ストレージが更新される。従って、コミット又はロールバックの際にアップロードすべきデータ量が大幅に削減される。
【００２６】
図４Ｂは、本発明の実施例に基づいて、既存の値を修正するためにイベントキューのあるブロックに保持されたデータを説明した図である。ブロック１２８は、図３Ｂに関するトランザクション状態及びオーダーＡ’のデータ、オーダーＡのデータを含む。オーダーＡはオーダーＡ’で置き換えられる。当業者であれば、トランザクション状態は、例えば、追加、変更、削除のトランザクションなど、どの様なタイプのトランザクションにも対応可能に構成できることが分かるであろう。典型的なトランザクション状態としては、新クリーン（New Clean）、新ダーティ（New Dirty）、新デリート（New Delete）、旧クリーン（Old Clean）、旧ダーティ（Old Dirty）、旧デリート（Old Delete）、またはその他トランザクションの状態を識別する任意の適切な標識がある。トランザクション状態とは、コミット又はロールバックで要求されるアクションを示したものである。図４Ｂに示すように、初めのオーダーＡ及び修正後のオーダーＡ’の両方のデータが含まれているため、ロールバック際には、必要であれば、初めのオーダーＡのデータをいつでも利用することができる。さらに、このように構成にすることにより、サーチが簡単になる。
【００２７】
図５Ａ〜図５Ｈは、本発明の一実施例に基づいて、永続フレームワークの永続オブジェクトに対する修正を行なう管理方法を説明した図である。図５Ａは、メインキャッシュ１４４を有すると共にイベントキュー１（１４２ａ）〜イベントキューｎ（１４２ｎ）を有する永続フレームワーク１４６を有する。イベントキュー１（１４２ａ）はセッション１（１４０ａ）に対応し、イベントキューｎ（１４２ｎ）はセッションｎ（１４０ｎ）に対応する。ここで、セッション１（１４０ａ）〜セッションｎ（１４０ｎ）は、スレッド又はクライアントを表わすと考えることができる。従って、永続フレームワーク１４６がサーバを表わすのに対し、セッション１（１４０ａ）〜セッションｎ（１４０ｎ）はクライアントを表わす。当業者であれば、クライアントはネットワークを介してサーバと通信していることは明らかである。さらに、セッション１（１４０ａ）〜セッションｎ（１４０ｎ）を、図２のクライアント１（１１０ａ）〜クライアントｎ（１１０ｎ）と各々対応付けることができる。図示されているように、各セッションは一つのイベントキューと対応付けられる。永続ストレージ１４８も永続フレームワーク１４６に含まれている。先に述べたように、永続ストレージ１４８は、リレーショナルデータベース、階層型データベース、オブジェクトデータベースなどのデータベースとして構成することができる。
【００２８】
図５Ｂは、新たな永続オブジェクトが追加された時の概略図である。すなわち、永続ストレージ１４８にない永続オブジェクトがここで追加されている。ここでは、セッション１（１４０ａ）により、事象オブジェクトＡがイベントキュー１（１４２ａ）に追加される。新規の永続オブジェクトＡが追加されるとき、そのオブジェクトはメインキャッシュ１４４に入れられる。例えば、追加事象が発生した時に対応するイベントキューが一杯だった場合には、一番古い事象が永続ストレージに保存され、イベントキューから削除される。もしくは、一番最近行なわれた変更が放棄される。図５Ｃは、オブジェクトＡを削除する時の永続フレームワークの状態を示した図である。ここで、図５Ｃは、事象の削除を行なう前の永続フレームワークの状態を表わしている。セッション１（１４０ａ）により、削除する事象がイベントキュー１（１４２ａ）に受け取られる。ここで、削除する事象に削除されたオブジェクト、つまり、オブジェクトＡのコピーが含まれていることは特筆すべきことである。さらに、対応するオブジェクト（オブジェクトＡ）にはロックがかけられ、他のセッションが削除する事象と対応するメインキャッシュ内のオブジェクトに書き込みアクセスすることを禁止する。なお、コミット操作後に、オブジェクトＡがメインキャッシュ及びイベントキュー１（１４２ａ）から削除されるのは言うまでもない。
【００２９】
図５Ｄは、オブジェクトをアップデートしたがそのアップデートがまだコミットされていない状態の永続フレームワークの概略図である。ここでは、セッション１（１４０ａ）が、永続ストレージ１４８内のオブジェクトＡをアップデートする。従って、更新される事象がイベントキュー１（１４２ａ）に追加され、イベントキュー１（１４２ａ）はオブジェクトＡ、オブジェクトＡ’及び対応するトランザクション状態を保持する。一例として、修正されたオブジェクトの値はメインキャッシュ内でアップデートされる。また別の例では、オブジェクトがメインキャッシュに存在していない場合は、その新しい値がメインキャッシュに追加される。当業者であれば、接続スピードやメモリ容量などに応じて、永続オブジェクトを永続記ストレージ１４８又はメインキャッシュ１４４から読み出せることが分かるであろう。本発明の一実施例によれば、対応するイベントキューの最後に事象を追加することで、更新された事象の順番を維持する。従って、イベントキュー１（１４２ａ）用に更新された事象は、本実施例ではイベントキューの終わりに追加される。なお、イベントキュー１（１４２ａ）は永続オブジェクトの古い値と更新された値とを含む。当業者であれば、イベントキューの中に古い値と更新された値とを有することにより、ロールバックとコミットの両方に対応できるようになることが分かるであろう。例えば、イベントキュー１４２とメインキャッシュ１４４の両方にオブジェクトが入っている時はいつでも、メインキャッシュ内のそれぞれのオブジェクトにロックがかけられる。
【００３０】
図５Ｅは、本発明の一実施例に基づき、セッション１（１４０ａ）のセッションコミットの前の永続フレームワークの状態を説明した図である。イベントキュー１（１４２ａ）は、セッション１（１４０ａ）に対応するもので、メインキャッシュ１４４や永続ストレージ１４８にある永続オブジェクトに対して行なわれる様々の修正を含んでいる。ここでは、イベントキュー１（１４２ａ）には、事象オブジェクトＡの追加、事象オブジェクトＡ’の更新、オブジェクトＢの削除、といった修正が含まれている。永続オブジェクトＡ’、Ｂ、Ｃ及びＤは全てメインキャッシュ１４４に保持され、永続オブジェクトＢ及びＤは永続ストレージ１４８に保持される。例えば、事象オブジェクトＡを追加する修正及び事象オブジェクトＡ’を更新する修正は、メモリを節約するために、ブロック１５０に示すように、イベントキュー１（１４２ａ）で一つにまとめてもよい。なお、各永続オブジェクトと対応する状態を維持するために、メインキャッシュ１４４内の永続オブジェクトをロックしてもよいことは言うまでもない。例えば、イベントキューの修正がまだコミットされていないといったような、永続フレームワークのイベントキューの中に対応するアクションが存在している場合は、メインキャッシュ１４４の永続オブジェクトはロックされる。図５Ｆは、図５Ｅのセッション１のセッションコミット後の状態を説明した図である。一例として、セッションコミットは、対応する永続オブジェクトに対してスレッドが行なった全ての変更を保存する。以下に説明するように、セッションコミットを、部分コミット又はロールバックとして構成することもできる。すなわち、ある特定の状態に対するトランザクション又はイベントキューのオブジェクトだけがコミットもしくはロールバックされる。例えば、セッションコミットの処理は、イベントキューの一番初めからイベントキュー全体に対して行なわれ、その変更を永続ストレージ装置に書き込む。ここで、一旦事象が書き込まれたら、対応するイベントキューから削除される。さらに、その事象に対応する永続オブジェクトへのロックが全て解除される。従って、図５Ｆにおいて、オブジェクトＡ’はメインキャッシュ１４４に残るが、セッション１のセッションコミットの後ではオブジェクトＢはメインキャッシュ１４４及び永続ストレージ装置１４８から削除される。したがって、イベントキュー１（１４２ａ）からは、セッションコミット前に存在していた事象が各々クリアされる。
【００３１】
図５Ｇは、本発明の一実施例に基づいて、セッション１のセッションロールバック前の永続フレームワークの状態を説明した図である。ここで、イベントキュー１（１４２ａ）には、事象オブジェクトＡの追加、事象オブジェクトＥ’の更新、事象オブジェクトＢの削除という修正が含まれている。図５Ｈは、セッション１のセッションロールバック完了時点での図５Ｇの永続フレームワークを説明した図である。なお、セッションロールバックは、永続オブジェクトに対する全変更を棄却し、永続ストレージ装置に保持されている永続オブジェクトの値に戻るものである。セッションコミットの操作と同様に、セッションロールバックは、終わりから始まってイベントキュー全体に対して実行され、各事象オブジェクトを調べる。従って、事象が削除の場合には、事象オブジェクトがイベントキューから単に除去される。但し、事象が更新の場合には、対応する永続オブジェクトの古い値がメインキャッシュに保持される。さらに、事象が追加の場合には、事象オブジェクトがイベントキュー及びメインキャッシュの両方から除去される。従って、図５Ｈでは、オブジェクトＡが、オブジェクトＥ’と共にメインキャッシュ１４４から除去される。オブジェクトＥ’の更新はロールバックされるため、オブジェクトＥがメインキャッシュ１４４に復元される。イベントキュー１（１４２ａ）に以前入っていたオブジェクトＢの削除の事象はイベントキュー１から除去されている。
【００３２】
図６は、本発明の実施例に基づいて、マルチスレッド環境で永続フレームワークと関連付けられたトランザクションを管理する方法を示したフローチャートである。この方法は、個々のスレッドが一つのイベントキューと関連付けられるオペレーション１６０から始まる。図３Ａ及び図３Ｂで説明したように、各イベントキューは個々のスレッドと関連付けられる。さらに、イベントキューは、各クライアントから事象を受け取った順番を維持するように構成される。一例として、イベントキューはメモリに維持されたスタックである。次に、オペレーション１６２に進み、ある事象が、スレッドと対応する第１のイベントキューに追加される。ここで、事象は、本明細書で説明した修正、追加、又は削除であっていい。事象は、インターネットなどの分散型ネットワークを介して、クライアントからイベントキューに伝送される。なお、ここでいう事象とはトランザクションのことである。その事象が関係する永続オブジェクトに対応するトランザクション状態は、前述した事象の伝送に含まれる。また、その事象が永続オブジェクトの修正や削除である場合は、オリジナルの永続オブジェクトもその伝送に含まれる。一例として、ある特定のイベントキューに対する継続的な事象は、その事象の順番を維持するために、そのイベントキューの一番下に追加される。
【００３３】
図６の方法は次にオペレーション１６４に進み、第１のイベントキューに対応するスレッド以外のスレッドから、その事象と関係する永続オブジェクトへの書き込みアクセスを禁止する。対応する永続オブジェクトにロックをかけ、他のスレッドからこの永続オブジェクトに対して読み取りアクセスはできるが書き込みアクセスはできないようにする。従って、上述のように売り上げオブジェクトを修正する場合、修正を行なうクライアントのみが対応する永続オブジェクトに対して読み書きのアクセスをすることができる。しかしながら、他のクライアントに対しては、永続オブジェクトへのロックにより書き込みアクセスは禁止され、読み取りアクセスのみが可能となる。
【００３４】
図６の方法は、次にオペレーション１６６に進み、永続オブジェクトと関連付けられた事象が実行される。すなわち、図５Ａ〜５Ｈで説明した、追加、修正、削除などの事象が実行される。例えば、コミット操作が事象の実行を開始する。コミット操作は、各スレッドのイベントキューに入っている全ての事象を実行するように構成することができる。あるいは、各スレッドのイベントキューに入っている事象を部分的に実行するようにコミット操作を構成することもできる。例えば、ある特定のトランザクション状態又はある特定の永続オブジェクトと関連付けられた事象がコミットされる。また別の例としては、ある永続オブジェクトに対する全ての変更を放棄し、永続ストレージ装置に保持されているその永続オブジェクトの値に戻るロールバック操作が実行される。ここでも、ロールバック操作をイベントキューに入っている事象の一部又は全てをロールバックする構成であってもよい。
【００３５】
図７は、本発明の一実施例に基づき、複数のクライアントがアクセス可能な永続オブジェクトのトランザクションを維持する方法を示したフローチャートである。この方法はオペレーション１７０から始まり、各クライアントが、個別のイベントキューと関連付けられる。従って、図５Ａ〜５Ｈで説明したように、各イベントキューとクライアントとの間に一対一の対応ができる。一例として、イベントキューはある特定のクライアントに割り当てられたスタックであり、クライアントのトランザクションはそのトランザクションの順番が維持されるようにスタックに記録される。この方法は次にオペレーション１７２に進み、そこで永続オブジェクトの修正を要求する。例えば、上述のごとく、クライアントは前に入力された発注の増加を要求することができる。ここで、その要求は、図２、３Ａ、３Ｂで説明したように、ネットワークを介してサーバに伝送される。
【００３６】
図７の方法は次にオペレーション１７４に進み、修正された永続オブジェクト、トランザクション状態インジケータ、永続オブジェクトのコピーが対応するイベントキューに保持される。上述のごとく、データは、イベントキューに保持されているオブジェクトの修正の順番が分かるように保持される。例えば、修正は都度イベントキューの一番下に入れられる。なお、トランザクション状態インジケータとは、その永続オブジェクトが永続ストレージ装置から最近読み出され、修正されたかどうかを示すものである。この方法は次にオペレーション１７６に進み、キャッシュ又は永続ストレージ装置に保持されている永続オブジェクトへの書き込みアクセスを禁止する。一例として、永続オブジェクトへの読み取りアクセスのみが許可されるように、キャッシュ又は永続ストレージ装置内の永続オブジェクトにロックがかけられる。従って、ロックされている永続オブジェクトへのアクセスを要求する他のクライアント、スレッド、セッションなどには、データの読み取りアクセス権が与えられ、書き込みアクセス権は与えられない。別の例では、永続オブジェクトがロックされている場合には、そのオブジェクトをロックしているセッションがコミット又はロールバックを実行するまでは、そのオブジェクトはメインキャッシュに保持される。コミット又はロールバックの操作後に、ロックが解除され、他のセッションはそのオブジェクトへの修正を実行することができる。
【００３７】
引き続き図７において、この方法はオペレーション１７８に進み、それぞれのイベントキューに入っている修正された永続オブジェクトがメインキャッシュにコミットされる。ここで、オリジナルのオブジェクトが変更されたら、その変更されたオブジェクトがキャッシュに保持され、オリジナルのオブジェクトはキャッシュから削除される。オリジナルのオブジェクトを削除する修正の場合には、オリジナルのオブジェクトがキャッシュから除去される。言うまでもなく、新たなオブジェクトを追加する修正の場合には、その新たなオブジェクトがキャッシュに入れられる。なお、コミットに代わる操作がロールバックで、図５Ａ〜５Ｈで説明したように、ロールバック操作は基本的にそれぞれのイベントキューと関連付けられたオブジェクトを修正前の元の状態に戻す。なお、オリジナルのオブジェクトと修正後のオブジェクトを同じイベントキューに保持すると、必要なデータが一つのイベントキューの中にあるため、ロールバック操作の実行が容易になることは特筆すべきことである。さらに、イベントキュー全体を実行するように、つまり、アトミックプロセスを実行するように、コミット操作及びロールバック操作を構成してもいい。また別の方法として、イベントキューの一部だけを実行するように、つまり、部分的コミット又は部分的ロールバックを実行するように、コミット操作及びロールバック操作を構成してもよい。部分的コミットやロールバックは、一つのトランザクション状態か、例えば、全てが旧ダーティ状態など、トランザクション状態同士の組合せ、又はある特定のオブジェクトかオブジェクトの組合せに基づくことができる。
【００３８】
要約すれば、上述の本発明は、永続フレームワークと関連付けられたマルチユーザ環境で永続オブジェクトの修正を管理するための方法及びシステムを提供する。各クライアントは個別のイベントキューと関連付けられるため、永続フレームワークで一つのキャッシュで実行可能となる。また、キャッシュが一つしかないから、永続オブジェクトの探索が簡単になる。さらに、イベントキューと関連付けられた永続オブジェクトにロックがかかるため、永続オブジェクトの修正版は一つのイベントキューにしか存在せず、永続オブジェクトに対する修正の探索が簡単になる。
トランザクション状態インジケータ及びオリジナル永続オブジェクト、修正された永続オブジェクトが一つのイベントキューに保持するため、全ての必要なデータが一つのイベントキューの単一ブロックの中に存在し、コミット及びロールバックが容易になる。これにより、本書で説明した管理方法では個別のスレッドのコミット及びロールバックが可能となる。各イベントキューにおける修正、もしくは事象といってもよいが、その修正の順番が保存されるため、その順番に基づいて、最初のｘ個の修正、最後のｙ個の修正といった具合に、部分的なコミットやロールバックが可能になる。当業者であれば、上述の機能を提供するために論理ゲートや有限ステートマシンを含んだ半導体チップを設計できることが分かるであろう。例えば、ファームウェアと本明細書で説明した必要な機能を提供するための論理ゲートのレイアウトとを合成するのにハードウェア記述言語（ＨＤＬ）を用いることができる。
【産業上の利用可能性】
【００３９】
上記の実施例を念頭に入れて、発明は、コンピュータシステムに保持されているデータが係わる様々なコンピュータで実現される操作を採用できることを理解すべきである。これらの操作は、物理的数量の物理的操作を要するものである。必ずしもそうとは限らないが、普通、これらの数量は、保持、転送、組合せ、比較や、その他の操作が可能な電気信号又は磁気信号の形をとる。さらに、実行される操作は、生成、識別、判定、又は比較といったような用語で言及されることが多い。
【００４０】
発明は、コンピュータ可読媒体に入ったコンピュータ可読コードとしての実施も可能である。コンピュータ可読媒体は、データを保持してそれを後からコンピュータシステムで判読できれば、どんなデータ記憶装置でも構わない。コンピュータコードを含んだ電磁搬送波もコンピュータ可読媒体の一つである。コンピュータ可読媒体の例としては、ハードドライブ、ネットワーク接続型ストレージ（ＮＡＳ）、読み取り専用メモリ、ランダムアクセスメモリ、ＣＤ−ＲＯＭ、ＣＤ−Ｒ、ＣＤ−ＲＷ、磁気テープ、及びその他の光学式又は非光学式データ記憶装置が挙げられる。コンピュータ可読媒体は、コンピュータ可読データが分散して保持及び実行されるようにネットワークにつながったコンピュータシステム上に分散されることもできる。
【００４１】
はっきり理解できるように、上記の発明をある程度詳細に説明してきたが、添付されている特許請求の範囲内で、変更及び修正が可能なことは明白である。従って、本願の実施例は説明のためであって制限するためではないと考えられるべきで、また、発明は本明細書で述べた詳細に限定されるものではなく、添付の請求の範囲及びそれと同等の範囲内で変更可能である。
【図面の簡単な説明】
【００４２】
【図１】既存の永続フレームワークの簡約概要図。
【図２】本発明による、永続オブジェクトを管理するシステムの概略図。
【図３Ａ】図２におけるシステムのサーバの詳細図。
【図３Ｂ】図３Ａで追加された永続オブジェクトの修正を管理する方法を説明した図。
【図４Ａ】本発明において、新しい値が追加された時のイベントキューのブロック内に保有されるデータを説明した図。
【図４Ｂ】本発明において、ある既存値を修正するイベントキューのブロック内に保有されているデータを説明した図。
【図５Ａ】本発明において、永続フレームワークの永続オブジェクトに対する修正を処理する方法を説明した図。
【図５Ｂ】本発明において、永続フレームワークの永続オブジェクトに対する修正を処理する方法を説明した図。
【図５Ｃ】本発明において、永続フレームワークの永続オブジェクトに対する修正を処理する方法を説明した図。
【図５Ｄ】本発明において、永続フレームワークの永続オブジェクトに対する修正を処理する方法を説明した図。
【図５Ｅ】本発明において、永続フレームワークの永続オブジェクトに対する修正を処理する方法を説明した図。
【図５Ｆ】本発明において、永続フレームワークの永続オブジェクトに対する修正を処理する方法を説明した図。
【図５Ｇ】本発明において、永続フレームワークの永続オブジェクトに対する修正を処理する方法を説明した図。
【図５Ｈ】本発明において、永続フレームワークの永続オブジェクトに対する修正を処理する方法を説明した図。
【図６】本発明において、マルチスレッド環境で永続フレームワークと対応するトランザクションを管理する方法のフローチャート。
【図７】本発明において、複数のクライアントがアクセス可能な永続オブジェクトのトランザクション状態を維持する方法フローチャート。
【符号の説明】
【００４３】
１００、１１８    データベース
１０２    データベーステーブル
１０６    オブジェクト
１０８、１１０    クライアント
１１２    ネットワーク
１１４    サーバ
１１６    ＣＰＵ
１４０    セッション
１４２    イベントキュー
１４４    メインキャッシュ
１４６    永続フレームワーク
１４８    永続ストレージ
【図１】
2004227569.tif 000003
【図２】
2004227569.tif 000004
【図３Ａ】
2004227569.tif 000005
【図３Ｂ】
2004227569.tif 000006
【図４Ａ】
2004227569.tif 000007
【図４Ｂ】
2004227569.tif 000008
【図５Ａ】
2004227569.tif 000009
【図５Ｂ】
2004227569.tif 000010
【図５Ｃ】
2004227569.tif 000011
【図５Ｄ】
2004227569.tif 000012
【図５Ｅ】
2004227569.tif 000013
【図５Ｆ】
2004227569.tif 000014
【図５Ｇ】
2004227569.tif 000015
【図５Ｈ】
2004227569.tif 000016
【図６】
2004227569.tif 000017
【図７】
2004227569.tif 000018