以下、図面を参照して、実施形態について説明する。
(第1実施形態)
まず、第1実施形態について説明する。本実施形態に係るサーバ装置は、ユーザが利用可能なWebアプリケーションプログラムを実行するシステム(以下、Webアプリケーションシステムと表記)を構成する。
図1を参照して、本実施形態におけるWebアプリケーションシステムによって実行されるWebアプリケーションプログラムの利用態様の一例について説明する。
図1に示すように、Webアプリケーションシステム1は、例えばサーバ装置10と、複数のクライアント装置20とを備える。
ここで、Webアプリケーションシステム1によって実行されるWebアプリケーションプログラムは、サーバ装置10上で動作するプログラム(以下、Webサーバプログラムと表記)とクライアント装置20のブラウザ上で動作するプログラム(以下、Webクライアントプログラムと表記)とを含む。
サーバ装置10は、クライアント装置20との間のセッションにおいてWebサーバプログラムに基づく処理(以下、サーバ処理と表記)を実行する。
クライアント装置20は、サーバ装置10と通信可能に接続される。クライアント装置20は、ユーザによって使用される例えばパーソナルコンピュータ、スマートフォン及びタブレット端末等の電子機器である。クライアント装置20は、ブラウザ上でWebクライアントプログラムが動作することによってサーバ装置10からサーバ処理の結果を取得し、当該結果をユーザに対して表示する。
ここで、Webアプリケーションシステム1が例えばコールセンター等に導入され、当該コールセンターのオペレータ等の状況を管理するためにWebアプリケーションプログラムが利用される場合を想定する。このWebアプリケーションプログラムによれば、オペレータの状況を管理する管理システム(監視制御システム)のHMI(Human Machine Interface)を実現することができる。
この場合、サーバ装置10は、例えばオペレータの各々によって使用される複数のデバイス(例えば、パーソナルコンピュータ等)30と通信可能に接続される。なお、複数のデバイス30は、サーバ装置10に直接接続されていてもよいし、例えばゲートウェイ31等を介してサーバ装置10に接続されていてもよい。
これによれば、サーバ装置10は、例えば当該サーバ装置10に接続された複数のデバイス30の各々から当該デバイス30を使用するオペレータの状況を示すプレゼンス情報を取得し、当該プレゼンス情報の一覧をクライアント装置20に表示するようなサーバ処理を実行することができる。なお、オペレータの状況を示すプレゼンス情報には、例えば当該オペレータが着席しているか離席しているかを示す情報及び当該オペレータが通話中であるか否かを示す情報等が含まれる。
また、サーバ装置10は、例えばユーザの操作に基づくクライアント装置20からの指示に基づいて、複数のデバイス30を制御するようなサーバ処理を実行することも可能である。
なお、サーバ装置10(Webサーバプログラム)とクライアント装置20(ブラウザ)とは、ステートフルなネットワークプロトコル(以下、ステートフルプロトコルと表記)に基づく通信が実行されるものとする。ステートフルプロトコルとは、例えばWebSocket及びWebRTCのように持続的にコネクションを確立した上でWebサーバプログラムとブラウザとの間でリアルタイムに双方向通信を行うためのプロトコルである。本実施形態においては、Webサーバプログラムとブラウザとの間ではWebSocketによる通信(接続)が行われるものとして説明する。
ここで、図1に示すように、複数のクライアント装置20の各々がコールセンター(オペレータ)を管理する管理ユーザ及びオペレータ等の一般ユーザによって使用される場合を想定する。以下、管理ユーザによって使用されるクライアント装置20を管理ユーザのクライアント装置20、一般ユーザによって使用されるクライアント装置20を一般ユーザのクライアント装置20と称する。
この場合において、例えば図2に示すようにサーバ装置10に接続される複数のデバイス30に新規デバイス32が追加され、当該新規デバイス32に対する制御(機能)を管理ユーザのみが利用可能とするようにWebサーバプログラムが変更される場合を想定する。同様に、例えばオペレータの各々の状況を示すプレゼンス情報を一覧表示する機能を管理ユーザのみが利用可能とするようにWebサーバプログラムが変更される場合を想定する。
上記したようなWebアプリケーションプログラムの変更は当該Webサーバプログラム(Webアプリケーションプログラム)を更新することによって実現されるが、当該Webサーバプログラムの更新中もWebサーバプログラムと管理ユーザのクライアント装置20のブラウザ間ではWebSocketによる接続が維持される。一方、サーバ装置10と一般ユーザのクライアント装置20との間のセッションにおいて実行されるサーバ処理(一般ユーザのサーバ処理)については停止する必要がある。
具体的には、Webサーバプログラムが更新されると新規デバイス32に対する制御は管理ユーザのみが利用可能であるため、このような更新後のWebサーバプログラムに基づく処理(新規デバイス32を制御するサーバ処理)は、サーバ装置10と一般ユーザのクライアント装置20との間のセッションにおいては停止する必要がある。また、Webサーバプログラムが更新される前の一般ユーザのサーバ処理においてはオペレータの各々の状況を示すプレゼンス情報の一覧を取得していたが、当該Webサーバプログラムが更新された後では当該プレゼンス情報の一覧を取得(表示)可能なのは管理ユーザのみであるため、このような一般ユーザのサーバ処理の利用も停止する必要がある。
そこで、本実施形態に係るサーバ装置10は、Webサーバプログラムが更新された際に、当該更新されたWebサーバプログラムに基づく処理が認可されていないユーザ(ここでは、一般ユーザ)のサーバ処理を停止することを実現するための構成を有する。
以下、本実施形態に係るサーバ装置10について説明する。図3は、本実施形態に係るサーバ装置10のシステム構成の一例を示す。サーバ装置10は、CPU11、システムコントローラ12、主メモリ13、BIOS-ROM14、不揮発性メモリ15、通信デバイス16、エンベデッドコントローラ(EC)17等を備える。
CPU11は、サーバ装置10内の様々なコンポーネントの動作を制御するプロセッサである。CPU11は、ストレージデバイスである不揮発性メモリ15から主メモリ13にロードされる様々なプログラムを実行する。これらプログラムには、オペレーティングシステム(OS)及び上記したWebサーバプログラム等が含まれている。
また、CPU11は、BIOS-ROM14に格納された基本入出力システム(BIOS)も実行する。BIOSは、ハードウェア制御のためのプログラムである。
システムコントローラ12は、CPU11のローカルバスと各種コンポーネントとの間を接続するデバイスである。
通信デバイス16は、有線または無線による通信を実行するように構成されたデバイスである。EC17は、電力管理のためのエンベデッドコントローラを含むワンチップマクロコンピュータである。
なお、図3においては、CPU11、システムコントローラ12、主メモリ13、BIOS-ROM14、不揮発性メモリ15、通信デバイス16及びEC17のみが示されているが、サーバ装置10は、例えばHDD(Hard Disk Drive)及びSSD(Solid State Dive)のような他の記憶装置を備えていてもよいし、他の入力装置及び出力装置等を備えていてもよい。
図4は、サーバ装置10の主として機能構成の一例を示すブロック図である。図4に示すように、サーバ装置10は、クラスロード部101、データ処理リクエスト受信部102、セッション管理部103及びサーバ処理部104を含む。
本実施形態において、クラスロード部101、データ処理リクエスト受信部102、セッション管理部103及びサーバ処理部104は、例えば図3に示すCPU11(つまり、サーバ装置10のコンピュータ)が不揮発性メモリ15に格納されているWebサーバプログラムを実行すること(つまり、ソフトウェア)により実現されるものとする。なお、このWebサーバプログラムは、コンピュータ読み取り可能な記憶媒体に予め格納して頒布可能である。また、Webサーバプログラムは、例えばネットワークを介してサーバ装置10にダウンロードされても構わない。
ここでは、各部101~104がソフトウェア(Webサーバプログラム)により実現されるものとして説明したが、これらの各部101~104の少なくとも一部は、ハードウェアにより実現されてもよいし、ソフトウェア及びハードウェアの組み合わせ構成によって実現されてもよい。
ここで、Webサーバプログラムは、上記したステートフルプロトコルでやり取りされるデータを処理するための複数のサーバ処理クラスを含む。なお、この複数のサーバ処理クラスの各々においては、サーバ装置10で実行される処理(Webサーバプログラムに基づいて実行される処理)の内容が定義されている。
クラスロード部101は、Webサーバプログラムに含まれるサーバ処理クラスをロードする。クラスロード部101によってロードされたサーバ処理クラスは、クラスリポジトリ105内に格納される。
データ処理リクエスト受信部102は、クライアント装置20から送信されるデータ処理リクエストを受信する。データ処理リクエストは、URL(Uniform Resource Locator)を含み、例えばWebSocketのHttp Upgrade要求やWebRTCのSDP Offerのようなステートフルプロトコルに基づく通信を開始するためのリクエストである。
データ処理リクエスト受信部102は、クライアント装置20からデータ処理リクエストを受信すると、サーバ装置10とクライアント装置20との間のセッションを生成(確立)する。
セッション管理部103は、データ処理リクエスト受信部102によって生成されたセッションを管理する。図4においては、サーバ装置10と管理ユーザのクライアント装置20との間のセッション(以下、管理ユーザのセッションと表記)及びサーバ装置10と一般ユーザのクライアント装置20との間のセッション(以下、一般ユーザのセッションと表記)が管理されている。
なお、セッション管理部103によって管理されるセッションには、ステートフルプロトコル通信インスタンス(以下、単に通信インスタンスと表記)、サーバ処理インスタンス及びユーザロールが含まれる。
サーバ装置10は、セッション管理部103によって管理されるセッションに含まれる通信インスタンスの処理を実行することによって、ステートフルプロトコル(WebSocket)に基づくクライアント装置20との通信を実行することができる。サーバ処理インスタンスはクラスリポジトリ105に格納されたサーバ処理クラスから生成され、サーバ装置10において実行されるサーバ処理インスタンスの処理は上記したサーバ処理に相当する。ユーザロールは、ユーザに関する情報(ユーザ情報)に相当し、例えばユーザの役割(権限)を含む。具体的には、管理ユーザのセッションに含まれるユーザロールは「管理ユーザ」であり、一般ユーザのセッションに含まれるユーザロールは「一般ユーザ」である。
サーバ処理部104は、セッション管理部103によって管理されている各セッションに含まれるサーバ処理インスタンスの処理(つまり、サーバ処理)を実行する。また、サーバ処理部104は、上記したWebサーバプログラムの更新に関する処理を実行する機能部として、セッション取得部104a、更新判定メソッド呼び出し部104b、サーバ処理更新部104c及びセッション破棄部104dを含む。
ここで、Webサーバプログラムの更新においては、更新対象となるサーバ処理クラス(以下、更新前のサーバ処理クラスと表記)が、変更されたサーバ処理の内容が定義されたサーバ処理クラス(以下、更新後のサーバ処理クラスと表記)に更新される。この更新後のサーバ処理クラスには、当該更新後のサーバ処理クラスにおいて定義される処理の実行が認可されるユーザが規定されたメソッド(以下、更新判定メソッドと表記)が含まれる。
セッション取得部104aは、セッション管理部103によって管理されているセッションの中から、更新前のサーバ処理クラスから生成されたサーバ処理インスタンスを含むセッションを取得する。
更新判定メソッド呼び出し部104bは、セッション管理部103によって取得されたセッションに含まれるユーザロールを引数として更新後のサーバ処理クラスに含まれる更新判定メソッドを呼び出す。更新判定メソッド呼び出し部104bは、呼び出された更新判定メソッドの返り値に基づいて、セッション取得部104aによって取得されたセッションにおいて実行されるサーバ処理(つまり、サーバ処理インスタンス)を更新するか否かを判定する。
サーバ処理更新部104cは、更新後のサーバ処理クラスからサーバ処理インスタンスを生成し、セッション管理部103によって取得されたセッションに含まれるサーバ処理インスタンスを当該生成されたサーバ処理インスタンスに更新する。
セッション破棄部104dは、セッション管理部103によって管理されているセッションを破棄する処理を実行する。
次に、図5のシーケンスチャートを参照して、本実施形態におけるWebアプリケーションシステム1(サーバ装置10及びクライアント装置20)の一連の動作の概要について説明する。
クライアント装置20を使用するユーザがWebアプリケーションプログラムを利用する場合、クライアント装置20は、ユーザの操作に応じてHTTPリクエストをサーバ装置10に送信する(ステップS1)。
サーバ装置10は、クライアント装置20から送信されたHTTPリクエストに対するHTTPレスポンスをクライアント装置20に返す(ステップS2)。これにより、クライアント装置20には、例えばサーバ装置10にログインするための画面(以下、ログイン画面)が表示される。
ここで、ユーザは、ログイン画面に対して例えば当該ユーザを識別するためのID及び当該ユーザに割り当てられたパスワードを入力することができる。クライアント装置20は、ログイン画面に入力されたID及びパスワードをサーバ装置10に送信する(ステップS3)。
サーバ装置10は、クライアント装置20から送信されたID及びパスワードに基づいてクライアント装置20を使用するユーザに対する認証処理を実行する(ステップS4)。認証処理においては、クライアント装置20から送信されたID及びパスワードが例えば予め登録されたID及びパスワードであるか否かが確認される。
ステップS4における認証処理が完了した場合、サーバ装置10は、ログイン済み画面(Webページ)をクライアント装置20に送信する(ステップS5)。
ステップS5の処理が実行されると、クライアント装置20には、ログイン済み画面が表示される。
ここで、クライアント装置20は、例えばログイン済み画面に対するユーザの操作に応じて、上記したデータ処理リクエストを送信する(ステップS6)。なお、ステップS6において送信されるデータ処理リクエストは、例えばWebSocketのHttp Upgrade要求を含む。
クライアント装置20から送信されたデータ処理リクエストは、サーバ装置10(データ処理リクエスト受信部102)によって受信される。データ処理リクエスト受信部102は、データ処理リクエストが受信されると、クラスリポジトリ105からサーバ処理クラスを読み込む(ステップS7)。
次に、データ処理リクエスト受信部102は、クラスリポジトリ105から読み込まれたサーバ処理クラスからサーバ処理インスタンスを生成する(ステップS8)。
ステップS8の処理が実行されると、上記したサーバ装置10とクライアント装置20との間のセッションが生成され、セッション管理部103は、当該セッションを例えばセッション管理部103の内部に格納して管理する(ステップS9)。なお、セッション管理部103によって管理されるセッションには、上記したように通信インスタンス、サーバ処理インスタンス及びユーザロールが含まれる。なお、ユーザロールは、例えば上記したステップS4における認証処理等において取得可能であるものとする。
このようなセッションが管理されている場合、サーバ装置10及びクライアント装置20間での双方向通信(つまり、データのやり取り)が可能となる(ステップS10)。
サーバ処理部104は、サーバ装置10及びクライアント装置20間での双方向通信に基づいてステップS8において生成されたサーバ処理インスタンスの処理(サーバ処理)を実行する(ステップS11)。図5においては示されていないが、サーバ処理インスタンスの処理が実行された場合、例えば当該処理結果がクライアント装置20に表示される。
ここで、Webサーバプログラム(Webアプリケーションプログラム)に含まれるサーバ処理クラスが更新された場合を想定する(ステップS12)。
この場合、サーバ処理部104に含まれるセッション取得部104aは、セッション管理部103によって管理されているセッションの中から、更新後のサーバ処理クラスに基づいてセッションを探索(取得)する(ステップS13)。
ステップS12においてセッションが探索された場合、当該セッションに含まれるユーザロールに基づいて当該セッションに含まれるサーバ処理インスタンスを更新するか否か(つまり、更新可否)を判定する(ステップS14)。
図5においては省略されているが、ステップS14の処理が実行された場合、当該ステップS14における判定結果に基づいてサーバ処理インスタンスの更新またはセッションの破棄が実行される。
以下、本実施形態に係るサーバ装置10の動作について詳細に説明する。まず、図6を参照して、サーバ装置10及びクライアント装置20間でセッションを開始する際のサーバ装置10の処理について説明する。なお、図6において説明する処理は、上記した図5に示すステップS6~S9の処理に相当する。
ここでは、Webサーバプログラムに含まれるサーバ処理クラスは、クラスロード部101によってロードされ、クラスリポジトリ105内に格納されているものとする(ステップS21)。
サーバ装置10及びクライアント装置20間でセッションを開始する場合、クライアント装置20は、サーバ装置10にデータ処理リクエストを送信する(ステップS22)。
ステップS22の処理が実行されると、データ処理リクエスト受信部102は、当該ステップS22において送信されたデータ処理リクエストを受信する。
次に、データ処理リクエスト受信部102は、サーバ装置10及びクライアント装置20間で開始されるセッションにおいて実行される処理が定義されているサーバ処理クラスをクラスリポジトリ105から読み込む(ステップS23)。
データ処理リクエスト受信部102は、ステップS23において読み込まれたサーバ処理クラスからサーバ処理インスタンスを生成し、当該サーバ処理インスタンスを含むセッション(サーバ装置10及びクライアント装置20間のセッション)を生成する。
データ処理リクエスト受信部102によって生成されたセッションは、セッション管理部103内に格納され、当該セッション管理部103によって管理される(ステップS24)。なお、セッション管理部103によって管理されるセッションには、サーバ所為インスタンス以外に、上記したように通信インスタンス及びユーザロールが含まれる。
上記した図6において説明した処理が実行されることによって、クライアント装置20は、サーバ装置10とのセッションを開始し、ステートフルプロトコルに基づく当該サーバ装置10との双方向通信を行うことが可能となる。
なお、図6においては管理ユーザのクライアント装置20がサーバ装置10とのセッションを開始する場合について示しているが、一般ユーザのクライアント装置20がサーバ装置10とのセッションを開始する場合についても同様の処理が実行される。
次に、図7を参照して、Webサーバプログラム(サーバ処理クラス)が更新された際のサーバ装置10の処理について説明する。なお、図7において説明する処理は、上記した図5に示すステップS12~S14の処理に相当する。
例えばサーバ装置10の管理者等によってWebサーバプログラムに含まれるサーバ処理クラスが更新された場合、当該サーバ処理クラスは、クラスロード部101によってロードされて、クラスリポジトリ105に格納される(ステップS31)。
ここで、サーバ処理クラスが更新される場合において、更新前後のサーバ処理クラスのパッケージを含むクラス名(完全修飾名)は同一であるものとする。このため、クラスロード部101は、ステップS31の処理を実行する際に、ロードされたサーバ処理クラスとクラス名が同一のサーバ処理クラスがクラスリポジトリ105に格納されているか否かによって、サーバ処理クラスが更新されたか否かを判定することができる。
クラスロード部101は、ロードされたサーバ処理クラスとクラス名が同一のサーバ処理クラスがクラスリポジトリ105に格納されており、サーバ処理クラスが更新されたと判定された場合、サーバ処理クラスが更新されたことをサーバ処理部104に通知する(ステップS32)。
ステップS32の処理が実行されると、サーバ処理部104は、ステップS31においてクラスリポジトリ105に格納されたサーバ処理クラス(更新後のサーバ処理クラス)を読み込む(ステップS33)。
セッション取得部104aは、セッション管理部103によって管理されているセッションの中から、ステップS33においてクラスリポジトリ105から読み込まれた更新後のサーバ処理クラスに基づいてセッションを取得する(ステップS34)。ステップS34においては、更新対象となるサーバ処理インスタンスを含むセッションが取得される。
ここで、更新後のサーバ処理クラスには上記したように更新後のサーバ処理クラスにおいて定義される処理(サーバ処理)の実行が認可されるユーザが規定された更新判定メソッドが含まれているが、当該更新判定メソッドは、セッションに含まれるサーバ処理インスタンスを更新するか否かを判定するために用いられる。
ステップS34の処理が実行されると、更新判定メソッド呼び出し部104bは、ステップS33において読み込まれた更新後のサーバ処理クラスに含まれる更新判定メソッドを呼び出し、当該更新判定メソッドの返り値に基づいてステップS34において取得されたセッションに含まれるサーバ処理インスタンスを更新するか否かを判定する。更新判定メソッドは、セッションに含まれるユーザロールを引数として呼び出され、当該ユーザロールに応じた値を返り値とする。すなわち、サーバ処理インスタンスを更新するか否かの判定結果は、サーバ装置10とのセッションが生成されているクライアント装置20を使用するユーザ(の役割)によって異なる。
ステップS34において取得されたセッションに含まれるサーバ処理インスタンスを更新すると判定された場合、サーバ処理更新部104cは、ステップS33において読み込まれた更新後のサーバ処理クラスからサーバ処理インスタンスを生成する。サーバ処理更新部104cは、ステップS34において取得されたセッションに含まれるサーバ処理インスタンスを、更新後のサーバ処理クラスから生成されたサーバ処理インスタンスに更新する(ステップS35)。
一方、ステップS34において取得されたセッションに含まれるサーバ処理インスタンスを更新しないと判定された場合、セッション破棄部104dは、当該セッションを破棄する(ステップS36)。
上記した図7において説明した処理によれば、サーバ処理クラスの更新に従って、更新後のサーバ処理クラスにおいて定義される処理の実行が認可されるユーザのセッションについてはサーバ処理インスタンスを更新し、当該処理の実行が認可されてないユーザのセッションについては破棄することができる。
次に、図8のフローチャートを参照して、上記したサーバ処理クラスが更新された際のサーバ処理部104の処理手順の一例について説明する。
上記したようにクラスロード部101からサーバ処理クラスが更新されたことが通知された場合、サーバ処理部104は、セッション取得部104aを呼び出す。セッション取得部104aは、更新後のサーバ処理クラスのクラス名から更新前のサーバ処理クラスを特定し、セッション管理部103によって管理されているセッションの中から、当該更新前のサーバ処理クラスから生成されたサーバ処理インスタンス(更新対象となるサーバ処理インスタンス)を含むセッションを取得する(ステップS41)。ステップS41においては複数のセッションが取得されても構わない。
なお、本実施形態においては更新前のサーバ処理クラスと更新後のサーバ処理クラスとが同一のクラス名であるものとして説明しているが、更新前のサーバ処理クラスと更新後のサーバ処理クラスとでクラス名が異なる場合には、当該更新前のサーバ処理クラス及び更新後のサーバ処理クラスの各々のクラス名を対応づけて保持するテーブルを予め用意しておく構成とすることも可能である。このような構成によれば、セッション取得部104aは、テーブルを参照して更新後のサーバ処理クラスから更新前のサーバ処理クラスを特定することができる。
次に、ステップS41において取得されたセッションの各々について以下のステップS42~S45の処理が実行される。ここでは、ステップS42~S45の処理が実行されるセッションを対象セッションと称する。
まず、サーバ処理部104は、更新判定メソッド呼び出し部104bを呼び出す。更新判定メソッド呼び出し部104bは、対象セッションに含まれるユーザロールに基づいて更新判定処理を実行する(ステップS42)。更新判定処理においては対象セッションに含まれるサーバ処理インスタンスを更新するか否かが判定され、当該更新判定処理の処理結果には更新及び破棄が含まれる。なお、更新判定処理の詳細については後述する。
ステップS42の処理が実行されると、当該ステップS42における更新判定処理の処理結果が更新であるか否かが判定される(ステップS43)。
更新判定処理の処理結果が更新であると判定された場合(ステップS43のYES)、サーバ処理部104は、サーバ処理更新部104cを呼び出す。サーバ処理更新部104cは、更新後のサーバ処理クラスからサーバ処理インスタンスを生成し、対象セッションに含まれるサーバ処理インスタンス(更新前のサーバ処理インスタンス)を当該生成されたサーバ処理インスタンス(更新後のサーバ処理インスタンス)に更新する(ステップS44)。
一方、更新判定処理の処理結果が更新でない(つまり、破棄である)と判定された場合(ステップS43のNO)、サーバ処理部104は、セッション破棄部104dを呼び出す。セッション破棄部104dは、対象セッションを破棄する処理(以下、セッション破棄処理と表記)を実行する(ステップS45)。なお、セッション破棄処理の詳細については後述する。
ステップS44またはS45の処理が実行されると、ステップS41において取得された全てのセッションについて上記したステップS42~S45の処理が実行されたか否かが判定される(ステップS46)。
全てのセッションについて処理が実行されていないと判定された場合(ステップS46のNO)、上記したステップS42に戻って処理が繰り返される。この場合、ステップS42~S45の処理が実行されていないセッションを対象セッションとして当該処理が実行される。
一方、全てのセッションについて処理が実行されたと判定された場合(ステップS46のYES)、処理は終了される。
次に、図9のフローチャートを参照して、上記した更新判定処理(図8に示すステップS42の処理)の処理手順の一例について説明する。この更新判定処理は、サーバ処理部104に含まれる更新判定メソッド呼び出し部104bによって実行される。
ここで、Webサーバプログラムに含まれるサーバ処理クラスには、上記した更新判定メソッド及び当該更新判定メソッド以外のメソッドを含む複数のメソッドが含まれているものとする。
更新判定処理において、更新判定メソッド呼び出し部104bは、更新後のサーバ処理クラスに含まれるメソッドの一覧を取得する(ステップS51)。
次に、更新判定メソッド呼び出し部104bは、ステップS51において取得されたメソッドの一覧のうちの1つのメソッド(以下、対象メソッドと表記)が更新判定メソッドであるか否かを判定する(ステップS52)。なお、対象メソッドが更新判定メソッドであるか否かは、例えば対象メソッドに更新判定メソッドを示すアノテーションが付与されているか否かによって判定されればよい。
対象メソッドが更新判定メソッドでないと判定された場合(ステップS52のNO)、ステップS51において取得されたメソッド一覧のうちの他のメソッドを対象メソッドとしてステップS52の処理が繰り返される。このようにステップS51において取得されたメソッドの一覧に対してステップS52の処理が繰り返されることによって、更新判定メソッド呼び出し部104bは、メソッドの一覧から更新判定メソッドを探索する。
対象メソッドが更新判定メソッドであると判定された場合(ステップS52のYES)、更新判定メソッド呼び出し部104bは、図8において説明した更新判定処理の対象となるセッション(対象セッション)に含まれるユーザロールを引数として当該対象メソッド(更新判定メソッド)を呼び出す(ステップS53)。
ここで、図10及び図11を参照して、サーバ処理クラスに含まれる更新判定メソッドの一例について説明する。
図10は例えば更新前のサーバ処理クラス200を示しており、当該更新前のサーバ処理クラス200には、更新判定メソッド201が含まれている。
図10に示す更新判定メソッド201は、サーバ処理クラス200(から生成されるサーバ処理インスタンス)が全てのユーザが利用可能(更新可能)であることを表している。すなわち、例えばユーザロール「管理ユーザ」を引数として更新判定メソッド201が呼び出された場合、当該更新判定メソッド201の処理結果(返り値)としては「更新」が返される。同様に、例えばユーザロール「一般ユーザ」を引数として更新判定メソッド201が呼び出された場合、当該更新判定メソッド201の処理結果(返り値)としては「更新」が返される。ここでは、ユーザロール「管理ユーザ」及び「一般ユーザ」についてのみ説明したが、他のユーザロールを引数とした場合であっても同様である。
一方、図11は例えば更新後のサーバ処理クラス210を示しており、当該更新後のサーバ処理クラス210には、更新判定メソッド211が含まれている。
図11に示す更新判定メソッド211は、サーバ処理クラス210は管理ユーザのみが利用可能(更新可能)であることを表している。すなわち、例えばユーザロール「管理ユーザ」を引数として更新判定メソッド211が呼び出された場合、当該更新判定メソッド211の処理結果(返り値)としては「更新」が返される。一方、例えばユーザロール「一般ユーザ」を引数として更新判定メソッド211が呼び出された場合、当該更新判定メソッド211の処理結果(返り値)としては「破棄」が返される。ここでは、ユーザロール「管理ユーザ」及び「一般ユーザ」についてのみ説明したが、「管理ユーザ」以外のユーザロールを引数とした場合には、ユーザロール「一般ユーザ」を引数とした場合と同様に「破棄」が返される。
なお、図10に示す更新判定メソッド201において記述されている「全ユーザ利用可能」及び図11に示す更新判定メソッド211において記述されている「管理者のみ」はコメント(注釈)である。
また、図12は、更新判定メソッド201または211の引数UserRoleに渡される値の一例を示している。図12に示す例では、例えばユーザロールが「一般ユーザ」である場合の引数(つまり、更新判定メソッドの引数UserRoleに渡される値)は「user」であり、ユーザロールが「管理ユーザ」である場合の引数は「admin」である。
図9に示すステップS53の処理が実行されると、更新判定メソッドの処理結果が返却されて更新判定処理は終了される(ステップS54)。図8に示すステップS43の処理においては、このステップS54において返却された更新判定メソッドの処理結果(返り値)が更新判定処理の処理結果として用いられる。
なお、図9においては示されていないが、ステップS51において取得されたメソッドの一覧の中に更新判定メソッドが存在しない場合には「更新」が返却されるものとする。
次に、図13のフローチャートを参照して、上記したセッション破棄処理(図8に示すステップS45の処理)の処理手順の一例について説明する。このセッション破棄処理は、サーバ処理部104に含まれるセッション破棄部104dによって実行される。
なお、セッション破棄処理は、図8において説明した対象セッションに対して実行されるものとする。また、対象セッションにおいてサーバ装置10と通信を実行するクライアント装置20を便宜的に対象クライアント装置20と称する。
この場合、セッション破棄部104dは、対象クライアント装置20とのステートフルプロトコルに基づく通信(ステートフルプロトコル通信)を切断する(ステップS61)。なお、ステップS61の処理が実行された場合、対象クライアント装置20はサーバ装置10との例えばWebSocketによる通信をすることはできないが、当該サーバ装置10及び対象クライアント装置20間のHTTPセッションは維持される。
次に、セッション破棄部104dは、対象セッションに含まれる通信インスタンス(ステートフルプロトコル通信インスタンス)を破棄する(ステップS62)。
また、セッション破棄部104dは、対象セッションに含まれるサーバ処理インスタンスを破棄する(ステップS63)。
ステップS63の処理が実行されると、セッション破棄部104dは、対象セッションを破棄する(ステップS64)。
ステップS64の処理が実行された場合、対象セッションはセッション管理部103による管理から外れ、対象クライアント装置20(を使用するユーザ)による対象セッションにおいて実行される処理(サーバ処理)の利用が停止される。
以下、本実施形態に係るサーバ装置10の動作について具体的に説明する。ここでは、図14に示すように、Webサーバプログラムには全ユーザが利用可能なサーバ処理クラスAが含まれており、セッション管理部103において、当該サーバ処理クラスAから生成されたサーバ処理Aインスタンスを含む管理ユーザのセッション及び一般ユーザのセッションが管理されているものとする。サーバ処理クラスA及び当該サーバ処理クラスAに含まれる更新判定メソッドは、例えば上記した図10に示すサーバ処理クラス200及び更新判定メソッド201であるものとする。
なお、サーバ装置10と管理ユーザのクライアント装置20との間でセッションを開始する際の処理及びサーバ装置10と一般ユーザのクライアント装置20との間でセッションを開始する際の処理については上記した図6等で説明した通りであるため、ここではその詳しい説明を省略する。
ここで、Webサーバプログラムに含まれるサーバ処理クラスA(更新前のサーバ処理クラス)がサーバ処理クラスA´(更新後のサーバ処理クラス)に更新された場合を想定する。また、サーバ処理クラスA´及び当該サーバ処理クラスA´に含まれる更新判定メソッドは、例えば上記した図11に示すサーバ処理クラス210及び更新判定メソッド211であるものとする。
サーバ処理クラスAがサーバ処理クラスA´に更新された場合、サーバ処理クラスAから生成されたサーバ処理Aインスタンスを含む管理ユーザのセッション及び一般ユーザのセッションがセッション取得部104aによって取得される。
サーバ処理クラスA´に含まれる更新判定メソッドによれば、サーバ処理クラスA´は管理ユーザのみが利用可能であるため、管理ユーザのセッションを対象セッションとした更新判定処理においては「更新」が返される。この場合、図15に示すように、管理ユーザのセッションに含まれるサーバ処理Aインスタンスは、サーバ処理クラスA´から生成されるサーバ処理A´インスタンスに更新される。
一方、サーバ処理クラスA´に含まれる更新判定メソッドによれば、一般ユーザのセッションを対象セッションとした更新判定処理においては「破棄」が返される。この場合、図16に示すように、一般ユーザのセッションは破棄される。
ここで、上記したようにサーバ処理クラスAがサーバ処理クラスA´に更新される際のクライアント装置20の表示画面例について具体的に説明する。
ここでは、上記したようにWebアプリケーションシステム1(Webアプリケーションプログラム)がコールセンターに導入され、当該コールセンターのオペレータの状況を管理するためにWebアプリケーションプログラムが利用される場合を想定する。以下の説明では、一般ユーザをオペレータ、管理ユーザを当該オペレータの状況を管理する管理者とする。なお、セッション管理部103においては、サーバ処理Aインスタンスを含むオペレータのセッション及び管理者のセッションが管理されているものとする。
まず、図17は、サーバ処理Aインスタンスの処理が実行されることによってオペレータのクライアント装置20に表示される画面の一例を示す。
図17に示すように、オペレータのクライアント装置20に表示される画面300には、当該オペレータの各業務内容に応じたボタン300a~300cが配置されている。クライアント装置20を使用するオペレータは、このような画面300上でボタン300a~300cを選択(指定)することによって、当該ボタンに応じた業務を遂行することができる。
次に、図18は、サーバ処理Aインスタンスが実行されることによって管理者のクライアント装置20に表示される画面の一例を示す。
図18に示すように、管理者のクライアント装置20に表示される画面310には、当該管理者が管理すべきオペレータの座席表が配置されている。なお、図18に示す画面310において、1つのブロックは1人のオペレータの座席を表し、当該ブロック内に表示されている記号は当該オペレータの現在の状況を示している。
具体的には、画面310中のブロック310aには記号「○」が表示されている。この場合、ブロック310aによって表される座席のオペレータが上記した図17に示す画面300中の例えばボタン300aに対応する業務中であることが示されている。
また、画面310中のブロック310bには記号「×」が表示されている。この場合、ブロック310bによって表される座席のオペレータが上記した図17に示す画面300中の例えばボタン300bに対応する業務中であることが示されている。
更に、画面310中のブロック310bには記号「△」が表示されている。この場合、ブロック310cによって表される座席のオペレータが上記した図17に示す画面300中の例えばボタン300cに対応する業務中であることが示されている。
管理者は、このような画面310を参照することによって、各オペレータの状況を把握することが可能となる。
ここで、上記したサーバ処理クラスAがサーバ処理クラスA´に更新された場合を想定する。
この場合、管理者(管理ユーザ)のセッションは維持された状態で、当該セッションに含まれるサーバ処理Aインスタンスはサーバ処理A´インスタンスに更新される。このため、図18に示す管理者のクライアント装置20の画面310は継続して表示される。
一方、サーバ処理クラスAがサーバ処理クラスA´に更新されると、オペレータ(一般ユーザ)のセッションは破棄される。この場合、サーバ装置10とオペレータのクライアント装置20とのWebSocketによる通信は一旦切断され、図17に示すオペレータのクライアント装置20の画面300は、図19に示す画面301に遷移する。図19に示す例では、オペレータのクライアント装置20の画面301には例えば「Webサーバプログラムが更新されました。」等のテキスト(メッセージ)が表示されている。
図19に示す画面301が表示されると、オペレータのクライアント装置20の画面は、例えば図20に示す画面(ログイン画面)302に遷移する。図20に示すログイン画面は、図5に示すステップS2の処理の後に表示されるログイン画面と同様である。このログイン画面が表示された後に図5に示すステップS3~S11の処理が実行された場合には、新たに生成されたセッションにおいてサーバ処理(例えば、サーバ処理Aインスタンスとは異なるサーバ処理Bインスタンスの処理)が実行され、オペレータのクライアント装置20には、例えば図21に示すような画面303が表示され得る。
これによれば、サーバ処理A´インスタンスの処理は管理者のみが利用可能であり、当該サーバ処理A´インスタンスの処理をオペレータが利用することはできない。また、オペレータのセッションが破棄されることにより、オペレータは、サーバ処理Aインスタンスの処理の利用も停止される。
なお、上記したようにサーバ装置10とオペレータのクライアント装置20との間のセッションが破棄された場合には、クライアント装置20の画面は、サーバ装置10との新たなセッションを生成するための画面(例えば、ログイン画面等)に遷移する。これにより、サーバ装置10とクライアント装置20との間のセッションが新たに開始され、当該開始されたセッションにおいて実行されたサーバ処理の結果がクライアント装置20に表示されることになる。
上記したように本実施形態においては、ユーザロール(ユーザに関するユーザ情報)を含むクライアント装置20との間のセッションを管理し、Webサーバプログラム(サーバ処理クラス)が更新された場合に、当該管理されているセッションに含まれるユーザロールに基づいて当該セッションにおいて実行される処理を更新するかを判定し、処理を更新しないと判定された場合には当該セッションを破棄する。
具体的には、Webサーバプログラムはサーバ装置10で実行される処理内容が定義されたサーバ処理クラスを含み、セッション管理部103において管理されるサーバ装置10とクライアント装置20との間のセッションはサーバ処理クラスから生成されたサーバ処理インスタンスを含む。Webサーバプログラムに含まれるサーバ処理クラスが更新された場合、管理されているセッションに含まれるサーバ処理インスタンスを更新するかが判定される。本実施形態においては、サーバ処理インスタンスを更新しないと判定された場合にはセッションを破棄し、サーバ処理インスタンスを更新すると判定された場合にはセッションに含まれるサーバ処理インスタンスを更新後のサーバ処理クラスから生成されたサーバ処理インスタンスに更新する。
また、本実施形態においては、管理されるセッションはサーバ装置10とクライアント装置20との間でステートフルプロトコル通信を実行するための通信インスタンスを含み、当該セッションを破棄する場合には、サーバ装置10とクライアント装置20との間の通信を切断し、当該セッションに含まれる通信インスタンス及びサーバ処理インスタンスが破棄される。
更に、本実施形態においては、ユーザロールが引数として渡される更新判定メソッドの返り値が破棄である場合にサーバ処理インスタンスを更新しないと判定し、当該更新判定メソッドの返り値が更新である場合にサーバ処理インスタンスを更新すると判定する。
本実施形態においては、このような構成により、Webサーバプログラムが更新された際に、当該更新されたWebサーバプログラムに基づく処理の実行が認可されていないユーザのサーバ処理(サーバ処理インスタンスで実行中の処理)を停止するようなことが可能となり、Webサーバプログラム(Webアプリケーションプログラム)の更新に対して柔軟に対応することができる。
ここで、本実施形態に対する比較例として、例えば予め用意された動的に変更可能な更新条件から更新の可否を判定し、当該更新が可である場合にサーバ処理インスタンスを更新するような構成が考えられる。しかしながら、このような第1比較例では、例えば更新が不可と判定されたユーザのサーバ処理を停止することはできない。
また、本実施形態に対する別の比較例として、例えば更新対象のプログラムに付与された状態チェック関数を更新時に呼び出すような構成が考えられるが、このような比較例であってもユーザのサーバ処理を停止することはできない。
これに対して、本実施形態では、更新後のWebサーバプログラムに基づく処理が認可されていないユーザのセッションを破棄することによって当該ユーザのサーバ処理を停止することが可能となる。
なお、上記した比較例における更新条件を用いる場合には、当該更新条件の構成要素に解釈不可能な変更が発生した場合に更新の可否を判定する機能部を更新する必要があり、更新可否の判定にプログラマブルな仕組みが必要となる。
更に、例えば更新対象の中に1つでも更新不可と判定されるもの場合に更新を中断(アボート)するような比較例も考えられるが、このような比較例では、本実施形態において説明したようにユーザのセッション別にサーバ処理インスタンスの更新またはセッションの破棄を行うことはできない。
また、本実施形態は、例えばWebSocketのような持続的にコネクションを確立した上で通信を行うようなシステムに適用されることで、更新されたWebサーバプログラムに基づく処理の実行が認可されているユーザであれば当該更新中であってもサーバ装置10との接続が維持され、継続してクライアント装置20を使用することが可能となる。
なお、本実施形態においては、ユーザに関するユーザ情報としてユーザロール(ユーザの役割)を用いるものとして説明したが、ユーザ情報はユーザロール以外であってもよく、クライアント装置20を使用するユーザを識別可能な情報(例えば、ユーザID等)であればよい。この場合には、本実施形態において説明したようにユーザロール(ユーザの役割)毎ではなく、例えばユーザ毎にサーバ処理を更新するか否かを判定することが可能となる。
また、本実施形態は、サーバ装置10において実行されるプログラムが更新された際に、クライアント装置20とのセッションにおいて実行される処理を更新するか否かを判定し、当該処理を更新しないと判定された場合に当該セッションを破棄するものであれば適用可能であり、本実施形態において説明したWebアプリケーションシステム以外に、例えばブロックチェーン技術またはその他の技術を用いるシステムに適用されても構わない。
(第2実施形態)
次に、第2実施形態について説明する。図22は、本実施形態に係るサーバ装置の主として機能構成の一例を示すブロック図である。なお、前述した図4と同様の部分には同一参照符号を付してその詳しい説明を省略する。ここでは、図4と異なる部分について主に述べる。なお、本実施形態に係るサーバ装置のシステム構成は、前述した第1実施形態と同様である。
前述した第1実施形態においてはユーザロール(ユーザ情報)が管理ユーザ及び一般ユーザであるものとして主に説明したが、本実施形態においては、ユーザロールが当該管理ユーザの代行としての役割を有する代行ユーザである場合を想定している点で前述した第1実施形態とは異なる。
図22に示すように、本実施形態に係るサーバ装置10は、サーバ処理部111を含む。サーバ処理部111は、前述した第1実施形態における更新判定メソッド呼び出し部104bに代えて更新判定メソッド呼び出し部111aを含む。
更新判定メソッド呼び出し部111aは、セッション管理部103によって取得されたセッションに含まれるユーザロールを引数として更新後のサーバ処理クラスに含まれる更新判定メソッドを呼び出す。更新判定メソッド呼び出し部111aは、呼び出された更新判定メソッドの返り値に基づいて、セッション取得部104aによって取得されたセッションにおいて実行されるサーバ処理を更新するか否かを判定する更新判定処理を実行する。
ここで、前述した第1実施形態における更新判定メソッド呼び出し部104bによる更新判定処理の結果には更新及び破棄が含まれるものとして説明したが、本実施形態における更新判定メソッド呼び出し部111aによる更新判定処理の結果には更新、破棄及び維持が含まれるものとする。
なお、本実施形態においてセッション管理部103によって管理されるセッションのうち、代行ユーザのセッション(サーバ装置10と代行ユーザのクライアント装置20との間のセッション)に含まれるユーザロールは「代行ユーザ」である。
以下、本実施形態に係るサーバ装置10の動作について説明する。ここでは、サーバ装置10に含まれるサーバ処理部111の動作について主に説明する。
図23のフローチャートを参照して、サーバ処理クラスが更新された際のサーバ処理部111の処理手順の一例について説明する。
前述した第1実施形態において説明したようにクラスロード部101からサーバ処理クラスが更新されたことが通知された場合、前述した図8に示すステップS41の処理に相当するステップS71の処理が実行される。
次に、ステップS71において取得されたセッションの各々について以下のステップS72~S76の処理が実行される。ここでは、ステップS72~S76の処理が実行されるセッションを対象セッションと称する。
まず、サーバ処理部111は、更新判定メソッド呼び出し部111aを呼び出す。更新判定メソッド呼び出し部111aは、対象セッションに含まれるユーザロールに基づいて、更新判定処理を実行する(ステップS72)。この更新判定処理においては対象セッションに含まれるサーバ処理インスタンスを更新するか否かが判定されるが、当該更新判定処理の処理結果には、上記したように更新、破棄及び維持が含まれる。なお、更新判定処理の詳細については後述する。
ステップS72の処理が実行されると、当該ステップS72における更新判定処理の処理結果が更新であるか否かが判定される(ステップS73)。
更新判定処理の処理結果が更新であると判定された場合(ステップS73のYES)、前述した図8に示すステップS44の処理に相当するステップS74の処理が実行される。
一方、更新判定処理の処理結果が更新でないと判定された場合(ステップS73のNO)、当該更新判定処理の処理結果が破棄であるか否かが判定される(ステップS75)。
更新判定処理の処理結果が破棄であると判定された場合(ステップS75のYES)、前述した図8に示すステップS45の処理に相当するステップS76の処理が実行される。
なお、ステップS74またはS76の処理が実行されると、前述した図8に示すステップS46の処理に相当するステップS77の処理が実行される。
一方、更新判定処理の処理結果が破棄でない(つまり、維持である)と判定された場合(ステップS75のNO)、ステップS74及びS76等の処理は実行されない。すなわち、対象セッションは維持され、ステップS77の処理が実行される。
次に、上記した更新判定処理(図23に示すステップS72の処理)の処理手順の一例について説明する。ここでは、前述した図9を用いて説明する。なお、更新判定処理は、サーバ処理部111に含まれる更新判定メソッド呼び出し部111aによって実行される。
本実施形態における更新判定処理においては、前述した第1実施形態において説明した図9に示すステップS51及びS52の処理が実行される。
ステップS52において対象メソッドが更新判定メソッドであると判定された場合(ステップS52のYES)、更新判定メソッド呼び出し部111aは、図23において説明した更新判定処理の対象となるセッション(対象セッション)に含まれるユーザロールを引数として当該対象メソッド(更新判定メソッド)を呼び出す(ステップS53)。
ここで、図24を参照して、本実施形態におけるサーバ処理クラスに含まれる更新判定メソッドの一例について説明する。
図24は例えば更新後のサーバ処理クラス400を示しており、当該更新後のサーバ処理クラス400には、更新判定メソッド401が含まれている。
図24に示す更新判定メソッド401は、サーバ処理クラス400(から生成されるサーバ処理インスタンス)は管理ユーザのみが利用可能(更新可能)であり、代行ユーザについては更新前のサーバ処理クラスが維持され、一般ユーザについてはサーバ処理クラス400が利用不可であることを表している。なお、図24に示す更新判定メソッド401において記述されている「管理ユーザのみ更新」はコメント(注釈)である。
すなわち、例えばユーザロール「管理ユーザ」を引数として更新判定メソッド401が呼び出された場合、当該更新判定メソッド401の処理結果(返り値)としては「更新」が返される。同様に、例えばユーザロール「代行ユーザ」を引数として更新判定メソッド401が呼び出された場合、当該更新判定メソッド401の処理結果(返り値)としては「維持」が返される。また、例えばユーザロール「一般ユーザ」を引数として更新判定メソッド401が呼び出された場合、当該更新判定メソッド401の処理結果(返り値)としては「破棄」が返される。
なお、図25は、更新判定メソッド401の返り値の型の一例を示している。また、図26は、更新判定メソッド401の引数UserRoleに渡される値の一例を示している。
図9に示すステップS53の処理が実行されると、更新判定メソッドの処理結果が返却されて更新判定処理は終了される(ステップS54)。図23に示すステップS73以降の処理においては、このステップS54において返却された更新判定メソッドの処理結果が更新判定処理の処理結果として用いられる。
以下、本実施形態に係るサーバ装置10の動作について具体的に説明する。ここでは、図27に示すように、Webサーバプログラムには全ユーザが利用可能なサーバ処理クラスAが含まれており、セッション管理部103において、当該サーバ処理クラスAから生成されたサーバ処理Aインスタンスを含む管理ユーザのセッション及び代行ユーザのセッションが管理されているものとする。サーバ処理クラスA及び当該サーバ処理クラスAに含まれる更新判定メソッドは、例えば前述した図10に示すサーバ処理クラス200及び更新判定メソッド201であるものとする。
ここで、Webサーバプログラムに含まれるサーバ処理クラスA(更新前のサーバ処理クラス)がサーバ処理クラスA´(更新後のサーバ処理クラス)に更新された場合を想定する。また、サーバ処理クラスA´及び当該サーバ処理クラスA´に含まれる更新判定メソッドは、例えば上記した図24に示すサーバ処理クラス400及び更新判定メソッド401であるものとする。
サーバ処理クラスAがサーバ処理クラスA´に更新された場合、サーバ処理クラスAから生成されたサーバ処理Aインスタンスを含む管理ユーザのセッション及び代行ユーザのセッションがセッション取得部104aによって取得される。
サーバ処理クラスA´に含まれる更新判定メソッドによれば、代行ユーザのセッションを対象セッションとした更新判定処理においては「維持」が返される。この場合、図28に示すように、代行ユーザのセッションに含まれるサーバ処理Aインスタンスは更新されず、当該代行ユーザのセッションは維持される。
なお、サーバ処理クラスA´に含まれる更新判定メソッドによれば、管理ユーザのセッションを対象セッションとした更新判定処理においては「更新」が返される。この場合、管理ユーザのセッションに含まれるサーバ処理Aインスタンスは、サーバ処理クラスA´から生成されるサーバ処理A´インスタンスに更新される。
図27及び図28においては省略されているが、例えばセッション管理部103によって一般ユーザのセッションが管理されているものとすると、当該一般ユーザのセッションは破棄される。
上記したように本実施形態においては、更新判定メソッドの処理結果(返り値)が更新、維持及び破棄を含み、更新判定メソッドからの返り値が破棄である場合にはセッションを破棄し、当該更新判定メソッドからの返り値が更新である場合にはセッションに含まれるサーバ処理インスタンスを更新し、当該更新判定メソッドの返り値が維持である場合にはセッションは維持される。
ここで、例えば管理ユーザの代行としての役割を有する代行ユーザに関しては、例えば更新後のサーバ処理クラスは利用不可であるものの、現在実行中のサーバ処理の利用を停止する(つまり、更新前のサーバ処理インスタンスを含むセッションを破棄する)ことは好ましくないような場合がある。
これに対して、本実施形態においては、上記した構成により、例えばクライアント装置20を使用するユーザのユーザロール(ユーザ情報)が代行ユーザである場合には当該ユーザのセッションを維持することが可能となる。
すなわち、本実施形態においては、更新判定メソッドの返り値を多値とすることで、サーバ処理インスタンスの更新、維持及び破棄を選択することができ、Webサーバプログラム(Webアプリケーションプログラム)の更新に対してより柔軟に対応することができる。
(第3実施形態)
次に、第3実施形態について説明する。なお、本実施形態に係るサーバ装置10の機能構成については、前述した第1実施形態と同様であるため、適宜、図4等を用いて説明する。
前述した第1実施形態においてはサーバ処理クラス(更新後のサーバ処理クラス)に1つの更新判定メソッドが含まれているものとして説明したが、本実施形態は、サーバ処理クラスに複数の更新判定メソッドが含まれている点で当該第1実施形態とは異なる。
まず、図29を参照して、本実施形態におけるサーバ処理クラスに含まれる更新判定メソッドの一例について説明する。
図29は例えば更新後のサーバ処理クラス500を示しており、当該サーバ処理クラス500には、複数の更新判定メソッド501及び502が含まれている。
図29に示す更新判定メソッド501は、サーバ処理クラス500(から生成されるサーバ処理インスタンス)は管理ユーザのみが利用可能(更新可能)であることを表している。なお、この更新判定メソッド501は前述した図10に示す更新判定メソッド201と同様であるため、ここではその詳しい説明を省略する。
一方、図29に示す更新判定メソッド502は、例えばサーバ処理クラス500のクラス名及びユーザロールを外部の認証認可装置に渡して、当該認証認可装置から認可情報を取得することを表している。なお、この認証認可装置から取得される認可情報は、前述した更新判定メソッドの処理結果と同様に、例えば更新及び破棄を含むものである。
なお、図29に示す更新判定メソッド501において記述されている「管理ユーザのみ」及び更新判定メソッド502において記述されている「外部の認証認可装置から認可情報を取得」はコメント(注釈)である。また、図29においては省略されているが、例えばサーバ処理クラス500には複数の更新判定メソッドの存在を示唆するアノテーションが付与されていてもよい。
次に、図30のフローチャートを参照して、本実施形態において更新判定メソッド呼び出し部104bによって実行される更新判定処理の処理手順の一例について説明する。
なお、本実施形態において、Webサーバプログラムに含まれるサーバ処理クラスには、複数の更新判定メソッド及び当該更新判定メソッド以外のメソッドを含む複数のメソッドが含まれているものとする。
まず、前述した図9に示すステップS51の処理に相当するステップS81の処理が実行される。
ここで、本実施形態における更新判定処理においては、ステップS51において取得されたメソッドの一覧に含まれるメソッドの各々についてステップS82以降の処理が実行される。以下、ステップS82以降の処理の対象となるメソッドを対象メソッドと称する。
この場合、更新判定メソッド呼び出し部104bは、対象メソッドが更新判定メソッドであるか否かを判定する(ステップS82)。なお、ステップS82の処理は、前述した図9に示すステップS52の処理と同様の処理である。
ステップS82において対象メソッドが更新判定メソッドであると判定された場合(ステップS82のYES)、更新判定メソッド呼び出し部104bは、更新判定処理の対象となるセッション(対象セッション)に含まれるユーザロールを引数として当該対象メソッド(更新判定メソッド)を呼び出す(ステップS83)。
ステップS83の処理が実行されると、当該ステップS83において呼び出された対象メソッドの処理結果(返り値)が返される。この対象メソッドの処理結果は、更新及び破棄を含む。
この場合、更新判定メソッド呼び出し部104bは、対象メソッドの処理結果が更新であるか否かを判定する(ステップS84)。
対象メソッドの処理結果が更新であると判定された場合(ステップS84のYES)、上記したステップS81において取得されたメソッドの一覧に含まれる全てのメソッドについて上記したステップS82以降の処理が実行されたか否かが判定される(ステップS85)。
全てのメソッドについて処理が実行されていないと判定された場合(ステップS85のNO)、上記したステップS82に戻って処理が繰り返される。この場合、ステップS82以降の処理が実行されていないメソッドを対象メソッドとして処理が実行される。
一方、全てのメソッドについて処理が実行されたと判定された場合(ステップS85のYES)、更新判定処理の処理結果として「更新」が返却されて更新判定処理は終了される(ステップS86)。
一方、ステップS84において対象メソッドの処理結果が更新でない(つまり、破棄である)と判定された場合(ステップS84のNO)、更新判定処理の処理結果として「破棄」が返却されて更新判定処理は終了される。
なお、ステップS82において対象メソッドが更新判定メソッドでないと判定された場合(ステップS82のNO)、ステップS85の処理が実行される。
上記した図30に示す更新判定処理によれば、更新後のサーバ処理クラスに含まれる更新判定メソッドの処理結果の全てが更新である場合には更新判定処理の処理結果として「更新」が返却され、当該更新判定メソッドの処理結果のうちの少なくとも1つが破棄である場合には更新判定処理の処理結果として「破棄」が返却される。
なお、図30に示す更新判定処理が終了した後は、前述した図8に示すステップS43以降の処理が実行されればよい。
以下、本実施形態に係るサーバ装置10の動作について具体的に説明する。ここでは、例えば前述した図14に示すように、Webサーバプログラムには全ユーザが利用可能なサーバ処理クラスAが含まれており、セッション管理部103において、当該サーバ処理クラスAから生成されたサーバ処理Aインスタンスを含む管理ユーザのセッション及び一般ユーザのセッションが管理されているものとする。サーバ処理クラスA及び当該サーバ処理クラスAに含まれる更新判定メソッドは、例えば前述した図10に示すサーバ処理クラス200及び更新判定メソッド201であるものとする。
ここで、Webサーバプログラムに含まれるサーバ処理クラスA(更新前のサーバ処理クラス)がサーバ処理クラスA´(更新後のサーバ処理クラス)に更新された場合を想定する。なお、サーバ処理クラスA´は例えば上記した図29に示すサーバ処理クラス500であり、当該サーバ処理クラスA´に含まれる複数の更新判定メソッドは当該図29に示す更新判定メソッド501及び502であるものとする。
サーバ処理クラスAがサーバ処理クラスA´に更新された場合、サーバ処理クラスAから生成されたサーバ処理Aインスタンスを含む管理ユーザのセッション及び代行ユーザのセッションがセッション取得部104aによって取得される。
上記したようにサーバ処理クラスA´には例えば2つの更新判定メソッドが含まれるが、例えば管理ユーザのセッションを対象セッションとして上記した更新判定処理が実行された場合における当該2つの更新判定メソッドの処理結果が両方とも更新である場合を想定する。この場合、管理ユーザのセッションを対象セッションとした更新判定処理においては「更新」が返却される。これによれば、図31に示すように、管理ユーザのセッションに含まれるサーバ処理Aインスタンスは、サーバ処理クラスA´から生成されるサーバ処理A´インスタンスに更新される。
一方、例えば一般ユーザのセッションを対象セッションとして上記した更新判定処理が実行された場合における2つの更新判定メソッドの処理結果のうちの一方が破棄である場合を想定する。この場合、一般ユーザのセッションを対象セッションとした更新判定処理においては「破棄」が返却される。これによれば、図32に示すように、一般ユーザのセッションは破棄される。
上記したように本実施形態においては、サーバ処理クラスに含まれる複数の更新判定メソッドの返り値(処理結果)のうちの少なくとも1つが破棄である場合にはセッションを破棄し、当該複数の更新判定メソッドの返り値のうちの全てが更新である場合にはセッションに含まれるサーバ処理インスタンスを更新する。
本実施形態においては、このような構成により、複数の更新判定メソッドを用いることにより複雑な更新判定処理を行うことが可能となり、Webサーバプログラム(Webアプリケーションプログラム)の更新に対してより柔軟に対応することができる。
ところで、本実施形態においては、前述した第1実施形態に係る構成においてサーバ処理クラスに複数の更新判定メソッドが含まれている場合について説明したが、前述した第2実施形態に係る構成においてサーバ処理クラスに複数の更新判定メソッドが含まれていても構わない。
以下、図33のフローチャートを参照して、第2実施形態に係る構成においてサーバ処理クラスに複数の更新判定メソッドが含まれている場合における更新判定処理の処理手順の一例について説明する。なお、図33に示す処理は、前述した第2実施形態において説明した更新判定メソッド呼び出し部111aによって実行されるものとして説明する。
まず、上記した図30に示されるステップS81~S83の処理に相当するステップS91~S93の処理が実行される。
ここで、ステップS93の処理が実行されると当該ステップS93において呼び出された対象メソッドの処理結果(返り値)が返されるが、この対象メソッドの処理結果は前述した第2実施形態において説明したように更新、破棄及び維持を含む。
この場合、更新判定メソッド呼び出し部111aは、対象メソッドの処理結果が破棄であるか否かを判定する(ステップS94)。
対象メソッドの処理結果が破棄でないと判定された場合(ステップS94のNO)、更新判定メソッド呼び出し部111aは、当該対象メソッドの処理結果を配列に保存(格納)する(ステップS95)。
ステップS95の処理が実行されると、ステップS91において取得されたメソッドの一覧に含まれる全てのメソッドについて上記したステップS92以降の処理が実行されたか否かが判定される(ステップS96)。
全てのメソッドについて処理が実行されていないと判定された場合(ステップS96のNO)、上記したステップS92に戻って処理が繰り返される。この場合、ステップS92以降の処理が実行されていないメソッドを対象メソッドとして処理が実行される。
一方、全てのメソッドについて処理が実行されたと判定された場合(ステップS96のYES)、更新判定メソッド呼び出し部111aは、配列に保存された複数の更新判定メソッドの処理結果の全てが更新であるか否かを判定する(ステップS97)。
複数の更新判定メソッドの処理結果の全てが更新であると判定された場合(ステップS97のYES)、更新判定処理の処理結果として「更新」が返却されて更新判定処理は終了される。
一方、複数の更新判定メソッドの処理結果の全てが更新でないと判定された場合(ステップS97のNO)、更新判定処理の処理結果として「維持」が返却されて更新判定処理は終了される。
また、上記したステップS94において対象メソッドの処理結果が破棄であると判定された場合(ステップS94のYES)、更新判定処理の処理結果として「破棄」が返却されて更新判定処理は終了される。
なお、図33に示す更新判定処理が終了した後は、前述した図23に示すステップS73以降の処理が実行されればよい。
上記したように前述した第2実施形態に係る構成においてサーバ処理クラスに複数の更新判定メソッドが含まれている場合には、サーバ処理クラスに含まれる複数の更新判定メソッドの返り値のうちの少なくとも1つが破棄である場合にセッションを破棄し、当該複数の更新判定メソッドの返り値のうちの全てが更新である場合にセッションに含まれるサーバ処理インスタンスを更新する。また、複数の更新判定メソッドの返り値の全てが破棄でなく、かつ、当該返り値のうちの少なくとも1つが維持である場合にセッションは維持される。
すなわち、上記した第2実施形態に係る構成においてサーバ処理クラスに複数の更新判定メソッドが含まれている場合においても、複数の更新判定メソッドを用いることにより複雑な更新判定処理を行うことが可能となり、Webサーバプログラム(Webアプリケーションプログラム)の更新に対してより柔軟に対応することができる。
(第4実施形態)
次に、第4実施形態について説明する。なお、本実施形態に係るサーバ装置10の機能構成等については、前述した第1実施形態と同様であるため、適宜、図4等を用いて説明する。
本実施形態は、外部定義で更新判定メソッドが指定される点で、前述した第1実施形態等とは異なる。
図34は、本実施形態におけるサーバ処理クラスに含まれる更新判定メソッドの一例を示す。図34は例えば更新後のサーバ処理クラス600を示しており、当該サーバ処理クラス600には、前述した図29に示す更新判定メソッド501及び502に相当する更新判定メソッド601及び602が含まれている。なお、更新判定メソッド601及び602は、「@OnReload」の記述がない点で更新判定メソッド501及び502とは異なる。
ここで、本実施形態においては、図35に示すように、サーバ処理クラス(例えば、更新後のサーバ処理クラスA´)中の更新判定メソッドを指定するための外部定義(ファイル)がサーバ装置10内に予め用意されているものとする。なお、図36は、外部定義の一例を示す。図36に示す外部定義はデータ記述言語であるJSON(JavaScript(登録商標) Object Notation)で記述されているが、他の言語で記述されていてもよい。
本実施形態において、更新判定メソッド呼び出し部104bは、例えば前述した図9に示す更新判定処理を実行する場合、当該図9に示すステップS53の処理の前に外部定義を読み込むことによって、当該ステップS53において外部定義で指定されている更新判断メソッドを呼び出すものとする。
なお、ここでは外部定義がサーバ装置10内に予め用意されているものとして説明したが、外部定義は、図37に示すように、例えばサーバ装置10とは異なる外部装置内に予め用意されており、当該外部装置から読み込まれるようにしても構わない。
上記したように本実施形態においては、サーバ処理クラスに含まれる更新判定メソッドを指定するための外部定義ファイルを読み込み、当該外部定義ファイルで指定される更新判定メソッドを用いて更新判定処理を実行する。
本実施形態においては、このような構成により、更新判定メソッドを外部定義から指定することによってソースコードに対する依存性を低減した更新判断メソッドの指定が可能となる。
なお、本実施形態においては、前述した第1実施形態に係る構成において外部定義が読み込まれる場合について説明したが、前述した第2または第3実施形態に係る構成において外部定義が読み込まれる構成としても構わない。
以上述べた少なくとも1つの実施形態によれば、プログラムの更新に対して柔軟に対応することが可能なサーバ装置、方法及びプログラムを提供することができる。
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれると同様に、特許請求の範囲に記載された発明とその均等の範囲に含まれるものである。