情報処理装置及び方法
【課題】 要求元から要求される処理別に受付けプログラムを作成しなくても済むようにする。
【解決手段】 要求元からの処理要求(46)を受付ける受付けプログラム(51)と、所定の処理を実行する一以上の処理プログラム(53、55)とがある。処理要求には、実行すべき複数の処理対象とそれら複数の処理対象の実行順序とが定義されている。受付けプログラムが、要求元からの処理要求の内容に関わらず処理要求を受けて、受けた処理要求を解析し、その処理要求で定義されている上記実行順序で、その処理要求で定義されている複数の処理対象の各々の処理を、上記一以上の処理プログラムのうちの少なくとも一つに依頼する。受付けプログラムから処理の依頼を受けた処理プログラムが、依頼された処理対象の処理を行う。
【解決手段】 要求元からの処理要求(46)を受付ける受付けプログラム(51)と、所定の処理を実行する一以上の処理プログラム(53、55)とがある。処理要求には、実行すべき複数の処理対象とそれら複数の処理対象の実行順序とが定義されている。受付けプログラムが、要求元からの処理要求の内容に関わらず処理要求を受けて、受けた処理要求を解析し、その処理要求で定義されている上記実行順序で、その処理要求で定義されている複数の処理対象の各々の処理を、上記一以上の処理プログラムのうちの少なくとも一つに依頼する。受付けプログラムから処理の依頼を受けた処理プログラムが、依頼された処理対象の処理を行う。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、情報処理技術に関し、具体的には、例えば、EJB(Enterprise JavaBeans)を利用した情報処理技術に関する。
【背景技術】
【0002】
例えば、クライアントマシンとサーバシステムとを備えたシステムがある。サーバシステムは、例えば、プレゼンテーション層、ビジネスロジック層及びデータストア層から成る三階層で構築することができる。プレゼンテーション層は、ユーザから入力を受付けたりユーザに情報を出力したりするためのユーザインターフェースを提供できる層であり、例えば、WEBサーバにより実現することができる。ビジネスロジック層は、情報処理を行うための層であり、例えば、EJBサーバにより実現することができる。データストア層は、情報を保存するための層であり、例えば、データベースにより実現することができる。
【0003】
EJB(Enterprise JavaBeans)を利用した情報処理技術としては、例えば特許文献1乃至特許文献5に開示の技術が知られている。
【0004】
【特許文献1】特開2000−250768号公報
【特許文献2】特開2002−082926号公報
【特許文献3】特開2003−323405号公報
【特許文献4】特開2004−086355号公報
【特許文献5】特開2004−318831号公報
【発明の開示】
【発明が解決しようとする課題】
【0005】
ところで、例えば、EJBサーバには、呼び出し口としてのEJB(以下、ファサードEJB)が用意される。ファサードEJBには、予め定められた実行すべき処理が記述されている。呼び出されたファサードEJBは、呼び出し元からの要求に従う処理、つまり、その要求に対応した予め定められた処理を実行するようになっている。このため、呼出し元(上記の例ではWEBサーバ)は、何を要求するかに応じて、呼び出すファサードEJBを違える。
【0006】
すなわち、同種の処理でも、要求が違えば処理が異なるので、EJBサーバには、処理別にファサードEJBを用意する必要がある。具体的には、例えば、画面に情報を表示するという点で同種の処理であっても、表示する画面の構成が違えば、行う処理も異なるので(例えば、表示すべき情報が異なるので)、各画面構成に対応した各処理毎に、ファサードEJBを用意する必要がある。この場合、例えば、WEBサーバは、第一の画面構成の画面(例えば情報Aを表示する画面)を表示するための第一のファサードEJBを呼び出して第一の画面構成の画面をクライアントシステムに提供した後に、第二の画面構成の画面(例えば情報A及び情報Bを表示する画面)を表示することの要求(つまり画面変更の要求)をクライアントシステムから受けた場合には、別途、第二の画面構成の画面を表示するための第二のファサードEJBを呼び出すことになる。
【0007】
このように、EJBサーバには、呼出し元から要求される処理別にファサードEJBを用意する必要がある。このため、呼出し元から要求される処理にはどんなものがあるかに応じてたくさんのファサードEJBを作成する必要がある。EJBの作成は、通常、コーディングにより行われる。ファサードEJBとは異なる他種のEJBに加えて、呼出し元から要求される処理別にファサードEJBを作成するのは、EJBサーバを構築する上で大きな負担となる。
【0008】
この種の問題点は、EJBサーバの構築に限らず、要求元から要求される処理別に要求元に対する受付けとなるコンピュータプログラム(以下、受付けプログラム)を作成する必要がある別種のサーバの構築についても同様に存在すると考えられる。
【0009】
従って、本発明の目的の一つは、要求元から要求される処理別に受付けプログラムを作成しなくても済むようにすることにある。
【課題を解決するための手段】
【0010】
本発明の一つの側面に従う情報処理システムは、複数のコンピュータプログラムを記憶する記憶資源と、前記記憶資源に記憶された複数のコンピュータプログラムのうちの少なくとも一つを実行する少なくとも一つのコンピュータとを備える。前記複数のコンピュータプログラムには、要求元からの処理要求を受付ける受付けプログラムと、所定の処理を実行する一以上の処理プログラムとが含まれている。前記処理要求には、実行すべき複数の処理対象と前記複数の処理対象の実行順序とが定義されている。前記受付けプログラムが、前記処理要求を受け(例えば、前記要求元からの前記処理要求の内容に関わらず前記処理要求を受け)、前記受けた処理要求を解析し、前記処理要求で定義されている前記実行順序で、前記処理要求で定義されている複数の処理対象の各々の処理を、前記一以上の処理プログラムのうちの少なくとも一つに依頼する。前記受付けプログラムから処理の依頼を受けた処理プログラムが、依頼された処理対象の処理を行う。
【0011】
ここで、「情報処理システム」は、一台のコンピュータマシンで構成されても良いし、複数台のコンピュータマシンで構成されても良い。また、「コンピュータ」は、コンピュータマシンであっても良いし、コンピュータマシンに搭載されるプロセッサ(例えばCPU)であっても良い。また、「記憶資源」は、複数の記憶装置(例えば、ハードディスク又はメモリ)のうちの少なくとも一つによって構成されてもよい。
【0012】
一つの実施態様では、前記処理要求には、少なくとも一つのトランザクション分離範囲と、そのトランザクション分離範囲に属する処理対象とを定義することができる。前記受付けプログラムが、トランザクション分離範囲に属する処理対象については、トランザクション分離範囲に属さない処理対象に関するトランザクションから独立した処理が行われるように前記一以上の処理プログラムに処理を依頼することができる。
【0013】
一つの実施態様では、前記一以上の処理プログラムには、第一の処理を実行する第一の処理プログラムと、前記第一の処理とは別の第二の処理を実行する第二の処理プログラムとを含めることができる。前記受付けプログラムが、前記受けた処理要求を解析することにより、トランザクション分離範囲が検出された場合には、前記第一の処理プログラムに処理を依頼し、処理対象が検出された場合には、前記第二の処理プログラムに処理を依頼することができる。
【0014】
一つの実施態様では、前記受付けプログラム及び前記第二の処理プログラムは、呼出し元に返ってコミットする性質を有することができる(例えば、Requiredという属性のEJBであるとすることができる)。前記第一の処理プログラムは、新たにトランザクションを作成し、呼び出し元のトランザクションに参加せずにトランザクションを完結させる性質を有することができる(例えば、Requires Newという属性のEJBであるとすることができる)。前記受付けプログラムから処理の依頼を受けた前記第一の処理プログラムが、前記トランザクション分離範囲に属する処理対象の処理を前記第二の処理プログラムに依頼することができる。前記受付けプログラム又は前記第一の処理プログラムから処理の依頼を受けた前記第二の処理プログラムが、依頼された処理対象の処理を実行し、実行の結果を依頼元に返すことができる。前記第一の処理プログラムは、前記第二の処理プログラムから実行の結果を受けた場合、処理の依頼元である受付けプログラムのトランザクションに参加することなく、依頼した処理に関わるトランザクションをコミットすることができる。前記受付けプログラムは、前記第二の処理プログラムから実行の結果を受けた場合、依頼した処理に関わるトランザクションをコミットすることができる。
【0015】
一つの実施態様では、前記処理要求には、トランザクション分離範囲に含まれる更なるトランザクション分離範囲を定義することができる。前記第一の処理プログラムは、前記更なるトランザクション分離範囲が検出された場合には、自分に対して前記更なるトランザクション分離範囲の処理を依頼することができる。
【0016】
一つの実施態様では、前記一以上の処理プログラムには、依頼された処理対象の処理を実行する実行プログラムを含めることができる。前記受付けプログラム及び前記実行プログラムは、呼出し元に返ってコミットする性質を有することができる(例えば、Requiredという属性のEJBであるとすることができる)。前記受付けプログラムから処理の依頼を受けた前記実行プログラムが、依頼された処理対象の処理を実行することができる。
【0017】
なお、情報処理システムは、複数のコンピュータプログラムを記憶する記憶資源と、前記記憶資源に記憶された多数のコンピュータプログラムのうちの少なくとも一つを実行する少なくとも一つのコンピュータとを備えてもよい。前記多数のコンピュータプログラムには、複数の処理要素実行プログラムと、処理要素実行プログラムの数よりも少ない数の処理プログラムとが含まれていてもよい。前記複数の処理要素実行プログラムの各々は、所定の処理対象の処理を構成する一以上の処理要素のうちの所定の処理要素を実行する。前記処理プログラムは、前記所定の処理対象の処理を構成する一以上の処理要素をそれぞれ実行する一以上の処理要素実行プログラムを実行することにより、前記所定の処理対象の処理を実行してもよい。
【0018】
一つの実施態様では、前記記憶資源には、各処理対象に対応した各処理定義データが記憶されていてもよい。各処理定義データには、各処理対象の処理を構成する一以上の処理要素の実行手順に関する定義を記述することができる。前記処理プログラムが、所定の処理対象に対応した処理定義データに基づいて、その所定の処理対象の処理を実行することができる。
【0019】
一つの実施態様では、前記複数の処理要素実行プログラム以外の一以上のコンピュータプログラムのうちの少なくとも一つが、前記所定の処理対象に対応する処理定義データに基づいて、その処理定義データで定義された実行手順でその処理定義データで定義された一以上の処理要素を実行するための処理実行対象を生成することができる。前記処理プログラムが、前記処理実行対象を実行することにより、前記所定の処理対象の処理を実行することができる。
【0020】
一つの実施態様では、前記処理定義データには、前記実行手順に関する定義として、第一の処理要素実行プログラムの出力を第二の処理要素実行プログラムに入力してその第二の処理要素実行プログラムがその出力を用いて処理することが記述されていてもよい。前記処理実行対象が、前記処理定義データに従って、前記第一の処理要素実行プログラムの出力を第二の処理要素実行プログラムに入力してその第二の処理要素実行プログラムにその出力を用いて処理を行わせることができる。
【0021】
一つの実施態様では、前記複数のコンピュータプログラムには、要求元からの処理要求を受付ける受付けプログラムが含まれていてもよい。前記受付けプログラムが、前記要求元からの処理要求を受け、前記受けた処理要求を解析し、前記処理要求で定義されている一以上の処理対象の各々の処理を、前記処理プログラムに依頼することができる。前記処理プログラムが、前記受付けプログラムから依頼された処理対象の処理を行うことができる。前記受付けプログラム及び前記処理プログラムは、ステートレスセッションビーンとしてのEJBとすることができる。
【0022】
一つの実施態様では、前記処理定義データには、その処理定義データに基づいて生成される処理実行対象が前記一以上の処理要素実行プログラムのために確保されたリソースを開放することが記述されていてもよい。前記処理実行対象が、前記前記一以上の処理要素実行プログラムのために確保されたリソースを開放することができる。
【0023】
一つの実施態様では、前記複数のコンピュータプログラムには、要求元からの処理要求を受付ける受付けプログラムが含まれていてもよい。前記受付けプログラムが、前記要求元からの処理要求を受け、前記受けた処理要求を解析し、前記処理要求で定義されている一以上の処理対象の各々の処理を、前記処理プログラムに依頼することができる。前記処理プログラムが、前記受付けプログラムから依頼された処理対象の処理を行うことができる。
【0024】
一つの実施態様では、前記複数の処理要素実行プログラムとは異なる一以上のコンピュータプログラムのうちの前記実行される一以上の処理要素実行プログラムのために確保されたリソースを開放するリソース開放手段を備え、前記リソース開放手段が前記一以上の処理要素実行プログラムではないことを特徴とすることができる。
【0025】
情報処理システムは、要求元からの要求に従う処理を実行する処理実行手段と、前記処理に対応する一以上のサブ処理を前記要求に基づいて複数のサブ処理の中から選択するサブ処理選択手段と、前記選択されたサブ処理を前記処理の実行前及び実行後のうちの少なくとも一方で実行するサブ処理実行手段とを備えてもよい。
【0026】
一つの実施態様では、情報処理システムは、複数のサブ処理にそれぞれ対応した複数のサブ処理ID及び複数のサブ処理選択条件を記憶した記憶手段を備えることができる。前記サブ処理選択手段は、前記要求に適合する一以上のサブ処理選択条件を前記複数のサブ処理選択条件の中から特定し、特定された一以上のサブ処理選択条件に対応する一以上のサブ処理IDから識別される一以上のサブ処理を選択することができる。
【0027】
一つの実施態様では、前記サブ処理選択条件は、キーワードを含んでもよい。前記サブ処理選択手段は、前記要求に含まれている特定の文字列と、サブ処理選択条件を構成するキーワードとに基づいて、前記要求に適合する一以上のサブ処理選択条件を特定することができる。
【0028】
一つの実施態様では、前記サブ処理選択条件は、キーワードと正規表現との組み合わせで構成されていてもよい。前記サブ処理選択手段は、前記要求に含まれている特定の文字列と、サブ処理選択条件を構成するキーワード及び正規表現とに基づいて、前記要求に適合する一以上のサブ処理選択条件を特定することができる。
【0029】
一つの実施態様では、前記処理には、一つの本名と一以上の別名とがあってもよい。前記要求には特定の文字列が含まれており、前記特定の文字列は、要求対象となる処理の本名と別名とのいずれか一方を表していてもよい。
【発明を実施するための最良の形態】
【0030】
以下、図面を参照して、本発明の一実施形態について説明する。
【0031】
図1は、本発明の一実施形態に係るシステムのハードウェア構成の概要を示すブロック図である。
【0032】
クライアントシステム3に、サーバシステム6が通信可能に(例えば、インターネット等の通信ネットワークを介して)接続されている。
【0033】
クライアントシステム3は、例えば、一以上のCPU(Central Processing Unit)13や一以上の記憶資源(例えば一以上のメモリ15や一以上のハードディスク17)等のハードウェア資源を備えたコンピュータシステムである。クライアントシステム3は、例えば、パーソナルコンピュータ、ワークステーション、メインフレーム等として構成することができる。クライアントシステム3は、例えば、キーボードスイッチやポインティングデバイス、マイクロフォン等の情報入力装置(図示せず)と、例えば、モニタディスプレイやスピーカー等の情報出力装置(図示せず)とを備えることもできる。
【0034】
サーバシステム6は、例えば、プレゼンテーション層、ビジネスロジック層及びデータストア層から成る三階層で構成することができる。この場合、例えば、プレゼンテーション層を、WEBサーバ5で構成し、ビジネスロジック層を、EJBサーバ7で構成し、データストア層を、データベース38で構成することができる。WEBサーバ5は、例えば、一以上のCPU23や一以上の記憶資源(例えば一以上のメモリ25や一以上のハードディスク27)等のハードウェア資源を備えたコンピュータシステムである。EJBサーバ7も、例えば、一以上のCPU33や一以上の記憶資源(例えば一以上のメモリ35や一以上のハードディスク37)等のハードウェア資源を備えたコンピュータシステムである。データベース38も、図示しないが、一以上のCPUや一以上の記憶資源等のハードウェア資源を備えたコンピュータシステムとすることができる。
【0035】
なお、サーバシステム6の構成は、図示の構成に限らず、他の構成を採用することができる。また、クライアントシステム3、WEBサーバ5、EJBサーバ7及びデータベース38のうちの少なくとも一つは、一台のコンピュータシステムで構成されていても良いし、複数台のコンピュータシステムで構成されていても良い。
【0036】
図2は、図1に示したシステムのソフトウェア構成の概要を示すブロック図である。
【0037】
クライアントシステム3には、WEBブラウザ43が備えることができる。WEBブラウザ43は、WEBサーバ5に対して要求を発行したり、その要求に従う情報をWEBサーバ5から受信して表示したりすることができる。
【0038】
WEBサーバ5には、ファサードバリュー記憶域49と、外部アプリケーション45とが備えられる。
【0039】
ファサードバリュー記憶域49は、上述した記憶資源上に設けられるものであり、一又は複数のファサードバリューを記憶することができる。ファサードバリューは、本実施形態における一つの特徴であり、トランザクションをフローとして記述することができるコマンドパッケージである。ファサードバリューについては、後に詳細に説明する。
【0040】
外部アプリケーション45は、EJBサーバ7の外部に存在するアプリケーションプログラムであり、メモリ25からCPU23に読み込まれることにより、EJBサーバ7から情報を取得したり、その取得した情報をWEBブラウザ43に提供したりすることができる。具体的には、例えば、外部アプリケーション45は、ファサードバリュー選択プログラム47を備え、そのプログラム47により、WEBブラウザ43からの要求(例えば、画面切替え要求)に対応したファサードバリューをファサードバリュー記憶域49の中から選択し、選択したファサードバリューをEJBサーバ7に送信する。それにより、外部アプリケーション45は、WEBブラウザ43からの要求に従う情報をEJBサーバ7から受信し、その受信した情報をWEBサーバ5に提供することができる。なお、この実施形態では、WEBサーバ5がEJBサーバ7に対して要求する処理別にファサードバリューがファサードバリュー記憶域49に記憶されているものとする。しかし、例えば、WEBサーバ5の管理者が、任意のタイミングで、キーボード等の情報入力装置を用いてファサードバリューを作成し、作成したファサードバリューをファサードバリュー記憶域49に記憶させたり、作成したファサードバリューをWEBサーバ5からEJBサーバ7に送信させたりすることもできる。
【0041】
EJBサーバ7には、後述するビーンフロー定義ファイルが記憶されるビーンフロー定義ファイル記憶域57や、後述するビーンフローが記憶されるビーンフロー記憶域59や、複数のプログラムモジュールが記憶されるプログラムモジュール記憶域61や、後述するインターセプタ定義ファイルが記憶されるインターセプタ定義ファイル記憶域63や、複数のEJBがデプロイされたEJBコンテナ14が備えられる。各記憶域57、59、61及び63は、上述した記憶資源上に設けられるものである。プログラムモジュール記憶域61に記憶されるプログラムモジュールには、例えば、ビーンや、インターセプタ(これも、ビーンであってもよい)等がある。その記憶域61に記憶されるビーンは、後述する工夫により、EJBではなくPOJO(Plain Old Java Object)とすることができる。EJBコンテナ14にデプロイされた複数のEJBとして、例えば、ファサード層EJB51と、トランザクション分離層EJB53と、ビーンフロー実行層EJB55とがある。各EJB51、53及び55、後述するビーンやインターセプタ等の種々のコンピュータプログラムは、例えば、記憶資源からCPUに読み込まれることにより実行される。
【0042】
ファサード層EJB51は、呼び出し元(この実施形態ではWEBサーバ5)にとっての呼出し口となるものであり、呼び出し元から発行されるファサードバリューを受けて解釈するEJBである。ファサードバリューの記述内容に関わらず、同一のファサード層EJB51が呼び出される。換言すれば、ファサードバリューで定義されたフローがどんなものであっても、ファサードバリューの受付口は、この一つのファサード層EJB51で済む。こうすることができた理由については、後に詳細に説明する。
【0043】
トランザクション層EJB53は、ファサードバリューで定義されているユニットオブワークを処理するEJBである。ユニットオブワークについては後に詳述する。
【0044】
ビーンフロー実行層EJB55は、ファサードバリューで定義されているコマンドオブジェクトを処理するEJBである。コマンドオブジェクトについても後に詳述する。
【0045】
上述した3つのEJB51、53及び55や、プログラムモジュール記憶域61に記憶されているビーンは、CPU33に読み込まれることにより動作することができる。また、EJBサーバ7が、複数台のコンピュータシステムにより構築された分散型システムの場合には、各コンピュータシステムの各CPUに読み込まれることにより、EJB51、53又は55や、プログラムモジュール記憶域61に記憶されているプログラムモジュールが動作することができる。
【0046】
EJBの種類は幾つかあるが、上述したEJB51、53及び55は、いずれも、ステートレスセッションビーン(つまり、状態値を保持しないタイプのEJB)である。
【0047】
EJB51、53及び55のうち、ファサード層EJB51及びビーンフロー実行層EJB55は、第一の属性として、例えば「Required」という属性を有し、トランザクション層EJB53は、第二の属性として、例えば「Requires New」という属性を有する。属性「Required」を有するEJBは、呼び出し元のトランザクションに参加する性質(具体的には、呼出し元に返って初めてコミットする性質)を持つ。属性「Requires New」を有するEJBは、呼び出し元のトランザクションには参加せずに、呼出しの範囲内で(すなわち、属性「Requires New」のEJBのメソッドを読んだ範囲内で)、新たに独立したトランザクションを作成する性質を持つ。例えば、属性「Requires New」を有するEJBは、第一のEJBから呼ばれて、第二のEJBを呼び出した場合、第一のEJBのトランザクションには参加せずに、第二のEJBのトランザクションを完結させる。これにより、例えば、第一のEJBの処理で障害が発生した場合、第一のEJBのトランザクションについてはロールバックが行われるが、第二のEJBのトランザクションは完結しているので、その第二のEJBのトランザクションまでロールバックされない。
【0048】
以上が、この実施形態に係るシステムでのソフトウェア構成の概要である。以下、そのシステムで行われる処理の流れの概要について説明する。
【0049】
図3は、図2に示したシステムで行われる処理の流れの概要を示す。
【0050】
外部アプリケーション45は、WEBブラウザ43から何らかの指示を受ける(ステップS1)。外部アプリケーション45は、例えば、WEBブラウザ43に表示される画面の画面構成の変更の指示、或いは、ユーザが指定した銀行口座からの出金の指示など、様々な指示を受付けることができる。
【0051】
外部アプリケーション45は、受けた指示を解析し、ファサードバリュー選択プログラム47により、その解析結果に対応するファサードバリュー46をファサードバリュー記憶域49(つまり、複数のファサードバリューの中)から検索する(S2)。そして、外部アプリケーション45は、検索ヒットしたファサードバリュー46をファサードバリュー記憶域49から取得し(S3)、ファサード層EJB51を呼び出して、取得したファサードバリュー46をファサード層EJB51に送信する(S4)。
【0052】
ファサード層EJB51は、外部アプリケーション45から呼び出されてファサードバリュー46を受信し、受信したファサードバリュー46を解析し、その解析結果に応じて、トランザクション分離層EJB53及びビーンフロー実行層EJB55のうちのどちらを呼び出すかを選択し、選択したEJB53又は55を呼び出して処理を依頼する。具体的には、ファサード層EJB51は、上記解析の結果、後述するユニットオブワーク(トランザクション境界オブジェクト)を検出した場合には、トランザクション分離層EJB53を呼び出してユニットオブワークの処理を依頼し、そうではなく、後述するコマンドオブジェクトを検出した場合には、ビーンフロー実行層EJB55を呼び出してそのコマンドオブジェクトの処理を依頼する。トランザクション分離層EJB53は、ユニットオブワークの処理の際、そのユニットオブワーク内にある別のユニットオブワークを検出した場合には、自分を呼び出してその別のユニットオブワークの処理を行い(つまり再帰的に処理を行い)、そのユニットオブワーク内にあるコマンドオブジェクトを検出した場合には、ビーンフロー実行層EJB55を呼び出してそのコマンドオブジェクトの処理を依頼する。ビーンフロー実行層EJB55は、依頼されたコマンドオブジェクトの処理を実行する。以上のようにして、EJBサーバ7において、ファサード層EJB51が受信したファサードバリュー46の記述に応じた処理が行われる(S5)。
【0053】
本実施形態では、上述したように、ファサードバリュー46で定義されたフローがどんなものであっても、ファサードバリュー46を解釈することができるファサード層EJB51が一つあれば、呼出し口はこの一つで済む。以下、ファサードバリュー46の構成、並びに、そのファサードバリュー46が処理される際に行われる処理流れ(つまり、上記S5の詳細の一例)について説明する。
【0054】
図4Aは、ファサードバリューの構成の一例を示す。
【0055】
ファサードバリュー46には、ユニットオブワークと、コマンドオブジェクトとの両方を記述することができる。
【0056】
ユニットオブワークは、トランザクションの境界(別の言い方をすれば「分離」)を表すオブジェクトである。一つのユニットオブワーク内には、別のユニットオブワークを記述することもできるし、一又は複数のコマンドオブジェクトを記述することもできる。
【0057】
コマンドオブジェクトは、一つのコマンドに対応するオブジェクトであり、後述するビーンフローを特定するためのキー(例えばコマンド名)を含み、そのキーに対応するビーンフローの実行を指示するためのものである。コマンドオブジェクトは、例えば、図示のように、ビーンフローキー72、入力オブジェクト74、出力オブジェクト76及び例外オブジェクト78を含む。ビーンフローキー72は、ビーンフロー記憶域59から、ビーンフローを取得するためのキーである。ビーンフローキー72は、プログラムモジュール記憶域61からインターセプタを取得するキーとして使用することもできる。入力オブジェクト74は、このコマンドオブジェクトで指定されたコマンド(ビーンフロー)を実行するビーンに入力することができるオブジェクトである。出力オブジェクト76は、そのコマンドの実行結果を保持することができるオブジェクトである。例外オブジェクト78は、そのコマンドの実行中に発生した例外を保持することができるオブジェクトである。
【0058】
ファサードバリューに記述されたユニットオブワークやコマンドオブジェクトは、ファサードバリューの先頭から順に処理される。このため、ファサードバリュー上で、コマンドオブジェクトとユニットオブワークとをどのように配列するかや、そのユニットオブワーク内にコマンドオブジェクト(或いはユニットオブワーク)をどのように配列するかによって、トランザクションのフローを定義することができる。すなわち、ファサードバリューにより、呼び出し元(この実施形態ではWEBサーバ)からトランザクションのコントロールを行うことができる。以下、一つの具体例を説明する。
【0059】
例えば、呼出し元が、コマンド(ビーンフロー)A、B及びCを実行させたいとする。但し、コマンドAとコマンドCの実行は、呼出し元から独立したトランザクションとして実行させ、コマンドBの実行は、呼出し側のトランザクションに参加させたいとする。
【0060】
トランザクションの分離は、トランザクションを分離するためのオブジェクトであるユニットオブワークを利用することで行う。すなわち、上記例のようなトランザクションコントロールを行うためには、図4Aに示すように、ファサードバリュー46におけるオブジェクト群の先頭に、コマンドAを実行するためのコマンドオブジェクトAを内包した第一のユニットオブワーク10Aを記述し、その第一のユニットオブワーク10Aの次に、ユニットオブワークに内包させずにコマンドBを実行するためのコマンドオブジェクトBを記述し、そのコマンドオブジェクトBの次に、コマンドCを実行するためのコマンドオブジェクトCを内包した第二のユニットオブワーク10Bを記述する必要がある。
【0061】
図4Aに示したファサードバリュー46が外部アプリケーション(以下、外部AP)45からEJBサーバ7に送信されたならば、EJBサーバ7では、図4Bに示す流れで処理が行われる。
【0062】
図4Bは、図4Aに示したファサードバリュー46の処理流れを示す。
【0063】
外部AP45からファサード層EJB51が呼び出されてファサードバリュー46が送信された場合(図3及び図4BのS4)、ファサード層EJB51がそのファサードバリュー46を受信して、そのファサードバリュー46の記述に従う処理が行われる(図3のS5)。
【0064】
具体的には、ファサード層EJB51は、受信したファサードバリュー46を解析する。それにより、第一のユニットオブワーク10A、コマンドオブジェクトB及び第二のユニットオブワーク10Bの順でフローが構成されていることが検出される。
【0065】
第一のユニットオブワーク10Aが検出された場合、ファサード層EJB51は、トランザクション分離層EJB53を呼出し、その第一のユニットオブワーク10Aの処理を、トランザクション分離層EJB53に依頼する(S5A)。
【0066】
呼び出されたトランザクション分離層EJB53は、ファサード層EJB51からの依頼に従って、第一のユニットオブワーク10Aの処理を行う。具体的には、例えば、トランザクション分離層EJB53は、第一のユニットオブワーク10Aを解析する。第一のユニットオブワーク10Aには、コマンドオブジェクトAが含まれているので、そのコマンドオブジェクトAが検出される。コマンドオブジェクトAが検出された場合、トランザクション分離層EJB53は、ビーンフロー実行層EJB55を呼出し、そのコマンドオブジェクトAの処理をビーンフロー実行層EJB55に依頼する(S5B)。
【0067】
呼び出されたビーンフロー実行層EJB55は、トランザクション分離層EJB53からの依頼に従って、コマンドオブジェクトAから特定されるコマンド(ビーンフロー)の処理を実行し(S5C)、応答(例えば処理結果)を、呼び出し元であるトランザクション分離層EJB53に返す(S5D)。
【0068】
トランザクション分離層EJB53は、呼び出し先のビーンフロー実行層EJB55から応答を受けた場合、S5Bで処理依頼したコマンドオブジェクトAについてコミットする(S5E−1〜S5E−3)。
【0069】
具体的には、トランザクション分離層EJB53は、呼び出し先のビーンフロー実行層EJB55から応答を受け、コミットの準備ができた場合、その旨を、自分の呼び出し元であるファサード層EJB51に通知する(S5E−1)。ファサード層EJB51は、コミットの準備ができた旨の通知を受けた場合、トランザクション分離層EJB53に所定の指令(例えば、コミットの実行指令)を送る(S5E−2)。トランザクション分離層EJB53は、ファサード層EJB51から所定の指令を受けたときに、コマンドオブジェクトAについてコミットする。そして、トランザクション分離層EJB53は、コミットが完了した旨の通知を、ファサード層EJB51に送る(S5E−3)。これにより、ファサード層EJB51は、コマンドオブジェクトAについての処理から抜けることができる。
【0070】
このように、ユニットオブワークがファサード層EJB51で検出された場合、ファサード層EJB51に依頼されたトランザクションの処理(つまり、そのユニットオブワークが表すトランザクションの処理)が、ファサード層EJB51からトランザクション分離層EJB53に新たに依頼される。そして、その新たな依頼先は、「Requires New」という属性を持つEJBであり、その「Requires New」のEJB53から、そのユニットオブワーク内のコマンドオブジェクトの処理依頼が、「Required」という属性を持ったビーンフロー実行層EJB55に発行される。このため、ファサード層EJB51は、「Required」という属性であるが、ユニットオブワークが表すトランザクションの処理では、呼出し元である外部AP45のトランザクションに参加しなくて済む。つまり、トランザクションが分離される。
【0071】
次に、第一のユニットオブワーク10Aの次に記述されているコマンドオブジェクトBの処理が行われる。すなわち、ファサード層EJB51が、ビーンフロー実行層EJB55を呼出し、コマンドオブジェクトBの処理をビーンフロー実行層EJB55に依頼する(S5F)。呼び出されたビーンフロー実行層EJB55は、その依頼に従って、コマンドオブジェクトBを処理し(S5G)、応答(例えば処理結果)を、呼出し元であるファサード層EJB51に返す(S5H)。
【0072】
次に、コマンドオブジェクトBの処理が成功したか否かに関わらず、コマンドオブジェクトBの次に記述されているオブジェクトについての処理が行われる。つまり、ここでは、第二のユニットオブワーク10Bの処理が行われる。第二のユニットオブワーク10Bについての処理流れは、前述した第一のユニットオブワーク10Aについての処理流れS5A〜S5E−3と同様である(S5I〜S5M−3)。
【0073】
ファサード層EJB51は、コマンドオブジェクトBのコミットの準備ができたならば、S5M−3の後(若しくは、S5H以降のファサード層EJB51の任意のタイミングで)、外部AP45に対して、その旨を通知する(S5N−1)。外部AP45は、コミットの準備ができた旨の通知をファサード層EJB51から受けた場合、所定の指令(例えばコミットの実行指令)をファサード層EJB51に送る(S5N−2)。ファサード層EJB51は、その指令を受けたときに、コマンドオブジェクトBについてコミットし、コミットが完了した場合に、所定の通知(例えばコミットの完了通知)を、外部AP45に送る(S5N−3)。
【0074】
以上の流れで、図4Aに例示したファサードバリュー46が処理される。このように、トランザクションを分離することができるので、例えば、コマンドオブジェクトBの処理が失敗しロールバックが起こっても、コマンドオブジェクトAの処理までロールバックさせずに独立して処理を行わせることができる。つまり、呼び出し側のトランザクションから独立させたい処理は、ユニットオブワークで実行し、呼び出し側のトランザクションに参加させたい処理は、ユニットオブワークに包んでいないコマンドオブジェクトで実行する。
【0075】
次に、EJB51、53及び55がそれぞれ行う処理の流れについて個々に説明する。
【0076】
図5Aは、ファサード層EJB51が行う処理の流れを示す。
【0077】
ファサード層EJB51は、ファサードバリューを受信した場合(S11でYES)、そのファサードバリューを解析する(S12)。それにより、オブジェクトの実行順序がわかる。
【0078】
今回処理すべきオブジェクトがユニットオブワークであれば(S13でYES)、ファサード層EJB51は、トランザクション分離層EJB53を呼び出し、そのユニットオブワークの処理をトランザクション分離層EJB53に依頼する(S14)。ファサード層EJB51は、その依頼に対する応答を受けた場合(S15でYES)、特定の処理を行う(例えば上記S5E−2を行う)(S15A)。S11で受けたファサードバリュー内の全てのオブジェクトが処理されたならば(S17でYES)、ファサード層EJB51は、ファサードバリューの受信待ちとなり、そうではなく未処理のオブジェクトが残っていれば(S17でNO)、S13に戻る。
【0079】
今回処理すべきオブジェクトがコマンドオブジェクトであれば(S13でNO)、ファサード層EJB51は、ビーンフロー実行層EJB55を呼び出し、そのコマンドオブジェクトの処理をビーンフロー実行層EJB55に依頼する(S16)。その後、特定の処理が行われた後(例えば、上記のS5H及びS5N−1〜S5N−3の処理が行われた後)(S16A)、S17の処理が行われる。
【0080】
図5Bは、トランザクション分離層EJB53が行う処理の流れを示す。
【0081】
トランザクション分離層EJB53は、呼び出された場合(S20でYES)、処理依頼されたユニットオブワークを解析する(S21)。
【0082】
S21の解析の結果、コマンドオブジェクトが検出されたならば(S22でNO)、トランザクション分離層EJB53は、ビーンフロー実行層EJB55を呼び出し、そのコマンドオブジェクトの処理をビーンフロー実行層EJB55に依頼する(S24)。その後、応答を受けたならば(S25でYES)、トランザクション分離層EJB53は、特定の処理を行う(例えば、上記S5E−1〜S5E−3の処理を行う)(S26)。
【0083】
S21の解析の結果、ユニットオブワークが検出されたならば(S22でYES)、トランザクション分離層EJB53は、自分を呼び出し(S23)、S21に戻る。つまり、ユニットオブワーク内にユニットオブワークが検出された場合には、再帰的に処理が行われる。
【0084】
図5Cは、ビーンフロー実行層EJB55が行う処理の流れを示す。
【0085】
ビーンフロー実行層EJB55は、呼び出された場合(S31でYES)、処理依頼されたコマンドオブジェクトの処理を行い(S22)、応答(例えば処理結果)を、自分の呼び出し元(ファサード層EJB51又はトランザクション分離層EJB53)に返す(S33)。なお、S22の処理で例外(例えばエラー)が発生した場合には、ビーンフロー実行層EJB55は、ファサードバリューの送信元であるWEBサーバに、応答(例えば例外オブジェクト)を返すことができる。
【0086】
以上の説明によれば、ユニットオブワーク内に何を記述するかや、コマンドオブジェクトやユニットオブワークの配列をどうするかによって、ファサードバリュー上で、トランザクションのフローを定義することができる。EJBサーバ7には、そのファサードバリューを受けて解析するファサード層EJB51と、ユニットオブワークを処理するトランザクション分離層EJB53と、コマンドオブジェクトを処理するビーンフロー実行層EJB55とが備えられる。ファサード層EJB51及びビーンフロー実行層EJB55の属性は「Required」であり、トランザクション分離層EJB53の属性は「Requires New」である。ユニットオブワークに包まれていないコマンドオブジェクトの処理の依頼は、ファサード層EJB51からトランザクション分離層EJB53を介することなくビーンフロー実行層EJB55にされるが、ユニットオブワークに包まれたコマンドオブジェクトの処理の依頼は、ファサード層EJB51からトランザクション分離層EJB53を介してビーンフロー実行層EJB55にされる。以上のことにより、EJBをたくさんつくらなくても、呼び出し側でのファサードバリューの構成の仕方で、複雑なEJBの規約に関係無く、呼び出し側からEJBサーバ7に対してトランザクションのフローをコントロールすることができる。例えば、図6Aに例示するようなファサードバリューを作成してEJBサーバ7に与えれば、図6Bに例示するようなトランザクションフローを実行させることができる(図6Bにおける点線は、トランザクション境界を示す)。
【0087】
なお、上記の説明では、ファサード層EJB51が、ファサードバリューの送信の際に呼び出されるが、それに代えて、例えば、ファサードバリューを蓄積するためのキューをEJBサーバ7に設け、EJBサーバ7で受信されたファサードバリューはそのキューに蓄積され、ファサード層EJB51が、順次、そのキューからファサードバリューを読み出して処理することもできる。すなわち、ステートレスな処理において、同期・非同期を気にしなくて済む。
【0088】
さて、以下、上述したビーンフロー実行層EJB55が行うことのできる処理について詳細に説明する。
【0089】
図7Aは、ビーンフロー実行層EJB55が行うことのできる一つの処理の流れを示す。
【0090】
この図7Aに示すように、ビーンフロー実行層EJB55は、ビーンフロー定義ファイル記憶域57に記憶されている一以上のビーンフロー定義ファイルの中から一つのビーンフロー定義ファイル81を選択し、選択したビーンフロー定義ファイル81を読み出す(S41)。そして、ビーンフロー実行層EJB55は、読み出したビーンフロー定義ファイル81を解釈し、その解釈の結果に基づいて、ビーンフロー83を作成し、作成したビーンフロー83を、ビーンフロー記憶域59に格納する(S42)。
【0091】
これにより、一又は複数のビーンフローがビーンフロー記憶域59に記憶される。
【0092】
図7Bは、ビーンフロー定義ファイル81の構成の概要を示す。
【0093】
ビーンフロー定義ファイル81は、所定の形式のファイル、例えば、XML(eXtensible Markup Language)形式のファイルである。ビーンフロー定義ファイル81は、例えば、コマンドオブジェクトと一対一で用意される。ビーンフロー定義ファイル81には、ビーンフローの定義が記述されている。ビーンフロー定義ファイル81には、一又は複数のビーンフローを定義することができる。つまり、一つのコマンドオブジェクトで、一つのビーンフローだけでなく、複数のビーンフローを実行させるようにすることができる。
【0094】
一つのビーンフローの定義90の中には、例えば、ビーンフローの名称である「フロー名」、ビーンフローの偽の名前である「エイリアス名」、ビーンフローの実行の際に確保されるべきリソースに関する「リソース情報」、及び、ビーンフローを構成するビーンの実行に関する「実行単位記述」が含まれる。
【0095】
エイリアス名は、例えば、呼び出し側の管理者或いはEJBサーバ7の管理者が、登録することができる。エイリアス名は、一つのビーンフローに複数個登録することもできる。このため、呼び出し元は、EJBサーバ7に対してエイリアス名でビーンフローを指定すれば、異なるエイリアス名であっても同一のビーンフローを実行させることができる。
【0096】
リソース情報には、例えば、リソースの名称である「リソース名」や、リソースを取得する際のキーとなる「リソースキー」が含まれる。また、リソース情報には、ビーンフローがリソースに対してフローコントロールを行うか否か(例えば、正常終了時にリソースに対してコミットを指示し、異常終了時にロールバックをリソースに対して指示するか否か)を表す情報や、確保されたリソースをビーンフローの終了時にクローズするか否かを表す情報等も含めることができる。
【0097】
実行単位記述には、例えば、実行単位の名称である「実行単位名」や、実行するビーンの「クラス名」や、実行するビーンの「メソッド名」や、実行単位の出力オブジェクトを取得するゲッターの名称である「ゲッター名」や、実行単位の属性に関する「属性情報」が含まれる。一つのビーンフローにおいて複数の実行単位がある場合には、実行単位の実行順序に従って、それら複数の実行単位にそれぞれ対応した複数の実行単位記述が並ぶ。ここで、実行単位とは、クラス名で指定されたビーン(以下、指定ビーン)における、メソッド名で指定されたメソッド(以下、指定メソッド)のことである。また、属性情報には、例えば、指定ビーンのインスタンスを生成して指定メソッドを実行することを意味する第一の属性値と、ビーンフローへの入力オブジェクトを指定ビーンに渡して指定メソッドを実行することを意味する第二の属性値と、直前の実行単位のビーンを指定ビーンに渡して指定メソッドを実行することを意味する第三の属性値との少なくとも一つを含めることができる。
【0098】
図8A、図8B及び図8Cは、ビーンフロー定義ファイル81における記述の具体例を示す。具体的には、図8Aは、一つのビーンフローが一つの実行単位を実行するための記述の一例である。図8Bは、一つのビーンフローが二つの実行単位を実行し、且つ、二つ目の実行単位で一つの実行単位におけるビーンから値を取得するための記述の一例である。図8Cは、一つのビーンフローが一つの実行単位を実行し、且つ、入力オブジェクトのメソッドを実行してその実行結果をそのビーンフローの出力オブジェクトとして返すための記述の一例である。
【0099】
ビーンフロー定義ファイル81は、XML等の構造化タグ言語で表すことができる。ビーンフロー定義ファイル81を解釈するビーンフロー実行層EJB55は、どんなタグがあるかによって、生成すべきビーンフローを決定する。
【0100】
以下、幾つかのタグについて説明する。
【0101】
タグ「flow」で設定された範囲には、一つのビーンフローの定義が表される。ここにおける「name」は、ビーンフローの名称(flow name)を表している。タグ「flow」で設定された範囲には、複数のリソース要素、エイリアス要素、ステップ要素(実行単位要素)を含む。
【0102】
タグ「resource」で設定された範囲には、リソース情報が表される。具体的には、リソースの取得や、リソースに対するコミット或いはロールバック等のフローコントロールをビーンフローが行う(換言すれば、ビーンそれ自体がリソースの取得やフローコントロールを行うことを排除する)ために、このリソース情報を使用して、リソースの取得とフローコントロールがビーンフローによって行われる。ここのタグで設定された範囲における「name」は、リソースの名前(resource name)を表し、「key」は、リソースを取得する際のキーを表す。「trancontrol」及び「tranclose」は、リソースに対して何を行うかをビーンフローに設定するための情報である。「trancontrol」は、属性値「true」の場合、ビーンフローがリソースに対してフローコントロールを行うことを意味する(すなわち、ビーンフローの全ての実行単位が正常に終了した場合、リソースに対してコミットを指示し、ビーンフローの実行中に例外が発生したならば、リソースに対してロールバックを指示することを意味する)。また、「trancontrol」は、属性値「false」の場合、ビーンフローがリソースに対してフローコントロールは行わないようにすることを意味する。「tranclose」は、属性値「true」の場合、ビーンフローの終了時に、ビーンフローがリソースに対してクローズを実行することを意味する。「tranclose」は、属性値「false」の場合、ビーンフローはリソースに対してクローズは実行しない。なお、「trancontrol」及び「tranclose」のうちの少なくとも一方は属性値の記述が省略可能であり、省略されている場合には、一方の属性値(例えばtrue)が設定されているものとして扱われる。
【0103】
タグ「alias」で設定された範囲には、エイリアス名(alias name)が設定される。
【0104】
タグ「step」で設定された範囲には、任意のビーンの任意のメソッドを1つのビーンフロー中に関連付けて動作させることを定義することができる。また、ビーンフロー中の各実行単位(ステップ)は、名前を有し、他の実行単位(又はそこでのビーン)を名前で参照することができる。ここの範囲における「name」は、実行単位の名前を表し、「class Name」は、実行単位で実行するビーンのクラス名を表し、「method Name」は、実行単位で実行するビーンのメソッドの名前を表す。また、「getter Name」は、実行単位の出力オブジェクトを取得するゲッターの名称を表す。ここで、「this」を指定された場合、実行単位で実行したビーンそのものが出力オブジェクトとなることを意味する。また、「type」は、実行単位でのメソッドの実行に関する属性を表す。具体的には、例えば、属性値「new」の場合、「className」で指定されたビーンのインスタンスを生成し、「methodName」で指定されたメソッドを実行することを意味する。また、例えば、属性値「input」の場合、ビーンフローへの入力オブジェクトを「className」で指定されたビーンに渡し「methodName」で指定されたメソッドがその入力オブジェクトを用いて処理を実行することを意味する。また、例えば、属性値「step」の場合、直前の実行単位の出力値を「className」で指定されたビーンに渡し、「methodName」で指定されたメソッドがその出力値を用いて処理を実行することを意味する。
【0105】
以上のようなタグや属性値をビーンフロー定義ファイルでどのように設定するかによって、例えば、後述する図11A〜図11Eに例示するような処理を実行できるビーンフローの作成が可能となる。
【0106】
なお、ビーンフロー定義ファイルに複数のビーンフローが定義されている場合には、例えば、<flows>というタグが、複数のビーンフロー定義よりも前に記述される。ビーンフロー実行層EJB55は、このタグから、ビーンフローを生成するビーンフロー実行層EJB55が、ビーンフロー定義ファイル81に、一つのビーンフローが定義されているのか、或いは、複数のビーンフローが定義されているのかを判別することができる。
【0107】
ビーンフロー実行層EJB55は、以上のようなビーンフロー定義ファイルを解釈し、そのビーンフロー定義ファイル上で定義されている通りのビーンフロー83を作成する。一つのビーンフロー定義ファイルに複数のビーンフロー定義があれば、それら複数のビーンフロー定義にそれぞれ対応した複数のビーンフローが作成される。
【0108】
図9Aは、ビーンフローの構成例を示す。
【0109】
ビーンフロー83は、一又は複数のビーンを実行させるためのオブジェクトである。一つのビーンフロー83は、ビーンフロー定義ファイル81の一つのビーンフロー定義90に対応する。ビーンフロー83には、対応するビーンフロー定義90で表されているビーンフロー名、エイリアス名及びリソース情報が設定される。また、ビーンフロー83には、対応するビーンフロー定義90で表されている複数(例えば3つ)の実行単位記述にそれぞれ対応した複数(例えば3つ)の実行単位設定86A、86B及び86Cがセットされる。複数の実行単位設定86A、86B及び86Cは、実行単位の実行順序に従って並べられる。各実行単位設定86A、86B、86Cには、その実行単位設定に対応した実行単位記述で表されている種々の設定要素(例えば、実行単位名、クラス名、メソッド名、属性情報)がセットされる。
【0110】
ビーンフロー実行層EJB55は、コマンドオブジェクトの処理依頼を受けた場合、そのコマンドオブジェクトに対応するビーンフロー83がどれであるかを特定し、特定されたビーンフロー83を実行することができる。
【0111】
図9Bは、コマンドオブジェクトの処理依頼を受けた場合にビーンフロー実行層EJB55が行う処理の流れを示す。
【0112】
ビーンフロー実行層EJB55は、コマンドオブジェクトの処理依頼を受けた場合、そのコマンドオブジェクト内のビーンフローキーを参照する(S50)。ビーンフローキーは、ビーンフロー名を表すキーであってもよいし、エイリアス名を表すキーであってもよい。ビーンフロー実行層EJB55は、参照したビーンフローキーがビーンフロー名とエイリアス名とのどちらを表しているかを、例えば、ビーンフローキーに所定のコードが含まれているか否かにより、判別することができる。この場合、例えば、ファサードバリューを作成する呼び出し元側で、コマンドオブジェクトを記述する際に、ビーンフローキーに所定のコードを含めるか否かにより、ビーンフロー名として特定させるか或いはエイリアス名として特定させるかをコントロールすることができる。
【0113】
ビーンフロー実行層EJB55は、参照したビーンフローキーに対応するビーンフロー及びインターセプタの検索を行う(S51)。具体的には、例えば、ビーンフロー実行層EJB55は、参照したビーンフローキーがビーンフロー名を表しているのか、或いは、エイリアス名を表しているのかを判別する。ビーンフロー名を表していると判別された場合、ビーンフロー実行層EJB55は、ビーンフローキーに適合するビーンフロー名を有するビーンフロー83をビーンフロー記憶域59から検索し、且つ、ビーンフローキーとインターセプタ定義ファイル80との比較を行い、その比較により特定されたインターセプタ95をプログラムモジュール記憶域61から取得する。一方、エイリアス名を表していると判別された場合、ビーンフロー実行層EJB55は、ビーンフローキーに適合するエイリアス名を有するビーンフロー83をビーンフロー記憶域59から検索し、且つ、ビーンフローキーとインターセプタ定義ファイル80との比較を行い、その比較により特定されたインターセプタ95をプログラムモジュール記憶域61から取得する。
【0114】
ビーンフロー実行層EJB55は、S51で検索されたビーンフロー83及びインターセプタ95を実行する(S52)。ここでは、例えば、S51で複数のビーンフロー83が検索ヒットした場合(具体的には、ビーンフロー定義ファイル81に複数のビーンフロー定義90があったことにより複数のビーンフロー83が取得された場合)、ビーンフロー実行層EJB55は、それら複数のビーンフロー83を、ビーンフロー定義ファイル81で定義されている順番で実行することができる。どんな順番で実行するかは、例えば、ビーンフロー定義ファイル81を参照することで特定されてもよいし、ビーンフロー83に実行順序が書き込まれていれば、その実行順序から特定されてもよい。ビーンフロー83の実行では、そのビーンフロー83に設定された情報に基づいて、プログラムモジュール61からビーン85が検索され、そのビーン85のインスタンス化や、インスタンス化されたビーン85の実行等が行われる。
【0115】
ビーンフロー実行層EJB55は、例えば、図10Aに例示する方法により、外部AP45に対してビーンフローの参照を提供することができる。
【0116】
すなわち、ビーンフロー実行層EJB55は、例えば、各ビーンフロー定義ファイル81を参照することにより、ビーンフロー毎に、エイリアス名とビーンフロー名との対応付けを表した名称変換マップ201を生成する。
【0117】
ビーンフロー実行層EJB55は、エイリアス名であるビーンフローキーを含んだビーンフロー取得要求を外部AP45から受け、その要求に応答して、そのビーンフローキー(エイリアス名)に対応するビーンフローの参照(つまりビーンフロー名)を取得し、取得したビーンフロー名を外部AP45に返す。
【0118】
これにより、外部AP45は、ビーンフローを、エイリアス名だけでなく、ビーンフロー名で指定することができるようになる(なお、格別図示しないが、ビーンフロー実行層EJB55と外部AP45とのやりとりは、ファサード層EJB51を介して行われる)。
【0119】
エイリアス名或いはビーンフロー名で或るビーンフロー83が指定された場合、そのビーンフロー83は以下のような処理を行う。
【0120】
図10Bは、ビーンフロー83が行う処理の流れの一例を示す。
【0121】
(1)ビーンフロー83がビーンフロー実行層EJB55から実行指示を受ける。具体的には、例えば、ビーンフロー83で特定されているメソッドが、コマンドオブジェクトの処理依頼を受けたビーンフロー実行層EJB55から、そのコマンドオブジェクト内の入力オブジェクトを引数に、コールされる。
【0122】
(2)ビーンフロー83は、リソース情報に基づいて、リソース群(例えば、メモリ領域、JMS(Java Messaging System)セッション等)92から、リソース名から特定されるリソース94を、リソースキーを用いて取得し確保する。
【0123】
(3)ビーンフロー83は、ビーンフロー83の実行単位設定86A(図9A参照)に基づいて、実行単位88Aを構築する。具体的には、ビーンフロー83は、実行単位設定86A内のクラス名に適合するビーンをプログラムモジュール記憶域61から選択し、選択されたビーンをインスタンス化する(ビーンをロード可能な状態にする)。プログラムモジュール記憶域61に記憶されているビーンは、EJBの規約で作られたビーンではなく、POJOである。その記憶域61に格納されている複数のPOJOには、例えば、データベース38内の検索を行うためのPOJOや、データベース38の更新を行うためのPOJO等、データベース38の操作を行うためのPOJOが含まれている。
【0124】
(4)ビーンフロー83は、実行単位設定86A内の属性情報の全部又は一部を、インスタンス化されたビーン(POJO)に対して設定する。このような処理により、実行単位88Aが構築される。具体的には、例えば、実行単位88Aにおけるビーン(インスタンス化されたビーン)が動作可能な状態となる。
【0125】
(5)以後、ビーンフロー83で定義された処理順(換言すれば、ビーンフロー定義ファイル81で定義された処理順)で処理が行われる。ここでは、ビーン85Aにおける指定メソッドがビーンフロー83により実行される。
【0126】
(6)全ての実行単位が行われた場合、或る実行単位(例えば最後の実行単位)におけるメソッドの処理結果(又は、処理を実行したビーンそれ自体)が、出力オブジェクトとして、ビーンフロー実行層EJB55に返される。
【0127】
(7)ビーンフロー83の実行が正常に終了した場合、リソース情報に基づいて、ビーンフロー83が、確保されたリソース94をクローズする(つまり開放する)。また、ビーンフロー83は、例えば、例外(例えば障害)が発生した場合には、ビーンフローの正常終了でなくても、リソース94を開放する。
【0128】
前述したように、ビーンフロー定義ファイル81には、複数の実行単位を登録することができる。この場合、例えば、上記(3)〜(5)の処理が、実行単位の数、繰り返される。
【0129】
ビーンフロー定義ファイル81の記述によって、以下のことも可能である。すなわち、例えば、ビーンフロー定義ファイル81における各実行単位記述で、「第一のビーンによる第一の処理結果が第二のビーンに渡され、その第一の処理結果を受けた第二のビーンがその第一の処理結果を保持し、その第二のビーンの処理結果による第二の処理結果が処理依頼元に返される」というような定義がされていたとする。この場合は、その定義に従って、ビーンフロー83が各ビーンを実行させる。それにより、第一のビーンによる第一の処理結果が第二のビーンに渡され、その第一の処理結果を受けた第二のビーンがその第一の処理結果を保持し、その第二のビーンの処理結果による第二の処理結果が処理依頼元に返される、ということが行われる。
【0130】
以上の一連の処理では、ビーンフロー83は、ビーン85Aを実行する際、確保されたリソース94をビーン85Aの処理の際に利用させるが、リソース94に対するコントロールまではビーン85Aに行わせない。また、例えば、ビーン85Aの処理の際に例外(例えば障害)が発生した場合、そのビーン85Aは、コマンドオブジェクト内の例外オブジェクトを、処理依頼元(或いは大本の呼出し元)に送ってもよい。
【0131】
以上が、ビーンフロー定義ファイル81に従って作成されるビーンフロー83の実行についての説明である。管理者(例えば、EJBサーバ7又はWEBサーバ5の管理者)は、ビーンフロー定義ファイル81のビーンフロー定義90内にどんな情報を設定するかにより、様々なビーンフロー83をEJBサーバ7に作成させること、換言すれば、一つのコマンドオブジェクトで様々な処理をEJBサーバ7に実行させることができる。
【0132】
例えば、複数個の実行単位を一つのビーンフローで定義することができる。具体的には、例えば、図11Aに例示するように、実行単位名「step1」の実行単位におけるビーンのゲッター(ゲッター名から特定されるもの)が取得した情報と、実行単位名「step2」の実行単位におけるビーンのゲッターが取得した情報とを、実行単位名「step3」の実行単位におけるビーンにセットさせることができる。
【0133】
また、例えば、図11Bに例示するように、実行単位88Dに、コマンドオブジェクト内の入力オブジェクト87Aを入力し、インスタンス化されたビーン85Dに、その入力オブジェクト87Aを用いて処理を実行させることもできる。
【0134】
また、例えば、図11Cに例示するように、実行単位88Eに、コマンドオブジェクト内の入力オブジェクト87Bを、ビーンとして、指定メソッドを実行させることもできる。
【0135】
また、例えば、図11Dに例示するように、処理を実行したビーン85Eのゲッターを使って、ビーンフローの出力オブジェクト89を取得させることもできる。
【0136】
また、例えば、図11Eに例示するように、処理を実行したビーン85Fの参照を、ビーンフローの戻り値として、コマンドオブジェクトの処理依頼元(又は大本の呼び出し元)に、返させることもできる。
【0137】
以上、これまでに述べた実施形態の説明から、以下のようなことが言える。
【0138】
例えば、従来は、EJBサーバによりデータベースの操作を行うためには、エンティティビーンを作成し、EJBコンテナにデプロイする必要がある。
【0139】
しかし、上述した実施形態によれば、3つのEJB51、53及び55により、トランザクションコントロールを行うことができるため、エンティティビーンを作成する必要はない。上記のように、所定の処理を実行するプログラムモジュールを多数個準備しておきさえすれば、後は、ビーンフロー定義ファイル81での定義次第で、ビーンフロー実行層EJB55に、それら多数のプログラムモジュールの中から一又は複数のプログラムモジュールが選択させ、選択された一又は複数のプログラムモジュールの実行順序を決定させ、決定された順序で一又は複数のプログラムモジュールが実行させられる。これにより、例えば、様々なトランザクションコントロールをEJBサーバに行わせたい場合でも、それら様々なトランザクションコントロールをそれぞれ実行させるために様々なエンティティビーンを作成する必要はなくなる。
【0140】
また、上述した実施形態によれば、ビーンフロー定義ファイル81の定義次第で、例えば、第一のビーンのゲッターで取得した情報を第二のビーンにセットしたり、第一のビーンフローの出力(例えば処理結果)を第二のビーンフローに入力しその出力を用いて第二のビーンフローに処理を実行させたりすることもできる。つまり、こういったことを別の言い方をするのであれば、「ステートフルなビーンをステートレスに表すことができる」と言えよう。すなわち、EJB51、53及び55は、ステートレスなビーンであるが、インスタンス化されるPOJOに入力される属性情報次第で(つまり、ビーンフロー定義ファイル81の定義次第で)、そのPOJOをステートフルなビーンとして動作させることができる。
【0141】
さて、上述した通り、コマンドオブジェクトに含まれているビーンフローキーから一又は複数のビーンフローが特定されるが、それに加えて、ビーンフローキーに基づいて、一又は複数のインターセプタが特定される。特定された一又は複数のインターセプタによる処理は、特定された一又は複数のビーンフローの実行の前及び後の少なくとも一方で行われる。以下、それに関して詳細に説明する。
【0142】
図12は、インターセプタ定義ファイル91の一例を示す。
【0143】
インターセプタ定義ファイル91は、所定形式のファイル、例えば、XML形式のファイルとすることができる。インターセプタ定義ファイル91には、プログラムモジュール記憶域61に存在する全てのインターセプタ(例えばJava(登録商標)のクラス)についての定義が記述されていてもよい。また、所定の種別毎にインターセプタ定義ファイル91が用意され、各インターセプタ定義ファイル91に、その種別に応じたインターセプタ定義が記述されていてもよい。
【0144】
インターセプタ定義ファイル91には、例えば、多数のインターセプタ95のうちの複数のインターセプタ95の各々について、インターセプタ名と、そのインターセプタ名を持つインターセプタが選択されるための条件(以下、インターセプタ選択条件)とが設定される。図12では、インターセプタ名は、<intercepter-name>と</intercepter-name>とのタグ間に存在する記述であり、インターセプタ選択条件は、<pattern>と</pattern>とのタグ間に存在する記述である。
【0145】
インターセプタ選択条件は、様々な方法で表し得るが、本実施形態では、キーワードと正規表現(ワイルドカード)との組み合わせで表すことができる。すなわち、この図12に例示するインターセプタ定義ファイル91によれば、インターセプタ名「bank#Inter-cepter-A」というインターセプタ(以下、説明の便宜上、これを「インターセプタA」と称する)は、ビーンフローキーにキーワード「bank.」が含まれてさえいれば選択される。また、インターセプタ名「bank#Inter-cepter-B」というインターセプタ(以下、説明の便宜上、これを「インターセプタB」と称する)は、ビーンフローキーにキーワード「bank.service.」が含まれてさえいれば選択される。また、インターセプタ名「bank#Inter-cepter-C」というインターセプタ(以下、説明の便宜上、これを「インターセプタC」と称する)は、ビーンフローキーにキーワード「bank.service.furikomi」が含まれてさえいれば選択される。また、インターセプタ名「bank#Inter-cepter-D」というインターセプタ(以下、説明の便宜上、これを「インターセプタD」と称する)は、ビーンフローキーにキーワード「master.」が含まれてさえいれば選択される。
【0146】
なお、例えば、ビーンフローキーが指すものをビーンフロー名とエイリアス名のどちらにするかによって、同一のビーンフローが実行されても、選択されるインターセプタを違えることができる。具体例を言えば、ビーンフロー名「bank.service.」とエイリアス名「master.」とを有したビーンフローがあった場合、ビーンフローキーが「bank.service.」であっても「master.」であっても、そのビーンフローが実行されることになるが、そのビーンフローの実行の際に選択されるインターセプタは異なる。すなわち、ビーンフローキーが「bank.service.」であった場合には、インターセプタA及びBが選択されることになるが、ビーンフローキーが「master.」であった場合には、インターセプタDが選択されることになる。
【0147】
以上のようなインターセプタ定義ファイル91では、四つのインターセプタA〜Dの名称とインターセプタ選択条件とが定義されている。そのインターセプタ選択条件に従って複数のインターセプタが選択された場合、例えば、選択された複数のインターセプタがビーンフローの実行の前に実行されるのであれば、選択された複数のインターセプタは、このインターセプタ定義ファイル91での記述の順序で実行される。また、例えば、選択された複数のインターセプタがビーンフローの実行の後に実行されるのであれば、選択された複数のインターセプタは、このインターセプタ定義ファイル91での記述の順序とは逆の順序で実行される。
【0148】
以下、コマンドオブジェクト内のビーンフローキーに基づいて選択されるインターセプタがA及びBである場合を例に採り、その場合に行われる処理の流れについて説明する。
【0149】
図13Aは、コマンドオブジェクト内のビーンフローキーに基づいて選択されるインターセプタがA及びBである場合に実行される処理の説明図である。図13Bは、その処理の流れを示す。
【0150】
ビーンフロー実行層EJB55には、インターセプタ管理オブジェクト402と、ビーンフロー実行オブジェクト403とが含まれている。ビーンフロー実行層EJB55は、インターセプタ管理オブジェクト402により、ビーンフローキーとインターセプタ選択条件とに基づいて一以上のインターセプタを選択したり、インターセプタ定義ファイル91での記述に基づいて、上記選択された一以上のインターセプタの実行順序を特定したりすることができる。また、ビーンフロー実行層EJB55は、ビーンフローを実行させるビーンフローオブジェクト403により、ビーンフローキーに適合するビーンフローを実行させることができる。
【0151】
具体的には、インターセプタ管理オブジェクト402が、インターセプタA及びBの順序で実行することが特定された場合に、まず、インターセプタAを実行させる(S60)。それにより、インターセプタAが、所定の前処理(ビーンフローの実行前に実行すべき所定の処理)を実行し(S61)、その前処理が終わったならば、インターセプタ管理オブジェクト402を呼び出す。次に、インターセプタ管理オブジェクト402が、インターセプタBを実行させる(S62)。それにより、インターセプタBが、所定の前処理を実行し(S63)、その前処理が終わったならば、インターセプタ管理オブジェクト402を呼び出す。最後のインターセプタBから呼び出されたならば、インターセプタ管理オブジェクト402が、ビーンフロー実行オブジェクト403を呼び出す(S64)。呼び出されたビーンフロー実行オブジェクト403は、ビーンフローキーに適合するビーンフローを実行させる。
【0152】
その後、ビーンフローの実行終了が検出されたならば(例えば、ビーンフロー実行オブジェクト403がビーンフローから所定の出力を受けたならば)、ビーンフロー実行オブジェクト403がインターセプタ管理オブジェクト402を呼び出す。呼び出されたインターセプタ管理オブジェクト402は、上記特定された実行順序(前処理の実行順序)とは逆の順序でインターセプタを実行させる。すなわち、インターセプタ管理オブジェクト402は、インターセプタBを実行させる(S66)。インターセプタBにより所定の後処理(ビーンフローの実行後に実行すべき所定の処理)が実行された後(S67)、インターセプタBから呼び出されたならば、インターセプタ管理オブジェクト402は、インターセプタAを実行させる(S68)。インターセプタAにより所定の後処理が行われた後(S69)、インターセプタAから呼び出されたならば、インターセプタ管理オブジェクト402は、情報(例えば、上記選択された一以上のインターセプタの実行結果)を出力する(S70)。
【0153】
以上の説明によれば、インターセプタ定義ファイル91に設定するキーワードと正規表現との組み合わせにより、コマンドオブジェクトに含まれているビーンフローキーに応じて、実行させる一以上のインターセプタやそれらの実行順序とを違えることができる。
【0154】
以上、本発明の好適な実施形態を説明したが、これは本発明の説明のための例示であって、本発明の範囲をこの実施形態にのみ限定する趣旨ではない。本発明は、他の種々の形態でも実施することが可能である。例えば、上述の説明では、或る対象を特定するためのキーとして名称が用いられているが、それに限らず、多種のIDが採用されてもよい。また、ファサードバリュー上でのトランザクション境界の定義の仕方は、トランザクション分離の対象となるコマンドオブジェクトをユニットオブワークに内包させる仕方に限らず、例えば、トランザクション分離の対象となるコマンドオブジェクトに所定コードを付加する等の仕方を採用することもできる。
【図面の簡単な説明】
【0155】
【図1】図1は、本発明の一実施形態に係るシステムのハードウェア構成の概要を示すブロック図である。
【図2】図2は、図1に示したシステムのソフトウェア構成の概要を示すブロック図である。
【図3】図3は、図2に示したシステムで行われる処理の流れの概要を示す。
【図4】図4Aは、ファサードバリューの構成の一例を示す。図4Bは、図4Aに示したファサードバリュー46の処理流れを示す。
【図5】図5Aは、ファサード層EJB51が行う処理の流れを示す。図5Bは、トランザクション分離層EJB53が行う処理の流れを示す。図5Cは、ビーンフロー実行層EJB55が行う処理の流れを示す。
【図6】図6Aは、ファサードバリューの構成の別の一例を示す。図6Bは、図6Aに示したファサードバリューの処理流れを示す。
【図7】図7Aは、ビーンフロー実行層EJB55が行うことのできる一つの処理の流れを示す。図7Bは、ビーンフロー定義ファイル81の構成の概要を示す。
【図8】図8A、図8B及び図8Cは、ビーンフロー定義ファイル81における記述の具体例を示す。
【図9】図9Aは、ビーンフローの構成例を示す。図9Bは、コマンドオブジェクトの処理依頼を受けた場合にビーンフロー実行層EJB55が行う処理の流れを示す。
【図10】図10Aは、外部APにビーンフローの参照が提供されるための方法の説明図である。図10Bは、ビーンフロー83が行う処理の流れの一例を示す。
【図11】図11Aは、ビーンフローの第一の処理実行例を示す。図11Bは、ビーンフローの第二の処理実行例を示す。図11Cは、ビーンフローの第三の処理実行例を示す。図11Dは、ビーンフローの第四の処理実行例を示す。図11Eは、ビーンフローの第五の処理実行例を示す。
【図12】図12は、インターセプタ定義ファイル91の一例を示す。
【図13】図13Aは、コマンドオブジェクト内のビーンフローキーに基づいて選択されるインターセプタがA及びBである場合に実行される処理の説明図である。図13Bは、その処理の流れを示す。
【符号の説明】
【0156】
1…情報処理サーバ 3…クライアントシステム 5…WEBサーバ 7…EJBサーバ 13、23、33…CPU 15、25、35…メモリ 17、27、37…ハードディスク 38…データベース 43…WEBブラウザ 45…外部アプリケーション 47…ファサードバリュー選択プログラム 49…ファサードバリュー記憶域 51…ファサード層EJB 53…トランザクション分離層EJB 55…ビーンフロー実行層EJB 57…ビーンフロー定義ファイル記憶域 59…ビーンフロー記憶域 61…プログラムモジュール記憶域 63…インターセプタ定義ファイル記憶域
【技術分野】
【0001】
本発明は、情報処理技術に関し、具体的には、例えば、EJB(Enterprise JavaBeans)を利用した情報処理技術に関する。
【背景技術】
【0002】
例えば、クライアントマシンとサーバシステムとを備えたシステムがある。サーバシステムは、例えば、プレゼンテーション層、ビジネスロジック層及びデータストア層から成る三階層で構築することができる。プレゼンテーション層は、ユーザから入力を受付けたりユーザに情報を出力したりするためのユーザインターフェースを提供できる層であり、例えば、WEBサーバにより実現することができる。ビジネスロジック層は、情報処理を行うための層であり、例えば、EJBサーバにより実現することができる。データストア層は、情報を保存するための層であり、例えば、データベースにより実現することができる。
【0003】
EJB(Enterprise JavaBeans)を利用した情報処理技術としては、例えば特許文献1乃至特許文献5に開示の技術が知られている。
【0004】
【特許文献1】特開2000−250768号公報
【特許文献2】特開2002−082926号公報
【特許文献3】特開2003−323405号公報
【特許文献4】特開2004−086355号公報
【特許文献5】特開2004−318831号公報
【発明の開示】
【発明が解決しようとする課題】
【0005】
ところで、例えば、EJBサーバには、呼び出し口としてのEJB(以下、ファサードEJB)が用意される。ファサードEJBには、予め定められた実行すべき処理が記述されている。呼び出されたファサードEJBは、呼び出し元からの要求に従う処理、つまり、その要求に対応した予め定められた処理を実行するようになっている。このため、呼出し元(上記の例ではWEBサーバ)は、何を要求するかに応じて、呼び出すファサードEJBを違える。
【0006】
すなわち、同種の処理でも、要求が違えば処理が異なるので、EJBサーバには、処理別にファサードEJBを用意する必要がある。具体的には、例えば、画面に情報を表示するという点で同種の処理であっても、表示する画面の構成が違えば、行う処理も異なるので(例えば、表示すべき情報が異なるので)、各画面構成に対応した各処理毎に、ファサードEJBを用意する必要がある。この場合、例えば、WEBサーバは、第一の画面構成の画面(例えば情報Aを表示する画面)を表示するための第一のファサードEJBを呼び出して第一の画面構成の画面をクライアントシステムに提供した後に、第二の画面構成の画面(例えば情報A及び情報Bを表示する画面)を表示することの要求(つまり画面変更の要求)をクライアントシステムから受けた場合には、別途、第二の画面構成の画面を表示するための第二のファサードEJBを呼び出すことになる。
【0007】
このように、EJBサーバには、呼出し元から要求される処理別にファサードEJBを用意する必要がある。このため、呼出し元から要求される処理にはどんなものがあるかに応じてたくさんのファサードEJBを作成する必要がある。EJBの作成は、通常、コーディングにより行われる。ファサードEJBとは異なる他種のEJBに加えて、呼出し元から要求される処理別にファサードEJBを作成するのは、EJBサーバを構築する上で大きな負担となる。
【0008】
この種の問題点は、EJBサーバの構築に限らず、要求元から要求される処理別に要求元に対する受付けとなるコンピュータプログラム(以下、受付けプログラム)を作成する必要がある別種のサーバの構築についても同様に存在すると考えられる。
【0009】
従って、本発明の目的の一つは、要求元から要求される処理別に受付けプログラムを作成しなくても済むようにすることにある。
【課題を解決するための手段】
【0010】
本発明の一つの側面に従う情報処理システムは、複数のコンピュータプログラムを記憶する記憶資源と、前記記憶資源に記憶された複数のコンピュータプログラムのうちの少なくとも一つを実行する少なくとも一つのコンピュータとを備える。前記複数のコンピュータプログラムには、要求元からの処理要求を受付ける受付けプログラムと、所定の処理を実行する一以上の処理プログラムとが含まれている。前記処理要求には、実行すべき複数の処理対象と前記複数の処理対象の実行順序とが定義されている。前記受付けプログラムが、前記処理要求を受け(例えば、前記要求元からの前記処理要求の内容に関わらず前記処理要求を受け)、前記受けた処理要求を解析し、前記処理要求で定義されている前記実行順序で、前記処理要求で定義されている複数の処理対象の各々の処理を、前記一以上の処理プログラムのうちの少なくとも一つに依頼する。前記受付けプログラムから処理の依頼を受けた処理プログラムが、依頼された処理対象の処理を行う。
【0011】
ここで、「情報処理システム」は、一台のコンピュータマシンで構成されても良いし、複数台のコンピュータマシンで構成されても良い。また、「コンピュータ」は、コンピュータマシンであっても良いし、コンピュータマシンに搭載されるプロセッサ(例えばCPU)であっても良い。また、「記憶資源」は、複数の記憶装置(例えば、ハードディスク又はメモリ)のうちの少なくとも一つによって構成されてもよい。
【0012】
一つの実施態様では、前記処理要求には、少なくとも一つのトランザクション分離範囲と、そのトランザクション分離範囲に属する処理対象とを定義することができる。前記受付けプログラムが、トランザクション分離範囲に属する処理対象については、トランザクション分離範囲に属さない処理対象に関するトランザクションから独立した処理が行われるように前記一以上の処理プログラムに処理を依頼することができる。
【0013】
一つの実施態様では、前記一以上の処理プログラムには、第一の処理を実行する第一の処理プログラムと、前記第一の処理とは別の第二の処理を実行する第二の処理プログラムとを含めることができる。前記受付けプログラムが、前記受けた処理要求を解析することにより、トランザクション分離範囲が検出された場合には、前記第一の処理プログラムに処理を依頼し、処理対象が検出された場合には、前記第二の処理プログラムに処理を依頼することができる。
【0014】
一つの実施態様では、前記受付けプログラム及び前記第二の処理プログラムは、呼出し元に返ってコミットする性質を有することができる(例えば、Requiredという属性のEJBであるとすることができる)。前記第一の処理プログラムは、新たにトランザクションを作成し、呼び出し元のトランザクションに参加せずにトランザクションを完結させる性質を有することができる(例えば、Requires Newという属性のEJBであるとすることができる)。前記受付けプログラムから処理の依頼を受けた前記第一の処理プログラムが、前記トランザクション分離範囲に属する処理対象の処理を前記第二の処理プログラムに依頼することができる。前記受付けプログラム又は前記第一の処理プログラムから処理の依頼を受けた前記第二の処理プログラムが、依頼された処理対象の処理を実行し、実行の結果を依頼元に返すことができる。前記第一の処理プログラムは、前記第二の処理プログラムから実行の結果を受けた場合、処理の依頼元である受付けプログラムのトランザクションに参加することなく、依頼した処理に関わるトランザクションをコミットすることができる。前記受付けプログラムは、前記第二の処理プログラムから実行の結果を受けた場合、依頼した処理に関わるトランザクションをコミットすることができる。
【0015】
一つの実施態様では、前記処理要求には、トランザクション分離範囲に含まれる更なるトランザクション分離範囲を定義することができる。前記第一の処理プログラムは、前記更なるトランザクション分離範囲が検出された場合には、自分に対して前記更なるトランザクション分離範囲の処理を依頼することができる。
【0016】
一つの実施態様では、前記一以上の処理プログラムには、依頼された処理対象の処理を実行する実行プログラムを含めることができる。前記受付けプログラム及び前記実行プログラムは、呼出し元に返ってコミットする性質を有することができる(例えば、Requiredという属性のEJBであるとすることができる)。前記受付けプログラムから処理の依頼を受けた前記実行プログラムが、依頼された処理対象の処理を実行することができる。
【0017】
なお、情報処理システムは、複数のコンピュータプログラムを記憶する記憶資源と、前記記憶資源に記憶された多数のコンピュータプログラムのうちの少なくとも一つを実行する少なくとも一つのコンピュータとを備えてもよい。前記多数のコンピュータプログラムには、複数の処理要素実行プログラムと、処理要素実行プログラムの数よりも少ない数の処理プログラムとが含まれていてもよい。前記複数の処理要素実行プログラムの各々は、所定の処理対象の処理を構成する一以上の処理要素のうちの所定の処理要素を実行する。前記処理プログラムは、前記所定の処理対象の処理を構成する一以上の処理要素をそれぞれ実行する一以上の処理要素実行プログラムを実行することにより、前記所定の処理対象の処理を実行してもよい。
【0018】
一つの実施態様では、前記記憶資源には、各処理対象に対応した各処理定義データが記憶されていてもよい。各処理定義データには、各処理対象の処理を構成する一以上の処理要素の実行手順に関する定義を記述することができる。前記処理プログラムが、所定の処理対象に対応した処理定義データに基づいて、その所定の処理対象の処理を実行することができる。
【0019】
一つの実施態様では、前記複数の処理要素実行プログラム以外の一以上のコンピュータプログラムのうちの少なくとも一つが、前記所定の処理対象に対応する処理定義データに基づいて、その処理定義データで定義された実行手順でその処理定義データで定義された一以上の処理要素を実行するための処理実行対象を生成することができる。前記処理プログラムが、前記処理実行対象を実行することにより、前記所定の処理対象の処理を実行することができる。
【0020】
一つの実施態様では、前記処理定義データには、前記実行手順に関する定義として、第一の処理要素実行プログラムの出力を第二の処理要素実行プログラムに入力してその第二の処理要素実行プログラムがその出力を用いて処理することが記述されていてもよい。前記処理実行対象が、前記処理定義データに従って、前記第一の処理要素実行プログラムの出力を第二の処理要素実行プログラムに入力してその第二の処理要素実行プログラムにその出力を用いて処理を行わせることができる。
【0021】
一つの実施態様では、前記複数のコンピュータプログラムには、要求元からの処理要求を受付ける受付けプログラムが含まれていてもよい。前記受付けプログラムが、前記要求元からの処理要求を受け、前記受けた処理要求を解析し、前記処理要求で定義されている一以上の処理対象の各々の処理を、前記処理プログラムに依頼することができる。前記処理プログラムが、前記受付けプログラムから依頼された処理対象の処理を行うことができる。前記受付けプログラム及び前記処理プログラムは、ステートレスセッションビーンとしてのEJBとすることができる。
【0022】
一つの実施態様では、前記処理定義データには、その処理定義データに基づいて生成される処理実行対象が前記一以上の処理要素実行プログラムのために確保されたリソースを開放することが記述されていてもよい。前記処理実行対象が、前記前記一以上の処理要素実行プログラムのために確保されたリソースを開放することができる。
【0023】
一つの実施態様では、前記複数のコンピュータプログラムには、要求元からの処理要求を受付ける受付けプログラムが含まれていてもよい。前記受付けプログラムが、前記要求元からの処理要求を受け、前記受けた処理要求を解析し、前記処理要求で定義されている一以上の処理対象の各々の処理を、前記処理プログラムに依頼することができる。前記処理プログラムが、前記受付けプログラムから依頼された処理対象の処理を行うことができる。
【0024】
一つの実施態様では、前記複数の処理要素実行プログラムとは異なる一以上のコンピュータプログラムのうちの前記実行される一以上の処理要素実行プログラムのために確保されたリソースを開放するリソース開放手段を備え、前記リソース開放手段が前記一以上の処理要素実行プログラムではないことを特徴とすることができる。
【0025】
情報処理システムは、要求元からの要求に従う処理を実行する処理実行手段と、前記処理に対応する一以上のサブ処理を前記要求に基づいて複数のサブ処理の中から選択するサブ処理選択手段と、前記選択されたサブ処理を前記処理の実行前及び実行後のうちの少なくとも一方で実行するサブ処理実行手段とを備えてもよい。
【0026】
一つの実施態様では、情報処理システムは、複数のサブ処理にそれぞれ対応した複数のサブ処理ID及び複数のサブ処理選択条件を記憶した記憶手段を備えることができる。前記サブ処理選択手段は、前記要求に適合する一以上のサブ処理選択条件を前記複数のサブ処理選択条件の中から特定し、特定された一以上のサブ処理選択条件に対応する一以上のサブ処理IDから識別される一以上のサブ処理を選択することができる。
【0027】
一つの実施態様では、前記サブ処理選択条件は、キーワードを含んでもよい。前記サブ処理選択手段は、前記要求に含まれている特定の文字列と、サブ処理選択条件を構成するキーワードとに基づいて、前記要求に適合する一以上のサブ処理選択条件を特定することができる。
【0028】
一つの実施態様では、前記サブ処理選択条件は、キーワードと正規表現との組み合わせで構成されていてもよい。前記サブ処理選択手段は、前記要求に含まれている特定の文字列と、サブ処理選択条件を構成するキーワード及び正規表現とに基づいて、前記要求に適合する一以上のサブ処理選択条件を特定することができる。
【0029】
一つの実施態様では、前記処理には、一つの本名と一以上の別名とがあってもよい。前記要求には特定の文字列が含まれており、前記特定の文字列は、要求対象となる処理の本名と別名とのいずれか一方を表していてもよい。
【発明を実施するための最良の形態】
【0030】
以下、図面を参照して、本発明の一実施形態について説明する。
【0031】
図1は、本発明の一実施形態に係るシステムのハードウェア構成の概要を示すブロック図である。
【0032】
クライアントシステム3に、サーバシステム6が通信可能に(例えば、インターネット等の通信ネットワークを介して)接続されている。
【0033】
クライアントシステム3は、例えば、一以上のCPU(Central Processing Unit)13や一以上の記憶資源(例えば一以上のメモリ15や一以上のハードディスク17)等のハードウェア資源を備えたコンピュータシステムである。クライアントシステム3は、例えば、パーソナルコンピュータ、ワークステーション、メインフレーム等として構成することができる。クライアントシステム3は、例えば、キーボードスイッチやポインティングデバイス、マイクロフォン等の情報入力装置(図示せず)と、例えば、モニタディスプレイやスピーカー等の情報出力装置(図示せず)とを備えることもできる。
【0034】
サーバシステム6は、例えば、プレゼンテーション層、ビジネスロジック層及びデータストア層から成る三階層で構成することができる。この場合、例えば、プレゼンテーション層を、WEBサーバ5で構成し、ビジネスロジック層を、EJBサーバ7で構成し、データストア層を、データベース38で構成することができる。WEBサーバ5は、例えば、一以上のCPU23や一以上の記憶資源(例えば一以上のメモリ25や一以上のハードディスク27)等のハードウェア資源を備えたコンピュータシステムである。EJBサーバ7も、例えば、一以上のCPU33や一以上の記憶資源(例えば一以上のメモリ35や一以上のハードディスク37)等のハードウェア資源を備えたコンピュータシステムである。データベース38も、図示しないが、一以上のCPUや一以上の記憶資源等のハードウェア資源を備えたコンピュータシステムとすることができる。
【0035】
なお、サーバシステム6の構成は、図示の構成に限らず、他の構成を採用することができる。また、クライアントシステム3、WEBサーバ5、EJBサーバ7及びデータベース38のうちの少なくとも一つは、一台のコンピュータシステムで構成されていても良いし、複数台のコンピュータシステムで構成されていても良い。
【0036】
図2は、図1に示したシステムのソフトウェア構成の概要を示すブロック図である。
【0037】
クライアントシステム3には、WEBブラウザ43が備えることができる。WEBブラウザ43は、WEBサーバ5に対して要求を発行したり、その要求に従う情報をWEBサーバ5から受信して表示したりすることができる。
【0038】
WEBサーバ5には、ファサードバリュー記憶域49と、外部アプリケーション45とが備えられる。
【0039】
ファサードバリュー記憶域49は、上述した記憶資源上に設けられるものであり、一又は複数のファサードバリューを記憶することができる。ファサードバリューは、本実施形態における一つの特徴であり、トランザクションをフローとして記述することができるコマンドパッケージである。ファサードバリューについては、後に詳細に説明する。
【0040】
外部アプリケーション45は、EJBサーバ7の外部に存在するアプリケーションプログラムであり、メモリ25からCPU23に読み込まれることにより、EJBサーバ7から情報を取得したり、その取得した情報をWEBブラウザ43に提供したりすることができる。具体的には、例えば、外部アプリケーション45は、ファサードバリュー選択プログラム47を備え、そのプログラム47により、WEBブラウザ43からの要求(例えば、画面切替え要求)に対応したファサードバリューをファサードバリュー記憶域49の中から選択し、選択したファサードバリューをEJBサーバ7に送信する。それにより、外部アプリケーション45は、WEBブラウザ43からの要求に従う情報をEJBサーバ7から受信し、その受信した情報をWEBサーバ5に提供することができる。なお、この実施形態では、WEBサーバ5がEJBサーバ7に対して要求する処理別にファサードバリューがファサードバリュー記憶域49に記憶されているものとする。しかし、例えば、WEBサーバ5の管理者が、任意のタイミングで、キーボード等の情報入力装置を用いてファサードバリューを作成し、作成したファサードバリューをファサードバリュー記憶域49に記憶させたり、作成したファサードバリューをWEBサーバ5からEJBサーバ7に送信させたりすることもできる。
【0041】
EJBサーバ7には、後述するビーンフロー定義ファイルが記憶されるビーンフロー定義ファイル記憶域57や、後述するビーンフローが記憶されるビーンフロー記憶域59や、複数のプログラムモジュールが記憶されるプログラムモジュール記憶域61や、後述するインターセプタ定義ファイルが記憶されるインターセプタ定義ファイル記憶域63や、複数のEJBがデプロイされたEJBコンテナ14が備えられる。各記憶域57、59、61及び63は、上述した記憶資源上に設けられるものである。プログラムモジュール記憶域61に記憶されるプログラムモジュールには、例えば、ビーンや、インターセプタ(これも、ビーンであってもよい)等がある。その記憶域61に記憶されるビーンは、後述する工夫により、EJBではなくPOJO(Plain Old Java Object)とすることができる。EJBコンテナ14にデプロイされた複数のEJBとして、例えば、ファサード層EJB51と、トランザクション分離層EJB53と、ビーンフロー実行層EJB55とがある。各EJB51、53及び55、後述するビーンやインターセプタ等の種々のコンピュータプログラムは、例えば、記憶資源からCPUに読み込まれることにより実行される。
【0042】
ファサード層EJB51は、呼び出し元(この実施形態ではWEBサーバ5)にとっての呼出し口となるものであり、呼び出し元から発行されるファサードバリューを受けて解釈するEJBである。ファサードバリューの記述内容に関わらず、同一のファサード層EJB51が呼び出される。換言すれば、ファサードバリューで定義されたフローがどんなものであっても、ファサードバリューの受付口は、この一つのファサード層EJB51で済む。こうすることができた理由については、後に詳細に説明する。
【0043】
トランザクション層EJB53は、ファサードバリューで定義されているユニットオブワークを処理するEJBである。ユニットオブワークについては後に詳述する。
【0044】
ビーンフロー実行層EJB55は、ファサードバリューで定義されているコマンドオブジェクトを処理するEJBである。コマンドオブジェクトについても後に詳述する。
【0045】
上述した3つのEJB51、53及び55や、プログラムモジュール記憶域61に記憶されているビーンは、CPU33に読み込まれることにより動作することができる。また、EJBサーバ7が、複数台のコンピュータシステムにより構築された分散型システムの場合には、各コンピュータシステムの各CPUに読み込まれることにより、EJB51、53又は55や、プログラムモジュール記憶域61に記憶されているプログラムモジュールが動作することができる。
【0046】
EJBの種類は幾つかあるが、上述したEJB51、53及び55は、いずれも、ステートレスセッションビーン(つまり、状態値を保持しないタイプのEJB)である。
【0047】
EJB51、53及び55のうち、ファサード層EJB51及びビーンフロー実行層EJB55は、第一の属性として、例えば「Required」という属性を有し、トランザクション層EJB53は、第二の属性として、例えば「Requires New」という属性を有する。属性「Required」を有するEJBは、呼び出し元のトランザクションに参加する性質(具体的には、呼出し元に返って初めてコミットする性質)を持つ。属性「Requires New」を有するEJBは、呼び出し元のトランザクションには参加せずに、呼出しの範囲内で(すなわち、属性「Requires New」のEJBのメソッドを読んだ範囲内で)、新たに独立したトランザクションを作成する性質を持つ。例えば、属性「Requires New」を有するEJBは、第一のEJBから呼ばれて、第二のEJBを呼び出した場合、第一のEJBのトランザクションには参加せずに、第二のEJBのトランザクションを完結させる。これにより、例えば、第一のEJBの処理で障害が発生した場合、第一のEJBのトランザクションについてはロールバックが行われるが、第二のEJBのトランザクションは完結しているので、その第二のEJBのトランザクションまでロールバックされない。
【0048】
以上が、この実施形態に係るシステムでのソフトウェア構成の概要である。以下、そのシステムで行われる処理の流れの概要について説明する。
【0049】
図3は、図2に示したシステムで行われる処理の流れの概要を示す。
【0050】
外部アプリケーション45は、WEBブラウザ43から何らかの指示を受ける(ステップS1)。外部アプリケーション45は、例えば、WEBブラウザ43に表示される画面の画面構成の変更の指示、或いは、ユーザが指定した銀行口座からの出金の指示など、様々な指示を受付けることができる。
【0051】
外部アプリケーション45は、受けた指示を解析し、ファサードバリュー選択プログラム47により、その解析結果に対応するファサードバリュー46をファサードバリュー記憶域49(つまり、複数のファサードバリューの中)から検索する(S2)。そして、外部アプリケーション45は、検索ヒットしたファサードバリュー46をファサードバリュー記憶域49から取得し(S3)、ファサード層EJB51を呼び出して、取得したファサードバリュー46をファサード層EJB51に送信する(S4)。
【0052】
ファサード層EJB51は、外部アプリケーション45から呼び出されてファサードバリュー46を受信し、受信したファサードバリュー46を解析し、その解析結果に応じて、トランザクション分離層EJB53及びビーンフロー実行層EJB55のうちのどちらを呼び出すかを選択し、選択したEJB53又は55を呼び出して処理を依頼する。具体的には、ファサード層EJB51は、上記解析の結果、後述するユニットオブワーク(トランザクション境界オブジェクト)を検出した場合には、トランザクション分離層EJB53を呼び出してユニットオブワークの処理を依頼し、そうではなく、後述するコマンドオブジェクトを検出した場合には、ビーンフロー実行層EJB55を呼び出してそのコマンドオブジェクトの処理を依頼する。トランザクション分離層EJB53は、ユニットオブワークの処理の際、そのユニットオブワーク内にある別のユニットオブワークを検出した場合には、自分を呼び出してその別のユニットオブワークの処理を行い(つまり再帰的に処理を行い)、そのユニットオブワーク内にあるコマンドオブジェクトを検出した場合には、ビーンフロー実行層EJB55を呼び出してそのコマンドオブジェクトの処理を依頼する。ビーンフロー実行層EJB55は、依頼されたコマンドオブジェクトの処理を実行する。以上のようにして、EJBサーバ7において、ファサード層EJB51が受信したファサードバリュー46の記述に応じた処理が行われる(S5)。
【0053】
本実施形態では、上述したように、ファサードバリュー46で定義されたフローがどんなものであっても、ファサードバリュー46を解釈することができるファサード層EJB51が一つあれば、呼出し口はこの一つで済む。以下、ファサードバリュー46の構成、並びに、そのファサードバリュー46が処理される際に行われる処理流れ(つまり、上記S5の詳細の一例)について説明する。
【0054】
図4Aは、ファサードバリューの構成の一例を示す。
【0055】
ファサードバリュー46には、ユニットオブワークと、コマンドオブジェクトとの両方を記述することができる。
【0056】
ユニットオブワークは、トランザクションの境界(別の言い方をすれば「分離」)を表すオブジェクトである。一つのユニットオブワーク内には、別のユニットオブワークを記述することもできるし、一又は複数のコマンドオブジェクトを記述することもできる。
【0057】
コマンドオブジェクトは、一つのコマンドに対応するオブジェクトであり、後述するビーンフローを特定するためのキー(例えばコマンド名)を含み、そのキーに対応するビーンフローの実行を指示するためのものである。コマンドオブジェクトは、例えば、図示のように、ビーンフローキー72、入力オブジェクト74、出力オブジェクト76及び例外オブジェクト78を含む。ビーンフローキー72は、ビーンフロー記憶域59から、ビーンフローを取得するためのキーである。ビーンフローキー72は、プログラムモジュール記憶域61からインターセプタを取得するキーとして使用することもできる。入力オブジェクト74は、このコマンドオブジェクトで指定されたコマンド(ビーンフロー)を実行するビーンに入力することができるオブジェクトである。出力オブジェクト76は、そのコマンドの実行結果を保持することができるオブジェクトである。例外オブジェクト78は、そのコマンドの実行中に発生した例外を保持することができるオブジェクトである。
【0058】
ファサードバリューに記述されたユニットオブワークやコマンドオブジェクトは、ファサードバリューの先頭から順に処理される。このため、ファサードバリュー上で、コマンドオブジェクトとユニットオブワークとをどのように配列するかや、そのユニットオブワーク内にコマンドオブジェクト(或いはユニットオブワーク)をどのように配列するかによって、トランザクションのフローを定義することができる。すなわち、ファサードバリューにより、呼び出し元(この実施形態ではWEBサーバ)からトランザクションのコントロールを行うことができる。以下、一つの具体例を説明する。
【0059】
例えば、呼出し元が、コマンド(ビーンフロー)A、B及びCを実行させたいとする。但し、コマンドAとコマンドCの実行は、呼出し元から独立したトランザクションとして実行させ、コマンドBの実行は、呼出し側のトランザクションに参加させたいとする。
【0060】
トランザクションの分離は、トランザクションを分離するためのオブジェクトであるユニットオブワークを利用することで行う。すなわち、上記例のようなトランザクションコントロールを行うためには、図4Aに示すように、ファサードバリュー46におけるオブジェクト群の先頭に、コマンドAを実行するためのコマンドオブジェクトAを内包した第一のユニットオブワーク10Aを記述し、その第一のユニットオブワーク10Aの次に、ユニットオブワークに内包させずにコマンドBを実行するためのコマンドオブジェクトBを記述し、そのコマンドオブジェクトBの次に、コマンドCを実行するためのコマンドオブジェクトCを内包した第二のユニットオブワーク10Bを記述する必要がある。
【0061】
図4Aに示したファサードバリュー46が外部アプリケーション(以下、外部AP)45からEJBサーバ7に送信されたならば、EJBサーバ7では、図4Bに示す流れで処理が行われる。
【0062】
図4Bは、図4Aに示したファサードバリュー46の処理流れを示す。
【0063】
外部AP45からファサード層EJB51が呼び出されてファサードバリュー46が送信された場合(図3及び図4BのS4)、ファサード層EJB51がそのファサードバリュー46を受信して、そのファサードバリュー46の記述に従う処理が行われる(図3のS5)。
【0064】
具体的には、ファサード層EJB51は、受信したファサードバリュー46を解析する。それにより、第一のユニットオブワーク10A、コマンドオブジェクトB及び第二のユニットオブワーク10Bの順でフローが構成されていることが検出される。
【0065】
第一のユニットオブワーク10Aが検出された場合、ファサード層EJB51は、トランザクション分離層EJB53を呼出し、その第一のユニットオブワーク10Aの処理を、トランザクション分離層EJB53に依頼する(S5A)。
【0066】
呼び出されたトランザクション分離層EJB53は、ファサード層EJB51からの依頼に従って、第一のユニットオブワーク10Aの処理を行う。具体的には、例えば、トランザクション分離層EJB53は、第一のユニットオブワーク10Aを解析する。第一のユニットオブワーク10Aには、コマンドオブジェクトAが含まれているので、そのコマンドオブジェクトAが検出される。コマンドオブジェクトAが検出された場合、トランザクション分離層EJB53は、ビーンフロー実行層EJB55を呼出し、そのコマンドオブジェクトAの処理をビーンフロー実行層EJB55に依頼する(S5B)。
【0067】
呼び出されたビーンフロー実行層EJB55は、トランザクション分離層EJB53からの依頼に従って、コマンドオブジェクトAから特定されるコマンド(ビーンフロー)の処理を実行し(S5C)、応答(例えば処理結果)を、呼び出し元であるトランザクション分離層EJB53に返す(S5D)。
【0068】
トランザクション分離層EJB53は、呼び出し先のビーンフロー実行層EJB55から応答を受けた場合、S5Bで処理依頼したコマンドオブジェクトAについてコミットする(S5E−1〜S5E−3)。
【0069】
具体的には、トランザクション分離層EJB53は、呼び出し先のビーンフロー実行層EJB55から応答を受け、コミットの準備ができた場合、その旨を、自分の呼び出し元であるファサード層EJB51に通知する(S5E−1)。ファサード層EJB51は、コミットの準備ができた旨の通知を受けた場合、トランザクション分離層EJB53に所定の指令(例えば、コミットの実行指令)を送る(S5E−2)。トランザクション分離層EJB53は、ファサード層EJB51から所定の指令を受けたときに、コマンドオブジェクトAについてコミットする。そして、トランザクション分離層EJB53は、コミットが完了した旨の通知を、ファサード層EJB51に送る(S5E−3)。これにより、ファサード層EJB51は、コマンドオブジェクトAについての処理から抜けることができる。
【0070】
このように、ユニットオブワークがファサード層EJB51で検出された場合、ファサード層EJB51に依頼されたトランザクションの処理(つまり、そのユニットオブワークが表すトランザクションの処理)が、ファサード層EJB51からトランザクション分離層EJB53に新たに依頼される。そして、その新たな依頼先は、「Requires New」という属性を持つEJBであり、その「Requires New」のEJB53から、そのユニットオブワーク内のコマンドオブジェクトの処理依頼が、「Required」という属性を持ったビーンフロー実行層EJB55に発行される。このため、ファサード層EJB51は、「Required」という属性であるが、ユニットオブワークが表すトランザクションの処理では、呼出し元である外部AP45のトランザクションに参加しなくて済む。つまり、トランザクションが分離される。
【0071】
次に、第一のユニットオブワーク10Aの次に記述されているコマンドオブジェクトBの処理が行われる。すなわち、ファサード層EJB51が、ビーンフロー実行層EJB55を呼出し、コマンドオブジェクトBの処理をビーンフロー実行層EJB55に依頼する(S5F)。呼び出されたビーンフロー実行層EJB55は、その依頼に従って、コマンドオブジェクトBを処理し(S5G)、応答(例えば処理結果)を、呼出し元であるファサード層EJB51に返す(S5H)。
【0072】
次に、コマンドオブジェクトBの処理が成功したか否かに関わらず、コマンドオブジェクトBの次に記述されているオブジェクトについての処理が行われる。つまり、ここでは、第二のユニットオブワーク10Bの処理が行われる。第二のユニットオブワーク10Bについての処理流れは、前述した第一のユニットオブワーク10Aについての処理流れS5A〜S5E−3と同様である(S5I〜S5M−3)。
【0073】
ファサード層EJB51は、コマンドオブジェクトBのコミットの準備ができたならば、S5M−3の後(若しくは、S5H以降のファサード層EJB51の任意のタイミングで)、外部AP45に対して、その旨を通知する(S5N−1)。外部AP45は、コミットの準備ができた旨の通知をファサード層EJB51から受けた場合、所定の指令(例えばコミットの実行指令)をファサード層EJB51に送る(S5N−2)。ファサード層EJB51は、その指令を受けたときに、コマンドオブジェクトBについてコミットし、コミットが完了した場合に、所定の通知(例えばコミットの完了通知)を、外部AP45に送る(S5N−3)。
【0074】
以上の流れで、図4Aに例示したファサードバリュー46が処理される。このように、トランザクションを分離することができるので、例えば、コマンドオブジェクトBの処理が失敗しロールバックが起こっても、コマンドオブジェクトAの処理までロールバックさせずに独立して処理を行わせることができる。つまり、呼び出し側のトランザクションから独立させたい処理は、ユニットオブワークで実行し、呼び出し側のトランザクションに参加させたい処理は、ユニットオブワークに包んでいないコマンドオブジェクトで実行する。
【0075】
次に、EJB51、53及び55がそれぞれ行う処理の流れについて個々に説明する。
【0076】
図5Aは、ファサード層EJB51が行う処理の流れを示す。
【0077】
ファサード層EJB51は、ファサードバリューを受信した場合(S11でYES)、そのファサードバリューを解析する(S12)。それにより、オブジェクトの実行順序がわかる。
【0078】
今回処理すべきオブジェクトがユニットオブワークであれば(S13でYES)、ファサード層EJB51は、トランザクション分離層EJB53を呼び出し、そのユニットオブワークの処理をトランザクション分離層EJB53に依頼する(S14)。ファサード層EJB51は、その依頼に対する応答を受けた場合(S15でYES)、特定の処理を行う(例えば上記S5E−2を行う)(S15A)。S11で受けたファサードバリュー内の全てのオブジェクトが処理されたならば(S17でYES)、ファサード層EJB51は、ファサードバリューの受信待ちとなり、そうではなく未処理のオブジェクトが残っていれば(S17でNO)、S13に戻る。
【0079】
今回処理すべきオブジェクトがコマンドオブジェクトであれば(S13でNO)、ファサード層EJB51は、ビーンフロー実行層EJB55を呼び出し、そのコマンドオブジェクトの処理をビーンフロー実行層EJB55に依頼する(S16)。その後、特定の処理が行われた後(例えば、上記のS5H及びS5N−1〜S5N−3の処理が行われた後)(S16A)、S17の処理が行われる。
【0080】
図5Bは、トランザクション分離層EJB53が行う処理の流れを示す。
【0081】
トランザクション分離層EJB53は、呼び出された場合(S20でYES)、処理依頼されたユニットオブワークを解析する(S21)。
【0082】
S21の解析の結果、コマンドオブジェクトが検出されたならば(S22でNO)、トランザクション分離層EJB53は、ビーンフロー実行層EJB55を呼び出し、そのコマンドオブジェクトの処理をビーンフロー実行層EJB55に依頼する(S24)。その後、応答を受けたならば(S25でYES)、トランザクション分離層EJB53は、特定の処理を行う(例えば、上記S5E−1〜S5E−3の処理を行う)(S26)。
【0083】
S21の解析の結果、ユニットオブワークが検出されたならば(S22でYES)、トランザクション分離層EJB53は、自分を呼び出し(S23)、S21に戻る。つまり、ユニットオブワーク内にユニットオブワークが検出された場合には、再帰的に処理が行われる。
【0084】
図5Cは、ビーンフロー実行層EJB55が行う処理の流れを示す。
【0085】
ビーンフロー実行層EJB55は、呼び出された場合(S31でYES)、処理依頼されたコマンドオブジェクトの処理を行い(S22)、応答(例えば処理結果)を、自分の呼び出し元(ファサード層EJB51又はトランザクション分離層EJB53)に返す(S33)。なお、S22の処理で例外(例えばエラー)が発生した場合には、ビーンフロー実行層EJB55は、ファサードバリューの送信元であるWEBサーバに、応答(例えば例外オブジェクト)を返すことができる。
【0086】
以上の説明によれば、ユニットオブワーク内に何を記述するかや、コマンドオブジェクトやユニットオブワークの配列をどうするかによって、ファサードバリュー上で、トランザクションのフローを定義することができる。EJBサーバ7には、そのファサードバリューを受けて解析するファサード層EJB51と、ユニットオブワークを処理するトランザクション分離層EJB53と、コマンドオブジェクトを処理するビーンフロー実行層EJB55とが備えられる。ファサード層EJB51及びビーンフロー実行層EJB55の属性は「Required」であり、トランザクション分離層EJB53の属性は「Requires New」である。ユニットオブワークに包まれていないコマンドオブジェクトの処理の依頼は、ファサード層EJB51からトランザクション分離層EJB53を介することなくビーンフロー実行層EJB55にされるが、ユニットオブワークに包まれたコマンドオブジェクトの処理の依頼は、ファサード層EJB51からトランザクション分離層EJB53を介してビーンフロー実行層EJB55にされる。以上のことにより、EJBをたくさんつくらなくても、呼び出し側でのファサードバリューの構成の仕方で、複雑なEJBの規約に関係無く、呼び出し側からEJBサーバ7に対してトランザクションのフローをコントロールすることができる。例えば、図6Aに例示するようなファサードバリューを作成してEJBサーバ7に与えれば、図6Bに例示するようなトランザクションフローを実行させることができる(図6Bにおける点線は、トランザクション境界を示す)。
【0087】
なお、上記の説明では、ファサード層EJB51が、ファサードバリューの送信の際に呼び出されるが、それに代えて、例えば、ファサードバリューを蓄積するためのキューをEJBサーバ7に設け、EJBサーバ7で受信されたファサードバリューはそのキューに蓄積され、ファサード層EJB51が、順次、そのキューからファサードバリューを読み出して処理することもできる。すなわち、ステートレスな処理において、同期・非同期を気にしなくて済む。
【0088】
さて、以下、上述したビーンフロー実行層EJB55が行うことのできる処理について詳細に説明する。
【0089】
図7Aは、ビーンフロー実行層EJB55が行うことのできる一つの処理の流れを示す。
【0090】
この図7Aに示すように、ビーンフロー実行層EJB55は、ビーンフロー定義ファイル記憶域57に記憶されている一以上のビーンフロー定義ファイルの中から一つのビーンフロー定義ファイル81を選択し、選択したビーンフロー定義ファイル81を読み出す(S41)。そして、ビーンフロー実行層EJB55は、読み出したビーンフロー定義ファイル81を解釈し、その解釈の結果に基づいて、ビーンフロー83を作成し、作成したビーンフロー83を、ビーンフロー記憶域59に格納する(S42)。
【0091】
これにより、一又は複数のビーンフローがビーンフロー記憶域59に記憶される。
【0092】
図7Bは、ビーンフロー定義ファイル81の構成の概要を示す。
【0093】
ビーンフロー定義ファイル81は、所定の形式のファイル、例えば、XML(eXtensible Markup Language)形式のファイルである。ビーンフロー定義ファイル81は、例えば、コマンドオブジェクトと一対一で用意される。ビーンフロー定義ファイル81には、ビーンフローの定義が記述されている。ビーンフロー定義ファイル81には、一又は複数のビーンフローを定義することができる。つまり、一つのコマンドオブジェクトで、一つのビーンフローだけでなく、複数のビーンフローを実行させるようにすることができる。
【0094】
一つのビーンフローの定義90の中には、例えば、ビーンフローの名称である「フロー名」、ビーンフローの偽の名前である「エイリアス名」、ビーンフローの実行の際に確保されるべきリソースに関する「リソース情報」、及び、ビーンフローを構成するビーンの実行に関する「実行単位記述」が含まれる。
【0095】
エイリアス名は、例えば、呼び出し側の管理者或いはEJBサーバ7の管理者が、登録することができる。エイリアス名は、一つのビーンフローに複数個登録することもできる。このため、呼び出し元は、EJBサーバ7に対してエイリアス名でビーンフローを指定すれば、異なるエイリアス名であっても同一のビーンフローを実行させることができる。
【0096】
リソース情報には、例えば、リソースの名称である「リソース名」や、リソースを取得する際のキーとなる「リソースキー」が含まれる。また、リソース情報には、ビーンフローがリソースに対してフローコントロールを行うか否か(例えば、正常終了時にリソースに対してコミットを指示し、異常終了時にロールバックをリソースに対して指示するか否か)を表す情報や、確保されたリソースをビーンフローの終了時にクローズするか否かを表す情報等も含めることができる。
【0097】
実行単位記述には、例えば、実行単位の名称である「実行単位名」や、実行するビーンの「クラス名」や、実行するビーンの「メソッド名」や、実行単位の出力オブジェクトを取得するゲッターの名称である「ゲッター名」や、実行単位の属性に関する「属性情報」が含まれる。一つのビーンフローにおいて複数の実行単位がある場合には、実行単位の実行順序に従って、それら複数の実行単位にそれぞれ対応した複数の実行単位記述が並ぶ。ここで、実行単位とは、クラス名で指定されたビーン(以下、指定ビーン)における、メソッド名で指定されたメソッド(以下、指定メソッド)のことである。また、属性情報には、例えば、指定ビーンのインスタンスを生成して指定メソッドを実行することを意味する第一の属性値と、ビーンフローへの入力オブジェクトを指定ビーンに渡して指定メソッドを実行することを意味する第二の属性値と、直前の実行単位のビーンを指定ビーンに渡して指定メソッドを実行することを意味する第三の属性値との少なくとも一つを含めることができる。
【0098】
図8A、図8B及び図8Cは、ビーンフロー定義ファイル81における記述の具体例を示す。具体的には、図8Aは、一つのビーンフローが一つの実行単位を実行するための記述の一例である。図8Bは、一つのビーンフローが二つの実行単位を実行し、且つ、二つ目の実行単位で一つの実行単位におけるビーンから値を取得するための記述の一例である。図8Cは、一つのビーンフローが一つの実行単位を実行し、且つ、入力オブジェクトのメソッドを実行してその実行結果をそのビーンフローの出力オブジェクトとして返すための記述の一例である。
【0099】
ビーンフロー定義ファイル81は、XML等の構造化タグ言語で表すことができる。ビーンフロー定義ファイル81を解釈するビーンフロー実行層EJB55は、どんなタグがあるかによって、生成すべきビーンフローを決定する。
【0100】
以下、幾つかのタグについて説明する。
【0101】
タグ「flow」で設定された範囲には、一つのビーンフローの定義が表される。ここにおける「name」は、ビーンフローの名称(flow name)を表している。タグ「flow」で設定された範囲には、複数のリソース要素、エイリアス要素、ステップ要素(実行単位要素)を含む。
【0102】
タグ「resource」で設定された範囲には、リソース情報が表される。具体的には、リソースの取得や、リソースに対するコミット或いはロールバック等のフローコントロールをビーンフローが行う(換言すれば、ビーンそれ自体がリソースの取得やフローコントロールを行うことを排除する)ために、このリソース情報を使用して、リソースの取得とフローコントロールがビーンフローによって行われる。ここのタグで設定された範囲における「name」は、リソースの名前(resource name)を表し、「key」は、リソースを取得する際のキーを表す。「trancontrol」及び「tranclose」は、リソースに対して何を行うかをビーンフローに設定するための情報である。「trancontrol」は、属性値「true」の場合、ビーンフローがリソースに対してフローコントロールを行うことを意味する(すなわち、ビーンフローの全ての実行単位が正常に終了した場合、リソースに対してコミットを指示し、ビーンフローの実行中に例外が発生したならば、リソースに対してロールバックを指示することを意味する)。また、「trancontrol」は、属性値「false」の場合、ビーンフローがリソースに対してフローコントロールは行わないようにすることを意味する。「tranclose」は、属性値「true」の場合、ビーンフローの終了時に、ビーンフローがリソースに対してクローズを実行することを意味する。「tranclose」は、属性値「false」の場合、ビーンフローはリソースに対してクローズは実行しない。なお、「trancontrol」及び「tranclose」のうちの少なくとも一方は属性値の記述が省略可能であり、省略されている場合には、一方の属性値(例えばtrue)が設定されているものとして扱われる。
【0103】
タグ「alias」で設定された範囲には、エイリアス名(alias name)が設定される。
【0104】
タグ「step」で設定された範囲には、任意のビーンの任意のメソッドを1つのビーンフロー中に関連付けて動作させることを定義することができる。また、ビーンフロー中の各実行単位(ステップ)は、名前を有し、他の実行単位(又はそこでのビーン)を名前で参照することができる。ここの範囲における「name」は、実行単位の名前を表し、「class Name」は、実行単位で実行するビーンのクラス名を表し、「method Name」は、実行単位で実行するビーンのメソッドの名前を表す。また、「getter Name」は、実行単位の出力オブジェクトを取得するゲッターの名称を表す。ここで、「this」を指定された場合、実行単位で実行したビーンそのものが出力オブジェクトとなることを意味する。また、「type」は、実行単位でのメソッドの実行に関する属性を表す。具体的には、例えば、属性値「new」の場合、「className」で指定されたビーンのインスタンスを生成し、「methodName」で指定されたメソッドを実行することを意味する。また、例えば、属性値「input」の場合、ビーンフローへの入力オブジェクトを「className」で指定されたビーンに渡し「methodName」で指定されたメソッドがその入力オブジェクトを用いて処理を実行することを意味する。また、例えば、属性値「step」の場合、直前の実行単位の出力値を「className」で指定されたビーンに渡し、「methodName」で指定されたメソッドがその出力値を用いて処理を実行することを意味する。
【0105】
以上のようなタグや属性値をビーンフロー定義ファイルでどのように設定するかによって、例えば、後述する図11A〜図11Eに例示するような処理を実行できるビーンフローの作成が可能となる。
【0106】
なお、ビーンフロー定義ファイルに複数のビーンフローが定義されている場合には、例えば、<flows>というタグが、複数のビーンフロー定義よりも前に記述される。ビーンフロー実行層EJB55は、このタグから、ビーンフローを生成するビーンフロー実行層EJB55が、ビーンフロー定義ファイル81に、一つのビーンフローが定義されているのか、或いは、複数のビーンフローが定義されているのかを判別することができる。
【0107】
ビーンフロー実行層EJB55は、以上のようなビーンフロー定義ファイルを解釈し、そのビーンフロー定義ファイル上で定義されている通りのビーンフロー83を作成する。一つのビーンフロー定義ファイルに複数のビーンフロー定義があれば、それら複数のビーンフロー定義にそれぞれ対応した複数のビーンフローが作成される。
【0108】
図9Aは、ビーンフローの構成例を示す。
【0109】
ビーンフロー83は、一又は複数のビーンを実行させるためのオブジェクトである。一つのビーンフロー83は、ビーンフロー定義ファイル81の一つのビーンフロー定義90に対応する。ビーンフロー83には、対応するビーンフロー定義90で表されているビーンフロー名、エイリアス名及びリソース情報が設定される。また、ビーンフロー83には、対応するビーンフロー定義90で表されている複数(例えば3つ)の実行単位記述にそれぞれ対応した複数(例えば3つ)の実行単位設定86A、86B及び86Cがセットされる。複数の実行単位設定86A、86B及び86Cは、実行単位の実行順序に従って並べられる。各実行単位設定86A、86B、86Cには、その実行単位設定に対応した実行単位記述で表されている種々の設定要素(例えば、実行単位名、クラス名、メソッド名、属性情報)がセットされる。
【0110】
ビーンフロー実行層EJB55は、コマンドオブジェクトの処理依頼を受けた場合、そのコマンドオブジェクトに対応するビーンフロー83がどれであるかを特定し、特定されたビーンフロー83を実行することができる。
【0111】
図9Bは、コマンドオブジェクトの処理依頼を受けた場合にビーンフロー実行層EJB55が行う処理の流れを示す。
【0112】
ビーンフロー実行層EJB55は、コマンドオブジェクトの処理依頼を受けた場合、そのコマンドオブジェクト内のビーンフローキーを参照する(S50)。ビーンフローキーは、ビーンフロー名を表すキーであってもよいし、エイリアス名を表すキーであってもよい。ビーンフロー実行層EJB55は、参照したビーンフローキーがビーンフロー名とエイリアス名とのどちらを表しているかを、例えば、ビーンフローキーに所定のコードが含まれているか否かにより、判別することができる。この場合、例えば、ファサードバリューを作成する呼び出し元側で、コマンドオブジェクトを記述する際に、ビーンフローキーに所定のコードを含めるか否かにより、ビーンフロー名として特定させるか或いはエイリアス名として特定させるかをコントロールすることができる。
【0113】
ビーンフロー実行層EJB55は、参照したビーンフローキーに対応するビーンフロー及びインターセプタの検索を行う(S51)。具体的には、例えば、ビーンフロー実行層EJB55は、参照したビーンフローキーがビーンフロー名を表しているのか、或いは、エイリアス名を表しているのかを判別する。ビーンフロー名を表していると判別された場合、ビーンフロー実行層EJB55は、ビーンフローキーに適合するビーンフロー名を有するビーンフロー83をビーンフロー記憶域59から検索し、且つ、ビーンフローキーとインターセプタ定義ファイル80との比較を行い、その比較により特定されたインターセプタ95をプログラムモジュール記憶域61から取得する。一方、エイリアス名を表していると判別された場合、ビーンフロー実行層EJB55は、ビーンフローキーに適合するエイリアス名を有するビーンフロー83をビーンフロー記憶域59から検索し、且つ、ビーンフローキーとインターセプタ定義ファイル80との比較を行い、その比較により特定されたインターセプタ95をプログラムモジュール記憶域61から取得する。
【0114】
ビーンフロー実行層EJB55は、S51で検索されたビーンフロー83及びインターセプタ95を実行する(S52)。ここでは、例えば、S51で複数のビーンフロー83が検索ヒットした場合(具体的には、ビーンフロー定義ファイル81に複数のビーンフロー定義90があったことにより複数のビーンフロー83が取得された場合)、ビーンフロー実行層EJB55は、それら複数のビーンフロー83を、ビーンフロー定義ファイル81で定義されている順番で実行することができる。どんな順番で実行するかは、例えば、ビーンフロー定義ファイル81を参照することで特定されてもよいし、ビーンフロー83に実行順序が書き込まれていれば、その実行順序から特定されてもよい。ビーンフロー83の実行では、そのビーンフロー83に設定された情報に基づいて、プログラムモジュール61からビーン85が検索され、そのビーン85のインスタンス化や、インスタンス化されたビーン85の実行等が行われる。
【0115】
ビーンフロー実行層EJB55は、例えば、図10Aに例示する方法により、外部AP45に対してビーンフローの参照を提供することができる。
【0116】
すなわち、ビーンフロー実行層EJB55は、例えば、各ビーンフロー定義ファイル81を参照することにより、ビーンフロー毎に、エイリアス名とビーンフロー名との対応付けを表した名称変換マップ201を生成する。
【0117】
ビーンフロー実行層EJB55は、エイリアス名であるビーンフローキーを含んだビーンフロー取得要求を外部AP45から受け、その要求に応答して、そのビーンフローキー(エイリアス名)に対応するビーンフローの参照(つまりビーンフロー名)を取得し、取得したビーンフロー名を外部AP45に返す。
【0118】
これにより、外部AP45は、ビーンフローを、エイリアス名だけでなく、ビーンフロー名で指定することができるようになる(なお、格別図示しないが、ビーンフロー実行層EJB55と外部AP45とのやりとりは、ファサード層EJB51を介して行われる)。
【0119】
エイリアス名或いはビーンフロー名で或るビーンフロー83が指定された場合、そのビーンフロー83は以下のような処理を行う。
【0120】
図10Bは、ビーンフロー83が行う処理の流れの一例を示す。
【0121】
(1)ビーンフロー83がビーンフロー実行層EJB55から実行指示を受ける。具体的には、例えば、ビーンフロー83で特定されているメソッドが、コマンドオブジェクトの処理依頼を受けたビーンフロー実行層EJB55から、そのコマンドオブジェクト内の入力オブジェクトを引数に、コールされる。
【0122】
(2)ビーンフロー83は、リソース情報に基づいて、リソース群(例えば、メモリ領域、JMS(Java Messaging System)セッション等)92から、リソース名から特定されるリソース94を、リソースキーを用いて取得し確保する。
【0123】
(3)ビーンフロー83は、ビーンフロー83の実行単位設定86A(図9A参照)に基づいて、実行単位88Aを構築する。具体的には、ビーンフロー83は、実行単位設定86A内のクラス名に適合するビーンをプログラムモジュール記憶域61から選択し、選択されたビーンをインスタンス化する(ビーンをロード可能な状態にする)。プログラムモジュール記憶域61に記憶されているビーンは、EJBの規約で作られたビーンではなく、POJOである。その記憶域61に格納されている複数のPOJOには、例えば、データベース38内の検索を行うためのPOJOや、データベース38の更新を行うためのPOJO等、データベース38の操作を行うためのPOJOが含まれている。
【0124】
(4)ビーンフロー83は、実行単位設定86A内の属性情報の全部又は一部を、インスタンス化されたビーン(POJO)に対して設定する。このような処理により、実行単位88Aが構築される。具体的には、例えば、実行単位88Aにおけるビーン(インスタンス化されたビーン)が動作可能な状態となる。
【0125】
(5)以後、ビーンフロー83で定義された処理順(換言すれば、ビーンフロー定義ファイル81で定義された処理順)で処理が行われる。ここでは、ビーン85Aにおける指定メソッドがビーンフロー83により実行される。
【0126】
(6)全ての実行単位が行われた場合、或る実行単位(例えば最後の実行単位)におけるメソッドの処理結果(又は、処理を実行したビーンそれ自体)が、出力オブジェクトとして、ビーンフロー実行層EJB55に返される。
【0127】
(7)ビーンフロー83の実行が正常に終了した場合、リソース情報に基づいて、ビーンフロー83が、確保されたリソース94をクローズする(つまり開放する)。また、ビーンフロー83は、例えば、例外(例えば障害)が発生した場合には、ビーンフローの正常終了でなくても、リソース94を開放する。
【0128】
前述したように、ビーンフロー定義ファイル81には、複数の実行単位を登録することができる。この場合、例えば、上記(3)〜(5)の処理が、実行単位の数、繰り返される。
【0129】
ビーンフロー定義ファイル81の記述によって、以下のことも可能である。すなわち、例えば、ビーンフロー定義ファイル81における各実行単位記述で、「第一のビーンによる第一の処理結果が第二のビーンに渡され、その第一の処理結果を受けた第二のビーンがその第一の処理結果を保持し、その第二のビーンの処理結果による第二の処理結果が処理依頼元に返される」というような定義がされていたとする。この場合は、その定義に従って、ビーンフロー83が各ビーンを実行させる。それにより、第一のビーンによる第一の処理結果が第二のビーンに渡され、その第一の処理結果を受けた第二のビーンがその第一の処理結果を保持し、その第二のビーンの処理結果による第二の処理結果が処理依頼元に返される、ということが行われる。
【0130】
以上の一連の処理では、ビーンフロー83は、ビーン85Aを実行する際、確保されたリソース94をビーン85Aの処理の際に利用させるが、リソース94に対するコントロールまではビーン85Aに行わせない。また、例えば、ビーン85Aの処理の際に例外(例えば障害)が発生した場合、そのビーン85Aは、コマンドオブジェクト内の例外オブジェクトを、処理依頼元(或いは大本の呼出し元)に送ってもよい。
【0131】
以上が、ビーンフロー定義ファイル81に従って作成されるビーンフロー83の実行についての説明である。管理者(例えば、EJBサーバ7又はWEBサーバ5の管理者)は、ビーンフロー定義ファイル81のビーンフロー定義90内にどんな情報を設定するかにより、様々なビーンフロー83をEJBサーバ7に作成させること、換言すれば、一つのコマンドオブジェクトで様々な処理をEJBサーバ7に実行させることができる。
【0132】
例えば、複数個の実行単位を一つのビーンフローで定義することができる。具体的には、例えば、図11Aに例示するように、実行単位名「step1」の実行単位におけるビーンのゲッター(ゲッター名から特定されるもの)が取得した情報と、実行単位名「step2」の実行単位におけるビーンのゲッターが取得した情報とを、実行単位名「step3」の実行単位におけるビーンにセットさせることができる。
【0133】
また、例えば、図11Bに例示するように、実行単位88Dに、コマンドオブジェクト内の入力オブジェクト87Aを入力し、インスタンス化されたビーン85Dに、その入力オブジェクト87Aを用いて処理を実行させることもできる。
【0134】
また、例えば、図11Cに例示するように、実行単位88Eに、コマンドオブジェクト内の入力オブジェクト87Bを、ビーンとして、指定メソッドを実行させることもできる。
【0135】
また、例えば、図11Dに例示するように、処理を実行したビーン85Eのゲッターを使って、ビーンフローの出力オブジェクト89を取得させることもできる。
【0136】
また、例えば、図11Eに例示するように、処理を実行したビーン85Fの参照を、ビーンフローの戻り値として、コマンドオブジェクトの処理依頼元(又は大本の呼び出し元)に、返させることもできる。
【0137】
以上、これまでに述べた実施形態の説明から、以下のようなことが言える。
【0138】
例えば、従来は、EJBサーバによりデータベースの操作を行うためには、エンティティビーンを作成し、EJBコンテナにデプロイする必要がある。
【0139】
しかし、上述した実施形態によれば、3つのEJB51、53及び55により、トランザクションコントロールを行うことができるため、エンティティビーンを作成する必要はない。上記のように、所定の処理を実行するプログラムモジュールを多数個準備しておきさえすれば、後は、ビーンフロー定義ファイル81での定義次第で、ビーンフロー実行層EJB55に、それら多数のプログラムモジュールの中から一又は複数のプログラムモジュールが選択させ、選択された一又は複数のプログラムモジュールの実行順序を決定させ、決定された順序で一又は複数のプログラムモジュールが実行させられる。これにより、例えば、様々なトランザクションコントロールをEJBサーバに行わせたい場合でも、それら様々なトランザクションコントロールをそれぞれ実行させるために様々なエンティティビーンを作成する必要はなくなる。
【0140】
また、上述した実施形態によれば、ビーンフロー定義ファイル81の定義次第で、例えば、第一のビーンのゲッターで取得した情報を第二のビーンにセットしたり、第一のビーンフローの出力(例えば処理結果)を第二のビーンフローに入力しその出力を用いて第二のビーンフローに処理を実行させたりすることもできる。つまり、こういったことを別の言い方をするのであれば、「ステートフルなビーンをステートレスに表すことができる」と言えよう。すなわち、EJB51、53及び55は、ステートレスなビーンであるが、インスタンス化されるPOJOに入力される属性情報次第で(つまり、ビーンフロー定義ファイル81の定義次第で)、そのPOJOをステートフルなビーンとして動作させることができる。
【0141】
さて、上述した通り、コマンドオブジェクトに含まれているビーンフローキーから一又は複数のビーンフローが特定されるが、それに加えて、ビーンフローキーに基づいて、一又は複数のインターセプタが特定される。特定された一又は複数のインターセプタによる処理は、特定された一又は複数のビーンフローの実行の前及び後の少なくとも一方で行われる。以下、それに関して詳細に説明する。
【0142】
図12は、インターセプタ定義ファイル91の一例を示す。
【0143】
インターセプタ定義ファイル91は、所定形式のファイル、例えば、XML形式のファイルとすることができる。インターセプタ定義ファイル91には、プログラムモジュール記憶域61に存在する全てのインターセプタ(例えばJava(登録商標)のクラス)についての定義が記述されていてもよい。また、所定の種別毎にインターセプタ定義ファイル91が用意され、各インターセプタ定義ファイル91に、その種別に応じたインターセプタ定義が記述されていてもよい。
【0144】
インターセプタ定義ファイル91には、例えば、多数のインターセプタ95のうちの複数のインターセプタ95の各々について、インターセプタ名と、そのインターセプタ名を持つインターセプタが選択されるための条件(以下、インターセプタ選択条件)とが設定される。図12では、インターセプタ名は、<intercepter-name>と</intercepter-name>とのタグ間に存在する記述であり、インターセプタ選択条件は、<pattern>と</pattern>とのタグ間に存在する記述である。
【0145】
インターセプタ選択条件は、様々な方法で表し得るが、本実施形態では、キーワードと正規表現(ワイルドカード)との組み合わせで表すことができる。すなわち、この図12に例示するインターセプタ定義ファイル91によれば、インターセプタ名「bank#Inter-cepter-A」というインターセプタ(以下、説明の便宜上、これを「インターセプタA」と称する)は、ビーンフローキーにキーワード「bank.」が含まれてさえいれば選択される。また、インターセプタ名「bank#Inter-cepter-B」というインターセプタ(以下、説明の便宜上、これを「インターセプタB」と称する)は、ビーンフローキーにキーワード「bank.service.」が含まれてさえいれば選択される。また、インターセプタ名「bank#Inter-cepter-C」というインターセプタ(以下、説明の便宜上、これを「インターセプタC」と称する)は、ビーンフローキーにキーワード「bank.service.furikomi」が含まれてさえいれば選択される。また、インターセプタ名「bank#Inter-cepter-D」というインターセプタ(以下、説明の便宜上、これを「インターセプタD」と称する)は、ビーンフローキーにキーワード「master.」が含まれてさえいれば選択される。
【0146】
なお、例えば、ビーンフローキーが指すものをビーンフロー名とエイリアス名のどちらにするかによって、同一のビーンフローが実行されても、選択されるインターセプタを違えることができる。具体例を言えば、ビーンフロー名「bank.service.」とエイリアス名「master.」とを有したビーンフローがあった場合、ビーンフローキーが「bank.service.」であっても「master.」であっても、そのビーンフローが実行されることになるが、そのビーンフローの実行の際に選択されるインターセプタは異なる。すなわち、ビーンフローキーが「bank.service.」であった場合には、インターセプタA及びBが選択されることになるが、ビーンフローキーが「master.」であった場合には、インターセプタDが選択されることになる。
【0147】
以上のようなインターセプタ定義ファイル91では、四つのインターセプタA〜Dの名称とインターセプタ選択条件とが定義されている。そのインターセプタ選択条件に従って複数のインターセプタが選択された場合、例えば、選択された複数のインターセプタがビーンフローの実行の前に実行されるのであれば、選択された複数のインターセプタは、このインターセプタ定義ファイル91での記述の順序で実行される。また、例えば、選択された複数のインターセプタがビーンフローの実行の後に実行されるのであれば、選択された複数のインターセプタは、このインターセプタ定義ファイル91での記述の順序とは逆の順序で実行される。
【0148】
以下、コマンドオブジェクト内のビーンフローキーに基づいて選択されるインターセプタがA及びBである場合を例に採り、その場合に行われる処理の流れについて説明する。
【0149】
図13Aは、コマンドオブジェクト内のビーンフローキーに基づいて選択されるインターセプタがA及びBである場合に実行される処理の説明図である。図13Bは、その処理の流れを示す。
【0150】
ビーンフロー実行層EJB55には、インターセプタ管理オブジェクト402と、ビーンフロー実行オブジェクト403とが含まれている。ビーンフロー実行層EJB55は、インターセプタ管理オブジェクト402により、ビーンフローキーとインターセプタ選択条件とに基づいて一以上のインターセプタを選択したり、インターセプタ定義ファイル91での記述に基づいて、上記選択された一以上のインターセプタの実行順序を特定したりすることができる。また、ビーンフロー実行層EJB55は、ビーンフローを実行させるビーンフローオブジェクト403により、ビーンフローキーに適合するビーンフローを実行させることができる。
【0151】
具体的には、インターセプタ管理オブジェクト402が、インターセプタA及びBの順序で実行することが特定された場合に、まず、インターセプタAを実行させる(S60)。それにより、インターセプタAが、所定の前処理(ビーンフローの実行前に実行すべき所定の処理)を実行し(S61)、その前処理が終わったならば、インターセプタ管理オブジェクト402を呼び出す。次に、インターセプタ管理オブジェクト402が、インターセプタBを実行させる(S62)。それにより、インターセプタBが、所定の前処理を実行し(S63)、その前処理が終わったならば、インターセプタ管理オブジェクト402を呼び出す。最後のインターセプタBから呼び出されたならば、インターセプタ管理オブジェクト402が、ビーンフロー実行オブジェクト403を呼び出す(S64)。呼び出されたビーンフロー実行オブジェクト403は、ビーンフローキーに適合するビーンフローを実行させる。
【0152】
その後、ビーンフローの実行終了が検出されたならば(例えば、ビーンフロー実行オブジェクト403がビーンフローから所定の出力を受けたならば)、ビーンフロー実行オブジェクト403がインターセプタ管理オブジェクト402を呼び出す。呼び出されたインターセプタ管理オブジェクト402は、上記特定された実行順序(前処理の実行順序)とは逆の順序でインターセプタを実行させる。すなわち、インターセプタ管理オブジェクト402は、インターセプタBを実行させる(S66)。インターセプタBにより所定の後処理(ビーンフローの実行後に実行すべき所定の処理)が実行された後(S67)、インターセプタBから呼び出されたならば、インターセプタ管理オブジェクト402は、インターセプタAを実行させる(S68)。インターセプタAにより所定の後処理が行われた後(S69)、インターセプタAから呼び出されたならば、インターセプタ管理オブジェクト402は、情報(例えば、上記選択された一以上のインターセプタの実行結果)を出力する(S70)。
【0153】
以上の説明によれば、インターセプタ定義ファイル91に設定するキーワードと正規表現との組み合わせにより、コマンドオブジェクトに含まれているビーンフローキーに応じて、実行させる一以上のインターセプタやそれらの実行順序とを違えることができる。
【0154】
以上、本発明の好適な実施形態を説明したが、これは本発明の説明のための例示であって、本発明の範囲をこの実施形態にのみ限定する趣旨ではない。本発明は、他の種々の形態でも実施することが可能である。例えば、上述の説明では、或る対象を特定するためのキーとして名称が用いられているが、それに限らず、多種のIDが採用されてもよい。また、ファサードバリュー上でのトランザクション境界の定義の仕方は、トランザクション分離の対象となるコマンドオブジェクトをユニットオブワークに内包させる仕方に限らず、例えば、トランザクション分離の対象となるコマンドオブジェクトに所定コードを付加する等の仕方を採用することもできる。
【図面の簡単な説明】
【0155】
【図1】図1は、本発明の一実施形態に係るシステムのハードウェア構成の概要を示すブロック図である。
【図2】図2は、図1に示したシステムのソフトウェア構成の概要を示すブロック図である。
【図3】図3は、図2に示したシステムで行われる処理の流れの概要を示す。
【図4】図4Aは、ファサードバリューの構成の一例を示す。図4Bは、図4Aに示したファサードバリュー46の処理流れを示す。
【図5】図5Aは、ファサード層EJB51が行う処理の流れを示す。図5Bは、トランザクション分離層EJB53が行う処理の流れを示す。図5Cは、ビーンフロー実行層EJB55が行う処理の流れを示す。
【図6】図6Aは、ファサードバリューの構成の別の一例を示す。図6Bは、図6Aに示したファサードバリューの処理流れを示す。
【図7】図7Aは、ビーンフロー実行層EJB55が行うことのできる一つの処理の流れを示す。図7Bは、ビーンフロー定義ファイル81の構成の概要を示す。
【図8】図8A、図8B及び図8Cは、ビーンフロー定義ファイル81における記述の具体例を示す。
【図9】図9Aは、ビーンフローの構成例を示す。図9Bは、コマンドオブジェクトの処理依頼を受けた場合にビーンフロー実行層EJB55が行う処理の流れを示す。
【図10】図10Aは、外部APにビーンフローの参照が提供されるための方法の説明図である。図10Bは、ビーンフロー83が行う処理の流れの一例を示す。
【図11】図11Aは、ビーンフローの第一の処理実行例を示す。図11Bは、ビーンフローの第二の処理実行例を示す。図11Cは、ビーンフローの第三の処理実行例を示す。図11Dは、ビーンフローの第四の処理実行例を示す。図11Eは、ビーンフローの第五の処理実行例を示す。
【図12】図12は、インターセプタ定義ファイル91の一例を示す。
【図13】図13Aは、コマンドオブジェクト内のビーンフローキーに基づいて選択されるインターセプタがA及びBである場合に実行される処理の説明図である。図13Bは、その処理の流れを示す。
【符号の説明】
【0156】
1…情報処理サーバ 3…クライアントシステム 5…WEBサーバ 7…EJBサーバ 13、23、33…CPU 15、25、35…メモリ 17、27、37…ハードディスク 38…データベース 43…WEBブラウザ 45…外部アプリケーション 47…ファサードバリュー選択プログラム 49…ファサードバリュー記憶域 51…ファサード層EJB 53…トランザクション分離層EJB 55…ビーンフロー実行層EJB 57…ビーンフロー定義ファイル記憶域 59…ビーンフロー記憶域 61…プログラムモジュール記憶域 63…インターセプタ定義ファイル記憶域
【特許請求の範囲】
【請求項1】
複数のコンピュータプログラムを記憶する記憶資源と、
前記記憶資源に記憶された複数のコンピュータプログラムのうちの少なくとも一つを実行する少なくとも一つのコンピュータと
を備え、
前記複数のコンピュータプログラムには、
要求元からの処理要求を受付ける受付けプログラムと、
所定の処理を実行する一以上の処理プログラムと
が含まれており、
前記処理要求には、実行すべき複数の処理対象と前記複数の処理対象の実行順序とが定義されており、
前記受付けプログラムが、前記処理要求を受け、前記受けた処理要求を解析し、前記処理要求で定義されている前記実行順序で、前記処理要求で定義されている複数の処理対象の各々の処理を、前記一以上の処理プログラムのうちの少なくとも一つに依頼し、
前記受付けプログラムから処理の依頼を受けた処理プログラムが、依頼された処理対象の処理を行う、
情報処理システム。
【請求項2】
前記処理要求には、少なくとも一つのトランザクション分離範囲と、そのトランザクション分離範囲に属する処理対象とが定義されており、
前記受付けプログラムが、トランザクション分離範囲に属する処理対象については、トランザクション分離範囲に属さない処理対象に関するトランザクションから独立した処理が行われるように前記一以上の処理プログラムに処理を依頼する、
請求項1記載の情報処理システム。
【請求項3】
前記一以上の処理プログラムには、第一の処理を実行する第一の処理プログラムと、前記第一の処理とは別の第二の処理を実行する第二の処理プログラムとが含まれており、
前記受付けプログラムが、前記受けた処理要求を解析することにより、トランザクション分離範囲が検出された場合には、前記第一の処理プログラムに処理を依頼し、処理対象が検出された場合には、前記第二の処理プログラムに処理を依頼する、
請求項2記載の情報処理システム。
【請求項4】
前記受付けプログラム及び前記第二の処理プログラムは、呼出し元に返ってコミットする性質を有し、
前記第一の処理プログラムは、新たにトランザクションを作成し、呼び出し元のトランザクションに参加せずにトランザクションを完結させる性質を有し、
前記受付けプログラムから処理の依頼を受けた前記第一の処理プログラムが、前記トランザクション分離範囲に属する処理対象の処理を前記第二の処理プログラムに依頼し、
前記受付けプログラム又は前記第一の処理プログラムから処理の依頼を受けた前記第二の処理プログラムが、依頼された処理を実行し、実行の結果を依頼元に返し、
前記第一の処理プログラムは、前記第二の処理プログラムから実行の結果を受けた場合、処理の依頼元である受付けプログラムのトランザクションに参加することなく、依頼した処理に関わるトランザクションをコミットし、
前記受付けプログラムは、前記第二の処理プログラムから実行の結果を受けた場合、依頼した処理に関わるトランザクションをコミットする、
請求項3記載の情報処理システム。
【請求項5】
前記処理要求には、トランザクション分離範囲に含まれる更なるトランザクション分離範囲が定義されており、
前記第一の処理プログラムは、前記更なるトランザクション分離範囲が検出された場合には、自分に対して前記更なるトランザクション分離範囲の処理を依頼する、
請求項4記載の情報処理システム。
【請求項6】
前記一以上の処理プログラムには、依頼された処理対象の処理を実行する実行プログラムが含まれており、
前記受付けプログラム及び前記実行プログラムは、呼出し元に返ってコミットする性質を有し、
前記受付けプログラムから処理の依頼を受けた前記実行プログラムが、依頼された処理対象の処理を実行する、
請求項1記載の情報処理システム。
【請求項7】
複数のコンピュータプログラムを記憶する記憶資源と、前記記憶資源に記憶された複数のコンピュータプログラムのうちの少なくとも一つを実行する少なくとも一つのコンピュータとを備えた情報処理システムにより実現される情報処理方法であって、
前記複数のコンピュータプログラムには、
要求元からの処理要求を受付ける受付けプログラムと、
所定の処理を実行する一以上の処理プログラムと
が含まれており、
前記処理要求には、実行すべき複数の処理対象と前記複数の処理対象の実行順序とが定義されており、
前記要求元からの前記処理要求の内容に関わらず前記処理要求を受け、前記受けた処理要求を解析し、前記処理要求で定義されている前記実行順序で、前記処理要求で定義されている複数の処理対象の各々の処理を、前記一以上の処理プログラムのうちの少なくとも一つに依頼するということを、前記受付けプログラムにより実行するステップと、
前記受付けプログラムから処理の依頼を受けた処理プログラムにより、依頼された処理対象の処理を行うステップと
を有する情報処理方法。
【請求項1】
複数のコンピュータプログラムを記憶する記憶資源と、
前記記憶資源に記憶された複数のコンピュータプログラムのうちの少なくとも一つを実行する少なくとも一つのコンピュータと
を備え、
前記複数のコンピュータプログラムには、
要求元からの処理要求を受付ける受付けプログラムと、
所定の処理を実行する一以上の処理プログラムと
が含まれており、
前記処理要求には、実行すべき複数の処理対象と前記複数の処理対象の実行順序とが定義されており、
前記受付けプログラムが、前記処理要求を受け、前記受けた処理要求を解析し、前記処理要求で定義されている前記実行順序で、前記処理要求で定義されている複数の処理対象の各々の処理を、前記一以上の処理プログラムのうちの少なくとも一つに依頼し、
前記受付けプログラムから処理の依頼を受けた処理プログラムが、依頼された処理対象の処理を行う、
情報処理システム。
【請求項2】
前記処理要求には、少なくとも一つのトランザクション分離範囲と、そのトランザクション分離範囲に属する処理対象とが定義されており、
前記受付けプログラムが、トランザクション分離範囲に属する処理対象については、トランザクション分離範囲に属さない処理対象に関するトランザクションから独立した処理が行われるように前記一以上の処理プログラムに処理を依頼する、
請求項1記載の情報処理システム。
【請求項3】
前記一以上の処理プログラムには、第一の処理を実行する第一の処理プログラムと、前記第一の処理とは別の第二の処理を実行する第二の処理プログラムとが含まれており、
前記受付けプログラムが、前記受けた処理要求を解析することにより、トランザクション分離範囲が検出された場合には、前記第一の処理プログラムに処理を依頼し、処理対象が検出された場合には、前記第二の処理プログラムに処理を依頼する、
請求項2記載の情報処理システム。
【請求項4】
前記受付けプログラム及び前記第二の処理プログラムは、呼出し元に返ってコミットする性質を有し、
前記第一の処理プログラムは、新たにトランザクションを作成し、呼び出し元のトランザクションに参加せずにトランザクションを完結させる性質を有し、
前記受付けプログラムから処理の依頼を受けた前記第一の処理プログラムが、前記トランザクション分離範囲に属する処理対象の処理を前記第二の処理プログラムに依頼し、
前記受付けプログラム又は前記第一の処理プログラムから処理の依頼を受けた前記第二の処理プログラムが、依頼された処理を実行し、実行の結果を依頼元に返し、
前記第一の処理プログラムは、前記第二の処理プログラムから実行の結果を受けた場合、処理の依頼元である受付けプログラムのトランザクションに参加することなく、依頼した処理に関わるトランザクションをコミットし、
前記受付けプログラムは、前記第二の処理プログラムから実行の結果を受けた場合、依頼した処理に関わるトランザクションをコミットする、
請求項3記載の情報処理システム。
【請求項5】
前記処理要求には、トランザクション分離範囲に含まれる更なるトランザクション分離範囲が定義されており、
前記第一の処理プログラムは、前記更なるトランザクション分離範囲が検出された場合には、自分に対して前記更なるトランザクション分離範囲の処理を依頼する、
請求項4記載の情報処理システム。
【請求項6】
前記一以上の処理プログラムには、依頼された処理対象の処理を実行する実行プログラムが含まれており、
前記受付けプログラム及び前記実行プログラムは、呼出し元に返ってコミットする性質を有し、
前記受付けプログラムから処理の依頼を受けた前記実行プログラムが、依頼された処理対象の処理を実行する、
請求項1記載の情報処理システム。
【請求項7】
複数のコンピュータプログラムを記憶する記憶資源と、前記記憶資源に記憶された複数のコンピュータプログラムのうちの少なくとも一つを実行する少なくとも一つのコンピュータとを備えた情報処理システムにより実現される情報処理方法であって、
前記複数のコンピュータプログラムには、
要求元からの処理要求を受付ける受付けプログラムと、
所定の処理を実行する一以上の処理プログラムと
が含まれており、
前記処理要求には、実行すべき複数の処理対象と前記複数の処理対象の実行順序とが定義されており、
前記要求元からの前記処理要求の内容に関わらず前記処理要求を受け、前記受けた処理要求を解析し、前記処理要求で定義されている前記実行順序で、前記処理要求で定義されている複数の処理対象の各々の処理を、前記一以上の処理プログラムのうちの少なくとも一つに依頼するということを、前記受付けプログラムにより実行するステップと、
前記受付けプログラムから処理の依頼を受けた処理プログラムにより、依頼された処理対象の処理を行うステップと
を有する情報処理方法。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【公開番号】特開2006−251951(P2006−251951A)
【公開日】平成18年9月21日(2006.9.21)
【国際特許分類】
【出願番号】特願2005−64907(P2005−64907)
【出願日】平成17年3月9日(2005.3.9)
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
1.JAVA
【出願人】(000155469)株式会社野村総合研究所 (1,067)
【Fターム(参考)】
【公開日】平成18年9月21日(2006.9.21)
【国際特許分類】
【出願日】平成17年3月9日(2005.3.9)
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
1.JAVA
【出願人】(000155469)株式会社野村総合研究所 (1,067)
【Fターム(参考)】
[ Back to top ]