(57)【特許請求の範囲】
【請求項１】
プログラムの置換を行うプログラム置換システムにおいて、
前記プログラムの版数情報と、前記プログラムが評価中か否かを示す評価フラグとを含む電文を送信する電文送信手段を有する端末装置と、
置換用の前記プログラムを格納するプログラム格納手段と、前記プログラムの情報を管理する転送前情報管理テーブルと、前記プログラム格納手段から転送された前記プログラムを一時格納するプログラム一時格納手段と、前記プログラム毎の参照カウンタと評価カウンタとをテーブル項目として持ち、前記プログラム一時格納手段に格納されている前記プログラムの情報を管理する転送後情報管理テーブルと、前記電文に含まれる前記版数情報に対応する前記プログラムを、起動中の前記プログラムを格納している前記プログラム一時格納手段に動的にリンクし、前記プログラムを実行するプログラム実行手段と、から構成されるプログラム置換装置と、
を有し、
前記プログラム実行手段は、前記プログラム一時格納手段から前記プログラムを呼び出すときには、該当の前記参照カウンタに１を加算し、呼び出した前記プログラムの処理が完了したときには、前記参照カウンタから１だけ減算し、前記参照カウンタの値が０のプログラムが存在する場合には、参照カウンタ値０の前記プログラムを前記プログラム一時格納手段から解放し、
前記プログラム実行手段は、前記評価フラグが評価中を示す前記電文である評価電文が送信された際に、前記評価電文の版数情報と同じ版数情報のプログラムである評価対象プログラムがすでに前記転送前情報管理テーブルに管理されていることを認識した場合には、前記評価対象プログラムは現在起動中のプロセスに動的にリンクさせずに、別プロセスを生成して、前記別プロセスの中で前記評価対象プログラムを実行し、
前記プログラム実行手段は、前記別プロセスを生成したときには、前記別プロセスの中で実行される評価対象プログラムの前記評価カウンタに１を加算し、前記別プロセスの中で実行される前記評価対象プログラムの処理が完了したときには前記評価カウンタから１だけ減算し、前記評価カウンタの値が０の評価対象プログラムが存在する場合には、評価カウンタ値０の前記評価対象プログラムの前記別プロセスを停止する、
ことを特徴とするプログラム置換システム。
【請求項２】
前記プログラムに関する情報の設定・管理を一括して行う管理装置を有することを特徴とする請求項１記載のプログラム置換システム。
【請求項３】
ｎ階層のクライアント／サーバ環境で分散処理を行う分散処理システムにおいて、
分散オブジェクトの版数情報と、前記分散オブジェクトが評価中か否かを示す評価フラグとを含む電文のスタブ処理を行うクライアント側スタブ処理手段を有するクライアント装置と、
前記電文のスケルトン処理を行うサーバ側スケルトン処理手段と、置換用の前記分散オブジェクトを格納する分散オブジェクト格納リポジトリと、前記分散オブジェクトの情報を管理する転送前情報管理テーブルと、前記分散オブジェクト格納リポジトリから転送された前記分散オブジェクトを一時格納するメモリと、前記分散オブジェクト毎に参照カウンタと評価カウンタとをテーブル項目として持ち、前記メモリに格納されている前記分散オブジェクトの情報を管理する転送後情報管理テーブルと、前記電文に含まれる前記版数情報に対応する前記分散オブジェクトを、起動中の前記分散オブジェクトを格納している前記メモリに動的にリンクし、前記分散オブジェクトの関数を呼び出して実行する分散オブジェクト呼び出し制御手段と、他装置内にある前記分散オブジェクトの関数を呼び出して実行するために、前記版数情報を含む前記電文のスタブ処理を行うサーバ側スタブ処理手段と、から構成され、装置間で同期して前記分散オブジェクトの置換を行う複数のサーバ装置と、
を有し、
前記分散オブジェクト呼び出し制御手段は、前記メモリから前記分散オブジェクトを呼び出すときには、該当の前記参照カウンタに１を加算し、呼び出した前記分散オブジェクトの処理が完了したときには、前記参照カウンタから１だけ減算し、前記参照カウンタの値が０の分散オブジェクトが存在する場合には、参照カウンタ値０の前記分散オブジェクトを前記メモリから解放し、
前記分散オブジェクト呼び出し制御手段は、前記評価フラグが評価中を示す前記電文である評価電文が送信された際に、前記評価電文の版数情報と同じ版数情報の前記分散オブジェクトである評価対象分散オブジェクトがすでに前記転送前情報管理テーブルに管理されていることを認識した場合には、前記評価対象分散オブジェクトは現在起動中のプロセスに動的にリンクさせずに、別プロセスを生成して、前記別プロセスの中で前記評価対象分散オブジェクトを実行し、
前記分散オブジェクト呼び出し制御手段は、前記別プロセスを生成したときには、前記別プロセスの中で実行される前記評価対象分散オブジェクトの前記評価カウンタに１を加算し、前記別プロセスの中で実行される前記評価対象分散オブジェクトの処理が完了したときには前記評価カウンタから１だけ減算し、前記評価カウンタの値が０の評価対象分散オブジェクトが存在する場合には、評価カウンタ値０の前記評価対象分散オブジェクトの前記別プロセスを停止する、
ことを特徴とする分散処理システム。
【請求項４】
前記分散オブジェクト及び前記分散オブジェクトに関する情報の設定・管理を一括して行う管理サーバを有することを特徴とする請求項３記載の分散処理システム。
【請求項５】
プログラムの置換を行うプログラム置換方法において、
電文送信手段は、前記プログラムの版数情報と、前記プログラムが評価中か否かを示す評価フラグとを含む電文を送信し、
プログラム格納手段は、置換用の前記プログラムを格納し、
転送前情報管理テーブルは、前記プログラムの情報を管理し、
プログラム一時格納手段は、前記プログラム格納手段から転送された前記プログラムを一時格納し、
転送後情報管理テーブルは、前記プログラム毎に参照カウンタと評価カウンタとをテーブル項目として持ち、前記プログラム一時格納手段に格納されている前記プログラムの情報を管理し、
プログラム実行手段は、前記電文に含まれる前記版数情報に対応する前記プログラムを、起動中の前記プログラムを格納している前記プログラム一時格納手段に動的にリンクし、前記プログラムを実行し、
前記プログラム実行手段は、前記プログラム一時格納手段から前記プログラムを呼び出すときには、該当の前記参照カウンタに１を加算し、呼び出した前記プログラムの処理が完了したときには、前記参照カウンタから１だけ減算し、前記参照カウンタの値が０のプログラムが存在する場合には、参照カウンタ値０の前記プログラムを前記プログラム一時格納手段から解放し、
前記プログラム実行手段は、前記評価フラグが評価中を示す前記電文である評価電文が送信された際に、前記評価電文の版数情報と同じ版数情報のプログラムである評価対象プログラムがすでに前記転送前情報管理テーブルに管理されていることを認識した場合には、前記評価対象プログラムは現在起動中のプロセスに動的にリンクさせずに、別プロセスを生成して、前記別プロセスの中で前記評価対象プログラムを実行し、
前記プログラム実行手段は、前記別プロセスを生成したときには、前記別プロセスの中で実行される評価対象プログラムの前記評価カウンタに１を加算し、前記別プロセスの中で実行される前記評価対象プログラムの処理が完了したときには前記評価カウンタから１だけ減算し、前記評価カウンタの値が０の評価対象プログラムが存在する場合には、評価カウンタ値０の前記評価対象プログラムの前記別プロセスを停止する、
ことを特徴とするプログラム置換方法。
【発明の詳細な説明】
【０００１】
【発明が属する技術分野】
本発明はプログラム置換システム、分散処理システム及びプログラム置換方法に関し、特にプログラムの置換を行うプログラム置換システム、ｎ階層のクライアント／サーバ環境で分散処理を行う分散処理システム及びｎ階層のクライアント／サーバ環境でプログラムの置換を行うプログラム置換方法に関する。
【０００２】
【従来の技術】
近年、通信ネットワークは、多種多様な機能が求められている。このような通信ネットワークに対し、多様なサービスを顧客に提供したり、ネットワークの保守・運用を制御するためには、ソフトウェアのプログラムの版数を上げて、常に改版したプログラムの入れ替えを行う必要がある。
【０００３】
また、特に基幹のネットワークでは、プロセスまたはシステム全体を一旦停止するといったことはできないため、システムの稼働中に動的にプログラムの置換を行わねばならない。
【０００４】
従来のプログラムの動的置換技術としては、例えば、新版プログラムをキューイングさせて、旧版プログラムと置換した後に通信を再開させたり、あるいは、旧版プログラムに対する要求を一旦キャンセルして、新版プログラムとの置換を行ったりしている。
【０００５】
【発明が解決しようとする課題】
しかし、上記のような従来のプログラムの動的置換技術では、プロセスまたはシステム全体を一旦停止する必要はないものの、一時的な業務処理の閉塞や中断が発生してしまうといった問題があった。
【０００６】
一方、ソフトウェアの処理形態として、クライアント／サーバに代表される分散処理形態が、通信ネットワークに対しても広く活用されており、近年では、クライアント層とサーバ層の間に、他の独立した層を複数設けたｎ階層のクライアント／サーバが、次世代のクライアント／サーバ・アーキテクチャを特徴づけるものとして開発が進んでいる。
【０００７】
従来のような新、旧２つのプログラムの入れ替えといった単純な場合のみ想定しているプログラムの動的置換技術では、このようなｎ階層クライアント／サーバ環境に対し、複数のコンピュータ間で複数のソフトウェアを同期させながら動的に入れ替えていくことは困難である。
【０００８】
本発明はこのような点に鑑みてなされたものであり、業務の中断なしにソフトウェアを動的に効率よく置換するプログラム置換システムを提供することを目的とする。
【０００９】
また、本発明の他の目的は、クライアント／サーバ環境で、業務の中断なしにソフトウェアを動的に効率よく置換する分散処理システムを提供することである。
【００１０】
さらに、本発明の他の目的は、クライアント／サーバ環境で、業務の中断なしにソフトウェアを動的に効率よく置換、配信するプログラム置換方法を提供することである。
【００１１】
【課題を解決するための手段】
本発明では上記課題を解決するために、図１のような、プログラムの置換を行うプログラム置換システム１において、プログラムの版数情報と、プログラムが評価中か否かを示す評価フラグとを含む電文を送信する電文送信手段１１を有する端末装置１０と、置換用のプログラムを格納するプログラム格納手段２１と、プログラムの情報を管理する転送前情報管理テーブルＴ２１と、プログラム格納手段２１から転送されたプログラムを一時格納するプログラム一時格納手段２２と、プログラム毎に参照カウンタと評価カウンタとをテーブル項目として持ち、プログラム一時格納手段２２に格納されているプログラムの情報を管理する転送後情報管理テーブルＴ２２と、電文に含まれる版数情報に対応するプログラムを、起動中のプログラムを格納しているプログラム一時格納手段２２に動的にリンクし、プログラムを実行するプログラム実行手段２３と、から構成されるプログラム置換装置２０と、を有し、プログラム実行手段２３は、プログラム一時格納手段２２からプログラムを呼び出すときには、該当の参照カウンタに１を加算し、呼び出したプログラムの処理が完了したときには、参照カウンタから１だけ減算し、参照カウンタの値が０のプログラムが存在する場合には、参照カウンタ値０のプログラムをプログラム一時格納手段２２から解放し、プログラム実行手段２３は、評価フラグが評価中を示す電文である評価電文が送信された際に、評価電文の版数情報と同じ版数情報のプログラムである評価対象プログラムがすでに転送前情報管理テーブルＴ２１に管理されていることを認識した場合には、評価対象プログラムは現在起動中のプロセスに動的にリンクさせずに、別プロセスを生成して、別プロセスの中で評価対象プログラムを実行し、プログラム実行手段２３は、別プロセスを生成したときには、別プロセスの中で実行される評価対象プログラムの評価カウンタに１を加算し、別プロセスの中で実行される評価対象プログラムの処理が完了したときには評価カウンタから１だけ減算し、評価カウンタの値が０の評価対象プログラムが存在する場合には、評価カウンタ値０の評価対象プログラムの別プロセスを停止する、ことを特徴とするプログラム置換システム１が提供される。
【００１２】
ここで、電文送信手段１１は、プログラムの版数情報と、プログラムが評価中か否かを示す評価フラグとを含む電文を送信する。プログラム格納手段２１は、置換用のプログラムを格納する。転送前情報管理テーブルＴ２１は、プログラムの情報を管理する。プログラム一時格納手段２２は、プログラム格納手段２１から転送されたプログラムを一時格納する。転送後情報管理テーブルＴ２２は、プログラム毎に参照カウンタをテーブル項目として持ち、プログラム一時格納手段２２に格納されているプログラムの情報を管理する。プログラム実行手段２３は、電文に含まれる版数情報に対応するプログラムを、起動中のプログラムを格納しているプログラム一時格納手段２２に動的にリンクし、プログラムを実行する。
【００１３】
また、プログラム実行手段２３は、プログラム一時格納手段２２からプログラムを呼び出すときには、該当の参照カウンタに１を加算し、呼び出したプログラムの処理が完了したときには、参照カウンタから１だけ減算し、参照カウンタの値が０のプログラムが存在する場合には、参照カウンタ値０のプログラムをプログラム一時格納手段２２から解放し、プログラム実行手段２３は、評価フラグが評価中を示す電文である評価電文が送信された際に、評価電文の版数情報と同じ版数情報のプログラムである評価対象プログラムがすでに転送前情報管理テーブルＴ２１に管理されていることを認識した場合には、評価対象プログラムは現在起動中のプロセスに動的にリンクさせずに、別プロセスを生成して、別プロセスの中で評価対象プログラムを実行する。プログラム実行手段２３は、別プロセスを生成したときには、別プロセスの中で実行される評価対象プログラムの評価カウンタに１を加算し、別プロセスの中で実行される評価対象プログラムの処理が完了したときには評価カウンタから１だけ減算し、評価カウンタの値が０の評価対象プログラムが存在する場合には、評価カウンタ値０の評価対象プログラムの別プロセスを停止する。
【００１４】
【発明の実施の形態】
以下、本発明の実施の形態を図面を参照して説明する。図１はプログラム置換システムの原理図である。プログラム置換システム１は、端末装置１０とプログラム置換装置２０から構成され、ネットワーク１００等を介して接続する。
【００１５】
端末装置１０に対し、電文送信手段１１は、置換したいアプリケーション・プログラム（以下、プログラム）の版数情報を含む業務電文（以下、電文）を送信する。
【００１６】
図では、版数情報（１．０３）を含む電文を、プログラム置換装置２０へ送信している。版数情報の値が大きいものほど新しい版数である。なお、端末装置１０は、図に示さないインタフェース手段を有しており、インタフェース手段はソフトウェアの入出力制御を行う。
【００１７】
プログラム格納手段２１は、置換用のプログラムを格納する。転送前情報管理テーブルＴ２１は、プログラム格納手段２１に格納されているプログラムの情報を管理する。管理情報の項目としては例えば、版数情報や、その版数情報に対応したプログラム名等がある。
【００１８】
プログラム一時格納手段２２は、プロセスＰａ内のメモリであり、プログラム格納手段２１から転送されたプログラムを一時格納する。図では、版数情報が（１．０１）〜（１．０３）のプログラムが転送されて格納されている。転送後情報管理テーブルＴ２２は、プログラム一時格納手段２２に格納されているプログラムの情報を管理する。
【００１９】
プログラム実行手段２３は、電文に含まれる版数情報に対応するプログラムを、起動中のプログラムが存在するプロセスＰａ内のプログラム一時格納手段２２に動的にリンクし、プログラムを実行する。
【００２０】
なお、動的にリンクするとは、すでに起動しているプログラムのトランザクション処理等を停止せずに、そのプログラムが存在するプロセスと同一のプロセス内にあるメモリへプログラムを転送することをいう。
【００２１】
ここで、プログラム格納手段２１からプログラム一時格納手段２２へ、プログラム（１．０１）、（１．０２）がすでに転送されているものとする。
その後、（１．０３）の版数情報を含む電文を受信すると、プログラム実行手段２３は、転送前情報管理テーブルＴ２１、転送後情報管理テーブルＴ２２へアクセスして、プログラムの存在場所を確認し（図２で後述）、リンクしていない場合には、プログラム一時格納手段２２へプログラム（１．０３）を転送する。
【００２２】
これにより、同一プロセスＰａ内にプログラム（１．０３）が組み込まれ、新しいプログラムの処理を開始することができる。
このように、すでに起動しているプログラムに対して、動的に新しいプログラムを組み込むことができるので、業務を中断せずに、プログラムの置換を行うことが可能になる。
【００２３】
なお、プログラム（１．０３）が起動中に、旧版のプログラム（１．０１）を
起動させたい場合には、電文に版数情報（１．０１）を含めて送信する。そして、プログラム実行手段２３が、プログラム一時格納手段２２にすでに転送済みのプログラム（１．０１）を呼び出して実行すればよい。
【００２４】
一方、ネットワーク１００には、ネットワーク管理装置５０が接続する。ネットワーク管理装置５０は、ネットワーク１００に接続する装置の保守・運用を行う。例えば、プログラム格納手段２１に格納するプログラムや転送前情報管理テーブルＴ２１に記載する各種情報の設定・管理を一括して行う。
【００２５】
次にフローチャートを用いて動作について説明する。図２はプログラム置換システム１の動作手順を示すフローチャートである。
〔Ｓ１〕プログラム置換装置２０は、端末装置１０から送信された版数情報（版数情報Ａとする）を含む電文を受信する。
〔Ｓ２〕プログラム実行手段２３は、転送後情報管理テーブルＴ２２に対し、版数情報Ａがあるか否かを判断する。あればステップＳ３へ、なければステップＳ４へ行く。
〔Ｓ３〕プログラム実行手段２３は、版数情報Ａのプログラムを実行する。
〔Ｓ４〕プログラム実行手段２３は、転送前情報管理テーブルＴ２１を参照して、版数情報Ａがあるか否かを判断する。あればステップＳ６へ、なければステップＳ５へ行く。
〔Ｓ５〕プログラム置換装置２０は、端末装置１０へエラーを送信する。
〔Ｓ６〕プログラム実行手段２３は、プログラム格納手段２１からプログラム一時格納手段２２へ、版数情報Ａのプログラムを動的にリンクする。
〔Ｓ７〕プログラム実行手段２３は、転送後情報管理テーブルＴ２２の内容を変更する。
〔Ｓ８〕プログラム実行手段２３は、版数情報Ａのプログラムを実行する。
【００２６】
次にプログラム置換システム１をｎ階層のクライアント／サーバ環境のネットワークに適用した際の分散処理システムについて説明する。
図３は分散処理システムの構成を示す図である。第１の実施の形態である分散処理システム１ａは、クライアント装置３０と複数のサーバ装置４０−１〜４０−ｎとから構成される。クライアント装置３０と複数のサーバ装置４０−１〜４０−ｎは、分散オブジェクト・コンピューティングを基本とするｎ階層クライアント／サーバ・アーキテクチャを持つネットワーク２００上に配置される。
【００２７】
また、ネットワーク２００上には、ＣＯＲＢＡ（Common Object Request Broker Architecture)やＤＣＯＭ（Distributed Component Object Model) 等の分散オブジェクト通信インフラストラクチャが準備されるが（以降、分散オブジェクト通信インフラストラクチャをＯＲＢ（Object Request Broker)と呼ぶ）、ＣＯＲＢＡのＯＲＢが適用されたシステムとして以降説明する。
【００２８】
まず、ネットワーク２００上に接続するＷｅｂサーバ６０からクライアント・アプリケーションが、クライアント装置３０へダウンロードされる。その後、クライアント装置３０と複数のサーバ装置４０−１〜４０−ｎに対して、ＣＯＲＢＡのＯＲＢ上で分散オブジェクトの配信、置換が行われる。ここで、分散オブジェクトとは、個々の機能単位を指しており、アプリケーション・プログラム、ライブラリ等に該当する。
【００２９】
クライアント装置３０に対し、クライアント側スタブ処理手段３１は、分散オブジェクトの版数情報を含む電文のスタブ処理を行う。スタブ処理とは、ＯＲＢ上でクライアントからサーバへ分散オブジェクトを送信する際の、クライアント側での送信処理のことをいう。
【００３０】
なお、クライアント装置３０は、ソフトウェアの入出力制御を行うインタフェース手段（図示せず）を有する。
サーバ装置４０−１に対し（サーバ装置４０−２〜４０−ｎもサーバ装置４０−１と同機能を持つ）、サーバ側スケルトン処理手段４４は、電文のスケルトン処理を行う。スケルトン処理とは、ＯＲＢ上でクライアントから送信された分散オブジェクトをサーバで受信する際の、サーバ側での受信処理のことをいう。
【００３１】
分散オブジェクト格納リポジトリ４１は、置換用の分散オブジェクトを格納する。転送前情報管理テーブルＴ１は、分散オブジェクトの情報を管理する。管理情報の詳細な項目は図８で後述する。
【００３２】
メモリ４２は、分散オブジェクト格納リポジトリ４１から転送された分散オブジェクトを一時格納するプロセス内メモリである。転送後情報管理テーブルＴ２は、メモリ４２に格納されている分散オブジェクトの情報を管理する。管理情報の詳細な項目は図１０で後述する。
【００３３】
分散オブジェクト呼び出し制御手段４３は、電文に含まれる版数情報に対応する分散オブジェクトを、起動中の分散オブジェクトが存在するプロセスＰ１内のメモリ４２に動的にリンクする。そして、分散オブジェクトの関数を呼び出して実行する。
【００３４】
サーバ側スタブ処理手段４５は、他装置（サーバ装置４０−２〜４０−ｎ）内にある分散オブジェクトを呼び出して実行するために、版数情報を含む電文のスタブ処理を行う（この場合、サーバ装置４０−１はクライアントとなる）。
【００３５】
一方、ネットワーク２００には、管理サーバ５０ａが接続する。管理サーバ５０ａは、ネットワーク２００に接続する装置の保守・運用を行う。例えば、分散オブジェクト格納リポジトリ４１に格納する分散オブジェクトや転送前情報管理テーブルＴ１に記載する各種情報の設定・管理を一括して行う。
【００３６】
ここで、分散オブジェクト格納リポジトリ４１からメモリ４２へ、分散オブジェクト（１．０１）、（１．０２）がすでに転送されているものとする。
その後、（１．０３）の版数情報を含む電文を受信すると、分散オブジェクト呼び出し制御手段４３は、転送前情報管理テーブルＴ１、転送後情報管理テーブルＴ２へアクセスして、分散オブジェクトの存在場所を確認し（図１１で後述）、リンクしていない場合には、メモリ４２へ分散オブジェクト（１．０３）を転送する。
【００３７】
これにより、同一プロセスＰ１内に分散オブジェクト（１．０３）が組み込まれ、新しい分散オブジェクトの処理を開始することができる。
また、この場合、サーバ側スタブ処理手段４５は、版数情報（１．０３）を含む電文を生成して、サーバ装置４０−２へ配信し、サーバ装置４０−２でも分散オブジェクト（１．０３）が起動し、その後、サーバ装置４０−２は版数情報（１．０３）を含む電文をサーバ装置４０−３へ配信する。以降同様にして、ネットワーク２００上のすべてのサーバ装置に対して、分散オブジェクト（１．０３）が設定されて起動することになる。
【００３８】
このように、旧分散オブジェクトのトランザクション処理中に、ネットワーク２００上のサーバ装置４０−１〜４０−ｎ間で同期させながら、新分散オブジェクトのトランザクション処理に入れ替えていく構成とした。これにより、業務を中断せずに、ネットワーク２００上のすべての装置に対して、分散オブジェクトの配信、置換を自動的に効率よく行うことが可能になり、システムの信頼性及び品質の向上を図ることが可能になる。
【００３９】
次にサーバ装置４０（サーバ装置４０−１〜４０−ｎを総称してサーバ装置４０とする）の詳細な構成について説明する。
図４はサーバ装置４０の構成を示す図である。スケルトン組み込み機構４４ａとスケルトン処理手段４４ｂは、サーバ側スケルトン処理手段４４に対応し、スタブ組み込み機構４５ａとスタブ処理手段４５ｂは、サーバ側スタブ処理手段４５に対応する。また、コンポーネント版数情報定義ファイルＴ１は転送前情報管理テーブルＴ１に対応し、コンポーネント版数情報管理テーブルＴ２は転送後情報管理テーブルＴ２に対応する。
【００４０】
さらに、以降の説明では、分散オブジェクトを主体性を持つ存在として見た場合に、その状態及び状態の変化を分散オブジェクト振る舞い処理と呼ぶ。
スケルトン格納リポジトリ４６は、サーバ側スケルトン処理用共有ライブラリを格納する。スケルトン組み込み機構４４ａは、コンポーネント版数情報定義ファイルＴ１にアクセスして、コンポーネント版数情報定義ファイルＴ１で管理されているプロセス名を認識する。
【００４１】
そして、スケルトン組み込み機構４４ａは、このプロセス名に対応したサーバ側スケルトン処理用共有ライブラリＬａを、スケルトン格納リポジトリ４６から呼び出す。その後、サーバ側スケルトン処理用共有ライブラリＬａのスケルトン処理手段４４ｂで電文の受信処理を行う。
【００４２】
分散オブジェクト格納リポジトリ４１は、分散オブジェクトの振る舞い処理用共有ライブラリを格納する。分散オブジェクト呼び出し制御手段４３は、電文に含まれる版数情報に対応する分散オブジェクトを、コンポーネント版数情報定義ファイルＴ１、コンポーネント版数情報管理テーブルＴ２へアクセスして、分散オブジェクトの存在場所を確認し（図１１で後述）、リンクしていない場合には、メモリ４２へ分散オブジェクト振る舞い処理（の共有ファイル）を転送（以下、ロード）し、分散オブジェクトの関数を呼び出して実行する。また、動的リンクの状況や分散オブジェクトの各関数へのポインタを管理する。
【００４３】
スタブ格納リポジトリ４７は、クライアント側スタブ処理用共有ライブラリを格納する。スタブ組み込み機構４５ａは、他装置の分散オブジェクトをさらに呼び出す場合に、スタブ処理用共有ライブラリＬｂをスタブ格納リポジトリ４７から呼び出す。そして、スタブ処理用共有ライブラリＬｂのスタブ処理手段４５ｂで電文の送信処理を行う。
【００４４】
スタブ処理の詳細な動作としては、まず、分散オブジェクト振る舞い処理中に、さらに他サーバ装置のサーバ・アプリケーションへ、処理を要求する必要がある場合は、スタブ組み込み機構４５ａを実行する。
【００４５】
そして、業務依頼をするサーバ・アプリケーションとの通信を確立するため、スタブ格納リポジトリ４７から該当するスタブ処理用共有ライブラリＬｂを取得し、動的にリンクする。
【００４６】
スタブ処理手段４５ｂでは、サーバ・アプリケーションとの接続処理を実施する。また、分散オブジェクト振る舞い処理では、サーバとの接続を待ち、システム全体の版数情報を業務電文に含めて送信する。このような動作を行うことにより、サーバ装置４０−１〜４０−ｎ間で、分散オブジェクトの配信、置換を同期させながら行うことが可能になる。
【００４７】
なお、プロセスは、プロセスＰ１〜Ｐｎのように複数生成することができ、プロセスＰ１〜Ｐｎ内の処理と、スケルトン格納リポジトリ４６とスタブ格納リポジトリ４７と分散オブジェクト格納リポジトリ４１とコンポーネント版数情報定義ファイルＴ１とは、オペレーティングシステム４８を介して通信を行う。
【００４８】
さらに、スケルトン格納リポジトリ４６、スタブ格納リポジトリ４７、分散オブジェクト格納リポジトリ４１に対する、共有ライブラリの配信は、図３で上述した管理サーバ５０ａにより行われ、集中管理が可能である。
【００４９】
次に電文の構成について説明する。図５は電文の構成例を示す図である。電文２は、分散オブジェクトの関数名２ａとパラメタ２ｃと、システム全体の版数を示す版数情報（メジャー番号＋マイナー番号）２ｂから構成される。
【００５０】
図６は電文のＩＤＬ定義例を示す図である。ＩＤＬ（Interface Definition Language)は、分散オブジェクトのインタフェースを定義する言語である。すべてのinterface について、他パラメタに先立ち、版数情報をinパラメタとして定義する。
【００５１】
図７はＩＤＬ定義からＣ＋＋言語へのマッピング例を示す図である。（Ａ）は版数情報（１．０１）であり、（Ｂ）は版数情報（１．０２）である。
（Ａ）、（Ｂ）に示すように、分散オブジェクトのモジュール名に版数情報を付加したネームスペースＮａ、Ｎｂを付加している。従来では、ＩＤＬと分散オブジェクト振る舞い処理とは１：１対応であったが、Ｃ＋＋言語のネームスペースを使用することにより、複数の版数の分散オブジェクトの関数名、変数名の衝突を防ぐことができ（すなわち、（Ａ）のclass XXX 、と（Ｂ）のclass XXX を全く別のものとして定義できる）、複数の版数の分散オブジェクト振る舞い処理用の共有ライブラリを、同一プロセスのメモリに動的にリンクすることができる。
【００５２】
次にコンポーネント版数情報定義ファイルＴ１について説明する。図８はコンポーネント版数情報定義ファイルＴ１の構成を示す図である。コンポーネント版数情報定義ファイルＴ１は、システム全体の版数情報Ｔ１ａ、分散オブジェクト振る舞い処理用共有ライブラリ名Ｔ１ｂ、共有ライブラリの版数情報Ｔ１ｃ、プロセス名Ｔ１ｄから構成される。
【００５３】
システム全体の版数情報Ｔ１ａは、クライアント装置３０から要求される版数情報に対応する。分散オブジェクト振る舞い処理用共有ライブラリ名Ｔ１ｂは、版数情報に対応するライブラリ名である。例えば図では、版数情報（１．０１）に対して、libAPL-A.so 〜 libAPL-X.soが対応している。
【００５４】
また、同じライブラリ名で異なる内容の共有ライブラリが、スケルトン格納リポジトリ４６やスタブ格納リポジトリ４７に格納されている。例えば、スケルトン格納リポジトリ４６に格納されているlibAPL-A.so は、プロセス(process-1) で用いるスケルトン処理用のライブラリ（スケルトン処理用共有ライブラリＬａ）であり、スタブ格納リポジトリ４７に格納されているlibAPL-A.so は、プロセス(process-1) で用いるスタブ処理用のライブラリ（スタブ処理用共有ライブラリＬｂ）である。
【００５５】
共有ライブラリの版数情報Ｔ１ｃは、分散オブジェクトのコンポーネントの版数情報である。共有ライブラリの版数情報Ｔ１ｃでは、複数の版数を持つ複数のソフトウェア・コンポーネントの組み合わせをシステム全体の版数で関連付けているため、システム全体の版数情報から各分散オブジェクトの振る舞い処理コンポーネントの版数が一意に決定することができる。
【００５６】
プロセス名Ｔ１ｄは、リンク先のプロセスのことであり、どのプロセスで実行するかが示される。
次にリポジトリ等のディレクトリ構成について説明する。図９はディレクトリの構成例を示す図である。／ｏｐｔ、／ａｐｔの下位に／ｅｔｃ、／ｂｉｎ、／ｓｋｅｌ、／ｓｔｕｂ、／ｏｂｊがある。
【００５７】
／ｅｔｃはコンポーネント版数情報定義ファイルＴ１を格納し、／ｂｉｎはスケルトン組み込み機構４４ａを格納し、／ｓｋｅｌはスケルトン格納リポジトリ４６の格納領域であり、／ｓｔｕｂはスタブ格納リポジトリ４７の格納領域である。
【００５８】
また、／ｏｂｊの下位に／１．０１、／１．０２、…があり、これらは版数情報毎に対応した分散オブジェクト格納リポジトリ４１の格納領域である。
次にコンポーネント版数情報管理テーブルＴ２について説明する。図１０はコンポーネント版数情報管理テーブルＴ２の構成を示す図である。
【００５９】
コンポーネント版数情報管理テーブルＴ２は、メモリ４２にロードされた分散オブジェクト振る舞い処理の情報を格納する。項目としては、システム全体の版数情報Ｔ２ａ、分散オブジェクト振る舞い処理用共有ライブラリ名Ｔ２ｂ、共有ライブラリの版数情報Ｔ２ｃ、フラグＴ２ｄ、関数テーブルへのアドレスＴ２ｅから構成される。システム全体の版数情報Ｔ２ａ、分散オブジェクト振る舞い処理用共有ライブラリ名Ｔ２ｂ、共有ライブラリの版数情報Ｔ２ｃは、図８と同様なので説明は省略する。
【００６０】
フラグＴ２ｄは、メモリ４２にロード済みか否かを示す情報が記載され、ロード済みならＹ、そうでなければＮである。関数テーブルへのアドレスＴ２ｅは、版数情報に対応した分散オブジェクト振る舞い処理の関数テーブルのアドレスが記載される。
【００６１】
例えば、版数情報（１．０１）の分散オブジェクト振る舞い処理の関数テーブルのアドレスが0x00012345が示す関数テーブルはｔ（１．０１）であり、版数情報（１．０２）の分散オブジェクト振る舞い処理の関数テーブルのアドレスが0x00023456が示す関数テーブルはｔ（１．０２）である。
【００６２】
次に分散オブジェクト呼び出し制御手段４３の動作をフローチャートを用いて説明する。図１１は分散オブジェクト呼び出し制御手段４３の動作手順を示すフローチャートである。
〔Ｓ１０〕版数情報Ａを含む電文を受信した場合、分散オブジェクト呼び出し制御手段４３は、コンポーネント版数情報管理テーブルＴ２に対し、版数情報Ａがあるか否かを判断する。あればステップＳ１１へ、なければステップＳ１２へ行く。
〔Ｓ１１〕分散オブジェクト呼び出し制御手段４３は、版数情報Ａの分散オブジェクトの関数を呼び出して実行する。
〔Ｓ１２〕分散オブジェクト呼び出し制御手段４３は、コンポーネント版数情報定義ファイルＴ１を参照して、版数情報Ａがあるか否かを判断する。あればステップＳ１４へなければステップＳ１３へ行く。
〔Ｓ１３〕サーバ装置４０は、クライアントへエラーを送信する。
〔Ｓ１４〕分散オブジェクト呼び出し制御手段４３は、分散オブジェクト格納リポジトリ４１からメモリ４２への動的リンクを行う。
〔Ｓ１５〕分散オブジェクト呼び出し制御手段４３は、コンポーネント版数情報管理テーブルＴ２の内容を変更する。
〔Ｓ１６〕分散オブジェクト呼び出し制御手段４３は、版数情報Ａの分散オブジェクトの関数を呼び出して実行する。
【００６３】
以上説明したように、分散処理システム１ａは、サーバ装置内（サーバ・アプリケーション内）で分散オブジェクト呼び出し制御手段４３を設けて、電文に含まれたシステム全体の版数情報に該当する分散オブジェクト振る舞い処理用共有ライブラリを動的にリンクする構成とした。さらに、分散オブジェクト振る舞い処理の関数名、変数名をＣ＋＋言語のネームスペースを使用する構成にした。
【００６４】
これにより、各版数の名前の衝突をなくし、実行中のトランザクションを停止することなく、同一プロセス上に複数の版数のソフトウェアを起動することができる。
【００６５】
また、クライアント・アプリケーションとサーバ・アプリケーションで、システム全体の版数情報を電文に含めて配信し合いながら、分散オブジェクトの置換を行う構成としたので、ｎ層のクライアント・サーバシステムに対しても複数の装置間で同期しながら分散オブジェクトの置換が可能になる。
【００６６】
次に第２の実施の形態の分散処理システムについて説明する。図１２はコンポーネント版数情報管理テーブルの構成を示す図である。コンポーネント版数情報管理テーブルＴ２−１は、図１０で説明したコンポーネント版数情報管理テーブルＴ２に、参照カウンタＴ２ｆを設けたものである。
【００６７】
参照カウンタＴ２ｆには、メモリ４２に格納されている分散オブジェクト振る舞い処理の参照回数をカウントした値が記載される。
分散オブジェクト呼び出し制御手段４３は、分散オブジェクト振る舞い処理の関数を呼び出す時に、参照カウンタＴ２ｆに１だけ加算し、その関数が復帰した時に、参照カウンタＴ２ｆから１だけ減算するようにする。
【００６８】
図１３は分散オブジェクトの解放処理手順を示すフローチャートである。
〔Ｓ２０〕分散オブジェクト呼び出し制御手段４３は、分散オブジェクト振る舞い処理を実行して完了すると、参照カウンタＴ２ｆから１だけ減算する。
〔Ｓ２１〕分散オブジェクト呼び出し制御手段４３は、参照カウンタＴ２ｆの値が０か否かを判断する。０ならステップＳ２２へ、０でなければステップＳ２４へ行く。
〔Ｓ２２〕参照カウンタＴ２ｆの値が０である版数情報より、新しい版数情報がコンポーネント版数情報管理テーブルＴ２内にあるか否かを判断する。新しい版数情報がなければステップＳ２３へ、新しい版数情報があればステップＳ２４へ行く。
〔Ｓ２３〕メモリ４２から参照カウンタＴ２ｆの値が０である分散オブジェクト振る舞い処理を解放（削除）する。
〔Ｓ２４〕実行中の処理を継続する。
【００６９】
以上説明したように、第２の実施の形態では、分散オブジェクト振る舞い処理に対する参照カウンタが０であり、かつ、その版数情報より新しい版数情報がコンポーネント版数情報管理テーブルＴ２にある場合には、その分散オブジェクト振る舞い処理をメモリ４２から解放する構成にした。
【００７０】
これにより、旧版の分散オブジェクト振る舞い処理の利用者がなくなった時には、自動的にメモリ４２から解放されることになり、分散オブジェクト振る舞い処理の効率のよい置換が可能になる。
【００７１】
次に第３の実施の形態の分散処理システムについて説明する。図１４は電文の構成例を示す図である。電文２−１は、分散オブジェクトの関数名２ａと、システム全体の版数を示す版数情報２ｂと、パラメタ２ｃと、評価中フラグ２ｄから構成される。この評価中フラグ２ｄは、分散オブジェクト振る舞い処理が評価中か否かを示すものである。
【００７２】
図１５は電文のＩＤＬ定義例を示す図であり、図１６はＩＤＬ定義からＣ＋＋言語へのマッピング例を示す図である。図に示すように、第３の実施の形態では版数情報の他に、評価中フラグを含む。
【００７３】
図１７は評価対象の分散オブジェクトの処理手順を示すフローチャートである。
〔Ｓ３０〕分散オブジェクト呼び出し制御手段４３は、版数情報Ａの電文中の評価中フラグが評価中か否かを判断する。評価中であればステップＳ３１へ、評価中でなければ図１１のステップＳ１０へ行く。
〔Ｓ３１〕分散オブジェクト呼び出し制御手段４３は、コンポーネント版数情報定義ファイルＴ１に対し、版数情報Ａがあるか否かを判断する。あればステップＳ３３へ、なければステップＳ３２へ行く。
〔Ｓ３２〕サーバ装置４０は、クライアントへエラーを送信する。
〔Ｓ３３〕分散オブジェクト呼び出し制御手段４３は、該当する分散オブジェクト振る舞い処理を動的にリンクするのではなく、動的に別のプロセスを生成し、その別プロセス内のスケルトン組み込み機構を実行する。そして、該当するスケルトン処理用共有ライブラリと分散オブジェクト振る舞い処理を別プロセスへロードする。
〔Ｓ３３〕分散オブジェクト呼び出し制御手段４３は、コンポーネント版数情報管理テーブルＴ２の内容を変更する。
〔Ｓ３５〕別プロセス内で、評価中の分散オブジェクト振る舞い処理を実行する。
【００７４】
以上説明したように、第３の実施の形態では、評価中の分散オブジェクト振る舞い処理は別プロセスで実行する構成とした。これにより、評価中の分散オブジェクト振る舞い処理が他の分散オブジェクト振る舞い処理に与える影響をなくし、分散オブジェクトの置換制御の品質を向上することが可能になる。
【００７５】
次に第４の実施の形態の分散処理システムについて説明する。図１８はコンポーネント版数情報管理テーブルの構成を示す図である。コンポーネント版数情報管理テーブルＴ２−２は、図１２で説明したコンポーネント版数情報管理テーブルＴ２−１に、評価カウンタＴ２ｇを設けたものである。
【００７６】
評価カウンタＴ２ｇは、別プロセスのメモリに格納されている分散オブジェクト振る舞い処理の評価回数をカウントした値が記載される。
分散オブジェクト呼び出し制御手段４３では、別プロセスを生成して、評価中の分散オブジェクト振る舞い処理をリンクした場合に評価カウンタを１だけ加算し、評価処理の完了応答を受信した時に、評価カウンタから１だけ減算するようにする。
【００７７】
図１９は分散オブジェクトの評価処理手順を示すフローチャートである。
〔Ｓ４０〕分散オブジェクト呼び出し制御手段４３は、評価中の分散オブジェクト振る舞い処理を実行して、応答を受信すると、評価カウンタＴ２ｇから１だけ減算する。
〔Ｓ４１〕分散オブジェクト呼び出し制御手段４３は、評価カウンタＴ２ｇの値が０か否かを判断する。０ならステップＳ４２へ、０でなければステップＳ４４へ行く。
〔Ｓ４２〕フラグＴ２ｄがＹなら（動的にリンクしているなら）ステップＳ４３へ、Ｎなら（動的にリンクしていないなら）ステップＳ４４へ行く。
〔Ｓ４３〕別プロセスを停止する。
〔Ｓ４４〕実行中の処理を継続する。
【００７８】
以上説明したように、第４の実施の形態では、評価中フラグが０である場合には、評価中の分散オブジェクト振る舞い処理を実行していた別プロセスを停止する構成にした。これにより、評価用のプロセスは、利用者がなくなった時に、自動的に停止することが可能になる。
【００７９】
次にプログラム置換方法について説明する。図２０はプログラム置換方法の処理手順を示すフローチャートである。
〔Ｓ５０〕クライアントからプログラムの版数情報を含む電文を送信する。
〔Ｓ５１〕電文をサーバで受信する。
〔Ｓ５２〕置換用のプログラムを格納する。
〔Ｓ５３〕プログラムの情報を転送前情報管理テーブルで管理する。
〔Ｓ５４〕電文に含まれる版数情報に対応するプログラムを、起動中のプログラムが存在するプロセス内のメモリに動的にリンクして、プログラムを呼び出して実行する。
〔Ｓ５５〕メモリに格納されているプログラムの情報を転送後情報管理テーブルで管理する。
〔Ｓ５６〕他装置内にあるプログラムを呼び出して実行するために、版数情報を含む電文の配信処理を行うことにより、ｎ階層間でのプログラムの置換を、装置間で同期させて行う。
【００８０】
転送後情報管理テーブルは、メモリに格納されているプログラムの参照回数をカウントする参照カウンタをテーブル項目として有する。そして、プログラムに対する参照カウンタの値が０で、プログラムの版数情報より新しい版数情報が転送後情報管理テーブルにある場合には、プログラムをメモリから削除する。
【００８１】
さらに、プログラムの版数情報と、プログラムが評価中か否かを示す評価フラグと、を含む電文を送信する。そして、評価フラグが評価中を示す場合には、別プロセスの中で評価対象のプログラムを呼び出して実行する。
【００８２】
また、転送後情報管理テーブルは、メモリに格納されているプログラムの評価回数をカウントする評価カウンタをテーブル項目として有する。そして、プログラムに対する評価カウンタの値が０の場合は、別プロセスの中のプログラムの実行を中止する。
【００８３】
さらにまた、管理サーバにより、置換用のプログラム及びプログラムに関する情報の設定・管理を一括して行う。
以上説明したように、プログラム置換システム、分散処理システム及びプログラム置換方法によれば、分散オブジェクト・コンピューティングを基本としたｎ階層クライアント／サーバ環境に対し、トランザクション処理を全く中断することなく、新しいソフトウェアを動的に組み込むことができる。
【００８４】
また、新・旧のソフトウェアを混在させながら、複数のコンピュータに分散した複数のソフトウェアを段階的に入れ替えることが可能となる。
さらに、古い版数のソフトウェアを使用するクライアントのトランザクション処理の完了を確実に待ち、不要となるメモリを解放することで、システム資源を有効活用することができる。
【００８５】
また、ソフトウェアが評価中の場合には、すでにトランザクション処理を実行中のプロセスで新しいソフトウェアを実行するのではなく、別プロセスにて分散オブジェクトの振る舞い処理を実行するため、信頼性を低下させずに、新しいソフトウェアを導入することができる。
【００８６】
さらに、評価が完了したソフトウェアは、自動的にプロセス内にロードされ、トランザクションが開始される。また、別プロセスで実行されたトランザクション処理の完了を待ち、不要となるプロセスを消滅させることで、システム資源を有効に活用することができる。
【００８７】
さらに、ソフトウェアをリポジトリサーバに集中管理し、ソフトウェア転送することで、ｎ階層クライアント／サーバ環境で煩雑となるソフトウェア更新作業の簡略化、自動化、及び作業品質の向上を実現することが可能になる。
【００８８】
なお、上記の説明では、ＯＲＢとしてＣＯＲＢＡを用いたが、これ以外のＯＲＢのネットワークを使用してもよい。また、上記の説明では、ｎ階層のクライアント／サーバ・システムを中心に説明したが、多様な分野の情報通信ネットワークのソフトウェアの動的置換に対して適用可能である。
【００８９】
【発明の効果】
以上説明したように、本発明のプログラム置換システムは、プログラムの版数情報を含む電文を送信し、この版数情報に対応するプログラムをプロセス上に動的にリンクさせて実行する構成とした。これにより、現在行っている業務のソフトウェアを実行中に、新しい版数のソフトウェアを組み込むことができるので、業務の中断なしにソフトウェアを動的に効率よく置換することが可能になる。
【００９０】
また、プログラムを呼び出すときには、参照カウンタに１を加算し、呼び出したプログラムの処理が完了したときには、参照カウンタから１だけ減算し、参照カウンタの値が０のプログラムが存在する場合には、参照カウンタ値０のプログラムを解放するので、効率よくプログラムの置換を行うことができ、さらに、評価中を示す電文と同じ版数情報のプログラムを管理していた場合には、現在起動中のプロセスに動的にリンクさせずに、別プロセスを生成して、別プロセスの中で評価対象のプログラムを実行するので、現在実行中の他のプログラムの処理に何ら影響を与えることなく、あらたなプログラムを評価することが可能になる。さらにまた、別プロセスを生成したときには、別プロセスの中で実行される評価対象プログラムの評価カウンタに１を加算し、別プロセスの中で実行される評価対象プログラムの処理が完了したときには評価カウンタから１だけ減算し、評価カウンタの値が０の評価対象プログラムが存在する場合には、評価カウンタ値０の評価対象プログラムの別プロセスを停止することで、プログラムの評価を終わったときには自動的にプロセスを停止（削除）することが可能になる。
【図面の簡単な説明】
【図１】  プログラム置換システムの原理図である。
【図２】  プログラム置換システムの動作手順を示すフローチャートである。
【図３】  分散処理システムの構成を示す図である。
【図４】  サーバ装置の構成を示す図である。
【図５】  電文の構成例を示す図である。
【図６】  電文のＩＤＬ定義例を示す図である。
【図７】  ＩＤＬ定義からＣ＋＋言語へのマッピング例を示す図である。（Ａ）は版数情報（１．０１）であり、（Ｂ）は版数情報（１．０２）である。
【図８】  コンポーネント版数情報定義ファイルの構成を示す図である。
【図９】  ディレクトリの構成例を示す図である。
【図１０】  コンポーネント版数情報管理テーブルの構成を示す図である。
【図１１】  分散オブジェクト呼び出し制御手段の動作手順を示すフローチャートである。
【図１２】  コンポーネント版数情報管理テーブルの構成を示す図である。
【図１３】  分散オブジェクトの解放処理手順を示すフローチャートである。
【図１４】  電文の構成例を示す図である。
【図１５】  電文のＩＤＬ定義例を示す図である。
【図１６】  ＩＤＬ定義からＣ＋＋言語へのマッピング例を示す図である。
【図１７】  評価対象の分散オブジェクトの処理手順を示すフローチャートである。
【図１８】  コンポーネント版数情報管理テーブルの構成を示す図である。
【図１９】  分散オブジェクトの評価処理手順を示すフローチャートである。
【図２０】  プログラム置換方法の処理手順を示すフローチャートである。
【符号の説明】
１  プログラム置換システム
１０  端末装置
１１  電文送信手段
２０  プログラム置換装置
２１  プログラム格納手段
２２  プログラム一時格納手段
２３  プログラム呼び出し制御手段
Ｔ２１  転送前情報管理テーブル
Ｔ２２  転送後情報管理テーブル
Ｐa  プロセス
【図１】
0003888827.tif 000002
【図２】
0003888827.tif 000003
【図３】
0003888827.tif 000004
【図４】
0003888827.tif 000005
【図５】
0003888827.tif 000006
【図６】
0003888827.tif 000007
【図７】
0003888827.tif 000008
【図８】
0003888827.tif 000009
【図９】
0003888827.tif 000010
【図１０】
0003888827.tif 000011
【図１１】
0003888827.tif 000012
【図１２】
0003888827.tif 000013
【図１３】
0003888827.tif 000014
【図１４】
0003888827.tif 000015
【図１５】
0003888827.tif 000016
【図１６】
0003888827.tif 000017
【図１７】
0003888827.tif 000018
【図１８】
0003888827.tif 000019
【図１９】
0003888827.tif 000020
【図２０】
0003888827.tif 000021