(57)【要約】【課題】オブジェクトの生成、削除時に、オーバーヘッドの発生を抑制すること。【解決手段】情報処理装置は、オブジェクトが格納されるプール部を備え、オブジェクト破棄要求時に、情報処理装置にて実行可能なよう生成されたオブジェクトを初期化して上記プール部に格納するオブジェクト初期化手段と、オブジェクト生成要求時に、上記プール部に格納されている初期化された上記オブジェクトを取り出すオブジェクト取出手段と、を備えた。【選択図】図１０
2010067176.tif 000002
【特許請求の範囲】
【請求項１】
オブジェクトが格納されるプール部を備え、
オブジェクト破棄要求時に、情報処理装置にて実行可能なよう生成されたオブジェクトを初期化して前記プール部に格納するオブジェクト初期化手段と、
オブジェクト生成要求時に、前記プール部に格納されている初期化された前記オブジェクトを取り出すオブジェクト取出手段と、
を備えたことを特徴とする情報処理装置。
【請求項２】
情報処理装置にオブジェクトを実行可能なよう設定する際に、前記オブジェクトに当該オブジェクト自身を初期化する初期化機能を追加した新たなオブジェクトを生成するデプロイメント手段と、
前記生成された新たなオブジェクトを格納するプール部と、
オブジェクトの破棄要求時に、前記新たなオブジェクトの前記初期化機能を呼び出して当該新たなオブジェクト自身を初期化し、前記プール部に格納するオブジェクト破棄手段と、
オブジェクトの生成要求時に、前記プール部に格納されている初期化された前記新たなオブジェクトを取り出すオブジェクト生成手段と、
を備えたことを特徴とする情報処理装置。
【請求項３】
前記オブジェクト破棄手段は、予め設定された個数の前記新たなオブジェクトが前記プール部に格納されていない場合に作動する、
ことを特徴とする請求項２記載の情報処理装置。
【請求項４】
前記初期化機能は、前記新たなオブジェクトの内部状態を初期化する、
ことを特徴とする請求項２又は３記載の情報処理装置。
【請求項５】
前記デプロイメント手段は、前記生成した新たなオブジェクトを前記プール部に格納する、
ことを特徴とする請求項２，３又は４記載の情報処理装置。
【請求項６】
前記デプロイメント手段は、前記新たなオブジェクトを予め設定された個数生成して前記プール部に格納する、
ことを特徴とする請求項５記載の情報処理装置。
【請求項７】
情報処理装置に、
オブジェクトが格納されるプール部と、
オブジェクト破棄要求時に、情報処理装置にて実行可能なよう生成されたオブジェクトを初期化して前記プール部に格納するオブジェクト初期化手段と、
オブジェクト生成要求時に、前記プール部に格納されている初期化された前記オブジェクトを取り出すオブジェクト取出手段と、
を実現させるためのプログラム。
【請求項８】
情報処理装置に、
当該情報処理装置にオブジェクトを実行可能なよう設定する際に、前記オブジェクトに当該オブジェクト自身を初期化する初期化機能を追加した新たなオブジェクトを生成するデプロイメント手段と、
前記生成された新たなオブジェクトを格納するプール部と、
オブジェクトの破棄要求時に、前記新たなオブジェクトの前記初期化機能を呼び出して当該新たなオブジェクト自身を初期化し、前記プール部に格納するオブジェクト破棄手段と、
オブジェクトの生成要求時に、前記プール部に格納されている初期化された前記新たなオブジェクトを取り出すオブジェクト生成手段と、
を実現させるためのプログラム。
【請求項９】
前記オブジェクト破棄手段は、予め設定された個数の前記新たなオブジェクトが前記プール部に格納されていない場合に作動する、
ことを特徴とする請求項８記載のプログラム。
【請求項１０】
情報処理装置にて実行可能なよう生成されたオブジェクトの破棄要求時に、当該オブジェクトを初期化して当該オブジェクトを格納するプール部に格納するオブジェクト初期化工程と、
オブジェクト生成要求時に、前記プール部に格納された初期化された前記オブジェクトを取り出すオブジェクト取出工程と、
を有することを特徴とするオブジェクト管理方法。
【請求項１１】
情報処理装置に、
当該情報処理装置にオブジェクトを実行可能なよう設定する際に、前記オブジェクトに当該オブジェクト自身を初期化する初期化機能を追加した新たなオブジェクトを生成するデプロイメント工程と、
オブジェクトの破棄要求時に、前記新たなオブジェクトの前記初期化機能を呼び出して当該新たなオブジェクト自身を初期化して、当該新たなオブジェクトを格納するプール部に格納するオブジェクト破棄工程と、
オブジェクトの生成要求時に、前記プール部に格納されている初期化された前記新たなオブジェクトを取り出すオブジェクト生成工程と、
を有することを特徴とするオブジェクト管理方法。
【請求項１２】
前記オブジェクト破棄工程は、予め設定された個数の前記新たなオブジェクトが前記プール部に格納されていない場合に作動する、
ことを特徴とする請求項１１記載のオブジェクト管理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置にかかり、特に、オブジェクトの集まりにて構成されたプログラムが作動する情報処理装置に関する。
【背景技術】
【０００２】
近年、相互にメッセージを送りあうオブジェクトと呼ばれる機能の部品の集まりとしてプログラムを構成する技法であるオブジェクト指向プログラミングによるアプリケーション開発が行われている。例えば、Ｊａｖａ（登録商標）と呼ばれるプログラミング言語で開発されたアプリケーションは、情報処理装置に組み込まれたソフトウェアであるＪａｖａ（登録商標）仮想マシン上で作動する。具体的には、Ｊａｖａ（登録商標）で記述されたアプリケーションは、中間コードにて配布され、Ｊａｖａ（登録商標）仮想マシンが実行するプラットフォームに対応した形式（ネイティブコード）に変換し、実行する。これにより、種々のプラットフォームにて実行することができるため、可搬性を備えており、ネットワーク環境で使用することに好適である。
【０００３】
このようなネットワーク環境においては、通信を介してリモートコンピュータ上のアプリケーションにオブジェクトをリクエストすることが行われ、かかるリクエストを受けるリモートオブジェクト（ソフトウェアの部品）の一種として、Enterprise JavaBeansがある。
【０００４】
さらに、このうち、セッション単位で処理を行う機能を持つセッションBeanは、ステートレスセッションBeanとステートフルセッションBeanの２種類ある。このうち、前者のステートレスセッションBeanは、内部状態を持たず、メソッドのみを持つ。そのため、特許文献１に示すように、かかるオブジェクトをアプリケーション内でプールして再利用が可能である。
【０００５】
一方、後者である上記ステートフルセッションBeanは、内部状態とメソッドを両方持つため、オブジェクト指向プログラミングで言及されるいわゆる「オブジェクト」を完全にマッピングしたものであるといえる。従って、オブジェクト指向システム開発という観点では後者を使用するべきである。
【０００６】
【特許文献１】特開２００４−７８６５１号公報
【発明の開示】
【発明が解決しようとする課題】
【０００７】
しかしながら、上記ステートフルセッションBeanのクライアントから、リモートリファレンス経由でBean生成メソッド、removeメソッド呼び出しがあると、それに呼応してステートフルセッションBeanコンテナが、必ずインスタンス生成、破棄を行う。つまり、Bean生成メソッド呼び出しのたびに、Java（登録商標）仮想マシンレベルでのオブジェクトインスタンス生成を実行し、また、removeメソッドでそのオブジェクトインスタンスの参照を削除する処理を実行する。
【０００８】
すると、上述したように、オブジェクトインスタンスの生成がそのつど実行されると、当該インスタンス生成のためのメモリ確保とＣＰＵ（Central Processing Unit）時間のオーバーヘッドが発生する、という問題が生じる。また、上述したように、オブジェクト破棄時に当該オブジェクトインスタンスの参照が削除されると、後にガーベジコレクションが行われるため、近い未来にオーバーヘッドが発生する。これに対して、特許文献２では、オブジェクトをプールしておき、当該オブジェクトが必要になったときにかかるオブジェクトを見つけ出して、再初期化して使用する、という技術を開示している。ところが、プールされているオブジェクトを使用する直前に再初期化した場合には、かかる初期化に上述同様にオーバーヘッドが発生する、という問題が生じる。
【０００９】
そして、上記問題は、Ｊａｖａ（登録商標）で開発されたアプリケーションに限られない。つまり、上記問題は、情報処理装置にて必要な時に生成され、また、不要となると破棄されるオブジェクトの集まりとしてプログラムを構成する技法であるオブジェクト指向プログラミングによるアプリケーションでも生じうる。
【００１０】
このため、本発明の目的は、上述した課題である、オブジェクトの生成、削除時に、オーバーヘッドの発生を抑制することにある。
【課題を解決するための手段】
【００１１】
かかる目的を達成するため本発明の一形態である情報処理装置は、
オブジェクトが格納されるプール部を備え、
オブジェクト破棄要求時に、情報処理装置にて実行可能なよう生成されたオブジェクトを初期化して上記プール部に格納するオブジェクト初期化手段と、
オブジェクト生成要求時に、上記プール部に格納されている初期化された上記オブジェクトを取り出すオブジェクト取出手段と、
を備えたことを特徴とする。
【００１２】
また、本発明の他の形態である情報処理装置は、
情報処理装置にオブジェクトを実行可能なよう設定する際に、上記オブジェクトに当該オブジェクト自身を初期化する初期化機能を追加した新たなオブジェクトを生成するデプロイメント手段と、
上記生成された新たなオブジェクトを格納するプール部と、
オブジェクトの破棄要求時に、上記新たなオブジェクトの上記初期化機能を呼び出して当該新たなオブジェクト自身を初期化し、上記プール部に格納するオブジェクト破棄手段と、
オブジェクトの生成要求時に、上記プール部に格納されている初期化された上記新たなオブジェクトを取り出すオブジェクト生成手段と、
を備えたことを特徴とする。
【００１３】
また、本発明の他の形態であるプログラムは、
情報処理装置に、
オブジェクトが格納されるプール部と、
オブジェクト破棄要求時に、情報処理装置にて実行可能なよう生成されたオブジェクトを初期化して上記プール部に格納するオブジェクト初期化手段と、
オブジェクト生成要求時に、上記プール部に格納されている初期化された上記オブジェクトを取り出すオブジェクト取出手段と、
を実現させるためのプログラムである。
【００１４】
また、本発明の他の形態であるプログラムは、
情報処理装置に、
当該情報処理装置にオブジェクトを実行可能なよう設定する際に、上記オブジェクトに当該オブジェクト自身を初期化する初期化機能を追加した新たなオブジェクトを生成するデプロイメント手段と、
上記生成された新たなオブジェクトを格納するプール部と、
オブジェクトの破棄要求時に、上記新たなオブジェクトの上記初期化機能を呼び出して当該新たなオブジェクト自身を初期化し、上記プール部に格納するオブジェクト破棄手段と、
オブジェクトの生成要求時に、上記プール部に格納されている初期化された上記新たなオブジェクトを取り出すオブジェクト生成手段と、
を実現させるためのプログラムである。
【００１５】
また、本発明の他の形態であるオブジェクト管理方法は、
情報処理装置にて実行可能なよう生成されたオブジェクトの破棄要求時に、当該オブジェクトを初期化して当該オブジェクトを格納するプール部に格納するオブジェクト初期化工程と、
オブジェクト生成要求時に、上記プール部に格納された初期化された上記オブジェクトを取り出すオブジェクト取出工程と、
を有することを特徴とする。
【００１６】
また、本発明の他の形態であるオブジェクト管理方法は、
情報処理装置に、
当該情報処理装置にオブジェクトを実行可能なよう設定する際に、上記オブジェクトに当該オブジェクト自身を初期化する初期化機能を追加した新たなオブジェクトを生成するデプロイメント工程と、
オブジェクトの破棄要求時に、上記新たなオブジェクトの上記初期化機能を呼び出して当該新たなオブジェクト自身を初期化して、当該新たなオブジェクトを格納するプール部に格納するオブジェクト破棄工程と、
オブジェクトの生成要求時に、上記プール部に格納されている初期化された上記新たなオブジェクトを取り出すオブジェクト生成工程と、
を有することを特徴とする。
【発明の効果】
【００１７】
本発明は、以上のように構成されることにより、オブジェクトの生成、削除時に、オーバーヘッドの発生を抑制することができる。
【発明を実施するための最良の形態】
【００１８】
本発明の一形態である情報処理装置は、
オブジェクトが格納されるプール部を備え、
オブジェクト破棄要求時に、情報処理装置にて実行可能なよう生成されたオブジェクトを初期化して上記プール部に格納するオブジェクト初期化手段と、
オブジェクト生成要求時に、上記プール部に格納されている初期化された上記オブジェクトを取り出すオブジェクト取出手段と、
を備えたことを特徴とする。
【００１９】
また、本発明の他の形態である情報処理装置は、
情報処理装置にオブジェクトを実行可能なよう設定する際に、上記オブジェクトに当該オブジェクト自身を初期化する初期化機能を追加した新たなオブジェクトを生成するデプロイメント手段と、
上記生成された新たなオブジェクトを格納するプール部と、
オブジェクトの破棄要求時に、上記新たなオブジェクトの上記初期化機能を呼び出して当該新たなオブジェクト自身を初期化し、上記プール部に格納するオブジェクト破棄手段と、
オブジェクトの生成要求時に、上記プール部に格納されている初期化された上記新たなオブジェクトを取り出すオブジェクト生成手段と、
を備えたことを特徴とする。
【００２０】
上記発明によると、まず、オブジェクトが情報処理装置にて実行可能なよう設定される際に、当該オブジェクトが自己を初期化する初期化機能を追加した新たなオブジェクトを生成する。そして、この新たなオブジェクトの破棄要求時には、まず、追加された初期化機能が呼び出され、当該初期化機能によりオブジェクト自身を初期化し、その後、プール部に格納する。また、オブジェクト生成要求時には、プール部に格納されている初期化された新たなオブジェクトを呼び出す。これにより、上述したオブジェクトの破棄要求時には、オブジェクトを破棄せずに初期化してプール部に格納するため、ガーベジコレクションの発生を抑制し、オーバーヘッドを抑制することができる。また、オブジェクト生成要求時には、既に生成されているオブジェクトがプール部から取り出されるため、新たにオブジェクトを生成する必要がなく、また、既に初期化されているため、オーバーヘッドの発生を抑制することができる。
【００２１】
そして、上記情報処理装置では、
上記オブジェクト破棄手段は、予め設定された個数の上記新たなオブジェクトが上記プール部に格納されていない場合に作動する、
ことを特徴とする。
【００２２】
これにより、初期化された新たなオブジェクトが常にプール部に存在することとなり、当該プール部からオブジェクト生成要求時に取り出すことができる。従って、オブジェクト生成要求時に新たなオブジェクトを生成する必要がなく、オーバーヘッドの発生を抑制することができる。
【００２３】
また、上記情報処理装置では、
上記初期化機能は、上記新たなオブジェクトの内部状態を初期化する、
ことを特徴とする。
【００２４】
また、上記情報処理装置では、
上記デプロイメント手段は、上記生成した新たなオブジェクトを上記プール部に格納する、
ことを特徴とする。
【００２５】
また、上記情報処理装置では、
上記デプロイメント手段は、上記新たなオブジェクトを予め設定された個数生成して上記プール部に格納する、
ことを特徴とする。
【００２６】
また、本発明の他の形態であるプログラムは、
情報処理装置に、
オブジェクトが格納されるプール部と、
オブジェクト破棄要求時に、情報処理装置にて実行可能なよう生成されたオブジェクトを初期化して上記プール部に格納するオブジェクト初期化手段と、
オブジェクト生成要求時に、上記プール部に格納されている初期化された上記オブジェクトを取り出すオブジェクト取出手段と、
を実現させるためのプログラムである。
【００２７】
また、本発明の他の形態であるプログラムは、
情報処理装置に、
当該情報処理装置にオブジェクトを実行可能なよう設定する際に、上記オブジェクトに当該オブジェクト自身を初期化する初期化機能を追加した新たなオブジェクトを生成するデプロイメント手段と、
上記生成された新たなオブジェクトを格納するプール部と、
オブジェクトの破棄要求時に、上記新たなオブジェクトの上記初期化機能を呼び出して当該新たなオブジェクト自身を初期化し、上記プール部に格納するオブジェクト破棄手段と、
オブジェクトの生成要求時に、上記プール部に格納されている初期化された上記新たなオブジェクトを取り出すオブジェクト生成手段と、
を実現させるためのプログラムである。
【００２８】
そして、上記プログラムでは、
上記オブジェクト破棄手段は、予め設定された個数の上記新たなオブジェクトが上記プール部に格納されていない場合に作動する、
ことを特徴とする。
【００２９】
また、本発明の他の形態であるオブジェクト管理方法は、
情報処理装置にて実行可能なよう生成されたオブジェクトの破棄要求時に、当該オブジェクトを初期化して当該オブジェクトを格納するプール部に格納するオブジェクト初期化工程と、
オブジェクト生成要求時に、上記プール部に格納された初期化された上記オブジェクトを取り出すオブジェクト取出工程と、
を有することを特徴とする。
【００３０】
また、本発明の他の形態であるオブジェクト管理方法は、
情報処理装置に、
当該情報処理装置にオブジェクトを実行可能なよう設定する際に、上記オブジェクトに当該オブジェクト自身を初期化する初期化機能を追加した新たなオブジェクトを生成するデプロイメント工程と、
オブジェクトの破棄要求時に、上記新たなオブジェクトの上記初期化機能を呼び出して当該新たなオブジェクト自身を初期化して、当該新たなオブジェクトを格納するプール部に格納するオブジェクト破棄工程と、
オブジェクトの生成要求時に、上記プール部に格納されている初期化された上記新たなオブジェクトを取り出すオブジェクト生成工程と、
を有することを特徴とする。
【００３１】
そして、上記オブジェクト管理方法では、
上記オブジェクト破棄工程は、予め設定された個数の上記新たなオブジェクトが上記プール部に格納されていない場合に作動する、
ことを特徴とする。
【００３２】
上述した構成を有する、プログラム、又は、オブジェクト管理方法、の発明であっても、上記情報処理装置と同様の作用を有するために、上述した本発明の目的を達成することができる。
【００３３】
以下、本発明に係る、情報処理装置、プログラム、及び、オブジェクト管理方法、の各実施形態について図１〜図１０を参照しながら説明する。
【００３４】
＜実施形態１＞
本発明の第１の実施形態を、図１乃至図１０を参照して説明する。図１は、ネットワーク全体の構成を示す図である。図２乃至図３は、サーバコンピュータの構成を示す機能ブロック図である。図４は、クラス図である。図５乃至図６は、プログラムの一例を示す図である。図７乃至図９は、サーバコンピュータの動作を示すフローチャートである。図１０は、サーバコンピュータの構成の他の例を示す機能ブロック図である。
【００３５】
［構成］
本発明におけるサーバコンピュータ１（情報処理装置）は、Ｊａｖａバイトコードをサーバコンピュータ１自体であるプラットフォームにて実行可能なネイティブコードに変換して実行するソフトウェアであるＪａｖａ（登録商標）仮想マシン１０を搭載している。また、サーバコンピュータ１には、ネットワークＮを介して、当該サーバコンピュータ１の管理を行う管理コンピュータ３が接続している。さらに、サーバコンピュータ１には、ネットワークＮを介して、当該サーバコンピュータ１にオブジェクトの生成要求を行うクライアント端末４が接続している。
【００３６】
そして、上記サーバコンピュータ１は、管理コンピュータ３からの指示に応じて、当該サーバコンピュータ１に搭載されているＪａｖａ（登録商標）仮想マシン１０上で実行されるプログラムが組み込まれることによって、アプリケーションサーバ１１を構築している。このアプリケーションサーバ１１は、図２に示すように、デプロイメント機能１２と、オブジェクト生成機能１３と、オブジェクト破棄機能１４と、を備えている。
【００３７】
上記デプロイメント機能１２（デプロイメント手段）は、管理コンピュータ３から指示に応じて、外部から利用される特定のオブジェクト（ソフトウェアコンポーネント）を実行可能な状態に設定する機能を有する。例えば、本実施形態では、管理コンピュータから設定されるオブジェクトとして、セッション単位で処理を行うステートフルセッションＢｅａｎを例に挙げて説明する。このステートフルセッションＢｅａｎ３０は、内部状態と、メソッドを持つ。そして、デプロイメント機能１２は、特に、上記オブジェクトであるステートフルセッションＢｅａｎ３０をデプロイメントする際に、このオブジェクトに当該オブジェクト自身を初期化する初期化機能である初期化メソッドを追加した新たなオブジェクトである派生オブジェクトを生成する機能を有する。さらに、デプロイメント機能１２は、上記生成した派生オブジェクトのインスタンスを、プール部１５に格納する機能を有する。なお、プール部１５は、オブジェクトのインスタンスを格納しておく機能を有する。
【００３８】
また、上記オブジェクト生成機能１３（オブジェクト生成手段、オブジェクト取出手段）は、クライアント端末４からオブジェクトの生成要求があったときに、当該オブジェクトを生成する機能を有する。そして、特に、本実施形態におけるオブジェクト生成機能１３は、上記プール部１５に要求されたオブジェクトに対応する派生オブジェクトのインスタンスが存在している場合には、当該派生オブジェクトのインスタンスを取り出して返却する機能を有する。
【００３９】
また、上記オブジェクト破棄機能１４（オブジェクト破棄手段、オブジェクト初期化手段）は、クライアント端末４からオブジェクトの破棄要求が来たときに、インスタンス破棄処理を行う。そして、特に、本実施形態におけるオブジェクト破棄機能１４は、プール部１５に設定された個数のインスタンスが存在していない場合には、破棄要求されたオブジェクトに対応する派生オブジェクトの初期化メソッドを呼び出して、そのインスタンスの内部状態をクリアする。そして、内部状態をクリアした派生オブジェクトのインスタンスを、再利用可能なよう再びプール部１５に格納する。
【００４０】
このようにすることで、上記オブジェクト生成機能１３は、プール部１５から派生オブジェクトのインスタンスを取り出すと、上記オブジェクト破棄機能１４にて初期化されたインスタンスを取り出すことができる。従って、生成要求された派生オブジェクトのインスタンスをすぐに使用することが可能となる。
【００４１】
次に、上述したサーバコンピュータ１のさらに具体的な構成を、図３乃至図６を参照して説明する。
【００４２】
図３に示すように、本実施形態におけるサーバコンピュータ１のＪａｖａ（登録商標）仮想マシン上には、プログラムが組み込まれることによってアプリケーションサーバ１１が構築されている。そして、このアプリケーションサーバ１１は、上述した各機能１２〜１５（図示せず）を有するＢｅａｎコンテナ２０が存在する。具体的に、Ｂｅａｎコンテナ２０は、オブジェクトのインスタンスを格納して管理するプール管理テーブル２０を備えている。また、Ｂｅａｎコンテナ２０は、デプロイメント時に生成するオブジェクトを解析するＢｅａｎ解析機能２２を有している。さらに、Ｂｅａｎコンテナ２０は、予め設定されたオブジェクトのインスタンスの格納個数を記憶するプール個数設定値２３を有している。
【００４３】
そして、Ｂｅａｎコンテナ２０は、ネットワークＮを介して接続された管理コンピュータ３からステートフルセッションＢｅａｎ３０を実行可能とする設定要求を受けると、デプロイメントを実行する。このとき、Ｂｅａｎコンテナ２０は、Ｂｅａｎ解析機能２２がステートフルセッションＢｅａｎ３０を解析し、当該ステートフルセッションＢｅａｎ３０の派生オブジェクトである派生Ｂｅａｎ３１（新たなオブジェクト）のソースファイルを生成する。そして、このソースファイルは、Ｊａｖａ仮想マシン１０によってコンパイルされ、派生Ｂｅａｎ３１となる。ここで、この派生Ｂｅａｎ３１は、上記ステートフルセッションＢｅａｎ３０と、呼び出されたときに自身の内部状態を初期化する状態クリアメソッド３２（初期化機能）と、を備えた新たな派生オブジェクトである。そして、派生Ｂｅａｎ３０をインスタンス化したものが、符号３３に示すインスタンスであり、このインスタンス３０をネットワークＮを介して接続されたクライアント端末４が利用する。
【００４４】
ここで、図４に、ステートフルセッションＢｅａｎクラス３０と状態クリアメソッド３２を有する派生Ｂｅａｎクラス３１とのクラス図を示す。また、図５に、ステートフルセッションＢｅａｎ３０のソースファイルの一例を示し、図６に、その派生クラスである派生Ｂｅａｎ３１のソースファイルの一例を示す。
【００４５】
そして、上記状態クリアメソッド３２は、派生Ｂｅａｎ３１の各変数に宣言時の初期化値を代入し、さらに派生Ｂｅａｎ３１の引数なしコンストラクタの動作を行う。また、派生Ｂｅａｎ３１のfinalな変数については、Java言語仕様上、コンストラクタ生成後の代入が許されないので何もしない。また、static変数については、Enterprise JavaBeans仕様でstatic final以外のstatic変数は持つことができないとされているので、考慮する必要がない。また、変数がprivate宣言されている際は、まずJavaBeansの命名規則に沿ったsetterおよびgetterメソッドがないか探す。そして、setterおよびgetterメソッドがあれば、そのsetter、getterメソッド経由で代入や操作を行う。一方、setterおよびgetterメソッドがない場合は、リフレクションを用いてprivateメソッドにアクセスする。ただし、リフレクションによる操作は高コストのため、setterおよびgetterメソッドを用意すること、もしくは変数をprotectedで宣言することを推奨する。
【００４６】
また、上記Ｂｅａｎコンテナ２０は、上述したデプロイメント後、及び、アプリケーションサーバ１１の起動時に、派生Ｂｅａｎ３１のインスタンス３３を事前生成する。このとき、Ｂｅａｎコンテナ２０は、予めシステムアドミニストレイターなどによって設定されプール個数設定値２３に記憶された値の個数だけ、上記派生Ｂｅａｎ３１のインスタンス３３を生成し、プール管理テーブル２１に格納する。
【００４７】
また、クライアント端末４がリモートリファレンスのcreateメソッドを呼び、ステートフルセッションＢｅａｎ３０の生成要求をしてきた時に、Ｂｅａｎコンテナ２０は、プール管理テーブル２１内にその派生Ｂｅａｎ３１のインスタンス３３が存在するか調べる。そして、プール管理テーブル２１にインスタンス３３が存在する場合には、Ｂｅａｎコンテナ２０は、テーブルからインスタンス３３を取り出し、ejbCreateメソッドを呼び、呼び出し可能状態とする。なお、プール管理テーブル２１にインスタンスがなければ、通常のステートフルセッションＢｅａｎ３０のフローで呼び出し可能状態とする。
【００４８】
また、クライアント端末４がリモートリファレンスのremoveメソッドを呼び、ステートフルセッションＢｅａｎ３０の破棄要求をしてきた時に、Ｂｅａｎコンテナ２０は、プール管理テーブル２１内にその派生Ｂｅａｎ３１のインスタンス３３がプール個数設定値２３の個数以上存在するか調べる。そして、プール管理テーブル２１にインスタンス３３がプール個数設定値２３の個数以上存在する場合には、Ｂｅａｎコンテナ２０は、通常のステートレスセッションＢｅａｎ３０のフローでインスタンスを破棄する。一方、プール管理テーブル２１にインスタンス３３がプール個数設定値２３の個数以上存在しない場合には、Ｂｅａｎコンテナ２０は、ejbRemoveメソッドを呼び、派生Ｂｅａｎ３１が有する状態クリアメソッド３２を呼び出し、当該派生Ｂｅａｎ３１の内部状態をクリアする。そして、この派生Ｂｅａｎ３１のインスタンスを再利用可能なよう、プール管理テーブル２１に戻して格納する。
【００４９】
［動作］
次に、上記構成のアプリケーションサーバ１１つまりＢｅａｎコンテナ２０の動作を、図７乃至図９を参照して説明する。まず、図７を参照して、ネットワークＮを介して接続された管理コンピュータ３からステートフルセッションＢｅａｎ３０を実行可能とする設定要求を受けたときに実行するデプロイメントの動作を説明する（デプロイメント工程）。
【００５０】
デプロイメント時には、ステートフルセッションＢｅａｎ３０を実行可能状態にするが、このとき、当該ステートフルセッションＢｅａｎ３０の派生オブジェクトである派生Ｂｅａｎ３１を生成する。具体的には、まず、ステートフルセッションＢｅａｎ３０を解析し（ステップＳ１）、当該ステートフルセッションＢｅａｎ３０の派生オブジェクトである派生Ｂｅａｎ３１のソースファイルを生成する（ステップＳ２）。なお、生成する派生Ｂｅａｎ３１は、上記ステートフルセッションＢｅａｎ３０と、自身の内部状態を初期化する状態クリアメソッド３２と、を備えた新たな派生オブジェクトである。この派生Ｂｅａｎ３１のソースファイルを、Ｊａｖａ仮想マシン１０にてコンパイルし（ステップＳ３）、派生Ｂｅａｎ３１を生成する（ステップＳ４）。このとき、さらに、派生Ｂｅａｎ３１のインスタンス３３を、予め設定されたプール個数設定値の個数だけ生成し（ステップＳ５）、これらインスタンス３３をプール管理テーブル２１に格納して管理する（ステップＳ６）。
【００５１】
次に、図８を参照して、クライアント端末４からステートを持つオブジェクトであるステートフルセッションＢｅａｎ３０の生成要求が来たときの動作を説明する（オブジェクト生成工程、オブジェクト取出工程）。オブジェクト生成要求時には、Ｂｅａｎコンテナ２０は、プール管理テーブル２１にすでに生成した派生オブジェクト３１のインスタンス３３が存在する場合には（ステップＳ１１でイエス）、そのインスタンス３３を取り出して返却する（ステップＳ１２）。つまり、新たにインスタンスの生成処理は行わない。このとき、後述するように、派生オブジェクト３１のインスタンス３３は、内部状態がクリアされてプール管理テーブル２１に格納されているため、取り出したときにも、内部状態がクリアされた状態である。一方、Ｂｅａｎコンテナ２０は、プール管理テーブル２１に生成した派生オブジェクト３１のインスタンス３３が存在しない場合には（ステップＳ１１でノー）、通常のインスタンス生成処理を実行する（ステップＳ１３）。
【００５２】
次に、図９を参照して、クライアント端末４からステートを持つオブジェクトであるステートフルセッションＢｅａｎ３０の破棄要求がきたときの動作を説明する（オブジェクト破棄工程、オブジェクト初期化工程）。オブジェクト破棄要求時には、Ｂｅａｎコンテナ２０は、まず、プール管理テーブル２１に予め設定された個数以上の派生オブジェクト３１のインスタンス３３が存在するか否かを調べる（ステップＳ２１）。そして、インスタンス３３が設定個数以上存在しない場合には（ステップＳ２１でノー）、インスタンスの破棄処理を行わない。そして、派生オブジェクト３１のインスタンス３３の内部状態をクリアする状態クリアメソッド３２を呼び出して（ステップＳ２２）、当該インスタンス３３の内部状態をクリアする（ステップＳ２３）。その後、内部状態をクリアしたインスタンス３３をプール管理テーブル２１に格納する（ステップＳ２４）。これにより、上述したオブジェクト生成要求時に呼び出され、再利用することができる。一方、Ｂｅａｎコンテナ２０は、オブジェクト破棄要求時に、プール管理テーブル２１に設定個数以上のインスタンスが存在している場合には（ステップＳ２１でイエス）、通常のインスタンス破棄処理を実行する（ステップＳ２５）。
【００５３】
以上のように、本実施形態によると、オブジェクトの破棄要求時には、まず、派生オブジェクトに追加された初期化機能を呼び出し、当該初期化機能により派生オブジェクト自身を初期化し、その後、プール部に格納する。そして、オブジェクト生成要求時には、プール部に格納されている初期化された派生オブジェクトを呼び出す。従って、上述したオブジェクトの破棄要求時には、派生オブジェクトを破棄せずに初期化してプール部に格納するため、ガーベジコレクションの発生を抑制してＣＰＵの処理を軽減し、オーバーヘッドを抑制することができる。また、オブジェクト生成要求時には、既に生成されているオブジェクトをプール部から取り出すため、新たにオブジェクトを生成する必要がなく、かつ、既に初期化されているため、オーバーヘッドの発生を抑制することができる。
【００５４】
ここで、本実施形態におけるアプリケーションサーバ１１の他の構成を、図１０に示す。この図に示すように、本実施形態におけるサーバコンピュータにＪａｖａ（登録商標）アプリケーションが組み込まれることによって構築されたアプリケーションサーバ１１は、上述したオブジェクト生成機能１３（オブジェクト取出手段）とオブジェクト破棄機能１４（オブジェクト初期化）とプール機能１５（プール部）とを備えている。
【００５５】
このような構成であっても、アプリケーションサーバ１１は、オブジェクトの破棄要求時には、オブジェクト破棄機能１４にて、当該オブジェクト自身を初期化し、その後、プール部１５に格納する。そして、オブジェクト生成要求時には、オブジェクト生成機能１３にて、プール部１５に格納されている初期化されたオブジェクトを呼び出す。従って、上述したオブジェクトの破棄要求時には、オブジェクトを破棄せずに初期化してプール部に格納するため、ガーベジコレクションの発生を抑制してＣＰＵの処理を軽減し、オーバーヘッドを抑制することができる。また、オブジェクト生成要求時には、既に生成されているオブジェクトをプール部から取り出すため、新たにオブジェクトを生成する必要がなく、かつ、既に初期化されているため、オーバーヘッドの発生を抑制することができる。
【産業上の利用可能性】
【００５６】
本発明は、Ｊａｖａ（登録商標）仮想マシンなどを搭載し、オブジェクト指向プログラムによるアプリケーションを実行可能な情報処理装置に利用することができ、産業上の利用可能性を有する。
【図面の簡単な説明】
【００５７】
【図１】実施形態１におけるシステムのネットワーク全体の構成を示す図である。
【図２】図１に開示したサーバコンピュータの構成を示す機能ブロック図である。
【図３】図１に開示したサーバコンピュータの構成を示す機能ブロック図である。
【図４】図１に開示したサーバコンピュータにて構築されるオブジェクトの関係を示すクラス図である。
【図５】図１に開示したサーバコンピュータに組み込まれるプログラムの一例を示す図である。
【図６】図１に開示したサーバコンピュータに組み込まれるプログラムの一例を示す図である。
【図７】図１に開示したサーバコンピュータの動作を示すフローチャートである。
【図８】図１に開示したサーバコンピュータの動作を示すフローチャートである。
【図９】図１に開示したサーバコンピュータの動作を示すフローチャートである。
【図１０】図１に開示したサーバコンピュータの構成の他の例を示す機能ブロック図である。
【符号の説明】
【００５８】
１  サーバコンピュータ
３  管理コンピュータ
４  クライアント端末
１０  Ｊａｖａ（登録商標）仮想マシン
１１  アプリケーションサーバ
１２  デプロイメント機能
１３  オブジェクト生成機能
１４  オブジェクト破棄機能
１５  プール機能
２０  Ｂｅａｎコンテナ
２１  プール管理テーブル
２２  Ｂｅａｎ解析機能
２３  プール個数設定値
３０  ステートフルセッションＢｅａｎ
３１  派生Ｂｅａｎ
３２  状態クリアメソッド
３３  インスタンス
【図１】
2010067176.tif 000003
【図２】
2010067176.tif 000004
【図３】
2010067176.tif 000005
【図４】
2010067176.tif 000006
【図５】
2010067176.tif 000007
【図６】
2010067176.tif 000008
【図７】
2010067176.tif 000009
【図８】
2010067176.tif 000010
【図９】
2010067176.tif 000011
【図１０】
2010067176.tif 000012