情報処理装置、情報処理方法およびプログラム
【課題】サーバ側の処理において処理の分岐が起こった際に、ユーザの指示に従った処理をサーバにおいて行うことが可能な仕組みを提供すること。
【解決手段】外部サーバから送信される、該外部サーバにおいて分岐処理が発生した旨の通知を受信し、前記外部サーバにおいて発生した分岐処理に対するユーザの指示を受け付け、受け付けた前記ユーザの指示を、前記分岐処理が発生した前記外部サーバに送信する。
【解決手段】外部サーバから送信される、該外部サーバにおいて分岐処理が発生した旨の通知を受信し、前記外部サーバにおいて発生した分岐処理に対するユーザの指示を受け付け、受け付けた前記ユーザの指示を、前記分岐処理が発生した前記外部サーバに送信する。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、クライアント端末とサーバとの通信に関するものである。
【背景技術】
【0002】
近年、インターネットとPCの普及、およびWebブラウザ上で複雑な処理の実行を可能とするアーキテクチャの実用化により、場所や時間の制約なく利用でき特別なソフトウェアのインストールが不要なWebブラウザ型アプリケーションの利用が広がっている。
【0003】
Webブラウザ型アプリケーションが登場した当初はブラウザ側では簡単な処理すら実行することは出来なかったが、Flash(登録商標)やAjax(Asynchronous Javascript(登録商標)+XML)の登場により、現在では複雑な処理であってもブラウザ上で実行したいという要望に応えるアーキテクチャが考案されている。
【0004】
しかしながら、一般的にWebブラウザ側処理で実行する複雑な処理といえば即時性が要求される画面部品(例えばグラフやチャート)の書き替えのことを指すことが多く、サーバ側処理の制御に介入することまでは考えられていない。
【0005】
サーバ側処理を制御するには、まず、サーバ側処理の状況を監視する必要がある。特許文献1によればブラウザ側処理からサーバ側処理の状況を監視する技術としてポーリングを利用した技術が開示されている。
【0006】
また、サーバ側処理の状況を通知する技術として、サーバ側処理にて任意のタイミングでサーバ側からクライアント側にイベントを通知するサーバプッシュ技術が特許文献2で開示されている。
【先行技術文献】
【特許文献】
【0007】
【特許文献1】特開2003−308295号公報
【特許文献2】特開2009−146430号公報
【発明の概要】
【発明が解決しようとする課題】
【0008】
しかし、ポーリングによる問い合わせは、問い合わせのタイミングがサーバ側処理で分岐が発生したタイミングと一致しなければタイムラグが発生することになり、サーバ側処理で分岐が発生したことを即座に認識することはできない。また、サーバ側処理で分岐が起こっていない場合のポーリングはその行為自体が無駄となる。
【0009】
また、特許文献2においてはブラウザ上の画面部品が必要とするデータの変化をサーバ側からブラウザ上の画面部品に通知する手段としてサーバプッシュを利用するに留まり、サーバ側処理で処理の分岐が発生したことをブラウザ側に通知し、ブラウザ側からの指示に応じて処理を行うことまでは考えられていない。
【0010】
そこで、本発明の目的は、サーバ側の処理において処理の分岐が起こった際に、ユーザの指示に従った処理をサーバにおいて行うことが可能な仕組みを提供することにある。
【課題を解決するための手段】
【0011】
本発明は、外部サーバと通信可能な情報処理装置であって、前記外部サーバから送信される、該外部サーバにおいて分岐処理が発生した旨の通知を受信する受信手段と、前記外部サーバにおいて発生した分岐処理に対するユーザの指示を受け付ける受付手段と、前記受付手段により受け付けた前記ユーザの指示を、前記分岐処理が発生した前記外部サーバに送信する送信手段と、を備えることを特徴とする。
【0012】
また本発明は、外部サーバと通信可能な情報処理装置における情報処理方法であって、受信手段が、前記外部サーバから送信される、該外部サーバにおいて分岐処理が発生した旨の通知を受信する受信ステップと、受付手段が、前記外部サーバにおいて発生した分岐処理に対するユーザの指示を受け付ける受付ステップと、送信手段が、前記受付ステップにより受け付けた前記ユーザの指示を、前記分岐処理が発生した前記外部サーバに送信する送信ステップとを備えることを特徴とする。
【0013】
また本発明は、外部サーバと通信可能な情報処理装置において実行されるプログラムであって、前記情報処理装置を前記外部サーバから送信される、該外部サーバにおいて分岐処理が発生した旨の通知を受信する受信手段と、前記外部サーバにおいて発生した分岐処理に対するユーザの指示を受け付ける受付手段と、前記受付手段により受け付けた前記ユーザの指示を、前記分岐処理が発生した前記外部サーバに送信する送信手段として機能させることを特徴とする。
【発明の効果】
【0014】
本発明によれば、サーバ側の処理において処理の分岐が起こった際に、ユーザの指示に従った処理をサーバにおいて行うことが可能となる。
【図面の簡単な説明】
【0015】
【図1】本発明の実施例における情報処理システムの構成を示す図である。
【図2】クライアントPC107、Webサーバ101、アプリケーションサーバ102、データベースサーバ103の基本構成を示すブロック図である。
【図3】クライアントPC107、Webサーバ101、アプリケーションサーバ102、データベースサーバ103の機能構成を示す図である。
【図4】本実施例における画面を、クライアントPC107が備えるディスプレイ装置に表示させる処理のうち、クライアントPC107が行う処理を示したフローチャートである。
【図5】本実施例における画面を、クライアントPC107が備えるディスプレイ装置に表示させる処理のうち、Webサーバ101、アプリケーションサーバ102、データベースサーバ103が行う処理を示したフローチャートである。
【図6】ユーザによるサーバ上のデータの編集にかかる処理において、クライアント側の処理を示すフローチャートである。
【図7】ユーザによるサーバ上のデータの編集にかかる処理において、サーバ側の処理を示すフローチャートである。
【図8】本発明の実施例における処理の具体例を示す図である。
【図9】本発明の実施例におけるテーブル編集に利用するJSONデータの書式を示す図である。
【図10】本発明の実施例におけるテーブル更新に利用するJASONデータの記述例を示す図である。
【図11】本発明の実施例におけるテーブル更新を依頼するHTTPリクエストのボディ部の記述例を示す図である。
【発明を実施するための形態】
【0016】
以下、本発明を適用した好適な実施例を、添付図面を参照しながら詳細に説明する。
【0017】
図1は、実施例におけるWebアプリケーションを実現するシステム構成の一例を示す図である。
【0018】
101はWebサーバであって、クライアントPC107の要求に応じて、蓄積しているHTML文書や画像等の表示を返すサービスが稼動する。
【0019】
102はアプリケーションサーバであって、分岐処理を含むサーバ側処理はここで実行される。
【0020】
103はデータベースサーバであって、アプリケーションで永続化すべきデータを記憶している。
【0021】
104はWebサーバ101とアプリケーションサーバ102とを相互にデータ通信可能に接続するためのネットワークである。
【0022】
105はアプリケーションサーバ102とデータベースサーバ103とを相互にデータ通信可能に接続するためのネットワークである。
【0023】
106はWebサーバ101とクライアントPC107−1、107−2、…、107−Nとを相互にデータ通信可能に接続するためのネットワークである
【0024】
なお、Webサーバ101、アプリケーションサーバ102及びデータベースサーバ103はネットワーク上に分散していても、分散していなくても、どちらの構成であっても構わない。
【0025】
107−1、107−2、…、107−Nは同じWebアプリケーションを使用するクライアントPCである。
【0026】
次に、図2を用いて、図1に示したWebサーバ101、アプリケーションサーバ102、データベースサーバ103、クライアントPC107のハードウェア構成について説明する。
【0027】
図2は、Webサーバ101、アプリケーションサーバ102、データベースサーバ103、クライアントPC107に適用可能な情報処理装置のハードウェア構成例を示すブロック図である。CPU201は、システムバス204に接続される各デバイスやコントローラを統括的に制御する。
【0028】
図2に示すように、Webサーバ101、アプリケーションサーバ102、データベースサーバ103、クライアントPC107は、システムバス204を介してCPU(Central Processing Unit)201、RAM(Random Access Memory)203、ROM(Read Only Memory)202、入力コントローラ205、ビデオコントローラ206、メモリコントローラ207、通信I/Fコントローラ208等が接続された構成を採る。CPU201は、システムバス204に接続される各デバイスやコントローラを統括的に制御する。
【0029】
また、ROM202あるいは外部メモリ211には、CPU201の制御プログラムであるBIOS(BASIC INPUT / OUTPUT SYSTEM)やオペレーティングシステムプログラム(以下、OS)や、各コンピュータが実行する機能を実現するために必要な後述する各種プログラム等が記憶されている。また、本発明を実施するために必要な情報が外部メモリ211に記憶されている。なお外部メモリ211はデータベースであってもよい。
【0030】
RAM203は、CPU201の主メモリ、ワークエリア等として機能する。CPU201は、処理の実行に際して必要なプログラム等をRAM203にロードして、ロードしたプログラムを実行することで各種動作を実現するものである。
【0031】
また、入力コントローラ(入力C)205は、入力装置209からの入力を制御する。なお、入力装置は、マウス等のポインティングデバイスでもキーボードでもいずれの入力装置であってもよい。
【0032】
ビデオコントローラ(VC)206は、ディスプレイ210等の表示器への表示を制御する。なお、表示器は液晶ディスプレイでもCRTディスプレイでもいずれの表示器でも構わない。これらは必要に応じてユーザが使用するものである。
【0033】
メモリコントローラ(MC)207は、ブートプログラム、ブラウザソフトウエア、各種のアプリケーション、フォントデータ、ユーザファイル、編集ファイル、各種データ等を記憶するハードディスク(HD)やフロッピー(登録商標)ディスク(FD)或いはPCMCIAカードスロットにアダプタを介して接続されるコンパクトフラッシュ(登録商標)等の外部メモリ211へのアクセスを制御する。
【0034】
通信I/Fコントローラ(通信I/FC)208は、ネットワーク(例えば、図1に示したLAN104)を介して、外部機器と接続・通信するものであり、ネットワークでの通信制御処理を実行する。例えば、TCP/IPを用いたインターネット通信等が可能である。
【0035】
なお、CPU201は、例えばRAM203内の表示情報用領域へアウトラインフォントの展開(ラスタライズ)処理を実行することにより、ディスプレイ210上での表示を可能としている。また、CPU201は、ディスプレイ210上に各種操作画面およびマウスカーソル等(不図示)を表示しユーザ指示を可能とする。
【0036】
なお、後述する各処理を実現するためのプログラムは、例えば外部メモリ211に記録されており、必要に応じてRAM203にロードされることによりCPU201によって実行されるものである。さらに、上記プログラムの実行時に用いられる定義ファイルおよび各種情報テーブル等も、外部メモリ211に格納されており、これらについての詳細な説明についても後述する。
【0037】
次に、図3を用いて本実施例における、クライアントPC107、Webサーバ101、アプリケーションサーバ102、データベースサーバ103の機能構成を説明する。
【0038】
10は、マイクロソフト社のインターネットエクスプローラのようなWebブラウザである。Webブラウザ10のプログラムはクライアントPC107が備える記憶領域に記憶されている。
【0039】
20は、Webブラウザ10の外観を表す領域であり、主にURL入力欄21、メニューバー22、ツールバー23及び画面表示部24から構成されている。URLとは、インターネット上のリソース(資源)を特定するための形式的な記号の並びであり、WWWをはじめとするインターネットアプリケーションにおいて提供されるリソースを、主にその所在を表記することで特定する。なお、リソースとは(主にインターネット上の)データやサービスを指す。
【0040】
本実施例ではWebブラウザ10とWebサーバ101間の通信はHTTPという通信規約を使用するものとする。Webブラウザ10が備えるURL入力欄21には「http://ホスト名:ポート番号/ファイル名」という書式で指定する。ここで、Webサーバが稼動するホストのホスト名が解決されない場合はホスト名の代わりにホストのIPアドレスを指定してもかまわない。また、ポート番号とはWebサーバ101のプロセスが利用しているポートを指す。
【0041】
ツールバー23にはユーザが頻繁に使用する機能を起動するボタンが配置されている。ブラウザの操作はメニューバー上のメニュー項目やツールバー上のボタンを介して行う。画面表示部24にはインターネットアプリケーションの画面が表示される。
【0042】
画面表示部24は、JavaScriptにより実装された画面部品パネル25を持ち、さらにそのパネルはデータベースサーバのテーブルを編集するグリッド部品26、グリッド部品の編集結果をデータベースに保存を命ずる更新ボタン27、等のJavaScriptにより実装された画面部品を持つ構成となっている。さらに、グリッド部品26や更新ボタン27はWebサーバのプログラム101−1と非同期通信を行う非同期通信処理部31を備えている。
【0043】
非同期通信処理部31の構成について説明する。非同期通信処理部31は送信部32と受信部33より構成されている。画面部品は送信部31にてJavaScriptのクラスライブラリである「XMLHttpRequest」というクラスを使用することで画面部品からWebサーバ101に非同期通信でHttpリクエストを送ることが出来る。非同期通信で送信したHttpリクエストのレスポンスは受信部33で受け取る。
【0044】
グリッド部品26及び更新ボタン27が備える非同期通信処理部31の利用目的について説明する。グリッド部品26が非同期通信60、61を利用する目的は、画面全体の更新ではなくグリッド部品の単位で書き替えを行うことにより画面全体の更新が引き起こすちらつきを防ぐためである。更新ボタン27が非同期通信60、61を利用する目的は、画面のちらつきを防ぐためだけではなく、サーバ側処理プログラム102−4が行うサーバプッシュを非同期通信が提供する非同期通信61によるコールバック機能により実現するためである。
【0045】
ダイアログ40はその外観に分岐先を選択するボタン41、42等を備え、その内部にはサーバ側ソケット102−4−1と通信するクライアントソケット43を備える。なお、ダイアログ起動スクリプト34、ダイアログ40及びクライアントソケット43は、更新ボタン27と一緒にWebブラウザに取り込まれる。
【0046】
30はJavaScript言語実行エンジンであって、Webブラウザの内部に組み込まれている。
【0047】
101−1はオープンソースソフトウェアのApacheやマイクロソフト社のIIS(Internet Information Server)のようなWebサーバのプログラムである。WebサーバのプログラムはWebサーバ101の記憶領域に記憶されている。なお、Webサーバ101のプログラムは記憶領域に記憶されているWebサーバ101の設定ファイルの内容に従って動作する。Webサーバ101のプログラム101−1はWebブラウザ10から送信されてくるURLを解析し、Webサーバ101のHDDに記憶しているファイルを要求元Webブラウザ10に送信するか、受信したリクエストをアプリケーションサーバ102に転送するかを判断する。本実施例においてはこの判断をファイル名の拡張子の種類より判断している。具体的にはHttpリクエストに含まれるファイル名の拡張子が「do」の場合はサービスと判断し、それ以外の拡張子ではファイルの要求と判断するよう設定した。
【0048】
なお、本実施例におけるWebサーバ101の記憶領域は、HTMLにより記述されている画面の雛形101−2やJavaScriptにより実装された画面部品101−3及びその画面部品が利用するJavaScriptクラスライブラリ101−4をファイル形式で記憶している。HTMLにより記述されている標準画面の雛形データは拡張子がhtmlのファイルに、JavaScriptにより実装された画面部品やJavaScriptクラスライブラリは拡張子がjsのファイルに記憶されている。
【0049】
Webサーバのプログラム101−1は、要求元Webブラウザがファイルを要求していると判断した場合、URLのファイル名をもとに記憶領域を検索し、見つけたファイルを要求元Webブラウザに送信する。
【0050】
Webサーバのプログラム101−1は、要求元がサービスの実行を要求していると判断した場合、Webサーバ101のCPUは受信したリクエストをアプリケーションサーバ102上で稼動するWebアプリケーションサーバのプログラム102−1に転送する。
【0051】
102−1は、Webアプリケーションサーバのプログラムであり、アプリケーションサーバ102の記憶領域に記憶され、アプリケーションサーバ102のCPU201により記憶領域からRAM203にロードされ、実行される。
【0052】
102−1は、サービスプログラムコンテナ(102−2)を持ち、このサービスプログラムコンテナ上でアプリケーションを構成する各種のサービスプログラム(102−3、102−4、…)が稼動する。
【0053】
102−3は、ユーザのHttpリクエストに含まれるサービス名からサービスプログラムを特定するアプリケーションプログラムである。
【0054】
サービスプログラム(102−4、102−5、…)とはアプリケーションの機能を実現する各種のプログラムのことである。このプログラムで分岐判断をユーザに問い合わせる必要が生じたときは非同期通信のコールバック関数を利用してユーザに通知する。この分岐が発生したときサービスプログラムはサーバソケット102−4−1を生成する。
【0055】
102−4−1はサーバソケットであって、ダイアログ40が持つクライアントソケット43からの接続要求に応じ、通信経路を確立する。このサーバソケットはユーザがダイアログにて選択した分岐条件を受信し、受信した値をサービスプログラムに戻す役割を担う。サーバ側処理プログラム102−4はサーバソケットより渡された値に基づき処理を分岐する。
【0056】
103−1は、データベースサーバのプログラムであり、データベースサーバ103の記憶領域に記憶されている。
【0057】
以上が本実施例における、クライアントPC107、Webサーバ101、アプリケーションサーバ102、データベースサーバ103の機能構成についての説明である。
【0058】
図4は、本実施例における画面を、クライアントPC107が備えるディスプレイ装置に表示させる処理のうち、クライアントPC107が行う処理を示したフローチャートである。
【0059】
なお、実施例を説明する画面は例えばマイクロソフト社のExcelライクな操作が出来るグリッド部品やサーバソケットと通信機能やサーバソケットに対する命令を受け付けるダイアログを備えているものとする。また、ユーザはこのグリッド部品を利用してデータベースサーバのテーブルで管理しているデータを編集することが可能である。
【0060】
なお、Webブラウザ10のプログラムはクライアントPC107が備える記憶領域に記憶されている。ユーザからのWebブラウザ10のプログラムの起動命令がCPU201に通知されると、CPU201はWebブラウザ10のプログラムを記憶領域よりRAM203にロードし、実行する。
【0061】
ステップS401では、クライアントPC107のCPU201は、Webブラウザ10が備えるURL入力欄21に対するユーザからの入力を受け付ける。なお、本実施例では、URL入力欄21にWebサーバ101に対してアプリケーションの画面をリクエストするデータの入力が行われたとする。クライアントPC107のCPU201はS101で受け付けたデータをRAM203に記憶するとともにURL入力欄21の表示内容をユーザが入力したデータに変更する。
【0062】
例えば、ユーザにより入力欄21に入力されたURLが「http://serverhost:8080/GetGridEditor.html」である場合は、HTTPリクエストを送信するWebサーバのホスト名が「serverhost」、ポート番号が「8080」、ファイル名が「GetGridEditor.html」となる。
【0063】
ステップS402では、クライアントPC107のCPUは、ユーザによりWebブラウザ10が備えるツールバー23の送信ボタン(不図示)が押下されると、CPU201はRAM203よりWebブラウザ10が備えるURL入力欄21に入力されたURLデータを取り出し、そのURLデータをWebサーバ101に同期通信50を利用して送信する。
【0064】
なお、CPU201がWebサーバ101にサービスをリクエストする場合にはHTTPプロトコルのPOSTメソッドを利用し、リソースの取得をしたい場合にはGETメソッドを使用する。本実施例では、S401においてGetGridEditor.htmlというHTMLファイルの取得を要求しているのでGETメソッドが使われることとなる。
【0065】
ステップS403では、クライアントPC107のCPU201は、Webサーバ101からのレスポンスデータを受信する。そして、クライアントPC107のCPU201はWebサーバ101からのレスポンスデータを同期通信51を利用して受信するとそのレスポンスデータをRAM203に記憶する。
【0066】
本実施例におけるレスポンスデータは、HTML(HyperText Markup Language)で書かれている。HTMLは文書の論理構造や外観の見栄えなどを記述するために使用され、文書の中に画像や音声、動画、スクリプトなどをWebサーバにリクエストする命令や他の文書へのハイパーリンクなどを埋め込むことができる。また、本実施例におけるスクリプトとは特に断りがない限りJavaScriptのことを指す。
【0067】
このレスポンスデータには例えばマイクロソフト社のExcelライクな操作が出来るグリッド部品26や、編集確定をWebサーバ101に通知する更新ボタン27を実装したスクリプトや、そのスクリプトが使用するクラスライブラリをWebサーバ101に要求する命令が記述されている。なお、Webサーバの間で非同期通信を行うスクリプト31、サーバソケットと通信するクライアントソケット43及びクライアントソケットに命令を送るダイアログ40については、画面部品を実装したスクリプトをWebブラウザ10に取り込む際に一緒に取り込まれる。
【0068】
ステップS404では、クライアントPC107のCPU201はRAM203よりWebブラウザ10が受信したレスポンスデータを読み出し、解釈をする。
【0069】
ステップS405では、CPU201はそのレスポンスデータであるHTMLの内容を解釈しながらWebブラウザ10にて画面を構築する。
【0070】
ステップS406では、CPU201はステップS403で受信したレスポンスデータ中に未処理のWebサーバ101へのリクエスト命令が含まれているか否かを判断する。
【0071】
ステップS406で未処理のリクエスト命令が含まれていると判断した場合(S406:Yes)は、処理をステップS402に移行し、CPU201はその命令をリクエストとしてWebサーバ101に送信する。
【0072】
他方、レスポンスデータに未処理の命令が存在しないと判断した場合(S406:No)、CPU201は本フローチャートにおける画面構築処理を終了する。
【0073】
図5は、本実施例における画面を、クライアントPC107が備えるディスプレイ装置に表示させる処理のうち、Webサーバ101、アプリケーションサーバ102、データベースサーバ103が行う処理を示したフローチャートである。
【0074】
なお、Webサーバ101のプログラムはWebサーバ101の記憶領域に記憶され、必要に応じRAM203にロードされ、CPU201によって実行される。
【0075】
ステップS501では、Webサーバ101のCPU201はクライアントPC107から送信されるリクエストを受信する。
【0076】
そして、ステップS502では、Webサーバ101のCPU201は受信したリクエストデータをRAM203に記憶し、当該リクエストデータの解析を行う。
【0077】
ステップS503では、当該リクエストがファイルの要求なのかサービス実行の要求なのかを判断する。なお、Webサーバ101のCPU201がステップS503の判断において用いる規則については、あらかじめWebサーバ101が備える記憶領域にファイル形式で記憶してあるものとする。そして、CPU201はこの設定ファイルを記憶領域よりRAM203にロードし、リクエストデータがファイルの要求なのかサービス実行の要求なのかを判断する際に参照する。なお、本実施例では、リクエストのファイル名の拡張子が「do」の場合はサービス実行の要求であると判断するようファイルに定義したものとする。他方、リクエストのファイル名の拡張子が「html」や「js」などで指定されている場合は、ファイルの要求であると判断する。
【0078】
ステップS503において、リクエストがファイルの要求であると判断すると(ステップS503:NO)、ファイル名に従い記憶領域より当該要求されたファイルを取得し、その内容のデータをRAM203に記憶する(S504)。
【0079】
ステップS505では、Webサーバ101のCPU201はRAM203よりファイルの内容のデータを読み込み、レスポンスデータを作る。
【0080】
そして、Webサーバ101のCPU201はリクエスト元のブラウザに対してレスポンスデータを送信する(S512)。
【0081】
従って、Webサーバ101のCPUが受信したリクエストがhttp://serverhost:8080/GetGridEditor.htmlだとすると、Webサーバ101のCPU201は記憶領域よりGetGridEditor.htmlを取得し、レスポンスデータとしてリクエスト元のクライアントPC107に送信する(S512)。
【0082】
Webサーバ101のCPU201が受信したリクエストに含まれるファイル名の拡張子より、当該リクエストがサービス実行の要求であると判断した場合(S503:Yes)には、Webサーバ101のCPU201は処理をステップS506に移行し、RAM203より取り出したリクエストをWebアプリケーションサーバ102に転送する。
【0083】
すなわち、Webサーバ101のCPUが受信したリクエストがhttp://serverhost:8080/GetGridDataAction.doだとすると、Webサーバ101のCPUは受け取ったリクエストをアプリケーションサーバ102に転送する(S506)。
【0084】
アプリケーションサーバのプログラムはアプリケーションサーバ102の記憶領域に記憶され、必要に応じてRAM203にロードされ、CPU201によって実行される。
【0085】
ステップS507では、アプリケーションサーバ102は、ステップS506でWebサーバ101から転送されたリクエストを受信する。
【0086】
そして、ステップS508では、ステップS507で受信したリクエストに従い実行すべきサービスプログラムを特定する。
【0087】
具体的には、アプリケーションサーバ102の記憶領域にはサービス名から処理プログラムを特定し実行するプログラムが記憶されてあり、また、アプリケーションサーバ102の記憶領域にはサービス名と処理プログラムの関係が定義されているファイルが存在している。アプリケーションサーバ102のCPU201はリクエストの解析より得たサービス名に従い、記憶領域に記憶されているプログラムから実行すべきサービスプログラムを特定する。
【0088】
CPU201は特定されたサービスプログラムを記憶領域からRAM203に読み込み、CPU201は当該サービスプログラムを実行する(ステップS509)。
【0089】
本実施例においては、サービスプログラムの名称がGetGridDataActionとしたので、アプリケーションサーバ102のCPU201はこの名称をもとに検索し、対応するサービスプログラムを特定し実行する。なお、GetGridDataActionと対応するプログラムはデータベースサーバ103のテーブルデータを参照し、その参照結果をレスポンスデータに埋め込みRAM203に記憶する
【0090】
このとき、サービスプログラムはその参照データを一意に特定するキーと最終更新日時の組を同時にRAMに記憶する。参照データを一意に特定するキーと最終更新日時の組をRAMに記憶する理由は、後にRAMに記憶した更新日時とデータベースサーバ上の更新日時を比較し、異なっていればデータが編集されていると判断できるからである。
【0091】
そして、ステップS511では、アプリケーションサーバ102のCPU201はRAM203よりレスポンスデータを取り出し、Webサーバ101に送信する。
【0092】
ステップS512では、Webサーバ101のCPU201は、ステップS505で作成したレスポンスデータまたはステップS511でアプリケーションサーバ102から受信したレスポンスデータをWebブラウザ10に送信する。
【0093】
次に、図6および図7を用いてユーザによるサーバ上のデータ編集に係る処理について説明する。
【0094】
図6は、ユーザによるサーバ上のデータの編集にかかる処理において、クライアント側の処理を示すフローチャートである。
【0095】
ステップS601では、クライアントPC107のCPU201は、Webブラウザ10に表示されるWebアプリケーションの画面が備えるグリッド部品内のセルに対してユーザにより入力されるデータを受け付ける。
【0096】
そして、クライアントPC107のCPU201はS301でセルが受け付けたデータをRAM203に記憶するとともに画面上のセルの表示内容をユーザが入力したデータに変更する。
【0097】
クライアントPC107のCPU201は、ユーザによるアプリケーションの画面が備える更新ボタン27に対する押下を検知すると(S602)、CPU201はグリッド部品内で編集されたセルの値をデータベースサーバ103のテーブルに保存するための処理を開始する(ステップS603)。
【0098】
まず、CPU201はグリッド部品内で編集された値のみを集める。次に、CPUは編集された値を非同期通信60でWebサーバ101に送信するためにHTTPリクエストURLを組み立てRAMに保管する(S603)。
この場合のHTTPリクエストURLは下記の通りとなる。
【0099】
http://serverhost:8080/EditGridDataAction.do?data=図10のデータ
【0100】
つまり、Webサーバ101のホスト名はserverhost、ポート番号は8080、サービス名はEditGridDataAction.do、サービスプログラムに引き渡す引数は「図10のデータ」ということである。サービスプログラムに渡される引数はkey=value のような組で記述する。なお、送信したい組が複数個ある場合にはkey1=value1&key2=value2&…keyN=valueNのように&で区切る。また、URLの中で出現する「?」はサービス名と引数の区切り文字である。
【0101】
本実施例において、テーブルを更新するデータはJSON(JavaScriptObjectNotation)という構造化データ書式で記述し、そのJSONデータの書式は図9のような書式とする。
【0102】
ここで、図9に示す書式により記述されたデータについて説明する。図8の従業員テーブルにおいて社員番号003の「所属」を「研究」から「開発」に変更する場合のJSONデータは図10のように表現する。従業員番号を含めるのは従業員テーブルのレコードを一意に特定できるキーが従業員番号だからである。ここで仮に、図10のデータを送信する際に使うパラメータ名をdataとすると引数は図11のようになる。なお、パラメータ名の意味はサーバ側のサービスプログラムが知っている必要がある。
【0103】
ステップS604では、クライアントPC107のCPU201は、RAM203よりS603にて作成したリクエストメッセージ(図11)を読み出し、非同期通信60でWebサーバ101に送信する。
【0104】
ステップS605では、クライアントPC107のCPU201は、Webサーバ101から非同期通信により送られてくる処理結果を含むレスポンスデータを受信する。なお、受信が確認できない場合(ステップS605:NO)は、受信するまで待機する。
【0105】
ステップS605でレスポンスデータを受信すると、受信したレスポンスデータを解釈する(ステップS606)。
【0106】
クライアントPC107のCPU201は受信したレスポンスデータを参照し、保存を依頼されたデータが保存されたか判断する(S607)。これ以降の処理でサーバソケットと接続が必要になる場合、接続先のホスト名(又はホストのIPアドレス)とポート番号はこのレスポンスデータに含まれている値を利用する。
【0107】
クライアントPC107のCPU201がレスポンスデータを解釈した結果、データの更新が出来ていると判断した場合(ステップS607:YES)は本フローチャートの処理を終了する(END)。
【0108】
クライアントPC107のCPU201がデータの更新が出来ていないと判断した場合(ステップS608:NO)は、さらに、CPU201は更新が出来なかった理由を判断する(S608)。
【0109】
既に更新済みであるために更新が出来なかった場合(ステップS608:既に更新済み)は、処理をステップS610に移行する。他方、それ以外の理由により更新できなかった場合(ステップS608:その他)は、処理をステップS609に移行する。
【0110】
ステップS609では、クライアントPC107のCPU201は更新できない理由をユーザに知らせるダイアログ作り、RAM203に記憶し、Webブラウザ10上に表示する。そして、処理をステップS620に移行する。
【0111】
ステップS610では、クライアントPC107のCPU201はこのまま更新しても良いかをユーザが選択可能なボタンを備えるダイアログを生成しRAM203に記憶する。
【0112】
そして、ステップS611では、クライアントPC107のCPU201はサーバソケット102−4−1と通信するためのクライアントソケット43を生成し、RAM203に記憶する。クライアントソケット43の生成で使用する接続先サーバソケットを特定するホスト名とポート番号はS606で取得した値を利用する。
【0113】
さらにCPU201は既にRAM203に記憶されているダイアログを読み出し、S610にて生成したダイアログとS611にて生成したクライアントソケット43とを関係づける。この処理によりCPU201はダイアログより選ばれた値をクライアントソケット43に渡すことが可能になる。
【0114】
ステップS612では、クライアントPC107のCPU201はクライアントソケット43とサーバソケット102−4−1の間の接続を確立する。
【0115】
クライアントPC107のCPU201はWebブラウザ10上にステップS610で生成したダイアログを表示する(S613)。
【0116】
クライアントPC107のCPU201は常にステップS613で表示したダイアログが備えるボタンに対するユーザの操作を監視し(S614)、クライアントPC107のCPU201はダイアログが備えるボタンに対する操作を検出すると(ステップS615:YES)、検出した操作に基づき送信メッセージを組み立てる。
【0117】
そして、クライアントPC107のCPU201は作成した送信メッセージをクライアントソケット43に詰め込み、メッセージをサーバソケット102−4−1に送信する。
【0118】
なお、クライアントソケット43がサーバソケットに送信するデータについては、ステップS616においてユーザからのダイアログに対する操作がデータの更新である場合(ステップS616:OK)には、クライアントPC107のCPU201はクライアントソケット43にデータ更新のメッセージを詰め込む(ステップS618)。
【0119】
クライアントPC107のCPU201が検出したダイアログに対するユーザの操作がデータ更新の取消しであると判断した場合(ステップS616:NO)は、CPU201はクライアントソケット43にデータ更新の取消しを依頼する(ステップS617)。
【0120】
そして、ステップS619では、クライアントPC107のCPU201はクライアントソケット43を破棄する。
【0121】
ステップS620では、クライアントPC107のCPU201はWebブラウザ10に表示されているダイアログ40を閉じる。
【0122】
図7は、ユーザによるサーバ上のデータの編集にかかる処理において、サーバ側の処理を示すフローチャートである。
【0123】
ステップS701において、Webサーバ101のCPU201はWebブラウザ10からのリクエストを受信する。
【0124】
Webサーバ101のCPU201が受信したリクエストに含まれるファイル名の拡張子より、当該リクエストがサービス実行の要求であると判断した場合、
【0125】
ステップS702では、Webサーバ101のCPU201は受信したリクエストをアプリケーションサーバ102に転送する。
【0126】
なお、リクエストがファイルの要求であると判断した場合は、Webサーバ101のCPU201はRAM203よりファイルの内容のデータを読み込み、レスポンスデータを作成し、リクエスト元のWebブラウザ10に対してレスポンスデータを送信する。
【0127】
ステップS703では、アプリケーションサーバ102のCPU201は、ステップS702で受信したリクエストを解釈し、実行するサービスを特定する。
【0128】
そして、ステップS704では、アプリケーションサーバ102のCPU201は、ステップS703にて特定したサービスプログラムにリクエストのボディ部に含まれているデータを引き渡す。
【0129】
ステップS705では、アプリケーションサーバ102のCPU201はRAM203に記憶されている更新対象のデータが他のデータにより更新されているかを判断する。
【0130】
具体的には、CPU201は更新対象のテーブルデータについて参照したときのタイムスタンプと更新するときのタイムスタンプを比較し、一致していれば更新されていないと判断し、異なっていれば更新されていると判断する。なお、この判断に利用する参照時のテーブルデータのタイムスタンプはセッションに保存されていることとする。
【0131】
ステップS705において更新対象のデータが他のデータにより更新されていると判断した場合(ステップS705:YES)は、処理をステップS706へ移行する。
【0132】
他方、ステップS705において更新対象のデータが更新されていないと判断した場合(ステップS705:NO)は、処理をステップS715へ移行する。
【0133】
ステップS706では、アプリケーションサーバ102のCPU201はサーバソケット102−4−1を作成し、RAM203に記憶する。
【0134】
そしてステップS707では、アプリケーションサーバ102のCPU201は更新対象のデータが既に他のユーザにより更新されている旨をリクエスト元のクライアントPC107にサーバソケットが稼動するホスト名とポート番号とを含めて通知する。
【0135】
ここで、サーバ側処理がクライアント側処理に送信するメッセージについて説明する。本実施例におけるメッセージは、key=value のような組で表現する。なお、送信したい組が複数個ある場合にはkey1=value1&key2=value2&…keyN=valueNのように&で区切る。仮に、更新対象のデータが既に他のユーザにより更新されている旨を表すステータス番号が10で、サーバソケットが稼動するホスト名がappserverhost、ポート番号が1000番であるとすると下記の通り、
【0136】
status=10&serverhost= appserverhost&portnumber=1000
【0137】
となる。なお、keyとして使用したstatus、serverhost、portnumberは任意であるが、クライアント側処理で理解できる文字列にしておく必要がある。
【0138】
ステップS708では、アプリケーションサーバ102のCPU201はサーバソケットに対してクライアントソケット43からの接続を待ち受けるように命じ、クライアントからの接続を受け付ける。
【0139】
ステップS709で、アプリケーションサーバ102のCPU201はサーバソケットにクライアントソケットからの接続が行われたかを判断し、接続が確立したと判断した場合(ステップS709:YES)は、処理をステップS711に移行する。
【0140】
他方、接続が確立していない場合(ステップS709:NO)は、処理をステップS710に移行し、さらにサーバソケットを生成してからの時間がタイムアウト時間に到達したかを判断する。
【0141】
アプリケーションサーバ102のCPU201はサーバソケットを生成してから未接続の時間がタイムアウト時間に到達したと判断した場合(ステップS710:YES)、処理をステップS716へ進める。
【0142】
他方、タイムアウト時間に達していない場合は、処理をステップS708に戻し、クライアントからの接続を待ち受ける。
【0143】
ステップS709において、接続が確立したと判断され(ステップS709:YES)、処理をステップS711に移行すると、アプリケーションサーバ102のCPU201はサーバソケットに対してクライアントソケットからの命令受付を命じる。
【0144】
そして、ステップS712でクライアントからの命令を受信したか否かを判断し、受信したと判断すると(ステップS712:YES)、処理をステップS714に移行する。
【0145】
他方、受信していないと判断すると(ステップS712:NO)、処理をステップS713に移行し、サーバソケットがクライアントソケットからの命令を待ち受けている時間がタイムアウト時間に到達したか否かを判断する。
【0146】
ステップS713においてタイムアウト時間に達したと判断された場合は(ステップS713:YES)、処理をステップS716に移行する。
【0147】
他方、ステップS713においてタイムアウト時間に達していないと判断された場合は(ステップS713:NO)、処理をステップS711に移行し、再度クライアントからの命令を待つ。
【0148】
ステップS714では、アプリケーションサーバ102のCPU201はクライアントソケットからの命令がデータの更新であるか否かを判断する。
【0149】
データの更新であると判断した場合は(ステップS714:YES)、処理をステップS715に移行し、データの更新ではないと判断した場合は(ステップS714:NO)、処理をステップS716に移行する。
【0150】
ステップS715では、アプリケーションサーバ102のCPU201はRAM203に記憶されている更新対象のデータの更新を実行する。
【0151】
そして、ステップ716では、アプリケーションサーバ102のCPU201はRAM203に記憶されているサーバソケットを消去し、処理をS717へ進める。
【0152】
ステップS717では、アプリケーションサーバ102のCPU201はRAM203に記憶されている更新対象データを消去する。
次に、図8に示す具体例を用いて本実施例を説明する。
【0153】
まず、社員番号、氏名、所属、電話番号等を項目に持つ従業員テーブルを編集するブラウザ型Webアプリケーションが存在しているものとする。
【0154】
このブラウザ型Webアプリケーションにおいて異なるユーザがほぼ同時に社員番号002のデータを編集し始めたとする(1)、(2)。次にユーザAが社員番号002の所属を研究から開発に編集する(3)。同時にユーザBは社員番号002の所属を研究から開発に、電話番号を03から06に編集する(4)。ユーザAは編集を確定する(4)。ユーザAが編集を開始してから確定するまで10秒掛かったとする。ユーザBは編集を確定する(6)。ユーザBが編集を開始してから確定するまで20秒掛かったとする。このときサーバ側処理はユーザBが更新しようとしているデータが既にユーザAによって更新されているため、サーバ側処理はこのまま更新処理をしても更新矛盾が起きないかをユーザBに問い合わせる(7)。ユーザBがダイアログで「YES」を選択するとサーバ側処理は更新(8)を継続し、ユーザBが「NO」を選択するとサーバ側処理は更新を行わない。
【0155】
このようにブラウザ型Webアプリケーションでありながらデスクトップアプリケーションを操作しているように処理の制御にユーザが介入することが可能となる。
【0156】
以上説明した処理を行うことにより、サーバ側の処理において処理の分岐が起こった際に、ユーザの指示に従った処理をサーバにおいて行うことが可能となる。
【0157】
以上のように、前述した実施例の機能を実現するプログラムを記録した記録媒体を、システムあるいは装置に供給し、そのシステムあるいは装置のコンピュータ(またはCPUやMPU)が記録媒体に格納されたプログラムを読み出し、実行することによっても本発明の目的が達成されることは言うまでもない。
【0158】
この場合、記録媒体から読み出されたプログラム自体が本発明の新規な機能を実現することになり、そのプログラムを記録した記録媒体は本発明を構成することになる。
【0159】
プログラムを供給するための記録媒体としては、例えば、フレキシブルディスク、ハードディスク、光ディスク、光磁気ディスク、CD−ROM、CD−R、DVD−ROM、磁気テープ、不揮発性のメモリカード、ROM、EEPROM、シリコンディスク等を用いることが出来る。
【0160】
また、コンピュータが読み出したプログラムを実行することにより、前述した実施例の機能が実現されるだけでなく、そのプログラムの指示に基づき、コンピュータ上で稼働しているOS(オペレーティングシステム)等が実際の処理の一部または全部を行い、その処理によって前述した実施例の機能が実現される場合も含まれることは言うまでもない。
【0161】
さらに、記録媒体から読み出されたプログラムが、コンピュータに挿入された機能拡張ボードやコンピュータに接続された機能拡張ユニットに備わるメモリに書き込まれた後、そのプログラムコードの指示に基づき、その機能拡張ボードや機能拡張ユニットに備わるCPU等が実際の処理の一部または全部を行い、その処理によって前述した実施例の機能が実現される場合も含まれることは言うまでもない。
【0162】
また、本発明は、複数の機器から構成されるシステムに適用しても、ひとつの機器から成る装置に適用しても良い。また、本発明は、システムあるいは装置にプログラムを供給することによって達成される場合にも適応できることは言うまでもない。この場合、本発明を達成するためのプログラムを格納した記録媒体を該システムあるいは装置に読み出すことによって、そのシステムあるいは装置が、本発明の効果を享受することが可能となる。
【0163】
さらに、本発明を達成するためのプログラムをネットワーク上のサーバ、データベース等から通信プログラムによりダウンロードして読み出すことによって、そのシステムあるいは装置が、本発明の効果を享受することが可能となる。なお、上述した各実施例およびその変形例を組み合わせた構成も全て本発明に含まれるものである。
【符号の説明】
【0164】
101 Webサーバ
102 アプリケーションサーバ
103 データベースサーバ
104、105、106 ネットワーク
107−1、107−2、107−N クライアントPC
【技術分野】
【0001】
本発明は、クライアント端末とサーバとの通信に関するものである。
【背景技術】
【0002】
近年、インターネットとPCの普及、およびWebブラウザ上で複雑な処理の実行を可能とするアーキテクチャの実用化により、場所や時間の制約なく利用でき特別なソフトウェアのインストールが不要なWebブラウザ型アプリケーションの利用が広がっている。
【0003】
Webブラウザ型アプリケーションが登場した当初はブラウザ側では簡単な処理すら実行することは出来なかったが、Flash(登録商標)やAjax(Asynchronous Javascript(登録商標)+XML)の登場により、現在では複雑な処理であってもブラウザ上で実行したいという要望に応えるアーキテクチャが考案されている。
【0004】
しかしながら、一般的にWebブラウザ側処理で実行する複雑な処理といえば即時性が要求される画面部品(例えばグラフやチャート)の書き替えのことを指すことが多く、サーバ側処理の制御に介入することまでは考えられていない。
【0005】
サーバ側処理を制御するには、まず、サーバ側処理の状況を監視する必要がある。特許文献1によればブラウザ側処理からサーバ側処理の状況を監視する技術としてポーリングを利用した技術が開示されている。
【0006】
また、サーバ側処理の状況を通知する技術として、サーバ側処理にて任意のタイミングでサーバ側からクライアント側にイベントを通知するサーバプッシュ技術が特許文献2で開示されている。
【先行技術文献】
【特許文献】
【0007】
【特許文献1】特開2003−308295号公報
【特許文献2】特開2009−146430号公報
【発明の概要】
【発明が解決しようとする課題】
【0008】
しかし、ポーリングによる問い合わせは、問い合わせのタイミングがサーバ側処理で分岐が発生したタイミングと一致しなければタイムラグが発生することになり、サーバ側処理で分岐が発生したことを即座に認識することはできない。また、サーバ側処理で分岐が起こっていない場合のポーリングはその行為自体が無駄となる。
【0009】
また、特許文献2においてはブラウザ上の画面部品が必要とするデータの変化をサーバ側からブラウザ上の画面部品に通知する手段としてサーバプッシュを利用するに留まり、サーバ側処理で処理の分岐が発生したことをブラウザ側に通知し、ブラウザ側からの指示に応じて処理を行うことまでは考えられていない。
【0010】
そこで、本発明の目的は、サーバ側の処理において処理の分岐が起こった際に、ユーザの指示に従った処理をサーバにおいて行うことが可能な仕組みを提供することにある。
【課題を解決するための手段】
【0011】
本発明は、外部サーバと通信可能な情報処理装置であって、前記外部サーバから送信される、該外部サーバにおいて分岐処理が発生した旨の通知を受信する受信手段と、前記外部サーバにおいて発生した分岐処理に対するユーザの指示を受け付ける受付手段と、前記受付手段により受け付けた前記ユーザの指示を、前記分岐処理が発生した前記外部サーバに送信する送信手段と、を備えることを特徴とする。
【0012】
また本発明は、外部サーバと通信可能な情報処理装置における情報処理方法であって、受信手段が、前記外部サーバから送信される、該外部サーバにおいて分岐処理が発生した旨の通知を受信する受信ステップと、受付手段が、前記外部サーバにおいて発生した分岐処理に対するユーザの指示を受け付ける受付ステップと、送信手段が、前記受付ステップにより受け付けた前記ユーザの指示を、前記分岐処理が発生した前記外部サーバに送信する送信ステップとを備えることを特徴とする。
【0013】
また本発明は、外部サーバと通信可能な情報処理装置において実行されるプログラムであって、前記情報処理装置を前記外部サーバから送信される、該外部サーバにおいて分岐処理が発生した旨の通知を受信する受信手段と、前記外部サーバにおいて発生した分岐処理に対するユーザの指示を受け付ける受付手段と、前記受付手段により受け付けた前記ユーザの指示を、前記分岐処理が発生した前記外部サーバに送信する送信手段として機能させることを特徴とする。
【発明の効果】
【0014】
本発明によれば、サーバ側の処理において処理の分岐が起こった際に、ユーザの指示に従った処理をサーバにおいて行うことが可能となる。
【図面の簡単な説明】
【0015】
【図1】本発明の実施例における情報処理システムの構成を示す図である。
【図2】クライアントPC107、Webサーバ101、アプリケーションサーバ102、データベースサーバ103の基本構成を示すブロック図である。
【図3】クライアントPC107、Webサーバ101、アプリケーションサーバ102、データベースサーバ103の機能構成を示す図である。
【図4】本実施例における画面を、クライアントPC107が備えるディスプレイ装置に表示させる処理のうち、クライアントPC107が行う処理を示したフローチャートである。
【図5】本実施例における画面を、クライアントPC107が備えるディスプレイ装置に表示させる処理のうち、Webサーバ101、アプリケーションサーバ102、データベースサーバ103が行う処理を示したフローチャートである。
【図6】ユーザによるサーバ上のデータの編集にかかる処理において、クライアント側の処理を示すフローチャートである。
【図7】ユーザによるサーバ上のデータの編集にかかる処理において、サーバ側の処理を示すフローチャートである。
【図8】本発明の実施例における処理の具体例を示す図である。
【図9】本発明の実施例におけるテーブル編集に利用するJSONデータの書式を示す図である。
【図10】本発明の実施例におけるテーブル更新に利用するJASONデータの記述例を示す図である。
【図11】本発明の実施例におけるテーブル更新を依頼するHTTPリクエストのボディ部の記述例を示す図である。
【発明を実施するための形態】
【0016】
以下、本発明を適用した好適な実施例を、添付図面を参照しながら詳細に説明する。
【0017】
図1は、実施例におけるWebアプリケーションを実現するシステム構成の一例を示す図である。
【0018】
101はWebサーバであって、クライアントPC107の要求に応じて、蓄積しているHTML文書や画像等の表示を返すサービスが稼動する。
【0019】
102はアプリケーションサーバであって、分岐処理を含むサーバ側処理はここで実行される。
【0020】
103はデータベースサーバであって、アプリケーションで永続化すべきデータを記憶している。
【0021】
104はWebサーバ101とアプリケーションサーバ102とを相互にデータ通信可能に接続するためのネットワークである。
【0022】
105はアプリケーションサーバ102とデータベースサーバ103とを相互にデータ通信可能に接続するためのネットワークである。
【0023】
106はWebサーバ101とクライアントPC107−1、107−2、…、107−Nとを相互にデータ通信可能に接続するためのネットワークである
【0024】
なお、Webサーバ101、アプリケーションサーバ102及びデータベースサーバ103はネットワーク上に分散していても、分散していなくても、どちらの構成であっても構わない。
【0025】
107−1、107−2、…、107−Nは同じWebアプリケーションを使用するクライアントPCである。
【0026】
次に、図2を用いて、図1に示したWebサーバ101、アプリケーションサーバ102、データベースサーバ103、クライアントPC107のハードウェア構成について説明する。
【0027】
図2は、Webサーバ101、アプリケーションサーバ102、データベースサーバ103、クライアントPC107に適用可能な情報処理装置のハードウェア構成例を示すブロック図である。CPU201は、システムバス204に接続される各デバイスやコントローラを統括的に制御する。
【0028】
図2に示すように、Webサーバ101、アプリケーションサーバ102、データベースサーバ103、クライアントPC107は、システムバス204を介してCPU(Central Processing Unit)201、RAM(Random Access Memory)203、ROM(Read Only Memory)202、入力コントローラ205、ビデオコントローラ206、メモリコントローラ207、通信I/Fコントローラ208等が接続された構成を採る。CPU201は、システムバス204に接続される各デバイスやコントローラを統括的に制御する。
【0029】
また、ROM202あるいは外部メモリ211には、CPU201の制御プログラムであるBIOS(BASIC INPUT / OUTPUT SYSTEM)やオペレーティングシステムプログラム(以下、OS)や、各コンピュータが実行する機能を実現するために必要な後述する各種プログラム等が記憶されている。また、本発明を実施するために必要な情報が外部メモリ211に記憶されている。なお外部メモリ211はデータベースであってもよい。
【0030】
RAM203は、CPU201の主メモリ、ワークエリア等として機能する。CPU201は、処理の実行に際して必要なプログラム等をRAM203にロードして、ロードしたプログラムを実行することで各種動作を実現するものである。
【0031】
また、入力コントローラ(入力C)205は、入力装置209からの入力を制御する。なお、入力装置は、マウス等のポインティングデバイスでもキーボードでもいずれの入力装置であってもよい。
【0032】
ビデオコントローラ(VC)206は、ディスプレイ210等の表示器への表示を制御する。なお、表示器は液晶ディスプレイでもCRTディスプレイでもいずれの表示器でも構わない。これらは必要に応じてユーザが使用するものである。
【0033】
メモリコントローラ(MC)207は、ブートプログラム、ブラウザソフトウエア、各種のアプリケーション、フォントデータ、ユーザファイル、編集ファイル、各種データ等を記憶するハードディスク(HD)やフロッピー(登録商標)ディスク(FD)或いはPCMCIAカードスロットにアダプタを介して接続されるコンパクトフラッシュ(登録商標)等の外部メモリ211へのアクセスを制御する。
【0034】
通信I/Fコントローラ(通信I/FC)208は、ネットワーク(例えば、図1に示したLAN104)を介して、外部機器と接続・通信するものであり、ネットワークでの通信制御処理を実行する。例えば、TCP/IPを用いたインターネット通信等が可能である。
【0035】
なお、CPU201は、例えばRAM203内の表示情報用領域へアウトラインフォントの展開(ラスタライズ)処理を実行することにより、ディスプレイ210上での表示を可能としている。また、CPU201は、ディスプレイ210上に各種操作画面およびマウスカーソル等(不図示)を表示しユーザ指示を可能とする。
【0036】
なお、後述する各処理を実現するためのプログラムは、例えば外部メモリ211に記録されており、必要に応じてRAM203にロードされることによりCPU201によって実行されるものである。さらに、上記プログラムの実行時に用いられる定義ファイルおよび各種情報テーブル等も、外部メモリ211に格納されており、これらについての詳細な説明についても後述する。
【0037】
次に、図3を用いて本実施例における、クライアントPC107、Webサーバ101、アプリケーションサーバ102、データベースサーバ103の機能構成を説明する。
【0038】
10は、マイクロソフト社のインターネットエクスプローラのようなWebブラウザである。Webブラウザ10のプログラムはクライアントPC107が備える記憶領域に記憶されている。
【0039】
20は、Webブラウザ10の外観を表す領域であり、主にURL入力欄21、メニューバー22、ツールバー23及び画面表示部24から構成されている。URLとは、インターネット上のリソース(資源)を特定するための形式的な記号の並びであり、WWWをはじめとするインターネットアプリケーションにおいて提供されるリソースを、主にその所在を表記することで特定する。なお、リソースとは(主にインターネット上の)データやサービスを指す。
【0040】
本実施例ではWebブラウザ10とWebサーバ101間の通信はHTTPという通信規約を使用するものとする。Webブラウザ10が備えるURL入力欄21には「http://ホスト名:ポート番号/ファイル名」という書式で指定する。ここで、Webサーバが稼動するホストのホスト名が解決されない場合はホスト名の代わりにホストのIPアドレスを指定してもかまわない。また、ポート番号とはWebサーバ101のプロセスが利用しているポートを指す。
【0041】
ツールバー23にはユーザが頻繁に使用する機能を起動するボタンが配置されている。ブラウザの操作はメニューバー上のメニュー項目やツールバー上のボタンを介して行う。画面表示部24にはインターネットアプリケーションの画面が表示される。
【0042】
画面表示部24は、JavaScriptにより実装された画面部品パネル25を持ち、さらにそのパネルはデータベースサーバのテーブルを編集するグリッド部品26、グリッド部品の編集結果をデータベースに保存を命ずる更新ボタン27、等のJavaScriptにより実装された画面部品を持つ構成となっている。さらに、グリッド部品26や更新ボタン27はWebサーバのプログラム101−1と非同期通信を行う非同期通信処理部31を備えている。
【0043】
非同期通信処理部31の構成について説明する。非同期通信処理部31は送信部32と受信部33より構成されている。画面部品は送信部31にてJavaScriptのクラスライブラリである「XMLHttpRequest」というクラスを使用することで画面部品からWebサーバ101に非同期通信でHttpリクエストを送ることが出来る。非同期通信で送信したHttpリクエストのレスポンスは受信部33で受け取る。
【0044】
グリッド部品26及び更新ボタン27が備える非同期通信処理部31の利用目的について説明する。グリッド部品26が非同期通信60、61を利用する目的は、画面全体の更新ではなくグリッド部品の単位で書き替えを行うことにより画面全体の更新が引き起こすちらつきを防ぐためである。更新ボタン27が非同期通信60、61を利用する目的は、画面のちらつきを防ぐためだけではなく、サーバ側処理プログラム102−4が行うサーバプッシュを非同期通信が提供する非同期通信61によるコールバック機能により実現するためである。
【0045】
ダイアログ40はその外観に分岐先を選択するボタン41、42等を備え、その内部にはサーバ側ソケット102−4−1と通信するクライアントソケット43を備える。なお、ダイアログ起動スクリプト34、ダイアログ40及びクライアントソケット43は、更新ボタン27と一緒にWebブラウザに取り込まれる。
【0046】
30はJavaScript言語実行エンジンであって、Webブラウザの内部に組み込まれている。
【0047】
101−1はオープンソースソフトウェアのApacheやマイクロソフト社のIIS(Internet Information Server)のようなWebサーバのプログラムである。WebサーバのプログラムはWebサーバ101の記憶領域に記憶されている。なお、Webサーバ101のプログラムは記憶領域に記憶されているWebサーバ101の設定ファイルの内容に従って動作する。Webサーバ101のプログラム101−1はWebブラウザ10から送信されてくるURLを解析し、Webサーバ101のHDDに記憶しているファイルを要求元Webブラウザ10に送信するか、受信したリクエストをアプリケーションサーバ102に転送するかを判断する。本実施例においてはこの判断をファイル名の拡張子の種類より判断している。具体的にはHttpリクエストに含まれるファイル名の拡張子が「do」の場合はサービスと判断し、それ以外の拡張子ではファイルの要求と判断するよう設定した。
【0048】
なお、本実施例におけるWebサーバ101の記憶領域は、HTMLにより記述されている画面の雛形101−2やJavaScriptにより実装された画面部品101−3及びその画面部品が利用するJavaScriptクラスライブラリ101−4をファイル形式で記憶している。HTMLにより記述されている標準画面の雛形データは拡張子がhtmlのファイルに、JavaScriptにより実装された画面部品やJavaScriptクラスライブラリは拡張子がjsのファイルに記憶されている。
【0049】
Webサーバのプログラム101−1は、要求元Webブラウザがファイルを要求していると判断した場合、URLのファイル名をもとに記憶領域を検索し、見つけたファイルを要求元Webブラウザに送信する。
【0050】
Webサーバのプログラム101−1は、要求元がサービスの実行を要求していると判断した場合、Webサーバ101のCPUは受信したリクエストをアプリケーションサーバ102上で稼動するWebアプリケーションサーバのプログラム102−1に転送する。
【0051】
102−1は、Webアプリケーションサーバのプログラムであり、アプリケーションサーバ102の記憶領域に記憶され、アプリケーションサーバ102のCPU201により記憶領域からRAM203にロードされ、実行される。
【0052】
102−1は、サービスプログラムコンテナ(102−2)を持ち、このサービスプログラムコンテナ上でアプリケーションを構成する各種のサービスプログラム(102−3、102−4、…)が稼動する。
【0053】
102−3は、ユーザのHttpリクエストに含まれるサービス名からサービスプログラムを特定するアプリケーションプログラムである。
【0054】
サービスプログラム(102−4、102−5、…)とはアプリケーションの機能を実現する各種のプログラムのことである。このプログラムで分岐判断をユーザに問い合わせる必要が生じたときは非同期通信のコールバック関数を利用してユーザに通知する。この分岐が発生したときサービスプログラムはサーバソケット102−4−1を生成する。
【0055】
102−4−1はサーバソケットであって、ダイアログ40が持つクライアントソケット43からの接続要求に応じ、通信経路を確立する。このサーバソケットはユーザがダイアログにて選択した分岐条件を受信し、受信した値をサービスプログラムに戻す役割を担う。サーバ側処理プログラム102−4はサーバソケットより渡された値に基づき処理を分岐する。
【0056】
103−1は、データベースサーバのプログラムであり、データベースサーバ103の記憶領域に記憶されている。
【0057】
以上が本実施例における、クライアントPC107、Webサーバ101、アプリケーションサーバ102、データベースサーバ103の機能構成についての説明である。
【0058】
図4は、本実施例における画面を、クライアントPC107が備えるディスプレイ装置に表示させる処理のうち、クライアントPC107が行う処理を示したフローチャートである。
【0059】
なお、実施例を説明する画面は例えばマイクロソフト社のExcelライクな操作が出来るグリッド部品やサーバソケットと通信機能やサーバソケットに対する命令を受け付けるダイアログを備えているものとする。また、ユーザはこのグリッド部品を利用してデータベースサーバのテーブルで管理しているデータを編集することが可能である。
【0060】
なお、Webブラウザ10のプログラムはクライアントPC107が備える記憶領域に記憶されている。ユーザからのWebブラウザ10のプログラムの起動命令がCPU201に通知されると、CPU201はWebブラウザ10のプログラムを記憶領域よりRAM203にロードし、実行する。
【0061】
ステップS401では、クライアントPC107のCPU201は、Webブラウザ10が備えるURL入力欄21に対するユーザからの入力を受け付ける。なお、本実施例では、URL入力欄21にWebサーバ101に対してアプリケーションの画面をリクエストするデータの入力が行われたとする。クライアントPC107のCPU201はS101で受け付けたデータをRAM203に記憶するとともにURL入力欄21の表示内容をユーザが入力したデータに変更する。
【0062】
例えば、ユーザにより入力欄21に入力されたURLが「http://serverhost:8080/GetGridEditor.html」である場合は、HTTPリクエストを送信するWebサーバのホスト名が「serverhost」、ポート番号が「8080」、ファイル名が「GetGridEditor.html」となる。
【0063】
ステップS402では、クライアントPC107のCPUは、ユーザによりWebブラウザ10が備えるツールバー23の送信ボタン(不図示)が押下されると、CPU201はRAM203よりWebブラウザ10が備えるURL入力欄21に入力されたURLデータを取り出し、そのURLデータをWebサーバ101に同期通信50を利用して送信する。
【0064】
なお、CPU201がWebサーバ101にサービスをリクエストする場合にはHTTPプロトコルのPOSTメソッドを利用し、リソースの取得をしたい場合にはGETメソッドを使用する。本実施例では、S401においてGetGridEditor.htmlというHTMLファイルの取得を要求しているのでGETメソッドが使われることとなる。
【0065】
ステップS403では、クライアントPC107のCPU201は、Webサーバ101からのレスポンスデータを受信する。そして、クライアントPC107のCPU201はWebサーバ101からのレスポンスデータを同期通信51を利用して受信するとそのレスポンスデータをRAM203に記憶する。
【0066】
本実施例におけるレスポンスデータは、HTML(HyperText Markup Language)で書かれている。HTMLは文書の論理構造や外観の見栄えなどを記述するために使用され、文書の中に画像や音声、動画、スクリプトなどをWebサーバにリクエストする命令や他の文書へのハイパーリンクなどを埋め込むことができる。また、本実施例におけるスクリプトとは特に断りがない限りJavaScriptのことを指す。
【0067】
このレスポンスデータには例えばマイクロソフト社のExcelライクな操作が出来るグリッド部品26や、編集確定をWebサーバ101に通知する更新ボタン27を実装したスクリプトや、そのスクリプトが使用するクラスライブラリをWebサーバ101に要求する命令が記述されている。なお、Webサーバの間で非同期通信を行うスクリプト31、サーバソケットと通信するクライアントソケット43及びクライアントソケットに命令を送るダイアログ40については、画面部品を実装したスクリプトをWebブラウザ10に取り込む際に一緒に取り込まれる。
【0068】
ステップS404では、クライアントPC107のCPU201はRAM203よりWebブラウザ10が受信したレスポンスデータを読み出し、解釈をする。
【0069】
ステップS405では、CPU201はそのレスポンスデータであるHTMLの内容を解釈しながらWebブラウザ10にて画面を構築する。
【0070】
ステップS406では、CPU201はステップS403で受信したレスポンスデータ中に未処理のWebサーバ101へのリクエスト命令が含まれているか否かを判断する。
【0071】
ステップS406で未処理のリクエスト命令が含まれていると判断した場合(S406:Yes)は、処理をステップS402に移行し、CPU201はその命令をリクエストとしてWebサーバ101に送信する。
【0072】
他方、レスポンスデータに未処理の命令が存在しないと判断した場合(S406:No)、CPU201は本フローチャートにおける画面構築処理を終了する。
【0073】
図5は、本実施例における画面を、クライアントPC107が備えるディスプレイ装置に表示させる処理のうち、Webサーバ101、アプリケーションサーバ102、データベースサーバ103が行う処理を示したフローチャートである。
【0074】
なお、Webサーバ101のプログラムはWebサーバ101の記憶領域に記憶され、必要に応じRAM203にロードされ、CPU201によって実行される。
【0075】
ステップS501では、Webサーバ101のCPU201はクライアントPC107から送信されるリクエストを受信する。
【0076】
そして、ステップS502では、Webサーバ101のCPU201は受信したリクエストデータをRAM203に記憶し、当該リクエストデータの解析を行う。
【0077】
ステップS503では、当該リクエストがファイルの要求なのかサービス実行の要求なのかを判断する。なお、Webサーバ101のCPU201がステップS503の判断において用いる規則については、あらかじめWebサーバ101が備える記憶領域にファイル形式で記憶してあるものとする。そして、CPU201はこの設定ファイルを記憶領域よりRAM203にロードし、リクエストデータがファイルの要求なのかサービス実行の要求なのかを判断する際に参照する。なお、本実施例では、リクエストのファイル名の拡張子が「do」の場合はサービス実行の要求であると判断するようファイルに定義したものとする。他方、リクエストのファイル名の拡張子が「html」や「js」などで指定されている場合は、ファイルの要求であると判断する。
【0078】
ステップS503において、リクエストがファイルの要求であると判断すると(ステップS503:NO)、ファイル名に従い記憶領域より当該要求されたファイルを取得し、その内容のデータをRAM203に記憶する(S504)。
【0079】
ステップS505では、Webサーバ101のCPU201はRAM203よりファイルの内容のデータを読み込み、レスポンスデータを作る。
【0080】
そして、Webサーバ101のCPU201はリクエスト元のブラウザに対してレスポンスデータを送信する(S512)。
【0081】
従って、Webサーバ101のCPUが受信したリクエストがhttp://serverhost:8080/GetGridEditor.htmlだとすると、Webサーバ101のCPU201は記憶領域よりGetGridEditor.htmlを取得し、レスポンスデータとしてリクエスト元のクライアントPC107に送信する(S512)。
【0082】
Webサーバ101のCPU201が受信したリクエストに含まれるファイル名の拡張子より、当該リクエストがサービス実行の要求であると判断した場合(S503:Yes)には、Webサーバ101のCPU201は処理をステップS506に移行し、RAM203より取り出したリクエストをWebアプリケーションサーバ102に転送する。
【0083】
すなわち、Webサーバ101のCPUが受信したリクエストがhttp://serverhost:8080/GetGridDataAction.doだとすると、Webサーバ101のCPUは受け取ったリクエストをアプリケーションサーバ102に転送する(S506)。
【0084】
アプリケーションサーバのプログラムはアプリケーションサーバ102の記憶領域に記憶され、必要に応じてRAM203にロードされ、CPU201によって実行される。
【0085】
ステップS507では、アプリケーションサーバ102は、ステップS506でWebサーバ101から転送されたリクエストを受信する。
【0086】
そして、ステップS508では、ステップS507で受信したリクエストに従い実行すべきサービスプログラムを特定する。
【0087】
具体的には、アプリケーションサーバ102の記憶領域にはサービス名から処理プログラムを特定し実行するプログラムが記憶されてあり、また、アプリケーションサーバ102の記憶領域にはサービス名と処理プログラムの関係が定義されているファイルが存在している。アプリケーションサーバ102のCPU201はリクエストの解析より得たサービス名に従い、記憶領域に記憶されているプログラムから実行すべきサービスプログラムを特定する。
【0088】
CPU201は特定されたサービスプログラムを記憶領域からRAM203に読み込み、CPU201は当該サービスプログラムを実行する(ステップS509)。
【0089】
本実施例においては、サービスプログラムの名称がGetGridDataActionとしたので、アプリケーションサーバ102のCPU201はこの名称をもとに検索し、対応するサービスプログラムを特定し実行する。なお、GetGridDataActionと対応するプログラムはデータベースサーバ103のテーブルデータを参照し、その参照結果をレスポンスデータに埋め込みRAM203に記憶する
【0090】
このとき、サービスプログラムはその参照データを一意に特定するキーと最終更新日時の組を同時にRAMに記憶する。参照データを一意に特定するキーと最終更新日時の組をRAMに記憶する理由は、後にRAMに記憶した更新日時とデータベースサーバ上の更新日時を比較し、異なっていればデータが編集されていると判断できるからである。
【0091】
そして、ステップS511では、アプリケーションサーバ102のCPU201はRAM203よりレスポンスデータを取り出し、Webサーバ101に送信する。
【0092】
ステップS512では、Webサーバ101のCPU201は、ステップS505で作成したレスポンスデータまたはステップS511でアプリケーションサーバ102から受信したレスポンスデータをWebブラウザ10に送信する。
【0093】
次に、図6および図7を用いてユーザによるサーバ上のデータ編集に係る処理について説明する。
【0094】
図6は、ユーザによるサーバ上のデータの編集にかかる処理において、クライアント側の処理を示すフローチャートである。
【0095】
ステップS601では、クライアントPC107のCPU201は、Webブラウザ10に表示されるWebアプリケーションの画面が備えるグリッド部品内のセルに対してユーザにより入力されるデータを受け付ける。
【0096】
そして、クライアントPC107のCPU201はS301でセルが受け付けたデータをRAM203に記憶するとともに画面上のセルの表示内容をユーザが入力したデータに変更する。
【0097】
クライアントPC107のCPU201は、ユーザによるアプリケーションの画面が備える更新ボタン27に対する押下を検知すると(S602)、CPU201はグリッド部品内で編集されたセルの値をデータベースサーバ103のテーブルに保存するための処理を開始する(ステップS603)。
【0098】
まず、CPU201はグリッド部品内で編集された値のみを集める。次に、CPUは編集された値を非同期通信60でWebサーバ101に送信するためにHTTPリクエストURLを組み立てRAMに保管する(S603)。
この場合のHTTPリクエストURLは下記の通りとなる。
【0099】
http://serverhost:8080/EditGridDataAction.do?data=図10のデータ
【0100】
つまり、Webサーバ101のホスト名はserverhost、ポート番号は8080、サービス名はEditGridDataAction.do、サービスプログラムに引き渡す引数は「図10のデータ」ということである。サービスプログラムに渡される引数はkey=value のような組で記述する。なお、送信したい組が複数個ある場合にはkey1=value1&key2=value2&…keyN=valueNのように&で区切る。また、URLの中で出現する「?」はサービス名と引数の区切り文字である。
【0101】
本実施例において、テーブルを更新するデータはJSON(JavaScriptObjectNotation)という構造化データ書式で記述し、そのJSONデータの書式は図9のような書式とする。
【0102】
ここで、図9に示す書式により記述されたデータについて説明する。図8の従業員テーブルにおいて社員番号003の「所属」を「研究」から「開発」に変更する場合のJSONデータは図10のように表現する。従業員番号を含めるのは従業員テーブルのレコードを一意に特定できるキーが従業員番号だからである。ここで仮に、図10のデータを送信する際に使うパラメータ名をdataとすると引数は図11のようになる。なお、パラメータ名の意味はサーバ側のサービスプログラムが知っている必要がある。
【0103】
ステップS604では、クライアントPC107のCPU201は、RAM203よりS603にて作成したリクエストメッセージ(図11)を読み出し、非同期通信60でWebサーバ101に送信する。
【0104】
ステップS605では、クライアントPC107のCPU201は、Webサーバ101から非同期通信により送られてくる処理結果を含むレスポンスデータを受信する。なお、受信が確認できない場合(ステップS605:NO)は、受信するまで待機する。
【0105】
ステップS605でレスポンスデータを受信すると、受信したレスポンスデータを解釈する(ステップS606)。
【0106】
クライアントPC107のCPU201は受信したレスポンスデータを参照し、保存を依頼されたデータが保存されたか判断する(S607)。これ以降の処理でサーバソケットと接続が必要になる場合、接続先のホスト名(又はホストのIPアドレス)とポート番号はこのレスポンスデータに含まれている値を利用する。
【0107】
クライアントPC107のCPU201がレスポンスデータを解釈した結果、データの更新が出来ていると判断した場合(ステップS607:YES)は本フローチャートの処理を終了する(END)。
【0108】
クライアントPC107のCPU201がデータの更新が出来ていないと判断した場合(ステップS608:NO)は、さらに、CPU201は更新が出来なかった理由を判断する(S608)。
【0109】
既に更新済みであるために更新が出来なかった場合(ステップS608:既に更新済み)は、処理をステップS610に移行する。他方、それ以外の理由により更新できなかった場合(ステップS608:その他)は、処理をステップS609に移行する。
【0110】
ステップS609では、クライアントPC107のCPU201は更新できない理由をユーザに知らせるダイアログ作り、RAM203に記憶し、Webブラウザ10上に表示する。そして、処理をステップS620に移行する。
【0111】
ステップS610では、クライアントPC107のCPU201はこのまま更新しても良いかをユーザが選択可能なボタンを備えるダイアログを生成しRAM203に記憶する。
【0112】
そして、ステップS611では、クライアントPC107のCPU201はサーバソケット102−4−1と通信するためのクライアントソケット43を生成し、RAM203に記憶する。クライアントソケット43の生成で使用する接続先サーバソケットを特定するホスト名とポート番号はS606で取得した値を利用する。
【0113】
さらにCPU201は既にRAM203に記憶されているダイアログを読み出し、S610にて生成したダイアログとS611にて生成したクライアントソケット43とを関係づける。この処理によりCPU201はダイアログより選ばれた値をクライアントソケット43に渡すことが可能になる。
【0114】
ステップS612では、クライアントPC107のCPU201はクライアントソケット43とサーバソケット102−4−1の間の接続を確立する。
【0115】
クライアントPC107のCPU201はWebブラウザ10上にステップS610で生成したダイアログを表示する(S613)。
【0116】
クライアントPC107のCPU201は常にステップS613で表示したダイアログが備えるボタンに対するユーザの操作を監視し(S614)、クライアントPC107のCPU201はダイアログが備えるボタンに対する操作を検出すると(ステップS615:YES)、検出した操作に基づき送信メッセージを組み立てる。
【0117】
そして、クライアントPC107のCPU201は作成した送信メッセージをクライアントソケット43に詰め込み、メッセージをサーバソケット102−4−1に送信する。
【0118】
なお、クライアントソケット43がサーバソケットに送信するデータについては、ステップS616においてユーザからのダイアログに対する操作がデータの更新である場合(ステップS616:OK)には、クライアントPC107のCPU201はクライアントソケット43にデータ更新のメッセージを詰め込む(ステップS618)。
【0119】
クライアントPC107のCPU201が検出したダイアログに対するユーザの操作がデータ更新の取消しであると判断した場合(ステップS616:NO)は、CPU201はクライアントソケット43にデータ更新の取消しを依頼する(ステップS617)。
【0120】
そして、ステップS619では、クライアントPC107のCPU201はクライアントソケット43を破棄する。
【0121】
ステップS620では、クライアントPC107のCPU201はWebブラウザ10に表示されているダイアログ40を閉じる。
【0122】
図7は、ユーザによるサーバ上のデータの編集にかかる処理において、サーバ側の処理を示すフローチャートである。
【0123】
ステップS701において、Webサーバ101のCPU201はWebブラウザ10からのリクエストを受信する。
【0124】
Webサーバ101のCPU201が受信したリクエストに含まれるファイル名の拡張子より、当該リクエストがサービス実行の要求であると判断した場合、
【0125】
ステップS702では、Webサーバ101のCPU201は受信したリクエストをアプリケーションサーバ102に転送する。
【0126】
なお、リクエストがファイルの要求であると判断した場合は、Webサーバ101のCPU201はRAM203よりファイルの内容のデータを読み込み、レスポンスデータを作成し、リクエスト元のWebブラウザ10に対してレスポンスデータを送信する。
【0127】
ステップS703では、アプリケーションサーバ102のCPU201は、ステップS702で受信したリクエストを解釈し、実行するサービスを特定する。
【0128】
そして、ステップS704では、アプリケーションサーバ102のCPU201は、ステップS703にて特定したサービスプログラムにリクエストのボディ部に含まれているデータを引き渡す。
【0129】
ステップS705では、アプリケーションサーバ102のCPU201はRAM203に記憶されている更新対象のデータが他のデータにより更新されているかを判断する。
【0130】
具体的には、CPU201は更新対象のテーブルデータについて参照したときのタイムスタンプと更新するときのタイムスタンプを比較し、一致していれば更新されていないと判断し、異なっていれば更新されていると判断する。なお、この判断に利用する参照時のテーブルデータのタイムスタンプはセッションに保存されていることとする。
【0131】
ステップS705において更新対象のデータが他のデータにより更新されていると判断した場合(ステップS705:YES)は、処理をステップS706へ移行する。
【0132】
他方、ステップS705において更新対象のデータが更新されていないと判断した場合(ステップS705:NO)は、処理をステップS715へ移行する。
【0133】
ステップS706では、アプリケーションサーバ102のCPU201はサーバソケット102−4−1を作成し、RAM203に記憶する。
【0134】
そしてステップS707では、アプリケーションサーバ102のCPU201は更新対象のデータが既に他のユーザにより更新されている旨をリクエスト元のクライアントPC107にサーバソケットが稼動するホスト名とポート番号とを含めて通知する。
【0135】
ここで、サーバ側処理がクライアント側処理に送信するメッセージについて説明する。本実施例におけるメッセージは、key=value のような組で表現する。なお、送信したい組が複数個ある場合にはkey1=value1&key2=value2&…keyN=valueNのように&で区切る。仮に、更新対象のデータが既に他のユーザにより更新されている旨を表すステータス番号が10で、サーバソケットが稼動するホスト名がappserverhost、ポート番号が1000番であるとすると下記の通り、
【0136】
status=10&serverhost= appserverhost&portnumber=1000
【0137】
となる。なお、keyとして使用したstatus、serverhost、portnumberは任意であるが、クライアント側処理で理解できる文字列にしておく必要がある。
【0138】
ステップS708では、アプリケーションサーバ102のCPU201はサーバソケットに対してクライアントソケット43からの接続を待ち受けるように命じ、クライアントからの接続を受け付ける。
【0139】
ステップS709で、アプリケーションサーバ102のCPU201はサーバソケットにクライアントソケットからの接続が行われたかを判断し、接続が確立したと判断した場合(ステップS709:YES)は、処理をステップS711に移行する。
【0140】
他方、接続が確立していない場合(ステップS709:NO)は、処理をステップS710に移行し、さらにサーバソケットを生成してからの時間がタイムアウト時間に到達したかを判断する。
【0141】
アプリケーションサーバ102のCPU201はサーバソケットを生成してから未接続の時間がタイムアウト時間に到達したと判断した場合(ステップS710:YES)、処理をステップS716へ進める。
【0142】
他方、タイムアウト時間に達していない場合は、処理をステップS708に戻し、クライアントからの接続を待ち受ける。
【0143】
ステップS709において、接続が確立したと判断され(ステップS709:YES)、処理をステップS711に移行すると、アプリケーションサーバ102のCPU201はサーバソケットに対してクライアントソケットからの命令受付を命じる。
【0144】
そして、ステップS712でクライアントからの命令を受信したか否かを判断し、受信したと判断すると(ステップS712:YES)、処理をステップS714に移行する。
【0145】
他方、受信していないと判断すると(ステップS712:NO)、処理をステップS713に移行し、サーバソケットがクライアントソケットからの命令を待ち受けている時間がタイムアウト時間に到達したか否かを判断する。
【0146】
ステップS713においてタイムアウト時間に達したと判断された場合は(ステップS713:YES)、処理をステップS716に移行する。
【0147】
他方、ステップS713においてタイムアウト時間に達していないと判断された場合は(ステップS713:NO)、処理をステップS711に移行し、再度クライアントからの命令を待つ。
【0148】
ステップS714では、アプリケーションサーバ102のCPU201はクライアントソケットからの命令がデータの更新であるか否かを判断する。
【0149】
データの更新であると判断した場合は(ステップS714:YES)、処理をステップS715に移行し、データの更新ではないと判断した場合は(ステップS714:NO)、処理をステップS716に移行する。
【0150】
ステップS715では、アプリケーションサーバ102のCPU201はRAM203に記憶されている更新対象のデータの更新を実行する。
【0151】
そして、ステップ716では、アプリケーションサーバ102のCPU201はRAM203に記憶されているサーバソケットを消去し、処理をS717へ進める。
【0152】
ステップS717では、アプリケーションサーバ102のCPU201はRAM203に記憶されている更新対象データを消去する。
次に、図8に示す具体例を用いて本実施例を説明する。
【0153】
まず、社員番号、氏名、所属、電話番号等を項目に持つ従業員テーブルを編集するブラウザ型Webアプリケーションが存在しているものとする。
【0154】
このブラウザ型Webアプリケーションにおいて異なるユーザがほぼ同時に社員番号002のデータを編集し始めたとする(1)、(2)。次にユーザAが社員番号002の所属を研究から開発に編集する(3)。同時にユーザBは社員番号002の所属を研究から開発に、電話番号を03から06に編集する(4)。ユーザAは編集を確定する(4)。ユーザAが編集を開始してから確定するまで10秒掛かったとする。ユーザBは編集を確定する(6)。ユーザBが編集を開始してから確定するまで20秒掛かったとする。このときサーバ側処理はユーザBが更新しようとしているデータが既にユーザAによって更新されているため、サーバ側処理はこのまま更新処理をしても更新矛盾が起きないかをユーザBに問い合わせる(7)。ユーザBがダイアログで「YES」を選択するとサーバ側処理は更新(8)を継続し、ユーザBが「NO」を選択するとサーバ側処理は更新を行わない。
【0155】
このようにブラウザ型Webアプリケーションでありながらデスクトップアプリケーションを操作しているように処理の制御にユーザが介入することが可能となる。
【0156】
以上説明した処理を行うことにより、サーバ側の処理において処理の分岐が起こった際に、ユーザの指示に従った処理をサーバにおいて行うことが可能となる。
【0157】
以上のように、前述した実施例の機能を実現するプログラムを記録した記録媒体を、システムあるいは装置に供給し、そのシステムあるいは装置のコンピュータ(またはCPUやMPU)が記録媒体に格納されたプログラムを読み出し、実行することによっても本発明の目的が達成されることは言うまでもない。
【0158】
この場合、記録媒体から読み出されたプログラム自体が本発明の新規な機能を実現することになり、そのプログラムを記録した記録媒体は本発明を構成することになる。
【0159】
プログラムを供給するための記録媒体としては、例えば、フレキシブルディスク、ハードディスク、光ディスク、光磁気ディスク、CD−ROM、CD−R、DVD−ROM、磁気テープ、不揮発性のメモリカード、ROM、EEPROM、シリコンディスク等を用いることが出来る。
【0160】
また、コンピュータが読み出したプログラムを実行することにより、前述した実施例の機能が実現されるだけでなく、そのプログラムの指示に基づき、コンピュータ上で稼働しているOS(オペレーティングシステム)等が実際の処理の一部または全部を行い、その処理によって前述した実施例の機能が実現される場合も含まれることは言うまでもない。
【0161】
さらに、記録媒体から読み出されたプログラムが、コンピュータに挿入された機能拡張ボードやコンピュータに接続された機能拡張ユニットに備わるメモリに書き込まれた後、そのプログラムコードの指示に基づき、その機能拡張ボードや機能拡張ユニットに備わるCPU等が実際の処理の一部または全部を行い、その処理によって前述した実施例の機能が実現される場合も含まれることは言うまでもない。
【0162】
また、本発明は、複数の機器から構成されるシステムに適用しても、ひとつの機器から成る装置に適用しても良い。また、本発明は、システムあるいは装置にプログラムを供給することによって達成される場合にも適応できることは言うまでもない。この場合、本発明を達成するためのプログラムを格納した記録媒体を該システムあるいは装置に読み出すことによって、そのシステムあるいは装置が、本発明の効果を享受することが可能となる。
【0163】
さらに、本発明を達成するためのプログラムをネットワーク上のサーバ、データベース等から通信プログラムによりダウンロードして読み出すことによって、そのシステムあるいは装置が、本発明の効果を享受することが可能となる。なお、上述した各実施例およびその変形例を組み合わせた構成も全て本発明に含まれるものである。
【符号の説明】
【0164】
101 Webサーバ
102 アプリケーションサーバ
103 データベースサーバ
104、105、106 ネットワーク
107−1、107−2、107−N クライアントPC
【特許請求の範囲】
【請求項1】
外部サーバと通信可能な情報処理装置であって、
前記外部サーバから送信される、該外部サーバにおいて分岐処理が発生した旨の通知を受信する受信手段と、
前記外部サーバにおいて発生した分岐処理に対するユーザの指示を受け付ける受付手段と、
前記受付手段により受け付けた前記ユーザの指示を、前記分岐処理が発生した前記外部サーバに送信する送信手段と、
を備えることを特徴とする情報処理装置。
【請求項2】
外部サーバと通信可能な情報処理装置における情報処理方法であって、
受信手段が、前記外部サーバから送信される、該外部サーバにおいて分岐処理が発生した旨の通知を受信する受信ステップと、
受付手段が、前記外部サーバにおいて発生した分岐処理に対するユーザの指示を受け付ける受付ステップと、
送信手段が、前記受付ステップにより受け付けた前記ユーザの指示を、前記分岐処理が発生した前記外部サーバに送信する送信ステップとを備えることを特徴とする情報処理方法。
【請求項3】
外部サーバと通信可能な情報処理装置において実行されるプログラムであって、
前記情報処理装置を
前記外部サーバから送信される、該外部サーバにおいて分岐処理が発生した旨の通知を受信する受信手段と、
前記外部サーバにおいて発生した分岐処理に対するユーザの指示を受け付ける受付手段と、
前記受付手段により受け付けた前記ユーザの指示を、前記分岐処理が発生した前記外部サーバに送信する送信手段として機能させることを特徴とするプログラム。
【請求項1】
外部サーバと通信可能な情報処理装置であって、
前記外部サーバから送信される、該外部サーバにおいて分岐処理が発生した旨の通知を受信する受信手段と、
前記外部サーバにおいて発生した分岐処理に対するユーザの指示を受け付ける受付手段と、
前記受付手段により受け付けた前記ユーザの指示を、前記分岐処理が発生した前記外部サーバに送信する送信手段と、
を備えることを特徴とする情報処理装置。
【請求項2】
外部サーバと通信可能な情報処理装置における情報処理方法であって、
受信手段が、前記外部サーバから送信される、該外部サーバにおいて分岐処理が発生した旨の通知を受信する受信ステップと、
受付手段が、前記外部サーバにおいて発生した分岐処理に対するユーザの指示を受け付ける受付ステップと、
送信手段が、前記受付ステップにより受け付けた前記ユーザの指示を、前記分岐処理が発生した前記外部サーバに送信する送信ステップとを備えることを特徴とする情報処理方法。
【請求項3】
外部サーバと通信可能な情報処理装置において実行されるプログラムであって、
前記情報処理装置を
前記外部サーバから送信される、該外部サーバにおいて分岐処理が発生した旨の通知を受信する受信手段と、
前記外部サーバにおいて発生した分岐処理に対するユーザの指示を受け付ける受付手段と、
前記受付手段により受け付けた前記ユーザの指示を、前記分岐処理が発生した前記外部サーバに送信する送信手段として機能させることを特徴とするプログラム。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【公開番号】特開2012−8735(P2012−8735A)
【公開日】平成24年1月12日(2012.1.12)
【国際特許分類】
【出願番号】特願2010−143088(P2010−143088)
【出願日】平成22年6月23日(2010.6.23)
【出願人】(592135203)キヤノンITソリューションズ株式会社 (528)
【Fターム(参考)】
【公開日】平成24年1月12日(2012.1.12)
【国際特許分類】
【出願日】平成22年6月23日(2010.6.23)
【出願人】(592135203)キヤノンITソリューションズ株式会社 (528)
【Fターム(参考)】
[ Back to top ]