(57)【要約】【課題】  アプリケーションが用いるオブジェクトを再利用する方法であって、再利用するオブジェクトに変更が生じても、整合性、安全性に不具合が生じることなく再利用することが可能である、オブジェクトの再利用方法を提供することである。【解決手段】  アプリケーション・プログラムがアプリケーション・オブジェクトの参照が終了したことを検出し、アプリケーション・プログラムにより、アプリケーション・オブジェクトの変更が行われることを検出し、アプリケーション・オブジェクトの変更を検出しないことに応答して、アプリケーション・オブジェクトの再利用をすることを決定し、参照が終了したこと、かつ、再利用をすることが決定されたことに応答して、アプリケーション・オブジェクトを再利用可能にする方法を提供する。【選択図】      図１
2006185325.tif 000002
【特許請求の範囲】
【請求項１】
アプリケーション・プログラムに用いられるアプリケーション・オブジェクトを再利用する方法であって、
前記アプリケーション・プログラムが前記アプリケーション・オブジェクトの参照が終了したことを検出する参照検知段階と、
前記アプリケーション・プログラムにより、前記アプリケーション・オブジェクトの変更が行われることを検出する変更検出段階と、
前記アプリケーション・オブジェクトの変更を検出しないことに応答して、前記アプリケーション・オブジェクトの再利用をすることを決定する再利用決定段階と、
前記参照が終了したこと、かつ、前記再利用をすることが決定されたことに応答して、前記アプリケーション・オブジェクトを再利用可能にする再利用段階と、
を備えることを特徴とする方法。
【請求項２】
請求項１に記載の方法であって、
前記再利用段階は、前記アプリケーション・オブジェクトが記憶されている場所に関する情報（リファレンス）を記憶することにより再利用可能にすることを特徴とする方法。
【請求項３】
請求項２に記載の方法であって、
前記再利用段階は、前記アプリケーション・オブジェクトの変更を検出したことに応答して、変更前のアプリケーション・オブジェクトを複製し、この複製したアプリケーション・オブジェクトのリファレンスを記憶することで再利用可能にすることを特徴とする方法。
【請求項４】
請求項２に記載の方法であって、
前記参照検知段階は、前記参照が終了したとは、ＪＡＶＡ言語のfinalizeメソッドを用いることで、前記アプリケーションからの参照が終了したことを検出することを特徴とする方法。
【請求項５】
請求項２に記載の方法であって、
前記参照検知段階は、前記参照が終了したとは、前記アプリケーション・プログラムが参照を行うコマンドから、前記アプリケーションからの参照が終了したことを検出することを特徴とする方法。
【請求項６】
請求項２に記載の方法であって、
前記参照検知段階は、前記参照が終了したとは、動的にアプリケーション・プログラムからオブジェクトのリンクを追尾することから、前記アプリケーションからの参照が終了したことを検出することを特徴とする方法。
【請求項７】
請求項２に記載の方法であって、
前記参照検知段階は、前記参照が終了したとは、設定ファイルの情報から、前記アプリケーションからの参照が終了したことを検出することを特徴とする方法。
【請求項８】
請求項２に記載の方法であって、
前記参照検知段階は、前記参照が終了したとは、前記アプリケーション・プログラムのスレッドから、前記アプリケーションからの参照が終了したことを検出することを特徴とする方法。
【請求項９】
請求項１に記載の方法であって、
前記変更検出段階では、前記アプリケーション・プログラムにより、前記アプリケーション・オブジェクトの変更が行われることを、前記アプリケーション・プログラムが変更を行うメソッドから検出することを特徴とする方法。
【請求項１０】
請求項１に記載の方法であって、
前記変更検出段階では、前記アプリケーション・プログラムにより、前記アプリケーション・オブジェクトの変更が行われることを、コードを検査した情報に基づいて検出することを特徴とする方法。
【請求項１１】
請求項１に記載の方法であって、
前記変更検出段階では、前記アプリケーション・プログラムにより、前記アプリケーション・オブジェクトの変更が行われることを、設定ファイルの情報から検出することを特徴とする方法。
【請求項１２】
請求項１に記載の方法であって、
前記変更検出段階では、前記アプリケーション・プログラムにより、前記アプリケーション・オブジェクトの変更が行われることを、DOMのメソッドを検出することにより検出する方法。
【請求項１３】
請求項１に記載の方法であって、
前記変更検出段階では、前記アプリケーション・プログラムにより、前記アプリケーション・オブジェクトの変更が行われることを、SDOのメソッドを検出することにより検出する方法。
【請求項１４】
請求項１に記載の方法であって、
前記変更検出段階では、前記アプリケーション・プログラムにより、前記アプリケーション・オブジェクトの変更が行われることを、Beanのメソッドを検出することにより検出する方法。
【請求項１５】
アプリケーション・プログラムに用いられるアプリケーション・オブジェクトを再利用するコンピュータ・プログラムであって、
前記アプリケーション・プログラムが前記アプリケーション・オブジェクトの参照が終了したことを検出する機能を実現し、
前記アプリケーション・プログラムにより、前記アプリケーション・オブジェクトの変更が行われることを検出する機能を実現し、
前記アプリケーション・オブジェクトの変更を検出しないことに応答して、前記アプリケーション・オブジェクトの再利用をすることを決定する機能を実現し、
前記参照が終了したこと、かつ、前記再利用をすることが決定されたことに応答して、前記アプリケーション・オブジェクトを再利用可能にする機能を実現することを特徴とするコンピュータ・プログラム。
【請求項１６】
アプリケーション・プログラムに用いられるアプリケーション・オブジェクトを再利用する情報処理装置であって、
前記アプリケーション・プログラムが前記アプリケーション・オブジェクトの参照が終了したことを検出する参照検知部と、
前記アプリケーション・プログラムにより、前記アプリケーション・オブジェクトの変更が行われることを検出する変更検出部と、
前記アプリケーション・オブジェクトの変更を検出しないことに応答して、前記アプリケーション・オブジェクトの再利用をすることを決定する再利用決定部と、
前記参照が終了したこと、かつ、前記再利用をすることが決定されたことに応答して、前記アプリケーション・オブジェクトを再利用可能にする再利用部と、
を備えることを特徴とする情報処理装置。
【請求項１７】
請求項１６に記載の情報処理装置であって、
前記再利用部は、前記アプリケーション・オブジェクトの再利用可能な部分の情報（リファレンス）を記憶することにより再利用可能にすることを特徴とする情報処理装置。
【請求項１８】
請求項１７に記載の情報処理装置であって、
前記再利用部は、前記アプリケーション・オブジェクトの変更を検出したことに応答して、変更前のアプリケーション・オブジェクトを複製し、この複製したアプリケーション・オブジェクトのリファレンスを記憶することで再利用可能にすることを特徴とする情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、例えば、構造化文章についてのアプリケーション・プログラムからの要求に対して生成されるアプリケーション・オブジェクトを再利用する方法に関する。さらに具体的には、１つ又は複数のアプリケーション・プログラムで使用されるアプリケーション・オブジェクトを、ミドルウェア等のソフトウェアにて制御し、再利用する方法に関する。
【背景技術】
【０００２】
近年、情報の記述に構造化文章が用いられている。この構造化文章に対して、DOM(Document  Object  Model)、SDO（Service  Data  Object）、Bean等の構造を備えたオブジェクトを生成してアプリケーションに伝えることが行われる。この際に、アプリケーションは、一度生成したアプリケーション・オブジェクト（以下、「オブジェクト」）を再利用したい場合が頻繁に発生する。
【０００３】
このようなオブジェクトの再利用を実現するために、一度生成したオブジェクトをキャッシュしておくプログラミング技法は、Flyweightパターンとしても知られている。この技法では、アプリケーションからの、ある要求に対応するオブジェクトを何度も作り直すのではなく、同じオブジェクトを保持しておいて、アプリケーションに返す技法である。
【０００４】
Flyweightパターンをさらに、改良した方法として、XML文章解析した結果のDOMをキャッシュしておく方法が知られている（例えば、特許文献１）。この方法では、キャッシュしたオブジェクトの再利用は、読み出しに限られる。つまり、アプリケーション・サーバでキャッシュしておいたオブジェクトを、読み出す場合にのみ再利用させる。
【特許文献１】特開２００４−６２７１６号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
しかしながら、特許文献１の方法では、キャッシュしておいたオブジェクトを部分的に変更して再利用することができない。つまり、オブジェクトを再利用する際には、一度生成したオブジェクトを変形することなく、そのまま使用するのみならず、部分的に変更して再利用したい場合も頻繁に発生する。このような場合に特許文献１の方法では再利用することができない。
【０００６】
すなわち、再利用しているオブジェクトに対して、アプリケーションからの変更があった場合に、このオブジェクトを変更すると、もともと生成されたオブジェクトと異なるオブジェクトがキャッシュされてしまうため、オブジェクトの整合性、安全性に不安が生じる。すなわち、あるアプリケーションＡが保持して参照しているオブジェクトを、他のアプリケーションＢからの要求により、再利用して変更を行うと、アプリケーションＡは、勝手に変更されたオブジェクトの構造や値を使用することになり、整合性、安全性に不具合が生じる。
【０００７】
本発明の目的は、アプリケーションが用いるオブジェクトを再利用する方法であって、再利用するオブジェクトに変更が生じても、整合性、安全性に不具合が生じることなく再利用することが可能である、オブジェクトの再利用方法を提供することである。
【課題を解決するための手段】
【０００８】
そこで、本発明者は、上記課題を解決するために鋭意研究を重ねた結果、
アプリケーション・プログラムに用いられるアプリケーション・オブジェクトを再利用する方法であって、
前記アプリケーション・プログラムが前記アプリケーション・オブジェクトの参照が終了したことを検出する参照検知段階と、
前記アプリケーション・プログラムにより、前記アプリケーション・オブジェクトの変更が行われることを検出する変更検出段階と、
前記アプリケーション・オブジェクトの変更を検出しないことに応答して、前記アプリケーション・オブジェクトの再利用をすることを決定する再利用決定段階と、
前記参照が終了したこと、かつ、前記再利用をすることが決定されたことに応答して、前記アプリケーション・オブジェクトを再利用可能にする再利用段階と、
を備えることを特徴とする方法を提供する。
【０００９】
本発明によれば、アプリケーション・プログラムがアプリケーション・オブジェクトの参照が終了したことを検出し、アプリケーション・プログラムにより、アプリケーション・オブジェクトの変更が行われることを検出し、アプリケーション・オブジェクトの変更を検出しないことに応答して、アプリケーション・オブジェクトの再利用をすることを決定し、参照が終了したこと、かつ、再利用をすることが決定されたことに応答して、アプリケーション・オブジェクトを再利用可能にする。
【００１０】
したがって、本発明によれば、一のアプリケーション・プログラムのオブジェクトに対する参照が終了したこと、及び、一のアプリケーション・プログラムのオブジェクトに対する変更が行われないことに応答して、このオブジェクトを再利用するかを決定するため、再利用するオブジェクトに変更が生じても、整合性、安全性に不具合が生じることなく再利用することが可能である。
【００１１】
さらに具体的には、上述の構成に加えて、アプリケーション・オブジェクトが記憶されている場所に関する情報（リファレンス）を記憶することにより再利用可能にする。したがって、この発明によれば、再利用するオブジェクトそのものをキャッシュせずに、オブジェクトの再利用可能な部分の情報（リファレンス）をキャッシュするため、キャッシュのためのオーバヘッドが小さい。
【発明の効果】
【００１２】
したがって、本発明によれば、一のアプリケーション・プログラムのオブジェクトに対する参照が終了したこと、及び、一のアプリケーション・プログラムのオブジェクトに対する変更が行われないことに応答して、このオブジェクトを再利用するかを決定するため、再利用するオブジェクトに変更が生じても、整合性、安全性に不具合が生じることなく再利用することが可能である。
【発明を実施するための最良の形態】
【００１３】
以下に、本発明の好適な実施形態を図面に基づいて説明する。
【００１４】
図１に示すように、情報処理装置１は、アプリケーションやデータを制御する制御部１０と、アプリケーションやアプリケーション・オブジェクト（以下、単に「オブジェクト」）等を記憶する記憶部４０とから構成され、さらに、ユーザからの入力を受け付ける入力部２０と、アプリケーションの動作結果等を出力する出力部３０とを備えていてもよい。
【００１５】
情報処理装置１は、情報を処理する機能を備えた装置であり、コンピュータであってよい。情報処理装置１は、アプリケーションが動作し、このアプリケーションとＯＳ（Operating  System）とを仲介するソフトウェア（ミドルウェア）が動作する。
【００１６】
制御部１０は、情報処理装置１にて動作するアプリケーションやオブジェクト、ミドルウェア等の演算、制御を行う中央処理装置であり、ＣＰＵ（Central  Processing  Unit）であってよい。制御部１０は、参照管理部１１と、変更検出部１２と、再利用決定部１３と、再利用部１４とから構成される。
【００１７】
参照検出部１１は、アプリケーションがオブジェクトを参照していることを監視し、参照が終了したことを検知する。変更検出部１２は、アプリケーション・プログラムにより、オブジェクトの変更が行われることを検出する。再利用決定部は、オブジェクトの再利用をすることを決定する。
【００１８】
再利用部１４は、アプリケーションが生成したオブジェクトを再利用可能にする。再利用部１４は、オブジェクトの再利用可能な部分の情報（リファレンス）を記憶することにより再利用可能にする。また、再利用部は、オブジェクトの変更を検出したことに応答して、変更前のオブジェクトを複製し、この複製したオブジェクトのリファレンスを記憶することで再利用可能にする。
【００１９】
記憶部４０は、情報処理装置１のＯＳ、ミドルウェア、アプリケーション、オブジェクト、オブジェクトのリファレンス等を記憶する。すなわち、記憶部４０は、情報処理装置１で取り扱うプログラムやデータ等を記憶する。例えば、記憶部４０は、コンピュータのメモリやハードディスク等であってよい。記憶部４０は、リファレンス記憶部４１と、リファレンス候補記憶部４２と、バッファ部４５とから構成されてよい。
【００２０】
リファレンス記憶部４１は、再利用可能となったオブジェクトのリファレンスを記憶する。リファレンスとは、オブジェクトが記憶されている場所に関する情報であり、オブジェクトの生成とともにリファレンスが与えられる。リファレンスとは、オブジェクトが保存されている場所を示すアドレスでありポインタである。リファレンス候補記憶部４２は、再利用可能となる候補となるオブジェクトのリファレンスを記憶する。バッファ部４５は、アプリケーションのプログラムや、オブジェクトそのものを記憶する。バッファ部４５は、Ｊａｖａ（登録商標）言語では、ヒープ領域と呼ばれる保存領域を提供する。
【００２１】
次に、情報処理装置１が実行する具体的な動作を、図２のフローチャートを用いて説明する。
【００２２】
最初に、情報処理装置１で動作するアプリケーションのうち、一のアプリケーションであるアプリケーションＡが、一のオブジェクトであるオブジェクトＡを要求する（ステップＳ０１）。ここでは、オブジェクトＡはアプリケーションに初めて要求されたと仮定すると、オブジェクトＡはこの要求時に初めて生成され、この生成とともに、このオブジェクトＡのリファレンスが得られる（ステップＳ０２）。このアプリケーションは、このリファレンスに基づいて、オブジェクトＡを使用する。このオブジェクトＡの使用時に、アプリケーションＡがオブジェクトＡの変更を行うことを検出しなかった場合には（ステップＳ０３）、アプリケーションＡの参照の終了後に、リファレンスをリファレンス記憶部４１に記憶する（ステップＳ０５）。オブジェクトの変更を行うことを検出した場合には、リファレンスを記憶することなしに、オブジェクトの変更を行う（ステップＳ０４）。
【００２３】
次に、再利用の段階に入る。アプリケーションＡまたは、アプリケーションＡとは異なるアプリケーションＢが、オブジェクトＡを要求する（ステップＳ０６）。オブジェクトＡは、先に生成していたため、再利用できないか判断する。ここで、オブジェクトＡのリファレンスがリファレンス記憶部４１に存在していれば（ステップＳ０７）、記憶されたリファレンスをアプリケーションＢに返す（ステップＳ０９）ことで、オブジェクトＡを再利用する。ここで、オブジェクトＡのリファレンスがリファレンス記憶部４１に存在していなければ（ステップＳ０７）、オブジェクトＡは生成されて、このオブジェクトＡのリファレンスを得る（ステップＳ０８）。
【００２４】
さらに詳細に、本発明の動作について説明する。図３、図４、図５は、リファレンス候補記憶部４２を用いて、オブジェクトの再利用を行うことを説明したフロー図である。最初に、図３を用いてリファレンス記憶部４１からリファレンスを取り出して、リファレンス候補記憶部４２にこのリファレンスを記憶することについて説明する。
【００２５】
最初に、制御部１０は、アプリケーションからオブジェクトの要求を受ける（ステップＳ１１）。次に、再利用決定部１３は、要求されているオブジェクトのリファレンスが、リファレンス記憶部４１に記憶されているか確認する（ステップＳ１２）。再利用部１４は、リファレンス記憶部４１に記憶されているならばオブジェクトのリファレンスをリファレンス記憶部４１から取り出して（ステップＳ１４）、リファレンスをリファレンス候補記憶部４２に記憶する（ステップＳ１５）。このステップＳ１４にて、取り出すとは、一時的に、バッファ部４５にリファレンスをキャッシュして、リファレンス記憶部４１には、何も残らない状態である。
【００２６】
要求されているオブジェクトのリファレンスが、リファレンス記憶部４１に記憶されていないならば、再利用部１４は、要求されたオブジェクトを生成し、リファレンスを得て（ステップＳ１３）、リファレンスをリファレンス候補記憶部４２に記憶する（ステップＳ１５）。最後に、オブジェクトのリファレンスをアプリケーションに返す（ステップＳ１６）。
【００２７】
次に、図４を用いて、アプリケーションによる参照が終了したことを検出するフローについて説明する。
【００２８】
参照検出部１１が、アプリケーションによるオブジェクトへの参照が終了したかを検出する（ステップＳ２１）。検出した場合には、このオブジェクトのリファレンスは、リファレンス候補記憶部４２に記憶されているか確認される（ステップＳ２２）。リファレンス候補記憶部４２に記憶されている場合には、このオブジェクトのリファレンスをリファレンス候補記憶部４２から取り出して（ステップＳ２４）、オブジェクトのリファレンスをリファレンス記憶部４１に記憶する（ステップＳ２５）。このステップＳ２４にて、取り出すとは、一時的に、バッファ部４５にリファレンスをキャッシュして、リファレンス候補記憶部４２には、何も残らない状態である。リファレンス候補記憶部４２に記憶されていない場合には、このオブジェクトを破棄（削除）する（ステップＳ２３）。このように、リファレンス候補記憶部４２に記憶されていない場合とは、オブジェクトに対して変更が行われた場合である（図５にて説明する）。
【００２９】
次に、図５を用いて、オブジェクトへの変更操作を検出した場合の処理について説明する。
【００３０】
変更検出部１２は、アプリケーションがオブジェクトへの変更操作を行う場合に、実際の変更操作が行われる前に、変更操作が行われることを検出する（ステップＳ３１）。
再利用決定部１３は、オブジェクトのリファレンスが、リファレンス候補記憶部４２に記憶されているかを確認する（ステップＳ３２）。オブジェクトのリファレンスをリファレンス候補記憶部４２から取り出す（ステップＳ３３）。このステップＳ３３にて、取り出すとは、一時的に、バッファ部４５にリファレンスをキャッシュして、リファレンス候補記憶部４２には、何も残らない状態である。次に、再利用部１４は、オブジェクトを複製（キャッシュ）（ステップＳ３４）して、複製したオブジェクトのリファレンスをリファレンス記憶部４１に記憶する（ステップＳ３５）。その後、このオブジェクトの変更操作を実施する（ステップＳ３６）。
【００３１】
したがって、再利用部１４が、オブジェクトの実際の変更操作の前にオブジェクトの複製を行って、リファレンスを記憶するため、変更前のオブジェクトおよびリファレンスの使用におけるオブジェクトの値等の整合性や安全性に問題がない。
【００３２】
以下では、さらに具体的な実施例について説明する。
[参照管理]
上述の参照検出部１１が、アプリケーションからオブジェクトへの、参照を終了したことを検出するために、以下の４つの方法のいずれか、または組み合わせを用いてもよい。
【００３３】
１）ファイナライザ機構を用いる方法
この方法では、Ｊａｖａ言語におけるfinalize()のような、オブジェクトの回収前に呼び出される仕組みを使って、オブジェクトへの参照がなくなったことを検出する。オブジェクトを復活可能にした（revivable）状態で、アプリケーションへ伝える。復活可能にするためには、特殊なファイナライザを持った新しいオブジェクトを、オブジェクトからリンクする。（リンクは、オブジェクトのコンポーネントのうち参照を保持されていると不都合なもの、または、そこから参照されているコンポーネントから張る。例えばDOMの場合は、Documentオブジェクトのみから張ればよい。）特殊なファイナライザを持ったオブジェクトのクラスをResurrectionとすると、その実装は次のようになる。
【００３４】
【表１】
2006185325.tif 000003
【００３５】
２）アプリケーションのオブジェクトのフィールドからのリンクをトレース（追尾）する方法
この方法では、一般的にガーベージ・コレクションで用いられる技術を、リフレクション機構を使うなどして、ミドルウェアで実装する。参照検出部１１が、アプリケーションのフィールドからの参照をトレースし、オブジェクトへの参照がないことを判断する。浅い範囲のトレースで参照がないことの確証が得られない場合には、参照検出部１１は、トレースをやめて、参照保持の恐れありと判断してもよい。参照保持の恐れがある場合には、再利用しないか、上述のファイナライザ機構による参照管理を用いてもよい
【００３６】
３）ユーザまたはアプリケーションから与えられた情報や、アプリケーションのコードを検査した情報を元に、アプリケーションの活動を制御しているミドルウェアと連携する方法
この方法では、参照検出部１１が、設定ファイルの情報に基づいて、アプリケーションがオブジェクトを保持し続けないことを判別する。また、参照検出部１１が、アプリケーションコードを検査することによって、オブジェクトを保持し続ける恐れがないことを検出する。アプリケーションの活動を制御するミドルウェアでは、オブジェクトを利用するような処理の開始と終了を制御するので、処理の終了を検知することができる。この場合、処理の終了をもって、アプリケーションに渡したオブジェクトをアプリケーションが保持していないことを検出できる。
【００３７】
コードの検査は、例えば、スタックアロケーションや同期消去などに用いられるエスケープ解析（ACM  TOPLAS  Vol.25  Issue 6,  p713-775）を応用することにより実現できる。アプリケーション内のフィールドから直接または間接的にリンクされたままになっている場合や、解析対象外に参照が出てしまった場合は、そのオブジェクトは保持され続ける恐れのあるものとする。この場合は、再利用しないか、１）や２）の参照管理法を用いる。
【００３８】
４）ユーザまたはアプリケーションから与えられた情報や、アプリケーションのコードを検査した情報を元に、スレッドごとにオブジェクトを再利用するようにする方法。
この方法では、参照検出部１１が、スレッド・ローカル変数を用いるなどして、スレッドごとにオブジェクトの再利用を行う（別スレッド間にまたがった再利用はしない）。あるオブジェクトをアプリケーションに渡した後、同じスレッドでは、そのオブジェクトの再利用が必要になった場合、以前渡したものを利用した処理は終わっていることが保障され、そのオブジェクトはアプリケーションによって保持していないと判断できる。ただし、これはアプリケーションの単一処理中で複数のオブジェクトを利用しない場合に限る。コード検査については３）と同様である。
【００３９】
参照管理を、ファイナライザ機構を用いて、図４のフローにあてはめて説明する。
１）アプリケーションから受け付けたメッセージを表すために再利用できるオブジェクトが、最初の段階（初めてこのオブジェクトを使用する場合）では、制御部１０が、通常の処理と同様にして、新たにオブジェクトを生成する。
２）再利用部１４は、アプリケーションに渡すオブジェクトのリファレンスを、リファレンス候補記憶部４２に記憶し、復活可能な状態（revivable）にする。
３）制御部１０が、アプリケーションに、生成したオブジェクトを渡す。
４）ファイナライザ機構により、アプリケーションに渡したオブジェクトへの、アプリケーションからの参照がなくなったことを検出したら、再利用部１５は、そのオブジェクトのリファレンスを、リファレンス記憶部４１に記憶する。
５）再利用可能なオブジェクトは、リファレンス記憶部４１に記憶されているため、これを再利用して、場合によっては、このオブジェクトを変更して、新しく受け付けたメッセージに対応するオブジェクトとする。
【００４０】
[変更検出]
変更検出部１２が、オブジェクトに対して、アプリケーションからの変更を検出する方法として、以下の２つの方法のいずれかまたは組み合わせを用いてもよい。
【００４１】
１)オブジェクトの変更を行うメソッドの呼び出しを見張る方法
この方法では、オブジェクトのクラスのメソッドのうち変更を行うメソッドの実装すべてにそれを通知するコードを挿入しておく。例えば、DOMのNodeクラスの場合、appendChild()は、メソッド呼び出し対象のDOMツリーと、引数で与えたノードの属するDOMツリーへの変更を伴う。そこで、その実装を次のようにする。
【表２】
2006185325.tif 000004
【００４２】
DocumentImplは、文書全体を表すDocumentクラスのサブクラスであり、API（Application  Interface）で提供されるDocumentクラスの実装である。このクラスに対して呼ばれているinvalidate()は、後に示す「変更検出時の処理」アルゴリズムを実装している。
【００４３】
２）ユーザまたはアプリケーションから与えられた情報やアプリケーションのコードを検査した情報を元に、変更を行うメソッドの利用を禁止する方法
この方法では、設定ファイルなどによってアプリケーションがオブジェクトを変更しないことを明示させる。または、アプリケーションコードを検査することによって、オブジェクトを変更するメソッドを呼んでいないことを検出する。場合によっては、オブジェクトのクラスのメソッドのうち変更を行うメソッドの実装すべてに例外を発生させるコードを挿入しておく。
【００４４】
コードの検査は、スタックアロケーションや同期消去などに用いられるエスケープ解析を応用することにより実現できる。アプリケーション内のフィールドから直接または間接的にリンクされたままになっている場合や、解析対象外に参照が出てしまった場合は、そのオブジェクトは変更される恐れのあるものとする。変更される恐れがある場合には、このオブジェクトは再利用しないで複製するか、１)の変更検出法を用いる。方法１)により、オブジェクトへの変更が検出された場合、そのオブジェクトは単に再利用不可とするか、または、変更前にそのオブジェクトの複製をとっておいて後の再利用に備える。
【００４５】
図６に、DOMの変更を行うメソッドについての一例を示した。ここに挙げるメソッドについて、呼ばれたことを通知するコードを挿入しておく。ただし、この際、属性値やテキスト要素など、再利用時に再設定されることが分かっており、変更があっても問題がないものについては、省いてもよい。
【００４６】
SDO（Service  Data  Object）は、Web  Serviceへのサービスのパラメータや返り値のオブジェクトをあらわすのに使われる。図７に、SDOの変更を行うメソッドについての一例を示した。ここに挙げるメソッドについて、呼ばれたことを通知するコードを挿入しておく。
【００４７】
Beanは、Web  Serviceへのサービスのパラメータや返り値のオブジェクトをあらわすのに使われるアプリケーション固有のオブジェクトである。Beanにおいて変更が行われるメソッドはアプリケーションごとに異なるが、メソッド名（setで始まるもの）や、Bean  Infoと呼ばれるメタ情報から、setterメソッドと呼ばれるBeanの変更に用いられるメソッドを特定することができる。setterメソッドについて、呼ばれたことを通知するコードを挿入しておく。通常、Bean実装は、アプリケーション・サーバとセットで提供される開発環境を用いて生成されるため、その生成ツールを、通知コードが挿入されたsetterメソッドを生成するようにしておくことによってこれが可能になる。
【００４８】
変更検出を、さらに具体的に、図５のフローにあてはめて説明する。
１）アプリケーションから受け付けたメッセージを表すために再利用できるオブジェクトは、最初の段階では存在しないため、通常の処理と同様にして、新たにオブジェクトを生成する。
２）再利用部１４は、アプリケーションに渡すオブジェクトのリファレンスを、リファレンス候補記憶部４２に記憶し、復活可能な状態（revivable）にする。
３）制御部１０が、アプリケーションに生成したオブジェクトを渡す。
４）変更検出部１２が、アプリケーションによってオブジェクトが変更されようとしていることを検出したらそのオブジェクトのリファレンスをリファレンス候補記憶部４２から取り出す。
５）再利用部１４は、変更前に複製をつくってオブジェクトをバッファ部４５に記憶し、このリファレンスをリファレンス記憶部４１に記憶する。
６）制御部１０が、実際の変更処理を行う。
７）次に受け付けたメッセージを表すために再利用できるオブジェクトは、リファレンス記憶部４１に記憶されているため、これを再利用して、場合によっては、変更して、新しく受け付けたメッセージに対応するオブジェクトとする。
【００４９】
情報処理装置１は、例えば、図８に示すように、ＣＰＵ（Central  Processing  Unit）８０と、ホストコントローラ８１と、Ｉ／Ｏコントローラ８２と、ＲＡＭ（Random  Access  Memory）８３と、ＲＯＭ（Read  Only  Memory）８４と、ハードディスクドライブ８５と、ＤＶＤ／ＣＤ−ＲＯＭドライブ８６と、ＦＤドライブ８７と、入力部２０として、ユーザからの入力を受けるマウス、キーボード等である入力装置８８と、出力部３０として、表示装置９０と、通信インターフェース９１を備えていてもよい。
【００５０】
このような実施形態を実現する情報処理装置、オブジェクトの再利用方法を、コンピュータやサーバにて実行するためのプログラムにより実現することができる。このプログラムのための記憶媒体としては、光学記憶媒体、テープ媒体、半導体メモリ等が挙げられる。また、専用通信ネットワークやインターネットに接続されたサーバ・システムに設けられたハードディスク又はＲＡＭ等の記憶装置を記憶媒体として使用し、ネットワークを介してプログラムを提供してもよい。
【００５１】
以上、本発明の実施形態を説明したが、具体例を例示したに過ぎず、特に本発明を限定しない。また、本発明の実施形態に記載された効果は、本発明から生じる最も好適な効果を列挙したに過ぎず、本発明による効果は、本発明の実施形態に記載された効果に限定されない。
【産業上の利用可能性】
【００５２】
本発明は、ミドルウェアとして使用されるソフトウェアにて適用可能であり、さらに、XMLパーサ等に対しても適用可能である。また、対象となるオブジェクトとしては、SAAJ（SOAP  with  Attachments  API  for  Java）オブジェクトであってもよい。
【図面の簡単な説明】
【００５３】
【図１】情報処理装置１のハードウェア構成を示す図である。
【図２】本発明の実施例である情報処理装置１が実行する動作を示すフローチャート図である。
【図３】本発明の実施例である情報処理装置１が実行する動作を示すフローチャート図である。
【図４】本発明の実施例である情報処理装置１が実行する動作を示すフローチャート図である。
【図５】本発明の実施例である情報処理装置１が実行する動作を示すフローチャート図である。
【図６】本発明の実施例であるＤＯＭの変更メソッドの一例を示す。
【図７】本発明の実施例であるＳＤＯの変更メソッドの一例を示す。
【図８】本発明の実施例である情報処理装置１がコンピュータである場合のハードウェア構成の一例を示す。
【符号の説明】
【００５４】
１    情報処理装置
１０    制御部
１１    参照検出部
１２    変更検出部
１３    再利用決定部
１４    再利用部
２０    入力部
３０    出力部
４０    記憶部
４１    リファレンス記憶部
４２    リファレンス候補記憶部
４５    バッファ部
【図１】
2006185325.tif 000005
【図２】
2006185325.tif 000006
【図３】
2006185325.tif 000007
【図４】
2006185325.tif 000008
【図５】
2006185325.tif 000009
【図６】
2006185325.tif 000010
【図７】
2006185325.tif 000011
【図８】
2006185325.tif 000012