(57)【特許請求の範囲】
【請求項１】
クライアントアプリケーションから非オブジェクト指向言語で記述されたサーバアプリケーションに対して送信されたリクエストをセッション単位で管理する方法をコンピュータに実行させるセッション管理プログラムであって、
セッション単位で識別されていないリクエストを受け付けた場合に、当該リクエストをセッション単位で識別するためのセッション識別情報を付加して当該サーバアプリケーションに係るサーバインスタンスを生成し、生成したサーバインスタンスと、当該セッション管理プログラムと当該サーバアプリケーションとが共有する記憶領域であるスレッド領域とを関連付けるサーバインスタンス生成手順と、
前記サーバインスタンスが生成された場合に、前記サーバアプリケーションに対して、前記共有のスレッド領域にセッション管理情報を設定する所定の関数と当該共有のスレッド領域から当該セッション管理情報を取得する所定の関数とを当該サーバインスタンスから呼び出す第一の呼出手順と、
前記第一の呼出手順によって呼び出された前記サーバアプリケーションによる処理が終了した場合に、前記スレッド領域から当該サーバアプリケーションによって設定されたセッション管理情報を取得して、前記サーバインスタンス内の変数に保持するセッション管理情報保持手順と、
前記セッション識別情報が用いられたリクエストを受け付けた場合に、当該セッション識別情報に対応するサーバインスタンスを検索し、当該サーバインスタンス内の変数に保持されたセッション管理情報を前記スレッド領域に設定するセッション管理情報設定手順と、
前記セッション管理情報設定手順によって前記スレッド領域にセッション管理情報が設定された場合に、前記サーバアプリケーションを前記サーバインスタンスから呼び出す第二の呼出手順と、
をコンピュータに実行させることを特徴とするセッション管理プログラム。
【請求項２】
前記サーバインスタンス生成手順は、前記スレッド領域として、スレッドローカル領域に関連付けて当該サーバアプリケーションに係るサーバインスタンスを生成することを特徴とする請求項１に記載のセッション管理プログラム。
【請求項３】
クライアントアプリケーションから非オブジェクト指向言語で記述されたサーバアプリケーションに対して送信されたリクエストをセッション単位で管理するセッション管理方法であって、
セッション単位で識別されていないリクエストを受け付けた場合に、当該リクエストをセッション単位で識別するためのセッション識別情報を付加して当該サーバアプリケーションに係るサーバインスタンスを生成し、生成したサーバインスタンスと、当該セッション管理プログラムと当該サーバアプリケーションとが共有する記憶領域であるスレッド領域とを関連付けるサーバインスタンス生成工程と、
前記サーバインスタンスが生成された場合に、前記サーバアプリケーションに対して、前記共有のスレッド領域にセッション管理情報を設定する所定の関数と当該共有のスレッド領域から当該セッション管理情報を取得する所定の関数とを当該サーバインスタンスから呼び出す第一の呼出工程と、
前記第一の呼出工程によって呼び出された前記サーバアプリケーションによる処理が終了した場合に、前記スレッド領域から当該サーバアプリケーションによって設定されたセッション管理情報を取得して、前記サーバインスタンス内の変数に保持するセッション管理情報保持工程と、
前記セッション識別情報が用いられたリクエストを受け付けた場合に、当該セッション識別情報に対応するサーバインスタンスを検索し、当該サーバインスタンス内の変数に保持されたセッション管理情報を前記スレッド領域に設定するセッション管理情報設定工程と、
前記セッション管理情報設定工程によって前記スレッド領域にセッション管理情報が設定された場合に、前記サーバアプリケーションを前記サーバインスタンスから呼び出す第二の呼出工程と、
を含んだことを特徴とするセッション管理方法。
【請求項４】
クライアントアプリケーションから非オブジェクト指向言語で記述されたサーバアプリケーションに対して送信されたリクエストをセッション単位で管理するセッション管理装置であって、
セッション単位で識別されていないリクエストを受け付けた場合に、当該リクエストをセッション単位で識別するためのセッション識別情報を付加して当該サーバアプリケーションに係るサーバインスタンスを生成し、生成したサーバインスタンスと、当該セッション管理プログラムと当該サーバアプリケーションとが共有する記憶領域であるスレッド領域とを関連付けるサーバインスタンス生成手段と、
前記サーバインスタンスが生成された場合に、前記サーバアプリケーションに対して、前記共有のスレッド領域にセッション管理情報を設定する所定の関数と当該共有のスレッド領域から当該セッション管理情報を取得する所定の関数とを当該サーバインスタンスから呼び出す第一の呼出手段と、
前記第一の呼出手段によって呼び出された前記サーバアプリケーションによる処理が終了した場合に、前記スレッド領域から当該サーバアプリケーションによって設定されたセッション管理情報を取得して、前記サーバインスタンス内の変数に保持するセッション管理情報保持手段と、
前記セッション識別情報が用いられたリクエストを受け付けた場合に、当該セッション識別情報に対応するサーバインスタンスを検索し、当該サーバインスタンス内の変数に保持されたセッション管理情報を前記スレッド領域に設定するセッション管理情報設定手段と、
前記セッション管理情報設定手段によって前記スレッド領域にセッション管理情報が設定された場合に、前記サーバアプリケーションを前記サーバインスタンスから呼び出す第二の呼出手段と、
を備えたことを特徴とするセッション管理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、セッション管理プログラム、セッション管理方法およびセッション管理装置に関する。
【背景技術】
【０００２】
従来より、メインフレームやオフィスコンピュータ（オフコン）などの上で稼動している旧式（レガシー）のシステムを、オープンシステムに移行するための様々な試みがなされている。具体的には、ＣやＣＯＢＯＬなどの非オブジェクト指向言語で記述されたアプリケーションを、Ｗｉｎｄｏｗｓ（登録商標）、Ｌｉｎｕｘ、またはＵＮＩＸ（登録商標）などのオープンプラットフォーム上で稼動させ、かつ、Ｊ２ＥＥ(Java（登録商標）2 Enterprise Edition)を中心とするオープンシステムのアプリケーションと同等の機能レベルで動作させるための試みである。
【０００３】
ここで、同等の機能レベルとして特に重要な点は、セッション管理の機能である。例えば、サーバアプリケーションが、ＨＴＴＰ(HyperText Transfer Protocol)によるリクエストでクライアントアプリケーションからアクセスされる場合を考えると、ＨＴＴＰは１回のリクエストごとにセッションを完結する手順となっているため、通常、複数回のリクエストをセッション単位で識別することができず、同一のセッションにおける複数回のリクエスト間で情報を共有することができない。これに対して、例えば、Ｊ２ＥＥでは、部品化されたプログラム（Ｂｅａｎ）のひとつとしてＳｅｓｓｉｏｎＢｅａｎが用意されており、このＳｅｓｓｉｏｎＢｅａｎを利用することによって複数回のリクエストをセッション単位で識別することができ、同一のセッションにおける複数回のリクエスト間で情報を共有することができる。
【０００４】
このようなことから、例えば、特許文献１で開示された方法では、非オブジェクト指向言語で記述された業務アプリケーションの業務に関する独自の実態または概念としての意味を有するオブジェクトが開発者によって別途定義され、このオブジェクトを通信に介在させることによって、非オブジェクト指向言語で記述されたアプリケーションをオープンプラットフォーム上で稼動させ、かつ、セッション管理の機能を実現している。
【０００５】
【特許文献１】特表平９−５０８７４２号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
ところで、上記した従来の技術では、非オブジェクト指向言語で記述されたアプリケーションをオープンプラットフォーム上で稼動させ、かつ、セッション管理の機能を実現するにあたり、開発者側の負担が大きくなるという課題がある。すなわち、上記した従来の技術では、非オブジェクト指向言語で記述された業務アプリケーションの業務に関する独自の実態または概念としての意味を有するオブジェクトが開発者によって別途定義され、また、この業務アプリケーションの入力パラメータおよび出力パラメータを含むオブジェクトの属性が開発者によって別途定義されなければならないので、サーバアプリケーションごとにサーバアプリケーションの仕様に依存したオブジェクトが開発者によって定義されなければならないことになる結果、非オブジェクト指向言語で記述されたアプリケーションをオープンプラットフォーム上で稼動させ、かつ、セッション管理の機能を実現するにあたり、開発者側の負担が大きくなるという課題があった。
【０００７】
そこで、この発明は、上述した従来技術の課題を解決するためになされたものであり、オブジェクト指向言語で記述されたアプリケーションをオープンプラットフォーム上で稼動させ、かつ、セッション管理の機能を実現するにあたり、開発者側の負担を小さくすることが可能なセッション管理プログラム、セッション管理方法およびセッション管理装置を提供することを目的とする。
【課題を解決するための手段】
【０００８】
上述した課題を解決し、目的を達成するため、請求項１に係る発明は、クライアントアプリケーションから非オブジェクト指向言語で記述されたサーバアプリケーションに対して送信されたリクエストをセッション単位で識別して受け付け、同一セッションにおける複数回のリクエスト間でセッション管理情報を共有する方法をコンピュータに実行させるセッション管理プログラムであって、未だセッション単位で識別されていないリクエストを受け付けた場合に、当該リクエストをセッション単位で識別するためのセッション識別情報を付加するとともに、前記サーバアプリケーションと共有のスレッドに関連付けて、当該サーバアプリケーションに係るインスタンスを生成するサーバインスタンス生成手順と、前記サーバインスタンス生成手順によって前記サーバインスタンスが生成された場合に、前記共有のスレッドに前記セッション管理情報を設定する所定の関数と当該共有のスレッドから当該セッション管理情報を取得する所定の関数とが記述された前記サーバアプリケーションを当該サーバインスタンスから呼び出す第一の呼出手順と、前記第一の呼出手順によって呼び出された前記サーバアプリケーションによる処理が終了した場合に、前記スレッドから当該サーバアプリケーションによって設定されたセッション管理情報を取得して、前記サーバインスタンス内の変数に保持するセッション管理情報保持手順と、前記セッション識別情報が用いられたリクエストを受け付けた場合に、当該セッション識別情報に対応するサーバインスタンスを検索し、当該サーバインスタンス内の変数に前記セッション管理情報保持手順によって保持されたセッション管理情報を前記スレッドに設定するセッション管理情報設定手順と、前記セッション管理情報設定手順によって前記スレッドにセッション管理情報が設定された場合に、前記サーバアプリケーションを前記サーバインスタンスから呼び出す第二の呼出手順と、をコンピュータに実行させることを特徴とする。
【０００９】
また、請求項２に係る発明は、上記の発明において、前記サーバインスタンス生成手順は、前記サーバアプリケーションと共有のスレッドとして、スレッドローカル領域に関連付けて当該サーバアプリケーションに係るインスタンスを生成することを特徴とする。
【００１０】
また、請求項３に係る発明は、クライアントアプリケーションから非オブジェクト指向言語で記述されたサーバアプリケーションに対して送信されたリクエストをセッション単位で識別して受け付け、同一セッションにおける複数回のリクエスト間でセッション管理情報を共有する方法であって、未だセッション単位で識別されていないリクエストを受け付けた場合に、当該リクエストをセッション単位で識別するためのセッション識別情報を付加するとともに、前記サーバアプリケーションと共有のスレッドに関連付けて、当該サーバアプリケーションに係るインスタンスを生成するサーバインスタンス生成工程と、前記サーバインスタンス生成工程によって前記サーバインスタンスが生成された場合に、前記共有のスレッドに前記セッション管理情報を設定する所定の関数と当該共有のスレッドから当該セッション管理情報を取得する所定の関数とが記述された前記サーバアプリケーションを当該サーバインスタンスから呼び出す第一の呼出工程と、前記第一の呼出工程によって呼び出された前記サーバアプリケーションによる処理が終了した場合に、前記スレッドから当該サーバアプリケーションによって設定されたセッション管理情報を取得して、前記サーバインスタンス内の変数に保持するセッション管理情報保持工程と、前記セッション識別情報が用いられたリクエストを受け付けた場合に、当該セッション識別情報に対応するサーバインスタンスを検索し、当該サーバインスタンス内の変数に前記セッション管理情報保持工程によって保持されたセッション管理情報を前記スレッドに設定するセッション管理情報設定工程と、前記セッション管理情報設定工程によって前記スレッドにセッション管理情報が設定された場合に、前記サーバアプリケーションを前記サーバインスタンスから呼び出す第二の呼出工程と、を含んだことを特徴とする。
【００１１】
また、請求項４に係る発明は、クライアントアプリケーションから非オブジェクト指向言語で記述されたサーバアプリケーションに対して送信されたリクエストをセッション単位で識別して受け付け、同一セッションにおける複数回のリクエスト間でセッション管理情報を共有するセッション管理装置であって、未だセッション単位で識別されていないリクエストを受け付けた場合に、当該リクエストをセッション単位で識別するためのセッション識別情報を付加するとともに、前記サーバアプリケーションと共有のスレッドに関連付けて、当該サーバアプリケーションに係るインスタンスを生成するサーバインスタンス生成手段と、前記サーバインスタンス生成手段によって前記サーバインスタンスが生成された場合に、前記共有のスレッドに前記セッション管理情報を設定する所定の関数と当該共有のスレッドから当該セッション管理情報を取得する所定の関数とが記述された前記サーバアプリケーションを当該サーバインスタンスから呼び出す第一の呼出手段と、前記第一の呼出手段によって呼び出された前記サーバアプリケーションによる処理が終了した場合に、前記スレッドから当該サーバアプリケーションによって設定されたセッション管理情報を取得して、前記サーバインスタンス内の変数に保持するセッション管理情報保持手段と、前記セッション識別情報が用いられたリクエストを受け付けた場合に、当該セッション識別情報に対応するサーバインスタンスを検索し、当該サーバインスタンス内の変数に前記セッション管理情報保持手段によって保持されたセッション管理情報を前記スレッドに設定するセッション管理情報設定手段と、前記セッション管理情報設定手段によって前記スレッドにセッション管理情報が設定された場合に、前記サーバアプリケーションを前記サーバインスタンスから呼び出す第二の呼出手段と、を備えたことを特徴とする。
【発明の効果】
【００１２】
請求項１、３または４の発明によれば、クライアントアプリケーションから非オブジェクト指向言語で記述されたサーバアプリケーションに対して送信されたリクエストをセッション単位で識別して受け付け、同一セッションにおける複数回のリクエスト間でセッション管理情報を共有する方法をコンピュータに実行させるセッション管理プログラムであって、未だセッション単位で識別されていないリクエストを受け付けた場合に、リクエストをセッション単位で識別するためのセッション識別情報を付加するとともに、サーバアプリケーションと共有のスレッドに関連付けて、サーバアプリケーションに係るインスタンスを生成し、サーバインスタンスが生成された場合に、共有のスレッドにセッション管理情報を設定する所定の関数と共有のスレッドからセッション管理情報を取得する所定の関数とが記述されたサーバアプリケーションをサーバインスタンスから呼び出し、呼び出されたサーバアプリケーションによる処理が終了した場合に、スレッドからサーバアプリケーションによって設定されたセッション管理情報を取得して、サーバインスタンス内の変数に保持し、セッション識別情報が用いられたリクエストを受け付けた場合に、セッション識別情報に対応するサーバインスタンスを検索し、保持されたセッション管理情報をスレッドに設定し、スレッドにセッション管理情報が設定された場合に、サーバアプリケーションをサーバインスタンスから呼び出すので、サーバアプリケーションごとにサーバアプリケーションの仕様に依存したオブジェクトが開発者によって定義されなければならない手法に比較して、非オブジェクト指向言語で記述されたアプリケーションをオープンプラットフォーム上で稼動させ、かつ、セッション管理の機能を実現するにあたり、開発者側の負担を小さくすることが可能になる。
【００１３】
また、請求項２の発明によれば、サーバインスタンス生成手順は、サーバアプリケーションと共有のスレッドとして、スレッドローカル領域に関連付けてサーバアプリケーションに係るインスタンスを生成するので、他のセッションからの参照を防ぐことが可能になる。
【発明を実施するための最良の形態】
【００１４】
以下に添付図面を参照して、この発明に係るセッション管理プログラム、セッション管理装置およびセッション管理方法の実施例を詳細に説明する。なお、以下の実施例で用いる主要な用語（用語の説明）、実施例１に係るセッション管理装置の概要および特徴（セッション管理装置の概要および特徴）、セッション管理装置の構成および処理の流れ（セッション管理装置の構成、セッション管理装置による処理）、実施例１の効果（実施例１の効果）を順に説明し、最後に他の実施例を説明する。
【実施例１】
【００１５】
［用語の説明］
まず最初に、以下の実施例で用いる主要な用語を説明する。以下の実施例で用いる「非オブジェクト指向言語（特許請求の範囲に記載の「非オブジェクト指向言語」に対応する）」とは、オブジェクト指向言語以外の手続き型のプログラミング言語のことであり、具体的には、ＣやＣＯＢＯＬといったプログラミング言語を指す。このような非オブジェクト指向言語は、登場以来、メインフレームやオフィスコンピュータ（オフコン）などの上で稼動するシステムの中心的な開発言語として位置づけられてきた。例えば、企業における人事システムや経理システムを運営する基幹系のサーバアプリケーション（特許請求の範囲に記載の「サーバアプリケーション」に対応する）などは、ＣやＣＯＢＯＬといった非オブジェクト指向言語によって開発されることが一般的であった。
【００１６】
また、「セッション（特許請求の範囲に記載の「セッション」に対応する）」とは、サーバアプリケーションに対するアクセス数の単位のひとつであり、サーバアプリケーションにアクセスするクライアントアプリケーション（特許請求の範囲に記載の「クライアントアプリケーション」に対応する）による一連のリクエスト（特許請求の範囲に記載の「リクエスト」に対応する）が１セッションである。具体的には、例えば、電子商取引のサービスを提供するサーバアプリケーションでは、クライアントアプリケーションからのアクセスとしてログインのリクエストを受け付け、続くリクエストで受け付けた「ショッピングカートに商品番号ＸＸの商品を３個入れる」といった情報を、決済を完了させるためのリクエストを受け付けるまで引継いで処理を行うが、こうした一連のリクエストが、１セッションである。また、上記したように、サーバアプリケーション側では、複数回のリクエストをセッション単位で識別し、同一セッションにおける複数回のリクエスト間で情報を共有しなければならないが、このような情報の共有を実現することをセッション管理（特許請求の範囲に記載の「セッション管理」に対応する）といい、情報の共有に利用されるセッション管理用の情報（例えば、「商品番号ＸＸ」というデータ名および「３」という値など）をセッション管理情報（特許請求の範囲に記載の「セッション管理情報」に対応する）という。
【００１７】
［セッション管理装置の概要および特徴］
続いて、図１および図２を用いて、実施例１に係るセッション管理装置の概要および特徴を説明する。図１および図２は、実施例１に係るセッション管理装置の概要および特徴を説明するための図である。
【００１８】
実施例１に係るセッション管理装置は、上記したように、クライアントアプリケーションから非オブジェクト指向言語で記述されたサーバアプリケーションに対して送信されたリクエストをセッション単位で識別して受け付け、同一セッションにおける複数回の当該リクエスト間でセッション管理情報を共有することを概要とし、非オブジェクト指向言語で記述されたアプリケーションをオープンプラットフォーム上で稼動させ、かつ、セッション管理の機能を実現するにあたり、開発者側の負担を小さくする点に主たる特徴がある。
【００１９】
この主たる特徴について簡単に説明すると、図１に示すように、実施例１に係るセッション管理装置では、オブジェクト指向言語で記述されたアプリケーションサーバ（セッション管理の機能を含むミドルウェア）と、非オブジェクト指向言語で記述されたサーバアプリケーションとが、同一のハードウェア上に配置されている。また、実施例１に係るセッション管理装置では、配置されるサーバアプリケーションに対して後述するＡＰＩ（Application Program Interface）が開示されており、サーバアプリケーションには、このＡＰＩによって提供された関数がすでに記述されている。
【００２０】
まず、実施例１に係るセッション管理装置は、クライアントアプリケーションから非オブジェクト指向言語で記述されたサーバアプリケーションに対して送信されたリクエストを受け付ける（図１の（１）を参照）。例えば、図１に示すように、セッション管理装置は、クライアントアプリケーションからサーバアプリケーションに対して送信されたログイン画面を要求するためのリクエストなどを受け付ける。通常、このようなリクエストはセッションの開始とみなされる場合が多いので、実施例１では、ログイン画面を要求するためのリクエストは、未だセッション単位で識別されていないリクエストである。
【００２１】
次に、セッション管理装置は、未だセッション単位で識別されていないリクエストを受け付けると、このリクエストをセッション単位で識別するためのセッション識別情報を付加するとともに、サーバアプリケーションと共有のスレッドに関連付けて、サーバアプリケーションに係るインスタンス（特許請求の範囲に記載の「インスタンス」に対応する）を生成する（図１の（２）を参照）。例えば、セッション識別情報として「０１００」などの番号を付加して生成する。ここで、インスタンスとは、オブジェクト指向言語で記述されたオブジェクトの一種であり、オブジェクトの一般型がクラスであるとすると、クラスの定義に基づいて生成された具体的な値を持つオブジェクトがインスタンスである。
【００２２】
そして、セッション管理装置は、サーバインスタンスが生成されると、スレッドローカル領域にセッション管理情報を設定する所定の関数と、スレッドローカル領域からセッション管理情報を取得する所定の関数とが記述されたサーバアプリケーションをサーバインスタンスから呼び出す（図１の（３）を参照）。ここで、所定の関数とは、実施例１に係るセッション管理装置が、配置するサーバアプリケーションに対してＡＰＩによってあらかじめ提供した関数のことであり、スレッドにセッション管理情報を設定する関数や、スレッドからセッション管理情報を取得する関数のことである。
【００２３】
続いて、セッション管理装置によって呼び出されたサーバアプリケーションには、スレッドローカル領域にセッション管理情報を設定する関数が記述されているので、その関数の処理にしたがって、サーバアプリケーションは、スレッドローカル領域へセッション管理情報を設定する（図１の（４）を参照）。なお、図１では、説明の便宜上から、セッション管理情報のデータ名として「画面」を設定し、値として「ログイン画面」を設定する場合を図示したが、実際は、セッションを管理するための情報としてプログラム上で定義されるデータ名と数字などの値とが設定される。
【００２４】
そして、実施例１に係るセッション管理装置は、呼び出したサーバアプリケーションによる処理が終了すると、スレッドローカル領域からセッション管理情報を取得してサーバインスタンス内の変数に保持する（図１の（５）を参照）。この後、サーバアプリケーションからクライアントアプリケーションに対してレスポンス（例えば、ログイン画面など）が返却され（図１の（６）を参照）、クライアントアプリケーションからの初回リクエストに対する処理が終了する。
【００２５】
次に、実施例１に係るセッション管理装置は、クライアントアプリケーションから非オブジェクト指向言語で記述されたサーバアプリケーションに対して送信され、セッション識別情報が用いられたリクエストを受け付ける（図２の（１）を参照）。例えば、図２に示すように、セッション管理装置は、クライアントアプリケーションからサーバアプリケーションに対して送信されたセッション識別情報「０１００」が使用されたログイン要求のリクエストなどを受け付ける。
【００２６】
そして、セッション管理装置は、セッション識別情報が用いられたリクエストを受け付けると、リクエストのセッション識別情報「０１００」に対応するサーバインスタンスを検索し（図２の（２）を参照）、サーバインスタンス内の変数に保持されたセッション管理情報をスレッドに設定する（図２の（３）を参照）。例えば、実施例１では、サーバインスタンス内の変数には、「ログイン画面」というセッション管理情報が保持されているので、これをスレッドに設定する。
【００２７】
そして、セッション管理装置は、スレッドローカル領域にセッション管理情報が設定されると、再び、サーバアプリケーションをサーバインスタンスから呼び出す（図２の（４）を参照）。ここで、セッション管理装置によって呼び出されたサーバアプリケーションには、スレッドローカル領域からセッション管理情報を取得する関数が記述されているので、その関数の処理にしたがって、サーバアプリケーションは、スレッドローカル領域からセッション管理情報を取得する（図２の（５）を参照）。例えば、実施例１では、スレッドローカル領域に、セッション管理装置によって「ログイン画面」が設定されているので、サーバアプリケーションは、「ログイン画面」というセッション管理情報を取得する。
【００２８】
続いて、サーバアプリケーションには、スレッドローカル領域にセッション管理情報を設定する関数が記述されているので、その関数の処理にしたがって、サーバアプリケーションは、スレッドローカル領域にセッション管理情報を設定する（図２の（６）を参照）。実施例１では、サーバアプリケーションは、次の処理に移行するために「トップ画面」というセッション管理情報を設定したと仮定する。
【００２９】
そして、実施例１に係るセッション管理装置は、呼び出したサーバアプリケーションによる処理が終了すると、スレッドローカル領域からセッション管理情報を取得してサーバインスタンス内の変数に保持する（図２の（７）を参照）。この後、サーバアプリケーションからクライアントアプリケーションに対してレスポンス（例えば、トップ画面など）が返却され（図２の（８）を参照）、クライアントアプリケーションからの２回目リクエストに対する処理が終了する。
【００３０】
このようなことから、実施例１に係るセッション管理装置は、サーバアプリケーションごとにサーバアプリケーションの仕様に依存したオブジェクトが開発者によって定義されなければならない手法に比較して、非オブジェクト指向言語で記述されたアプリケーションをオープンプラットフォーム上で稼動させ、かつ、セッション管理の機能を実現するにあたり、開発者側の負担を小さくすることが可能になる。
【００３１】
［セッション管理装置の構成］
次に、図３を用いて、実施例１に係るセッション管理装置の構成を説明する。図３は、実施例１に係るセッション管理装置の構成を示すブロック図であり、図４は、スレッドローカル領域部を説明するための図であり、図５は、サーバアプリケーションに開示されるＡＰＩを説明するための図である。
【００３２】
図３に示すように、セッション管理装置１０は、通信制御部１１と、記憶部２０と、制御部３０とから主に構成される。
【００３３】
通信制御部１１は、セッション管理装置１０が、クライアントアプリケーションや、その他のネットワーク上の装置にネットワークを介して接続され、アクセスするための通信を行う通信手段である。具体的には、パソコンに搭載されたＬＡＮボード（Local Area Networkボード）などによって通信を行う。例えば、ネットワーク上の他の装置にアクセスしたり、セッション管理装置１０に配置された非オブジェクト指向言語で記述されたサーバアプリケーションに対してクライアントアプリケーションから送信されたリクエストなどを受け付けて通信する。
【００３４】
記憶部２０は、制御部３０による各種処理に用いるデータを記憶する記憶手段であり、特にこの発明に密接に関連するものとしては、図３に示すように、セッション識別情報格納部２１と、スレッドローカル領域部２２とを備える。
【００３５】
かかる記憶部２０のなかで、セッション識別情報格納部２１は、リクエストをセッション単位で識別するためのセッション識別情報を格納する記憶部である。具体的には、セッション管理装置１０において未だセッション単位で識別されていないリクエストを受け付けた場合に、後述するサーバインスタンス生成部３１によって、このリクエストをセッション単位で識別するためのセッション識別情報が付加されてサーバアプリケーションに係るインスタンスが生成されるが、セッション識別情報格納部２１は、このセッション識別情報を格納する。また、セッション管理装置１０においてセッション識別情報が使用されてセッション単位で識別されたリクエストを受け付けた場合に、セッション管理装置１０が、このリクエストに係るセッション管理情報を保持するサーバインスタンスを検索するが、セッション識別情報格納部２１は、この検索に用いられるセッション識別情報を格納する。例えば、セッション識別情報として、「０１００」といった番号を格納する。
【００３６】
スレッドローカル領域部２２は、セッション管理装置１０が、セッション管理装置１０に配置されるサーバアプリケーションと共有する記憶部である。具体的には、セッション管理装置１０において未だセッション単位で識別されていないリクエストを受け付けた場合に、後述するサーバインスタンス生成部３１によって、サーバアプリケーションと共有のスレッドに関連付けてサーバアプリケーションに係るインスタンスが生成されるが、スレッドローカル領域部２２は、サーバインスタンスに関連付けられる共有のスレッドである。また、スレッドローカル領域部２２は、サーバアプリケーションに記述された所定の関数によって設定されるセッション管理情報と、サーバアプリケーションに記述された所定の関数によって取得されるセッション管理情報とを格納する。また、スレッドローカル領域部２２が格納したセッション管理情報は、後述する第一の呼出部３２ａによって呼び出されたサーバアプリケーションによる処理が終了した場合に、後述するセッション管理情報保持部３２ｂによって取得され、サーバインスタンス内の変数に保持される。また、スレッドローカル領域部２２は、セッション管理装置１０においてセッション識別情報が用いられたリクエストを受け付けた場合に、後述するセッション管理情報設定部３２ｃによって設定されるセッション管理情報を格納する。
【００３７】
スレッドローカル領域部２２は、例えば、図４に示すように、キーと値との２種類の格納領域を有する。なお、実施例１においては、キーとして「画面」が格納され、値として「ログイン画面」および「トップ画面」などの情報が格納される例を示したが、この発明はこれに限定されるものではなく、セッションを管理するための情報としてプログラム上で定義されるキーと値とであれば、いずれでもよい。
【００３８】
ここで、図３に戻ると、制御部３０は、セッション管理装置１０を制御して各種処理を実行する制御手段であり、特にこの発明に密接に関連するものとしては、図３に示すように、サーバインスタンス生成部３１と、サーバインスタンス部３２とを備える。
【００３９】
かかる制御部３０のなかで、サーバインスタンス生成部３１は、サーバインスタンスを生成する生成手段である。具体的には、セッション管理装置１０において、未だセッション単位で識別されていないリクエストを受け付けた場合に、サーバインスタンス生成部３１は、このリクエストをセッション単位で識別するためのセッション識別情報を付加するとともに、サーバアプリケーションと共有のスレッドローカル領域部２２に関連付けて、サーバアプリケーションに係るインスタンスを生成する。なお、サーバインスタンス生成部３１は、特許請求の範囲に記載の「サーバインスタンス生成手順」に対応する。
【００４０】
サーバインスタンス部３２は、スレッドローカル領域部２２からセッション管理情報を取得して保持し、保持したセッション管理情報をスレッドローカル領域部２２に設定するインスタンス部である。ここで、サーバインスタンス部３２は、図３に示すように、第一の呼出部３２ａと、セッション管理情報保持部３２ｂと、セッション管理情報設定部３２ｃと、第二の呼出部３２ｄとを備える。なお、第一の呼出部３２ａは、特許請求の範囲に記載の「第一の呼出手順」に対応し、セッション管理情報保持部３２ｂは、特許請求の範囲に記載の「セッション管理情報保持手順」に対応し、セッション管理情報設定部３２ｃは、特許請求の範囲に記載の「セッション管理情報設定手順」に対応し、第二の呼出部３２ｄは、特許請求の範囲に記載の「第二の呼出手順」に対応する。
【００４１】
かかるサーバインスタンス部３２のなかで、第一の呼出部３２ａは、サーバアプリケーションを呼び出す呼出部である。具体的には、サーバインスタンス生成部３１によってサーバインスタンスが生成された場合に、第一の呼出部３２ａは、スレッドローカル領域部２２にセッション管理情報を設定する所定の関数と、スレッドローカル領域部２２からセッション管理情報を取得する所定の関数とが記述されたサーバアプリケーションを呼び出す。
【００４２】
セッション管理情報保持部３２ｂは、セッション管理情報をサーバインスタンス内の変数に保持する保持部である。具体的には、第一の呼出部３２ａによって呼び出されたサーバアプリケーションによる処理が終了した場合に、セッション管理情報保持部３２ｂは、スレッドローカル領域部２２からセッション管理情報を取得してサーバインスタンス内の変数に保持する。
【００４３】
セッション管理情報設定部３２ｃは、セッション管理情報をスレッドに設定する設定部である。具体的には、セッション管理装置１０において、セッション識別情報が使用されてセッション単位で識別されたリクエストを受け付けた場合に、セッション管理情報設定部３２ｃは、セッション管理情報保持部３２ｂによってサーバインスタンス内の変数に保持されたセッション管理情報を、スレッドローカル領域部２２に設定する。
【００４４】
第二の呼出部３２ｄは、サーバアプリケーションを呼び出す呼出部である。具体的には、セッション管理情報設定部３２ｃによってスレッドローカル領域部２２にセッション管理情報が設定された場合に、第二の呼出部３２ｄは、サーバアプリケーションを呼び出す。
【００４５】
ところで、図５は、セッション管理装置１０が、セッション管理装置１０に配置されるサーバアプリケーションに対して開示するＡＰＩによって提供される関数を、サーバアプリケーションに記述された例を示したものである。例えば、「old_count=getSessionInfo("COUNT");」は、サーバアプリケーションが、スレッドローカル領域部２２からセッション管理情報を取得するための所定の関数を示したものであり、「setSessionInfo("COUNT", new_count+1);」は、サーバアプリケーションが、スレッドローカル領域部２２にセッション管理情報を設定するための所定の関数を示したものである。なお、図５では、ＡＰＩによって提供される関数がＣ言語で記述された場合を例示したが、この発明はこれに限定されるものではなく、セッション管理装置１０に配置されるサーバアプリケーションが記述されたプログラミング言語に合致するものであれば、いずれでもよい。
【００４６】
［セッション管理装置による処理］
次に、図６および図７を用いて、実施例１におけるセッション管理処理の手順を説明する。図６および図７は、実施例１におけるセッション管理処理の手順を示すフローチャートである。
【００４７】
図６に示すように、セッション管理装置１０は、クライアントアプリケーションから非オブジェクト指向言語で記述されたサーバアプリケーションに対して送信され、未だセッション単位で識別されていないリクエストを受け付ける（ステップＳ６０１）。
【００４８】
すると、セッション管理装置１０は、サーバインスタンス生成部３１において、このリクエストをセッション単位で識別するためのセッション識別情報を付加するとともに、サーバアプリケーションと共有のスレッドローカル領域部２２に関連付けて、サーバアプリケーションに係るインスタンスを生成する（ステップＳ６０２）。
【００４９】
続いて、セッション管理装置１０は、共有のスレッドローカル領域部２２にセッション管理情報を設定する所定の関数と、共有のスレッドローカル領域部２２からセッション管理情報を取得する所定の関数とが記述されたサーバアプリケーションをサーバインスタンス部３２から呼び出す（ステップＳ６０３）。
【００５０】
すると、サーバインスタンス部３２から呼び出されたサーバアプリケーションにおいて、共有のスレッドローカル領域部２２にセッション管理情報が設定される（ステップＳ６０４）。
【００５１】
次に、セッション管理装置１０は、サーバアプリケーションによる処理が終了すると、共有のスレッドローカル領域部２２からセッション管理情報を取得してサーバインスタンス部３２内のメンバ変数に保持する（ステップＳ６０５）。
【００５２】
そして、セッション管理装置１０は、クライアントアプリケーションへレスポンスを返却する（ステップＳ６０６）。
【００５３】
次に、図７に示すように、セッション管理装置１０は、クライアントアプリケーションから非オブジェクト指向言語で記述されたサーバアプリケーションに対して送信された、セッション識別情報が使用されてセッション単位で識別されたリクエストを受け付ける（ステップＳ７０１）。
【００５４】
そして、セッション管理装置１０は、このセッション識別情報に対応するサーバインスタンス部３２を検索し、サーバインスタンス部３２内の変数に保持されたセッション管理情報をスレッドローカル領域部２２に設定し、サーバアプリケーションをサーバインスタンス部３２から呼び出す（ステップＳ７０３）。
【００５５】
すると、サーバインスタンス部３２から呼び出されたサーバアプリケーションにおいて、共有のスレッドローカル領域部２２からセッション管理情報が取得される（ステップＳ７０４）。
【００５６】
続いて、サーバアプリケーションにおいて、共有のスレッドローカル領域部２２にセッション管理情報が設定される（ステップＳ７０５）。
【００５７】
次に、セッション管理装置１０は、サーバアプリケーションによる処理が終了すると、共有のスレッドローカル領域部２２からセッション管理情報を取得してサーバインスタンス部３２内のメンバ変数に保持する（ステップＳ７０６）。
【００５８】
そして、セッション管理装置１０は、クライアントアプリケーションへレスポンスを返却する（ステップＳ７０７）。
［実施例1の効果］
【００５９】
上述してきたように、実施例１によれば、クライアントアプリケーションから非オブジェクト指向言語で記述されたサーバアプリケーションに対して送信されたリクエストをセッション単位で識別して受け付け、同一セッションにおける複数回のリクエスト間でセッション管理情報を共有する方法をコンピュータに実行させるセッション管理プログラムであって、未だセッション単位で識別されていないリクエストを受け付けた場合に、リクエストをセッション単位で識別するためのセッション識別情報を付加するとともに、サーバアプリケーションと共有のスレッドに関連付けて、サーバアプリケーションに係るインスタンスを生成し、サーバインスタンスが生成された場合に、共有のスレッドにセッション管理情報を設定する所定の関数と共有のスレッドからセッション管理情報を取得する所定の関数とが記述されたサーバアプリケーションをサーバインスタンスから呼び出し、呼び出されたサーバアプリケーションによる処理が終了した場合に、スレッドからサーバアプリケーションによって設定されたセッション管理情報を取得して、サーバインスタンス内の変数に保持し、セッション識別情報が用いられたリクエストを受け付けた場合に、セッション識別情報に対応するサーバインスタンスを検索し、保持されたセッション管理情報をスレッドに設定し、スレッドにセッション管理情報が設定された場合に、サーバアプリケーションをサーバインスタンスから呼び出すので、サーバアプリケーションごとにサーバアプリケーションの仕様に依存したオブジェクトが開発者によって定義されなければならない手法に比較して、非オブジェクト指向言語で記述されたアプリケーションをオープンプラットフォーム上で稼動させ、かつ、セッション管理の機能を実現するにあたり、開発者側の負担を小さくすることが可能になる。
【００６０】
また、実施例１によれば、サーバアプリケーションと共有のスレッドとして、スレッドローカル領域に関連付けてサーバアプリケーションに係るインスタンスを生成するので、他のセッションからの参照を防ぐことが可能になる。
【実施例２】
【００６１】
ところで、これまで実施例１に係るセッション管理装置について説明したが、この発明は上記した実施例以外にも、他の形態にて実施されてよいものである。そこで、以下では、実施例２に係るセッション管理装置として、他の実施例を説明する。
【００６２】
［スレッド］
上記の実施例１では、サーバアプリケーションと共有のスレッドとしてスレッドローカル領域を用いた場合を説明したが、この発明はこれに限定されるものではなく、グローバル領域を用いる場合でもよい。
【００６３】
［コンピュータ］
また、上記の実施例１で説明した各種の処理は、あらかじめ用意されたプログラムをパーソナルコンピュータやワークステーションなどのコンピュータで実行することによって実現することができる。そこで、以下では、図８を用いて、上記の実施例１と同様の機能を有するセッション管理プログラムを実行するコンピュータの一例を説明する。図８は、セッション管理プログラムを実行するコンピュータを示す図である。
【００６４】
図８に示すように、セッション管理プログラム（コンピュータ）４０は、キャッシュ４１、ＲＡＭ４２、ＨＤＤ４３、ＲＯＭ４４およびＣＰＵ４５をバス４６で接続して構成される。ここで、ＲＯＭ４４には、上記の実施例１と同様の機能を発揮するサーバインスタンス生成プログラム４４ａおよびサーバインスタンスプログラム４４ｂがあらかじめ記憶されている。また、このサーバインスタンスプログラム４４ｂとして、第一の呼出プログラム４４ｃ、セッション管理情報保持プログラム４４ｄ、セッション管理情報設定プログラム４４ｅ、および第二の呼出プログラム４４ｆがあらかじめ記憶されている。
【００６５】
そして、ＣＰＵ４５は、これらのプログラム４４ａ、４４ｂ、４４ｃ、４４ｄ、４４ｅ、および４４ｆを読み出して実行することで、図８に示すように、各プログラム４４ａ、４４ｂ、４４ｃ、４４ｄ、４４ｅ、および４４ｆは、サーバインスタンス生成プロセス４５ａ、サーバインスタンスプロセス４５ｂ、第一の呼出プロセス４５ｃ、セッション管理情報保持プロセス４５ｄ、セッション管理情報設定プロセス４５ｅ、および第二の呼出プロセス４５ｆとなる。なお各プロセス４５ａ、４５ｂ、４５ｃ、４５ｄ、４５ｅ、および４５ｆは、図３に示した、サーバインスタンス生成部３１、サーバインスタンス部３２、第一の呼出部３２ａ、セッション管理情報保持部３２ｂ、セッション管理情報設定部３２ｃ、および第二の呼出部３２ｄにそれぞれ対応する。
【００６６】
また、キャッシュ４１には、セッション識別情報格納テーブル４１ａおよびスレッドローカル領域テーブル４１ｂが設けられる。なお、各テーブル４１ａおよび４１ｂは、図３に示した、セッション識別情報格納部２１およびスレッドローカル領域部２２にそれぞれ対応する。
【００６７】
ところで、上記した各プログラム４４ａ、４４ｂ、４４ｃ、４４ｄ、４４ｅ、および４４ｆについては、必ずしもＲＯＭ４４に記憶させておく必要はなく、例えば、コンピュータ４０に挿入されるフレキシブルディスク（ＦＤ）、ＣＤ−ＲＯＭ、ＭＯディスク、ＤＶＤディスク、光磁気ディスク、ＩＣカードなどの「可搬用の物理媒体」、または、コンピュータ４０の内外に備えられるハードディスクドライブ（ＨＤＤ）などの「固定用の物理媒体」、さらには、公衆回線、インターネット、ＬＡＮ、ＷＡＮなどを介してコンピュータ４０に接続される「他のコンピュータ（またはサーバ）」に記憶させておき、コンピュータ４０がこれらからプログラムを読み出して実行するようにしてもよい。
【００６８】
［システム構成等］
また、上記の実施例において説明した各処理のうち、自動的におこなわれるものとして説明した処理の全部または一部を手動的におこなうこともでき、あるいは、手動的におこなわれるものとして説明した処理の全部または一部を公知の方法で自動的におこなうこともできる。この他、上記文書中や図面中で示した処理手順、制御手順、具体的名称、各種のデータやパラメータを含む情報については、特記する場合を除いて任意に変更することができる。
【００６９】
また、図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散・統合の具体的形態は図示のものに限られず、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。さらに、各装置にて行なわれる各処理機能は、その全部または任意の一部が、ＣＰＵおよび当該ＣＰＵにて解析実行されるプログラムにて実現され、あるいは、ワイヤードロジックによるハードウェアとして実現され得る。
【産業上の利用可能性】
【００７０】
以上のように、この発明に係るセッション管理プログラム、セッション管理方法およびセッション管理装置は、クライアントアプリケーションから非オブジェクト指向言語で記述されたサーバアプリケーションに対して送信されたリクエストをセッション単位で識別して受け付け、同一セッションにおける複数回のリクエスト間でセッション管理情報を共有することに有用であり、特に、非オブジェクト指向言語で記述されたアプリケーションをオープンプラットフォーム上で稼動させ、かつ、セッション管理の機能を実現するにあたり、開発者側の負担を小さくすることに適する。
【図面の簡単な説明】
【００７１】
【図１】実施例１に係るセッション管理装置の概要および特徴を説明するための図である。
【図２】実施例１に係るセッション管理装置の概要および特徴を説明するための図である。
【図３】実施例１に係るセッション管理装置の構成を示すブロック図である。
【図４】スレッドローカル領域部を説明するための図である。
【図５】サーバアプリケーションに開示されるＡＰＩを説明するための図である。
【図６】実施例１におけるセッション管理処理の手順を示すフローチャートである。
【図７】実施例１におけるセッション管理処理の手順を示すフローチャートである。
【図８】セッション管理プログラムを実行するコンピュータを示す図である。
【符号の説明】
【００７２】
１０  セッション管理装置
１１  通信制御部
２０  記憶部
２１  セッション識別情報格納部
２２  スレッドローカル領域部
３０  制御部
３１  サーバインスタンス生成部
３２  サーバインスタンス部
３２ａ  第一の呼出部
３２ｂ  セッション管理情報保持部
３２ｃ  セッション管理情報設定部
３２ｄ  第二の呼出部
４０  セッション管理プログラム（コンピュータ）
４１  キャッシュ
４２  ＲＡＭ
４３  ＨＤＤ
４４  ＲＯＭ
４５  ＣＰＵ
４６  バス
【図１】
0004641506.tif 000002
【図２】
0004641506.tif 000003
【図３】
0004641506.tif 000004
【図４】
0004641506.tif 000005
【図５】
0004641506.tif 000006
【図６】
0004641506.tif 000007
【図７】
0004641506.tif 000008
【図８】
0004641506.tif 000009