(57)【要約】【課題】  要求元から要求される処理別に受付けプログラムを作成しなくても済むようにする。【解決手段】  要求元からの処理要求（４６）を受付ける受付けプログラム（５１）と、所定の処理を実行する一以上の処理プログラム（５３、５５）とがある。処理要求には、実行すべき複数の処理対象とそれら複数の処理対象の実行順序とが定義されている。受付けプログラムが、要求元からの処理要求の内容に関わらず処理要求を受けて、受けた処理要求を解析し、その処理要求で定義されている上記実行順序で、その処理要求で定義されている複数の処理対象の各々の処理を、上記一以上の処理プログラムのうちの少なくとも一つに依頼する。受付けプログラムから処理の依頼を受けた処理プログラムが、依頼された処理対象の処理を行う。【選択図】  図２
2006251951.tif 000002
【特許請求の範囲】
【請求項１】
複数のコンピュータプログラムを記憶する記憶資源と、
前記記憶資源に記憶された複数のコンピュータプログラムのうちの少なくとも一つを実行する少なくとも一つのコンピュータと
を備え、
前記複数のコンピュータプログラムには、
要求元からの処理要求を受付ける受付けプログラムと、
所定の処理を実行する一以上の処理プログラムと
が含まれており、
前記処理要求には、実行すべき複数の処理対象と前記複数の処理対象の実行順序とが定義されており、
前記受付けプログラムが、前記処理要求を受け、前記受けた処理要求を解析し、前記処理要求で定義されている前記実行順序で、前記処理要求で定義されている複数の処理対象の各々の処理を、前記一以上の処理プログラムのうちの少なくとも一つに依頼し、
前記受付けプログラムから処理の依頼を受けた処理プログラムが、依頼された処理対象の処理を行う、
情報処理システム。
【請求項２】
前記処理要求には、少なくとも一つのトランザクション分離範囲と、そのトランザクション分離範囲に属する処理対象とが定義されており、
前記受付けプログラムが、トランザクション分離範囲に属する処理対象については、トランザクション分離範囲に属さない処理対象に関するトランザクションから独立した処理が行われるように前記一以上の処理プログラムに処理を依頼する、
請求項１記載の情報処理システム。
【請求項３】
前記一以上の処理プログラムには、第一の処理を実行する第一の処理プログラムと、前記第一の処理とは別の第二の処理を実行する第二の処理プログラムとが含まれており、
前記受付けプログラムが、前記受けた処理要求を解析することにより、トランザクション分離範囲が検出された場合には、前記第一の処理プログラムに処理を依頼し、処理対象が検出された場合には、前記第二の処理プログラムに処理を依頼する、
請求項２記載の情報処理システム。
【請求項４】
前記受付けプログラム及び前記第二の処理プログラムは、呼出し元に返ってコミットする性質を有し、
前記第一の処理プログラムは、新たにトランザクションを作成し、呼び出し元のトランザクションに参加せずにトランザクションを完結させる性質を有し、
前記受付けプログラムから処理の依頼を受けた前記第一の処理プログラムが、前記トランザクション分離範囲に属する処理対象の処理を前記第二の処理プログラムに依頼し、
前記受付けプログラム又は前記第一の処理プログラムから処理の依頼を受けた前記第二の処理プログラムが、依頼された処理を実行し、実行の結果を依頼元に返し、
前記第一の処理プログラムは、前記第二の処理プログラムから実行の結果を受けた場合、処理の依頼元である受付けプログラムのトランザクションに参加することなく、依頼した処理に関わるトランザクションをコミットし、
前記受付けプログラムは、前記第二の処理プログラムから実行の結果を受けた場合、依頼した処理に関わるトランザクションをコミットする、
請求項３記載の情報処理システム。
【請求項５】
前記処理要求には、トランザクション分離範囲に含まれる更なるトランザクション分離範囲が定義されており、
前記第一の処理プログラムは、前記更なるトランザクション分離範囲が検出された場合には、自分に対して前記更なるトランザクション分離範囲の処理を依頼する、
請求項４記載の情報処理システム。
【請求項６】
前記一以上の処理プログラムには、依頼された処理対象の処理を実行する実行プログラムが含まれており、
前記受付けプログラム及び前記実行プログラムは、呼出し元に返ってコミットする性質を有し、
前記受付けプログラムから処理の依頼を受けた前記実行プログラムが、依頼された処理対象の処理を実行する、
請求項１記載の情報処理システム。
【請求項７】
複数のコンピュータプログラムを記憶する記憶資源と、前記記憶資源に記憶された複数のコンピュータプログラムのうちの少なくとも一つを実行する少なくとも一つのコンピュータとを備えた情報処理システムにより実現される情報処理方法であって、
前記複数のコンピュータプログラムには、
要求元からの処理要求を受付ける受付けプログラムと、
所定の処理を実行する一以上の処理プログラムと
が含まれており、
前記処理要求には、実行すべき複数の処理対象と前記複数の処理対象の実行順序とが定義されており、
前記要求元からの前記処理要求の内容に関わらず前記処理要求を受け、前記受けた処理要求を解析し、前記処理要求で定義されている前記実行順序で、前記処理要求で定義されている複数の処理対象の各々の処理を、前記一以上の処理プログラムのうちの少なくとも一つに依頼するということを、前記受付けプログラムにより実行するステップと、
前記受付けプログラムから処理の依頼を受けた処理プログラムにより、依頼された処理対象の処理を行うステップと
を有する情報処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理技術に関し、具体的には、例えば、ＥＪＢ（Enterprise JavaBeans）を利用した情報処理技術に関する。
【背景技術】
【０００２】
例えば、クライアントマシンとサーバシステムとを備えたシステムがある。サーバシステムは、例えば、プレゼンテーション層、ビジネスロジック層及びデータストア層から成る三階層で構築することができる。プレゼンテーション層は、ユーザから入力を受付けたりユーザに情報を出力したりするためのユーザインターフェースを提供できる層であり、例えば、ＷＥＢサーバにより実現することができる。ビジネスロジック層は、情報処理を行うための層であり、例えば、ＥＪＢサーバにより実現することができる。データストア層は、情報を保存するための層であり、例えば、データベースにより実現することができる。
【０００３】
ＥＪＢ（Enterprise JavaBeans）を利用した情報処理技術としては、例えば特許文献１乃至特許文献５に開示の技術が知られている。
【０００４】
【特許文献１】特開２０００−２５０７６８号公報
【特許文献２】特開２００２−０８２９２６号公報
【特許文献３】特開２００３−３２３４０５号公報
【特許文献４】特開２００４−０８６３５５号公報
【特許文献５】特開２００４−３１８８３１号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
ところで、例えば、ＥＪＢサーバには、呼び出し口としてのＥＪＢ（以下、ファサードＥＪＢ）が用意される。ファサードＥＪＢには、予め定められた実行すべき処理が記述されている。呼び出されたファサードＥＪＢは、呼び出し元からの要求に従う処理、つまり、その要求に対応した予め定められた処理を実行するようになっている。このため、呼出し元（上記の例ではWEBサーバ）は、何を要求するかに応じて、呼び出すファサードＥＪＢを違える。
【０００６】
すなわち、同種の処理でも、要求が違えば処理が異なるので、ＥＪＢサーバには、処理別にファサードＥＪＢを用意する必要がある。具体的には、例えば、画面に情報を表示するという点で同種の処理であっても、表示する画面の構成が違えば、行う処理も異なるので（例えば、表示すべき情報が異なるので）、各画面構成に対応した各処理毎に、ファサードＥＪＢを用意する必要がある。この場合、例えば、ＷＥＢサーバは、第一の画面構成の画面（例えば情報Ａを表示する画面）を表示するための第一のファサードＥＪＢを呼び出して第一の画面構成の画面をクライアントシステムに提供した後に、第二の画面構成の画面（例えば情報Ａ及び情報Ｂを表示する画面）を表示することの要求（つまり画面変更の要求）をクライアントシステムから受けた場合には、別途、第二の画面構成の画面を表示するための第二のファサードＥＪＢを呼び出すことになる。
【０００７】
このように、ＥＪＢサーバには、呼出し元から要求される処理別にファサードＥＪＢを用意する必要がある。このため、呼出し元から要求される処理にはどんなものがあるかに応じてたくさんのファサードＥＪＢを作成する必要がある。ＥＪＢの作成は、通常、コーディングにより行われる。ファサードＥＪＢとは異なる他種のＥＪＢに加えて、呼出し元から要求される処理別にファサードＥＪＢを作成するのは、ＥＪＢサーバを構築する上で大きな負担となる。
【０００８】
この種の問題点は、ＥＪＢサーバの構築に限らず、要求元から要求される処理別に要求元に対する受付けとなるコンピュータプログラム（以下、受付けプログラム）を作成する必要がある別種のサーバの構築についても同様に存在すると考えられる。
【０００９】
従って、本発明の目的の一つは、要求元から要求される処理別に受付けプログラムを作成しなくても済むようにすることにある。
【課題を解決するための手段】
【００１０】
本発明の一つの側面に従う情報処理システムは、複数のコンピュータプログラムを記憶する記憶資源と、前記記憶資源に記憶された複数のコンピュータプログラムのうちの少なくとも一つを実行する少なくとも一つのコンピュータとを備える。前記複数のコンピュータプログラムには、要求元からの処理要求を受付ける受付けプログラムと、所定の処理を実行する一以上の処理プログラムとが含まれている。前記処理要求には、実行すべき複数の処理対象と前記複数の処理対象の実行順序とが定義されている。前記受付けプログラムが、前記処理要求を受け（例えば、前記要求元からの前記処理要求の内容に関わらず前記処理要求を受け）、前記受けた処理要求を解析し、前記処理要求で定義されている前記実行順序で、前記処理要求で定義されている複数の処理対象の各々の処理を、前記一以上の処理プログラムのうちの少なくとも一つに依頼する。前記受付けプログラムから処理の依頼を受けた処理プログラムが、依頼された処理対象の処理を行う。
【００１１】
ここで、「情報処理システム」は、一台のコンピュータマシンで構成されても良いし、複数台のコンピュータマシンで構成されても良い。また、「コンピュータ」は、コンピュータマシンであっても良いし、コンピュータマシンに搭載されるプロセッサ（例えばＣＰＵ）であっても良い。また、「記憶資源」は、複数の記憶装置（例えば、ハードディスク又はメモリ）のうちの少なくとも一つによって構成されてもよい。
【００１２】
一つの実施態様では、前記処理要求には、少なくとも一つのトランザクション分離範囲と、そのトランザクション分離範囲に属する処理対象とを定義することができる。前記受付けプログラムが、トランザクション分離範囲に属する処理対象については、トランザクション分離範囲に属さない処理対象に関するトランザクションから独立した処理が行われるように前記一以上の処理プログラムに処理を依頼することができる。
【００１３】
一つの実施態様では、前記一以上の処理プログラムには、第一の処理を実行する第一の処理プログラムと、前記第一の処理とは別の第二の処理を実行する第二の処理プログラムとを含めることができる。前記受付けプログラムが、前記受けた処理要求を解析することにより、トランザクション分離範囲が検出された場合には、前記第一の処理プログラムに処理を依頼し、処理対象が検出された場合には、前記第二の処理プログラムに処理を依頼することができる。
【００１４】
一つの実施態様では、前記受付けプログラム及び前記第二の処理プログラムは、呼出し元に返ってコミットする性質を有することができる（例えば、Requiredという属性のＥＪＢであるとすることができる）。前記第一の処理プログラムは、新たにトランザクションを作成し、呼び出し元のトランザクションに参加せずにトランザクションを完結させる性質を有することができる（例えば、Requires Newという属性のＥＪＢであるとすることができる）。前記受付けプログラムから処理の依頼を受けた前記第一の処理プログラムが、前記トランザクション分離範囲に属する処理対象の処理を前記第二の処理プログラムに依頼することができる。前記受付けプログラム又は前記第一の処理プログラムから処理の依頼を受けた前記第二の処理プログラムが、依頼された処理対象の処理を実行し、実行の結果を依頼元に返すことができる。前記第一の処理プログラムは、前記第二の処理プログラムから実行の結果を受けた場合、処理の依頼元である受付けプログラムのトランザクションに参加することなく、依頼した処理に関わるトランザクションをコミットすることができる。前記受付けプログラムは、前記第二の処理プログラムから実行の結果を受けた場合、依頼した処理に関わるトランザクションをコミットすることができる。
【００１５】
一つの実施態様では、前記処理要求には、トランザクション分離範囲に含まれる更なるトランザクション分離範囲を定義することができる。前記第一の処理プログラムは、前記更なるトランザクション分離範囲が検出された場合には、自分に対して前記更なるトランザクション分離範囲の処理を依頼することができる。
【００１６】
一つの実施態様では、前記一以上の処理プログラムには、依頼された処理対象の処理を実行する実行プログラムを含めることができる。前記受付けプログラム及び前記実行プログラムは、呼出し元に返ってコミットする性質を有することができる（例えば、Requiredという属性のＥＪＢであるとすることができる）。前記受付けプログラムから処理の依頼を受けた前記実行プログラムが、依頼された処理対象の処理を実行することができる。
【００１７】
なお、情報処理システムは、複数のコンピュータプログラムを記憶する記憶資源と、前記記憶資源に記憶された多数のコンピュータプログラムのうちの少なくとも一つを実行する少なくとも一つのコンピュータとを備えてもよい。前記多数のコンピュータプログラムには、複数の処理要素実行プログラムと、処理要素実行プログラムの数よりも少ない数の処理プログラムとが含まれていてもよい。前記複数の処理要素実行プログラムの各々は、所定の処理対象の処理を構成する一以上の処理要素のうちの所定の処理要素を実行する。前記処理プログラムは、前記所定の処理対象の処理を構成する一以上の処理要素をそれぞれ実行する一以上の処理要素実行プログラムを実行することにより、前記所定の処理対象の処理を実行してもよい。
【００１８】
一つの実施態様では、前記記憶資源には、各処理対象に対応した各処理定義データが記憶されていてもよい。各処理定義データには、各処理対象の処理を構成する一以上の処理要素の実行手順に関する定義を記述することができる。前記処理プログラムが、所定の処理対象に対応した処理定義データに基づいて、その所定の処理対象の処理を実行することができる。
【００１９】
一つの実施態様では、前記複数の処理要素実行プログラム以外の一以上のコンピュータプログラムのうちの少なくとも一つが、前記所定の処理対象に対応する処理定義データに基づいて、その処理定義データで定義された実行手順でその処理定義データで定義された一以上の処理要素を実行するための処理実行対象を生成することができる。前記処理プログラムが、前記処理実行対象を実行することにより、前記所定の処理対象の処理を実行することができる。
【００２０】
一つの実施態様では、前記処理定義データには、前記実行手順に関する定義として、第一の処理要素実行プログラムの出力を第二の処理要素実行プログラムに入力してその第二の処理要素実行プログラムがその出力を用いて処理することが記述されていてもよい。前記処理実行対象が、前記処理定義データに従って、前記第一の処理要素実行プログラムの出力を第二の処理要素実行プログラムに入力してその第二の処理要素実行プログラムにその出力を用いて処理を行わせることができる。
【００２１】
一つの実施態様では、前記複数のコンピュータプログラムには、要求元からの処理要求を受付ける受付けプログラムが含まれていてもよい。前記受付けプログラムが、前記要求元からの処理要求を受け、前記受けた処理要求を解析し、前記処理要求で定義されている一以上の処理対象の各々の処理を、前記処理プログラムに依頼することができる。前記処理プログラムが、前記受付けプログラムから依頼された処理対象の処理を行うことができる。前記受付けプログラム及び前記処理プログラムは、ステートレスセッションビーンとしてのＥＪＢとすることができる。
【００２２】
一つの実施態様では、前記処理定義データには、その処理定義データに基づいて生成される処理実行対象が前記一以上の処理要素実行プログラムのために確保されたリソースを開放することが記述されていてもよい。前記処理実行対象が、前記前記一以上の処理要素実行プログラムのために確保されたリソースを開放することができる。
【００２３】
一つの実施態様では、前記複数のコンピュータプログラムには、要求元からの処理要求を受付ける受付けプログラムが含まれていてもよい。前記受付けプログラムが、前記要求元からの処理要求を受け、前記受けた処理要求を解析し、前記処理要求で定義されている一以上の処理対象の各々の処理を、前記処理プログラムに依頼することができる。前記処理プログラムが、前記受付けプログラムから依頼された処理対象の処理を行うことができる。
【００２４】
一つの実施態様では、前記複数の処理要素実行プログラムとは異なる一以上のコンピュータプログラムのうちの前記実行される一以上の処理要素実行プログラムのために確保されたリソースを開放するリソース開放手段を備え、前記リソース開放手段が前記一以上の処理要素実行プログラムではないことを特徴とすることができる。
【００２５】
情報処理システムは、要求元からの要求に従う処理を実行する処理実行手段と、前記処理に対応する一以上のサブ処理を前記要求に基づいて複数のサブ処理の中から選択するサブ処理選択手段と、前記選択されたサブ処理を前記処理の実行前及び実行後のうちの少なくとも一方で実行するサブ処理実行手段とを備えてもよい。
【００２６】
一つの実施態様では、情報処理システムは、複数のサブ処理にそれぞれ対応した複数のサブ処理ＩＤ及び複数のサブ処理選択条件を記憶した記憶手段を備えることができる。前記サブ処理選択手段は、前記要求に適合する一以上のサブ処理選択条件を前記複数のサブ処理選択条件の中から特定し、特定された一以上のサブ処理選択条件に対応する一以上のサブ処理ＩＤから識別される一以上のサブ処理を選択することができる。
【００２７】
一つの実施態様では、前記サブ処理選択条件は、キーワードを含んでもよい。前記サブ処理選択手段は、前記要求に含まれている特定の文字列と、サブ処理選択条件を構成するキーワードとに基づいて、前記要求に適合する一以上のサブ処理選択条件を特定することができる。
【００２８】
一つの実施態様では、前記サブ処理選択条件は、キーワードと正規表現との組み合わせで構成されていてもよい。前記サブ処理選択手段は、前記要求に含まれている特定の文字列と、サブ処理選択条件を構成するキーワード及び正規表現とに基づいて、前記要求に適合する一以上のサブ処理選択条件を特定することができる。
【００２９】
一つの実施態様では、前記処理には、一つの本名と一以上の別名とがあってもよい。前記要求には特定の文字列が含まれており、前記特定の文字列は、要求対象となる処理の本名と別名とのいずれか一方を表していてもよい。
【発明を実施するための最良の形態】
【００３０】
以下、図面を参照して、本発明の一実施形態について説明する。
【００３１】
図１は、本発明の一実施形態に係るシステムのハードウェア構成の概要を示すブロック図である。
【００３２】
クライアントシステム３に、サーバシステム６が通信可能に（例えば、インターネット等の通信ネットワークを介して）接続されている。
【００３３】
クライアントシステム３は、例えば、一以上のＣＰＵ（Central Processing Unit）１３や一以上の記憶資源（例えば一以上のメモリ１５や一以上のハードディスク１７）等のハードウェア資源を備えたコンピュータシステムである。クライアントシステム３は、例えば、パーソナルコンピュータ、ワークステーション、メインフレーム等として構成することができる。クライアントシステム３は、例えば、キーボードスイッチやポインティングデバイス、マイクロフォン等の情報入力装置（図示せず）と、例えば、モニタディスプレイやスピーカー等の情報出力装置（図示せず）とを備えることもできる。
【００３４】
サーバシステム６は、例えば、プレゼンテーション層、ビジネスロジック層及びデータストア層から成る三階層で構成することができる。この場合、例えば、プレゼンテーション層を、ＷＥＢサーバ５で構成し、ビジネスロジック層を、ＥＪＢサーバ７で構成し、データストア層を、データベース３８で構成することができる。ＷＥＢサーバ５は、例えば、一以上のＣＰＵ２３や一以上の記憶資源（例えば一以上のメモリ２５や一以上のハードディスク２７）等のハードウェア資源を備えたコンピュータシステムである。ＥＪＢサーバ７も、例えば、一以上のＣＰＵ３３や一以上の記憶資源（例えば一以上のメモリ３５や一以上のハードディスク３７）等のハードウェア資源を備えたコンピュータシステムである。データベース３８も、図示しないが、一以上のＣＰＵや一以上の記憶資源等のハードウェア資源を備えたコンピュータシステムとすることができる。
【００３５】
なお、サーバシステム６の構成は、図示の構成に限らず、他の構成を採用することができる。また、クライアントシステム３、ＷＥＢサーバ５、ＥＪＢサーバ７及びデータベース３８のうちの少なくとも一つは、一台のコンピュータシステムで構成されていても良いし、複数台のコンピュータシステムで構成されていても良い。
【００３６】
図２は、図１に示したシステムのソフトウェア構成の概要を示すブロック図である。
【００３７】
クライアントシステム３には、ＷＥＢブラウザ４３が備えることができる。ＷＥＢブラウザ４３は、ＷＥＢサーバ５に対して要求を発行したり、その要求に従う情報をＷＥＢサーバ５から受信して表示したりすることができる。
【００３８】
ＷＥＢサーバ５には、ファサードバリュー記憶域４９と、外部アプリケーション４５とが備えられる。
【００３９】
ファサードバリュー記憶域４９は、上述した記憶資源上に設けられるものであり、一又は複数のファサードバリューを記憶することができる。ファサードバリューは、本実施形態における一つの特徴であり、トランザクションをフローとして記述することができるコマンドパッケージである。ファサードバリューについては、後に詳細に説明する。
【００４０】
外部アプリケーション４５は、ＥＪＢサーバ７の外部に存在するアプリケーションプログラムであり、メモリ２５からＣＰＵ２３に読み込まれることにより、ＥＪＢサーバ７から情報を取得したり、その取得した情報をＷＥＢブラウザ４３に提供したりすることができる。具体的には、例えば、外部アプリケーション４５は、ファサードバリュー選択プログラム４７を備え、そのプログラム４７により、ＷＥＢブラウザ４３からの要求（例えば、画面切替え要求）に対応したファサードバリューをファサードバリュー記憶域４９の中から選択し、選択したファサードバリューをＥＪＢサーバ７に送信する。それにより、外部アプリケーション４５は、ＷＥＢブラウザ４３からの要求に従う情報をＥＪＢサーバ７から受信し、その受信した情報をＷＥＢサーバ５に提供することができる。なお、この実施形態では、ＷＥＢサーバ５がＥＪＢサーバ７に対して要求する処理別にファサードバリューがファサードバリュー記憶域４９に記憶されているものとする。しかし、例えば、ＷＥＢサーバ５の管理者が、任意のタイミングで、キーボード等の情報入力装置を用いてファサードバリューを作成し、作成したファサードバリューをファサードバリュー記憶域４９に記憶させたり、作成したファサードバリューをＷＥＢサーバ５からＥＪＢサーバ７に送信させたりすることもできる。
【００４１】
ＥＪＢサーバ７には、後述するビーンフロー定義ファイルが記憶されるビーンフロー定義ファイル記憶域５７や、後述するビーンフローが記憶されるビーンフロー記憶域５９や、複数のプログラムモジュールが記憶されるプログラムモジュール記憶域６１や、後述するインターセプタ定義ファイルが記憶されるインターセプタ定義ファイル記憶域６３や、複数のＥＪＢがデプロイされたＥＪＢコンテナ１４が備えられる。各記憶域５７、５９、６１及び６３は、上述した記憶資源上に設けられるものである。プログラムモジュール記憶域６１に記憶されるプログラムモジュールには、例えば、ビーンや、インターセプタ（これも、ビーンであってもよい）等がある。その記憶域６１に記憶されるビーンは、後述する工夫により、ＥＪＢではなくＰＯＪＯ（Plain Old Java Object）とすることができる。ＥＪＢコンテナ１４にデプロイされた複数のＥＪＢとして、例えば、ファサード層ＥＪＢ５１と、トランザクション分離層ＥＪＢ５３と、ビーンフロー実行層ＥＪＢ５５とがある。各ＥＪＢ５１、５３及び５５、後述するビーンやインターセプタ等の種々のコンピュータプログラムは、例えば、記憶資源からＣＰＵに読み込まれることにより実行される。
【００４２】
ファサード層ＥＪＢ５１は、呼び出し元（この実施形態ではＷＥＢサーバ５）にとっての呼出し口となるものであり、呼び出し元から発行されるファサードバリューを受けて解釈するＥＪＢである。ファサードバリューの記述内容に関わらず、同一のファサード層ＥＪＢ５１が呼び出される。換言すれば、ファサードバリューで定義されたフローがどんなものであっても、ファサードバリューの受付口は、この一つのファサード層ＥＪＢ５１で済む。こうすることができた理由については、後に詳細に説明する。
【００４３】
トランザクション層ＥＪＢ５３は、ファサードバリューで定義されているユニットオブワークを処理するＥＪＢである。ユニットオブワークについては後に詳述する。
【００４４】
ビーンフロー実行層ＥＪＢ５５は、ファサードバリューで定義されているコマンドオブジェクトを処理するＥＪＢである。コマンドオブジェクトについても後に詳述する。
【００４５】
上述した３つのＥＪＢ５１、５３及び５５や、プログラムモジュール記憶域６１に記憶されているビーンは、ＣＰＵ３３に読み込まれることにより動作することができる。また、ＥＪＢサーバ７が、複数台のコンピュータシステムにより構築された分散型システムの場合には、各コンピュータシステムの各ＣＰＵに読み込まれることにより、ＥＪＢ５１、５３又は５５や、プログラムモジュール記憶域６１に記憶されているプログラムモジュールが動作することができる。
【００４６】
ＥＪＢの種類は幾つかあるが、上述したＥＪＢ５１、５３及び５５は、いずれも、ステートレスセッションビーン（つまり、状態値を保持しないタイプのＥＪＢ）である。
【００４７】
ＥＪＢ５１、５３及び５５のうち、ファサード層ＥＪＢ５１及びビーンフロー実行層ＥＪＢ５５は、第一の属性として、例えば「Required」という属性を有し、トランザクション層ＥＪＢ５３は、第二の属性として、例えば「Requires New」という属性を有する。属性「Required」を有するＥＪＢは、呼び出し元のトランザクションに参加する性質（具体的には、呼出し元に返って初めてコミットする性質）を持つ。属性「Requires New」を有するＥＪＢは、呼び出し元のトランザクションには参加せずに、呼出しの範囲内で（すなわち、属性「Requires New」のＥＪＢのメソッドを読んだ範囲内で）、新たに独立したトランザクションを作成する性質を持つ。例えば、属性「Requires New」を有するＥＪＢは、第一のＥＪＢから呼ばれて、第二のＥＪＢを呼び出した場合、第一のＥＪＢのトランザクションには参加せずに、第二のＥＪＢのトランザクションを完結させる。これにより、例えば、第一のＥＪＢの処理で障害が発生した場合、第一のＥＪＢのトランザクションについてはロールバックが行われるが、第二のＥＪＢのトランザクションは完結しているので、その第二のＥＪＢのトランザクションまでロールバックされない。
【００４８】
以上が、この実施形態に係るシステムでのソフトウェア構成の概要である。以下、そのシステムで行われる処理の流れの概要について説明する。
【００４９】
図３は、図２に示したシステムで行われる処理の流れの概要を示す。
【００５０】
外部アプリケーション４５は、ＷＥＢブラウザ４３から何らかの指示を受ける（ステップＳ１）。外部アプリケーション４５は、例えば、ＷＥＢブラウザ４３に表示される画面の画面構成の変更の指示、或いは、ユーザが指定した銀行口座からの出金の指示など、様々な指示を受付けることができる。
【００５１】
外部アプリケーション４５は、受けた指示を解析し、ファサードバリュー選択プログラム４７により、その解析結果に対応するファサードバリュー４６をファサードバリュー記憶域４９（つまり、複数のファサードバリューの中）から検索する（Ｓ２）。そして、外部アプリケーション４５は、検索ヒットしたファサードバリュー４６をファサードバリュー記憶域４９から取得し（Ｓ３）、ファサード層ＥＪＢ５１を呼び出して、取得したファサードバリュー４６をファサード層ＥＪＢ５１に送信する（Ｓ４）。
【００５２】
ファサード層ＥＪＢ５１は、外部アプリケーション４５から呼び出されてファサードバリュー４６を受信し、受信したファサードバリュー４６を解析し、その解析結果に応じて、トランザクション分離層ＥＪＢ５３及びビーンフロー実行層ＥＪＢ５５のうちのどちらを呼び出すかを選択し、選択したＥＪＢ５３又は５５を呼び出して処理を依頼する。具体的には、ファサード層ＥＪＢ５１は、上記解析の結果、後述するユニットオブワーク（トランザクション境界オブジェクト）を検出した場合には、トランザクション分離層ＥＪＢ５３を呼び出してユニットオブワークの処理を依頼し、そうではなく、後述するコマンドオブジェクトを検出した場合には、ビーンフロー実行層ＥＪＢ５５を呼び出してそのコマンドオブジェクトの処理を依頼する。トランザクション分離層ＥＪＢ５３は、ユニットオブワークの処理の際、そのユニットオブワーク内にある別のユニットオブワークを検出した場合には、自分を呼び出してその別のユニットオブワークの処理を行い（つまり再帰的に処理を行い）、そのユニットオブワーク内にあるコマンドオブジェクトを検出した場合には、ビーンフロー実行層ＥＪＢ５５を呼び出してそのコマンドオブジェクトの処理を依頼する。ビーンフロー実行層ＥＪＢ５５は、依頼されたコマンドオブジェクトの処理を実行する。以上のようにして、ＥＪＢサーバ７において、ファサード層ＥＪＢ５１が受信したファサードバリュー４６の記述に応じた処理が行われる（Ｓ５）。
【００５３】
本実施形態では、上述したように、ファサードバリュー４６で定義されたフローがどんなものであっても、ファサードバリュー４６を解釈することができるファサード層ＥＪＢ５１が一つあれば、呼出し口はこの一つで済む。以下、ファサードバリュー４６の構成、並びに、そのファサードバリュー４６が処理される際に行われる処理流れ（つまり、上記Ｓ５の詳細の一例）について説明する。
【００５４】
図４Ａは、ファサードバリューの構成の一例を示す。
【００５５】
ファサードバリュー４６には、ユニットオブワークと、コマンドオブジェクトとの両方を記述することができる。
【００５６】
ユニットオブワークは、トランザクションの境界（別の言い方をすれば「分離」）を表すオブジェクトである。一つのユニットオブワーク内には、別のユニットオブワークを記述することもできるし、一又は複数のコマンドオブジェクトを記述することもできる。
【００５７】
コマンドオブジェクトは、一つのコマンドに対応するオブジェクトであり、後述するビーンフローを特定するためのキー（例えばコマンド名）を含み、そのキーに対応するビーンフローの実行を指示するためのものである。コマンドオブジェクトは、例えば、図示のように、ビーンフローキー７２、入力オブジェクト７４、出力オブジェクト７６及び例外オブジェクト７８を含む。ビーンフローキー７２は、ビーンフロー記憶域５９から、ビーンフローを取得するためのキーである。ビーンフローキー７２は、プログラムモジュール記憶域６１からインターセプタを取得するキーとして使用することもできる。入力オブジェクト７４は、このコマンドオブジェクトで指定されたコマンド（ビーンフロー）を実行するビーンに入力することができるオブジェクトである。出力オブジェクト７６は、そのコマンドの実行結果を保持することができるオブジェクトである。例外オブジェクト７８は、そのコマンドの実行中に発生した例外を保持することができるオブジェクトである。
【００５８】
ファサードバリューに記述されたユニットオブワークやコマンドオブジェクトは、ファサードバリューの先頭から順に処理される。このため、ファサードバリュー上で、コマンドオブジェクトとユニットオブワークとをどのように配列するかや、そのユニットオブワーク内にコマンドオブジェクト（或いはユニットオブワーク）をどのように配列するかによって、トランザクションのフローを定義することができる。すなわち、ファサードバリューにより、呼び出し元（この実施形態ではＷＥＢサーバ）からトランザクションのコントロールを行うことができる。以下、一つの具体例を説明する。
【００５９】
例えば、呼出し元が、コマンド（ビーンフロー）Ａ、Ｂ及びＣを実行させたいとする。但し、コマンドＡとコマンドＣの実行は、呼出し元から独立したトランザクションとして実行させ、コマンドＢの実行は、呼出し側のトランザクションに参加させたいとする。
【００６０】
トランザクションの分離は、トランザクションを分離するためのオブジェクトであるユニットオブワークを利用することで行う。すなわち、上記例のようなトランザクションコントロールを行うためには、図４Ａに示すように、ファサードバリュー４６におけるオブジェクト群の先頭に、コマンドＡを実行するためのコマンドオブジェクトＡを内包した第一のユニットオブワーク１０Ａを記述し、その第一のユニットオブワーク１０Ａの次に、ユニットオブワークに内包させずにコマンドＢを実行するためのコマンドオブジェクトＢを記述し、そのコマンドオブジェクトＢの次に、コマンドＣを実行するためのコマンドオブジェクトＣを内包した第二のユニットオブワーク１０Ｂを記述する必要がある。
【００６１】
図４Ａに示したファサードバリュー４６が外部アプリケーション（以下、外部ＡＰ）４５からＥＪＢサーバ７に送信されたならば、ＥＪＢサーバ７では、図４Ｂに示す流れで処理が行われる。
【００６２】
図４Ｂは、図４Ａに示したファサードバリュー４６の処理流れを示す。
【００６３】
外部ＡＰ４５からファサード層ＥＪＢ５１が呼び出されてファサードバリュー４６が送信された場合（図３及び図４ＢのＳ４）、ファサード層ＥＪＢ５１がそのファサードバリュー４６を受信して、そのファサードバリュー４６の記述に従う処理が行われる（図３のＳ５）。
【００６４】
具体的には、ファサード層ＥＪＢ５１は、受信したファサードバリュー４６を解析する。それにより、第一のユニットオブワーク１０Ａ、コマンドオブジェクトＢ及び第二のユニットオブワーク１０Ｂの順でフローが構成されていることが検出される。
【００６５】
第一のユニットオブワーク１０Ａが検出された場合、ファサード層ＥＪＢ５１は、トランザクション分離層ＥＪＢ５３を呼出し、その第一のユニットオブワーク１０Ａの処理を、トランザクション分離層ＥＪＢ５３に依頼する（Ｓ５Ａ）。
【００６６】
呼び出されたトランザクション分離層ＥＪＢ５３は、ファサード層ＥＪＢ５１からの依頼に従って、第一のユニットオブワーク１０Ａの処理を行う。具体的には、例えば、トランザクション分離層ＥＪＢ５３は、第一のユニットオブワーク１０Ａを解析する。第一のユニットオブワーク１０Ａには、コマンドオブジェクトＡが含まれているので、そのコマンドオブジェクトＡが検出される。コマンドオブジェクトＡが検出された場合、トランザクション分離層ＥＪＢ５３は、ビーンフロー実行層ＥＪＢ５５を呼出し、そのコマンドオブジェクトＡの処理をビーンフロー実行層ＥＪＢ５５に依頼する（Ｓ５Ｂ）。
【００６７】
呼び出されたビーンフロー実行層ＥＪＢ５５は、トランザクション分離層ＥＪＢ５３からの依頼に従って、コマンドオブジェクトＡから特定されるコマンド（ビーンフロー）の処理を実行し（Ｓ５Ｃ）、応答（例えば処理結果）を、呼び出し元であるトランザクション分離層ＥＪＢ５３に返す（Ｓ５Ｄ）。
【００６８】
トランザクション分離層ＥＪＢ５３は、呼び出し先のビーンフロー実行層ＥＪＢ５５から応答を受けた場合、Ｓ５Ｂで処理依頼したコマンドオブジェクトＡについてコミットする（Ｓ５Ｅ−１〜Ｓ５Ｅ−３）。
【００６９】
具体的には、トランザクション分離層ＥＪＢ５３は、呼び出し先のビーンフロー実行層ＥＪＢ５５から応答を受け、コミットの準備ができた場合、その旨を、自分の呼び出し元であるファサード層ＥＪＢ５１に通知する（Ｓ５Ｅ−１）。ファサード層ＥＪＢ５１は、コミットの準備ができた旨の通知を受けた場合、トランザクション分離層ＥＪＢ５３に所定の指令（例えば、コミットの実行指令）を送る（Ｓ５Ｅ−２）。トランザクション分離層ＥＪＢ５３は、ファサード層ＥＪＢ５１から所定の指令を受けたときに、コマンドオブジェクトＡについてコミットする。そして、トランザクション分離層ＥＪＢ５３は、コミットが完了した旨の通知を、ファサード層ＥＪＢ５１に送る（Ｓ５Ｅ−３）。これにより、ファサード層ＥＪＢ５１は、コマンドオブジェクトＡについての処理から抜けることができる。
【００７０】
このように、ユニットオブワークがファサード層ＥＪＢ５１で検出された場合、ファサード層ＥＪＢ５１に依頼されたトランザクションの処理（つまり、そのユニットオブワークが表すトランザクションの処理）が、ファサード層ＥＪＢ５１からトランザクション分離層ＥＪＢ５３に新たに依頼される。そして、その新たな依頼先は、「Requires New」という属性を持つＥＪＢであり、その「Requires New」のＥＪＢ５３から、そのユニットオブワーク内のコマンドオブジェクトの処理依頼が、「Required」という属性を持ったビーンフロー実行層ＥＪＢ５５に発行される。このため、ファサード層ＥＪＢ５１は、「Required」という属性であるが、ユニットオブワークが表すトランザクションの処理では、呼出し元である外部ＡＰ４５のトランザクションに参加しなくて済む。つまり、トランザクションが分離される。
【００７１】
次に、第一のユニットオブワーク１０Ａの次に記述されているコマンドオブジェクトＢの処理が行われる。すなわち、ファサード層ＥＪＢ５１が、ビーンフロー実行層ＥＪＢ５５を呼出し、コマンドオブジェクトＢの処理をビーンフロー実行層ＥＪＢ５５に依頼する（Ｓ５Ｆ）。呼び出されたビーンフロー実行層ＥＪＢ５５は、その依頼に従って、コマンドオブジェクトＢを処理し（Ｓ５Ｇ）、応答（例えば処理結果）を、呼出し元であるファサード層ＥＪＢ５１に返す（Ｓ５Ｈ）。
【００７２】
次に、コマンドオブジェクトＢの処理が成功したか否かに関わらず、コマンドオブジェクトＢの次に記述されているオブジェクトについての処理が行われる。つまり、ここでは、第二のユニットオブワーク１０Ｂの処理が行われる。第二のユニットオブワーク１０Ｂについての処理流れは、前述した第一のユニットオブワーク１０Ａについての処理流れＳ５Ａ〜Ｓ５Ｅ−３と同様である（Ｓ５Ｉ〜Ｓ５Ｍ−３）。
【００７３】
ファサード層ＥＪＢ５１は、コマンドオブジェクトＢのコミットの準備ができたならば、Ｓ５Ｍ−３の後（若しくは、Ｓ５Ｈ以降のファサード層ＥＪＢ５１の任意のタイミングで）、外部ＡＰ４５に対して、その旨を通知する（Ｓ５Ｎ−１）。外部ＡＰ４５は、コミットの準備ができた旨の通知をファサード層ＥＪＢ５１から受けた場合、所定の指令（例えばコミットの実行指令）をファサード層ＥＪＢ５１に送る（Ｓ５Ｎ−２）。ファサード層ＥＪＢ５１は、その指令を受けたときに、コマンドオブジェクトＢについてコミットし、コミットが完了した場合に、所定の通知（例えばコミットの完了通知）を、外部ＡＰ４５に送る（Ｓ５Ｎ−３）。
【００７４】
以上の流れで、図４Ａに例示したファサードバリュー４６が処理される。このように、トランザクションを分離することができるので、例えば、コマンドオブジェクトＢの処理が失敗しロールバックが起こっても、コマンドオブジェクトＡの処理までロールバックさせずに独立して処理を行わせることができる。つまり、呼び出し側のトランザクションから独立させたい処理は、ユニットオブワークで実行し、呼び出し側のトランザクションに参加させたい処理は、ユニットオブワークに包んでいないコマンドオブジェクトで実行する。
【００７５】
次に、ＥＪＢ５１、５３及び５５がそれぞれ行う処理の流れについて個々に説明する。
【００７６】
図５Ａは、ファサード層ＥＪＢ５１が行う処理の流れを示す。
【００７７】
ファサード層ＥＪＢ５１は、ファサードバリューを受信した場合（Ｓ１１でＹＥＳ）、そのファサードバリューを解析する（Ｓ１２）。それにより、オブジェクトの実行順序がわかる。
【００７８】
今回処理すべきオブジェクトがユニットオブワークであれば（Ｓ１３でＹＥＳ）、ファサード層ＥＪＢ５１は、トランザクション分離層ＥＪＢ５３を呼び出し、そのユニットオブワークの処理をトランザクション分離層ＥＪＢ５３に依頼する（Ｓ１４）。ファサード層ＥＪＢ５１は、その依頼に対する応答を受けた場合（Ｓ１５でＹＥＳ）、特定の処理を行う（例えば上記Ｓ５Ｅ−２を行う）（Ｓ１５Ａ）。Ｓ１１で受けたファサードバリュー内の全てのオブジェクトが処理されたならば（Ｓ１７でＹＥＳ）、ファサード層ＥＪＢ５１は、ファサードバリューの受信待ちとなり、そうではなく未処理のオブジェクトが残っていれば（Ｓ１７でＮＯ）、Ｓ１３に戻る。
【００７９】
今回処理すべきオブジェクトがコマンドオブジェクトであれば（Ｓ１３でＮＯ）、ファサード層ＥＪＢ５１は、ビーンフロー実行層ＥＪＢ５５を呼び出し、そのコマンドオブジェクトの処理をビーンフロー実行層ＥＪＢ５５に依頼する（Ｓ１６）。その後、特定の処理が行われた後（例えば、上記のＳ５Ｈ及びＳ５Ｎ−１〜Ｓ５Ｎ−３の処理が行われた後）（Ｓ１６Ａ）、Ｓ１７の処理が行われる。
【００８０】
図５Ｂは、トランザクション分離層ＥＪＢ５３が行う処理の流れを示す。
【００８１】
トランザクション分離層ＥＪＢ５３は、呼び出された場合（Ｓ２０でＹＥＳ）、処理依頼されたユニットオブワークを解析する（Ｓ２１）。
【００８２】
Ｓ２１の解析の結果、コマンドオブジェクトが検出されたならば（Ｓ２２でＮＯ）、トランザクション分離層ＥＪＢ５３は、ビーンフロー実行層ＥＪＢ５５を呼び出し、そのコマンドオブジェクトの処理をビーンフロー実行層ＥＪＢ５５に依頼する（Ｓ２４）。その後、応答を受けたならば（Ｓ２５でＹＥＳ）、トランザクション分離層ＥＪＢ５３は、特定の処理を行う（例えば、上記Ｓ５Ｅ−１〜Ｓ５Ｅ−３の処理を行う）（Ｓ２６）。
【００８３】
Ｓ２１の解析の結果、ユニットオブワークが検出されたならば（Ｓ２２でＹＥＳ）、トランザクション分離層ＥＪＢ５３は、自分を呼び出し（Ｓ２３）、Ｓ２１に戻る。つまり、ユニットオブワーク内にユニットオブワークが検出された場合には、再帰的に処理が行われる。
【００８４】
図５Ｃは、ビーンフロー実行層ＥＪＢ５５が行う処理の流れを示す。
【００８５】
ビーンフロー実行層ＥＪＢ５５は、呼び出された場合（Ｓ３１でＹＥＳ）、処理依頼されたコマンドオブジェクトの処理を行い（Ｓ２２）、応答（例えば処理結果）を、自分の呼び出し元（ファサード層ＥＪＢ５１又はトランザクション分離層ＥＪＢ５３）に返す（Ｓ３３）。なお、Ｓ２２の処理で例外（例えばエラー）が発生した場合には、ビーンフロー実行層ＥＪＢ５５は、ファサードバリューの送信元であるＷＥＢサーバに、応答（例えば例外オブジェクト）を返すことができる。
【００８６】
以上の説明によれば、ユニットオブワーク内に何を記述するかや、コマンドオブジェクトやユニットオブワークの配列をどうするかによって、ファサードバリュー上で、トランザクションのフローを定義することができる。ＥＪＢサーバ７には、そのファサードバリューを受けて解析するファサード層ＥＪＢ５１と、ユニットオブワークを処理するトランザクション分離層ＥＪＢ５３と、コマンドオブジェクトを処理するビーンフロー実行層ＥＪＢ５５とが備えられる。ファサード層ＥＪＢ５１及びビーンフロー実行層ＥＪＢ５５の属性は「Required」であり、トランザクション分離層ＥＪＢ５３の属性は「Requires New」である。ユニットオブワークに包まれていないコマンドオブジェクトの処理の依頼は、ファサード層ＥＪＢ５１からトランザクション分離層ＥＪＢ５３を介することなくビーンフロー実行層ＥＪＢ５５にされるが、ユニットオブワークに包まれたコマンドオブジェクトの処理の依頼は、ファサード層ＥＪＢ５１からトランザクション分離層ＥＪＢ５３を介してビーンフロー実行層ＥＪＢ５５にされる。以上のことにより、ＥＪＢをたくさんつくらなくても、呼び出し側でのファサードバリューの構成の仕方で、複雑なＥＪＢの規約に関係無く、呼び出し側からＥＪＢサーバ７に対してトランザクションのフローをコントロールすることができる。例えば、図６Ａに例示するようなファサードバリューを作成してＥＪＢサーバ７に与えれば、図６Ｂに例示するようなトランザクションフローを実行させることができる（図６Ｂにおける点線は、トランザクション境界を示す）。
【００８７】
なお、上記の説明では、ファサード層ＥＪＢ５１が、ファサードバリューの送信の際に呼び出されるが、それに代えて、例えば、ファサードバリューを蓄積するためのキューをＥＪＢサーバ７に設け、ＥＪＢサーバ７で受信されたファサードバリューはそのキューに蓄積され、ファサード層ＥＪＢ５１が、順次、そのキューからファサードバリューを読み出して処理することもできる。すなわち、ステートレスな処理において、同期・非同期を気にしなくて済む。
【００８８】
さて、以下、上述したビーンフロー実行層ＥＪＢ５５が行うことのできる処理について詳細に説明する。
【００８９】
図７Ａは、ビーンフロー実行層ＥＪＢ５５が行うことのできる一つの処理の流れを示す。
【００９０】
この図７Ａに示すように、ビーンフロー実行層ＥＪＢ５５は、ビーンフロー定義ファイル記憶域５７に記憶されている一以上のビーンフロー定義ファイルの中から一つのビーンフロー定義ファイル８１を選択し、選択したビーンフロー定義ファイル８１を読み出す（Ｓ４１）。そして、ビーンフロー実行層ＥＪＢ５５は、読み出したビーンフロー定義ファイル８１を解釈し、その解釈の結果に基づいて、ビーンフロー８３を作成し、作成したビーンフロー８３を、ビーンフロー記憶域５９に格納する（Ｓ４２）。
【００９１】
これにより、一又は複数のビーンフローがビーンフロー記憶域５９に記憶される。
【００９２】
図７Ｂは、ビーンフロー定義ファイル８１の構成の概要を示す。
【００９３】
ビーンフロー定義ファイル８１は、所定の形式のファイル、例えば、ＸＭＬ（eXtensible Markup Language）形式のファイルである。ビーンフロー定義ファイル８１は、例えば、コマンドオブジェクトと一対一で用意される。ビーンフロー定義ファイル８１には、ビーンフローの定義が記述されている。ビーンフロー定義ファイル８１には、一又は複数のビーンフローを定義することができる。つまり、一つのコマンドオブジェクトで、一つのビーンフローだけでなく、複数のビーンフローを実行させるようにすることができる。
【００９４】
一つのビーンフローの定義９０の中には、例えば、ビーンフローの名称である「フロー名」、ビーンフローの偽の名前である「エイリアス名」、ビーンフローの実行の際に確保されるべきリソースに関する「リソース情報」、及び、ビーンフローを構成するビーンの実行に関する「実行単位記述」が含まれる。
【００９５】
エイリアス名は、例えば、呼び出し側の管理者或いはＥＪＢサーバ７の管理者が、登録することができる。エイリアス名は、一つのビーンフローに複数個登録することもできる。このため、呼び出し元は、ＥＪＢサーバ７に対してエイリアス名でビーンフローを指定すれば、異なるエイリアス名であっても同一のビーンフローを実行させることができる。
【００９６】
リソース情報には、例えば、リソースの名称である「リソース名」や、リソースを取得する際のキーとなる「リソースキー」が含まれる。また、リソース情報には、ビーンフローがリソースに対してフローコントロールを行うか否か（例えば、正常終了時にリソースに対してコミットを指示し、異常終了時にロールバックをリソースに対して指示するか否か）を表す情報や、確保されたリソースをビーンフローの終了時にクローズするか否かを表す情報等も含めることができる。
【００９７】
実行単位記述には、例えば、実行単位の名称である「実行単位名」や、実行するビーンの「クラス名」や、実行するビーンの「メソッド名」や、実行単位の出力オブジェクトを取得するゲッターの名称である「ゲッター名」や、実行単位の属性に関する「属性情報」が含まれる。一つのビーンフローにおいて複数の実行単位がある場合には、実行単位の実行順序に従って、それら複数の実行単位にそれぞれ対応した複数の実行単位記述が並ぶ。ここで、実行単位とは、クラス名で指定されたビーン（以下、指定ビーン）における、メソッド名で指定されたメソッド（以下、指定メソッド）のことである。また、属性情報には、例えば、指定ビーンのインスタンスを生成して指定メソッドを実行することを意味する第一の属性値と、ビーンフローへの入力オブジェクトを指定ビーンに渡して指定メソッドを実行することを意味する第二の属性値と、直前の実行単位のビーンを指定ビーンに渡して指定メソッドを実行することを意味する第三の属性値との少なくとも一つを含めることができる。
【００９８】
図８Ａ、図８Ｂ及び図８Ｃは、ビーンフロー定義ファイル８１における記述の具体例を示す。具体的には、図８Ａは、一つのビーンフローが一つの実行単位を実行するための記述の一例である。図８Ｂは、一つのビーンフローが二つの実行単位を実行し、且つ、二つ目の実行単位で一つの実行単位におけるビーンから値を取得するための記述の一例である。図８Ｃは、一つのビーンフローが一つの実行単位を実行し、且つ、入力オブジェクトのメソッドを実行してその実行結果をそのビーンフローの出力オブジェクトとして返すための記述の一例である。
【００９９】
ビーンフロー定義ファイル８１は、ＸＭＬ等の構造化タグ言語で表すことができる。ビーンフロー定義ファイル８１を解釈するビーンフロー実行層ＥＪＢ５５は、どんなタグがあるかによって、生成すべきビーンフローを決定する。
【０１００】
以下、幾つかのタグについて説明する。
【０１０１】
タグ「flow」で設定された範囲には、一つのビーンフローの定義が表される。ここにおける「name」は、ビーンフローの名称（flow name）を表している。タグ「flow」で設定された範囲には、複数のリソース要素、エイリアス要素、ステップ要素（実行単位要素）を含む。
【０１０２】
タグ「resource」で設定された範囲には、リソース情報が表される。具体的には、リソースの取得や、リソースに対するコミット或いはロールバック等のフローコントロールをビーンフローが行う（換言すれば、ビーンそれ自体がリソースの取得やフローコントロールを行うことを排除する）ために、このリソース情報を使用して、リソースの取得とフローコントロールがビーンフローによって行われる。ここのタグで設定された範囲における「name」は、リソースの名前（resource name）を表し、「key」は、リソースを取得する際のキーを表す。「trancontrol」及び「tranclose」は、リソースに対して何を行うかをビーンフローに設定するための情報である。「trancontrol」は、属性値「true」の場合、ビーンフローがリソースに対してフローコントロールを行うことを意味する（すなわち、ビーンフローの全ての実行単位が正常に終了した場合、リソースに対してコミットを指示し、ビーンフローの実行中に例外が発生したならば、リソースに対してロールバックを指示することを意味する）。また、「trancontrol」は、属性値「false」の場合、ビーンフローがリソースに対してフローコントロールは行わないようにすることを意味する。「tranclose」は、属性値「true」の場合、ビーンフローの終了時に、ビーンフローがリソースに対してクローズを実行することを意味する。「tranclose」は、属性値「false」の場合、ビーンフローはリソースに対してクローズは実行しない。なお、「trancontrol」及び「tranclose」のうちの少なくとも一方は属性値の記述が省略可能であり、省略されている場合には、一方の属性値（例えばtrue）が設定されているものとして扱われる。
【０１０３】
タグ「alias」で設定された範囲には、エイリアス名（alias name）が設定される。
【０１０４】
タグ「step」で設定された範囲には、任意のビーンの任意のメソッドを１つのビーンフロー中に関連付けて動作させることを定義することができる。また、ビーンフロー中の各実行単位（ステップ）は、名前を有し、他の実行単位（又はそこでのビーン）を名前で参照することができる。ここの範囲における「name」は、実行単位の名前を表し、「class Name」は、実行単位で実行するビーンのクラス名を表し、「method Name」は、実行単位で実行するビーンのメソッドの名前を表す。また、「getter Name」は、実行単位の出力オブジェクトを取得するゲッターの名称を表す。ここで、「this」を指定された場合、実行単位で実行したビーンそのものが出力オブジェクトとなることを意味する。また、「type」は、実行単位でのメソッドの実行に関する属性を表す。具体的には、例えば、属性値「new」の場合、「className」で指定されたビーンのインスタンスを生成し、「methodName」で指定されたメソッドを実行することを意味する。また、例えば、属性値「input」の場合、ビーンフローへの入力オブジェクトを「className」で指定されたビーンに渡し「methodName」で指定されたメソッドがその入力オブジェクトを用いて処理を実行することを意味する。また、例えば、属性値「step」の場合、直前の実行単位の出力値を「className」で指定されたビーンに渡し、「methodName」で指定されたメソッドがその出力値を用いて処理を実行することを意味する。
【０１０５】
以上のようなタグや属性値をビーンフロー定義ファイルでどのように設定するかによって、例えば、後述する図１１Ａ〜図１１Ｅに例示するような処理を実行できるビーンフローの作成が可能となる。
【０１０６】
なお、ビーンフロー定義ファイルに複数のビーンフローが定義されている場合には、例えば、<flows>というタグが、複数のビーンフロー定義よりも前に記述される。ビーンフロー実行層ＥＪＢ５５は、このタグから、ビーンフローを生成するビーンフロー実行層ＥＪＢ５５が、ビーンフロー定義ファイル８１に、一つのビーンフローが定義されているのか、或いは、複数のビーンフローが定義されているのかを判別することができる。
【０１０７】
ビーンフロー実行層ＥＪＢ５５は、以上のようなビーンフロー定義ファイルを解釈し、そのビーンフロー定義ファイル上で定義されている通りのビーンフロー８３を作成する。一つのビーンフロー定義ファイルに複数のビーンフロー定義があれば、それら複数のビーンフロー定義にそれぞれ対応した複数のビーンフローが作成される。
【０１０８】
図９Ａは、ビーンフローの構成例を示す。
【０１０９】
ビーンフロー８３は、一又は複数のビーンを実行させるためのオブジェクトである。一つのビーンフロー８３は、ビーンフロー定義ファイル８１の一つのビーンフロー定義９０に対応する。ビーンフロー８３には、対応するビーンフロー定義９０で表されているビーンフロー名、エイリアス名及びリソース情報が設定される。また、ビーンフロー８３には、対応するビーンフロー定義９０で表されている複数（例えば３つ）の実行単位記述にそれぞれ対応した複数（例えば３つ）の実行単位設定８６Ａ、８６Ｂ及び８６Ｃがセットされる。複数の実行単位設定８６Ａ、８６Ｂ及び８６Ｃは、実行単位の実行順序に従って並べられる。各実行単位設定８６Ａ、８６Ｂ、８６Ｃには、その実行単位設定に対応した実行単位記述で表されている種々の設定要素（例えば、実行単位名、クラス名、メソッド名、属性情報）がセットされる。
【０１１０】
ビーンフロー実行層ＥＪＢ５５は、コマンドオブジェクトの処理依頼を受けた場合、そのコマンドオブジェクトに対応するビーンフロー８３がどれであるかを特定し、特定されたビーンフロー８３を実行することができる。
【０１１１】
図９Ｂは、コマンドオブジェクトの処理依頼を受けた場合にビーンフロー実行層ＥＪＢ５５が行う処理の流れを示す。
【０１１２】
ビーンフロー実行層ＥＪＢ５５は、コマンドオブジェクトの処理依頼を受けた場合、そのコマンドオブジェクト内のビーンフローキーを参照する（Ｓ５０）。ビーンフローキーは、ビーンフロー名を表すキーであってもよいし、エイリアス名を表すキーであってもよい。ビーンフロー実行層ＥＪＢ５５は、参照したビーンフローキーがビーンフロー名とエイリアス名とのどちらを表しているかを、例えば、ビーンフローキーに所定のコードが含まれているか否かにより、判別することができる。この場合、例えば、ファサードバリューを作成する呼び出し元側で、コマンドオブジェクトを記述する際に、ビーンフローキーに所定のコードを含めるか否かにより、ビーンフロー名として特定させるか或いはエイリアス名として特定させるかをコントロールすることができる。
【０１１３】
ビーンフロー実行層ＥＪＢ５５は、参照したビーンフローキーに対応するビーンフロー及びインターセプタの検索を行う（Ｓ５１）。具体的には、例えば、ビーンフロー実行層ＥＪＢ５５は、参照したビーンフローキーがビーンフロー名を表しているのか、或いは、エイリアス名を表しているのかを判別する。ビーンフロー名を表していると判別された場合、ビーンフロー実行層ＥＪＢ５５は、ビーンフローキーに適合するビーンフロー名を有するビーンフロー８３をビーンフロー記憶域５９から検索し、且つ、ビーンフローキーとインターセプタ定義ファイル８０との比較を行い、その比較により特定されたインターセプタ９５をプログラムモジュール記憶域６１から取得する。一方、エイリアス名を表していると判別された場合、ビーンフロー実行層ＥＪＢ５５は、ビーンフローキーに適合するエイリアス名を有するビーンフロー８３をビーンフロー記憶域５９から検索し、且つ、ビーンフローキーとインターセプタ定義ファイル８０との比較を行い、その比較により特定されたインターセプタ９５をプログラムモジュール記憶域６１から取得する。
【０１１４】
ビーンフロー実行層ＥＪＢ５５は、Ｓ５１で検索されたビーンフロー８３及びインターセプタ９５を実行する（Ｓ５２）。ここでは、例えば、Ｓ５１で複数のビーンフロー８３が検索ヒットした場合（具体的には、ビーンフロー定義ファイル８１に複数のビーンフロー定義９０があったことにより複数のビーンフロー８３が取得された場合）、ビーンフロー実行層ＥＪＢ５５は、それら複数のビーンフロー８３を、ビーンフロー定義ファイル８１で定義されている順番で実行することができる。どんな順番で実行するかは、例えば、ビーンフロー定義ファイル８１を参照することで特定されてもよいし、ビーンフロー８３に実行順序が書き込まれていれば、その実行順序から特定されてもよい。ビーンフロー８３の実行では、そのビーンフロー８３に設定された情報に基づいて、プログラムモジュール６１からビーン８５が検索され、そのビーン８５のインスタンス化や、インスタンス化されたビーン８５の実行等が行われる。
【０１１５】
ビーンフロー実行層ＥＪＢ５５は、例えば、図１０Ａに例示する方法により、外部ＡＰ４５に対してビーンフローの参照を提供することができる。
【０１１６】
すなわち、ビーンフロー実行層ＥＪＢ５５は、例えば、各ビーンフロー定義ファイル８１を参照することにより、ビーンフロー毎に、エイリアス名とビーンフロー名との対応付けを表した名称変換マップ２０１を生成する。
【０１１７】
ビーンフロー実行層ＥＪＢ５５は、エイリアス名であるビーンフローキーを含んだビーンフロー取得要求を外部ＡＰ４５から受け、その要求に応答して、そのビーンフローキー（エイリアス名）に対応するビーンフローの参照（つまりビーンフロー名）を取得し、取得したビーンフロー名を外部ＡＰ４５に返す。
【０１１８】
これにより、外部ＡＰ４５は、ビーンフローを、エイリアス名だけでなく、ビーンフロー名で指定することができるようになる（なお、格別図示しないが、ビーンフロー実行層ＥＪＢ５５と外部ＡＰ４５とのやりとりは、ファサード層ＥＪＢ５１を介して行われる）。
【０１１９】
エイリアス名或いはビーンフロー名で或るビーンフロー８３が指定された場合、そのビーンフロー８３は以下のような処理を行う。
【０１２０】
図１０Ｂは、ビーンフロー８３が行う処理の流れの一例を示す。
【０１２１】
（１）ビーンフロー８３がビーンフロー実行層ＥＪＢ５５から実行指示を受ける。具体的には、例えば、ビーンフロー８３で特定されているメソッドが、コマンドオブジェクトの処理依頼を受けたビーンフロー実行層ＥＪＢ５５から、そのコマンドオブジェクト内の入力オブジェクトを引数に、コールされる。
【０１２２】
（２）ビーンフロー８３は、リソース情報に基づいて、リソース群（例えば、メモリ領域、ＪＭＳ（Java Messaging System）セッション等）９２から、リソース名から特定されるリソース９４を、リソースキーを用いて取得し確保する。
【０１２３】
（３）ビーンフロー８３は、ビーンフロー８３の実行単位設定８６Ａ（図９Ａ参照）に基づいて、実行単位８８Ａを構築する。具体的には、ビーンフロー８３は、実行単位設定８６Ａ内のクラス名に適合するビーンをプログラムモジュール記憶域６１から選択し、選択されたビーンをインスタンス化する（ビーンをロード可能な状態にする）。プログラムモジュール記憶域６１に記憶されているビーンは、ＥＪＢの規約で作られたビーンではなく、ＰＯＪＯである。その記憶域６１に格納されている複数のＰＯＪＯには、例えば、データベース３８内の検索を行うためのＰＯＪＯや、データベース３８の更新を行うためのＰＯＪＯ等、データベース３８の操作を行うためのＰＯＪＯが含まれている。
【０１２４】
（４）ビーンフロー８３は、実行単位設定８６Ａ内の属性情報の全部又は一部を、インスタンス化されたビーン（ＰＯＪＯ）に対して設定する。このような処理により、実行単位８８Ａが構築される。具体的には、例えば、実行単位８８Ａにおけるビーン（インスタンス化されたビーン）が動作可能な状態となる。
【０１２５】
（５）以後、ビーンフロー８３で定義された処理順（換言すれば、ビーンフロー定義ファイル８１で定義された処理順）で処理が行われる。ここでは、ビーン８５Ａにおける指定メソッドがビーンフロー８３により実行される。
【０１２６】
（６）全ての実行単位が行われた場合、或る実行単位（例えば最後の実行単位）におけるメソッドの処理結果（又は、処理を実行したビーンそれ自体）が、出力オブジェクトとして、ビーンフロー実行層ＥＪＢ５５に返される。
【０１２７】
（７）ビーンフロー８３の実行が正常に終了した場合、リソース情報に基づいて、ビーンフロー８３が、確保されたリソース９４をクローズする（つまり開放する）。また、ビーンフロー８３は、例えば、例外（例えば障害）が発生した場合には、ビーンフローの正常終了でなくても、リソース９４を開放する。
【０１２８】
前述したように、ビーンフロー定義ファイル８１には、複数の実行単位を登録することができる。この場合、例えば、上記（３）〜（５）の処理が、実行単位の数、繰り返される。
【０１２９】
ビーンフロー定義ファイル８１の記述によって、以下のことも可能である。すなわち、例えば、ビーンフロー定義ファイル８１における各実行単位記述で、「第一のビーンによる第一の処理結果が第二のビーンに渡され、その第一の処理結果を受けた第二のビーンがその第一の処理結果を保持し、その第二のビーンの処理結果による第二の処理結果が処理依頼元に返される」というような定義がされていたとする。この場合は、その定義に従って、ビーンフロー８３が各ビーンを実行させる。それにより、第一のビーンによる第一の処理結果が第二のビーンに渡され、その第一の処理結果を受けた第二のビーンがその第一の処理結果を保持し、その第二のビーンの処理結果による第二の処理結果が処理依頼元に返される、ということが行われる。
【０１３０】
以上の一連の処理では、ビーンフロー８３は、ビーン８５Ａを実行する際、確保されたリソース９４をビーン８５Ａの処理の際に利用させるが、リソース９４に対するコントロールまではビーン８５Ａに行わせない。また、例えば、ビーン８５Ａの処理の際に例外（例えば障害）が発生した場合、そのビーン８５Ａは、コマンドオブジェクト内の例外オブジェクトを、処理依頼元（或いは大本の呼出し元）に送ってもよい。
【０１３１】
以上が、ビーンフロー定義ファイル８１に従って作成されるビーンフロー８３の実行についての説明である。管理者（例えば、ＥＪＢサーバ７又はＷＥＢサーバ５の管理者）は、ビーンフロー定義ファイル８１のビーンフロー定義９０内にどんな情報を設定するかにより、様々なビーンフロー８３をＥＪＢサーバ７に作成させること、換言すれば、一つのコマンドオブジェクトで様々な処理をＥＪＢサーバ７に実行させることができる。
【０１３２】
例えば、複数個の実行単位を一つのビーンフローで定義することができる。具体的には、例えば、図１１Ａに例示するように、実行単位名「ｓｔｅｐ１」の実行単位におけるビーンのゲッター（ゲッター名から特定されるもの）が取得した情報と、実行単位名「ｓｔｅｐ２」の実行単位におけるビーンのゲッターが取得した情報とを、実行単位名「ｓｔｅｐ３」の実行単位におけるビーンにセットさせることができる。
【０１３３】
また、例えば、図１１Ｂに例示するように、実行単位８８Ｄに、コマンドオブジェクト内の入力オブジェクト８７Ａを入力し、インスタンス化されたビーン８５Ｄに、その入力オブジェクト８７Ａを用いて処理を実行させることもできる。
【０１３４】
また、例えば、図１１Ｃに例示するように、実行単位８８Ｅに、コマンドオブジェクト内の入力オブジェクト８７Ｂを、ビーンとして、指定メソッドを実行させることもできる。
【０１３５】
また、例えば、図１１Ｄに例示するように、処理を実行したビーン８５Ｅのゲッターを使って、ビーンフローの出力オブジェクト８９を取得させることもできる。
【０１３６】
また、例えば、図１１Ｅに例示するように、処理を実行したビーン８５Ｆの参照を、ビーンフローの戻り値として、コマンドオブジェクトの処理依頼元（又は大本の呼び出し元）に、返させることもできる。
【０１３７】
以上、これまでに述べた実施形態の説明から、以下のようなことが言える。
【０１３８】
例えば、従来は、ＥＪＢサーバによりデータベースの操作を行うためには、エンティティビーンを作成し、ＥＪＢコンテナにデプロイする必要がある。
【０１３９】
しかし、上述した実施形態によれば、３つのＥＪＢ５１、５３及び５５により、トランザクションコントロールを行うことができるため、エンティティビーンを作成する必要はない。上記のように、所定の処理を実行するプログラムモジュールを多数個準備しておきさえすれば、後は、ビーンフロー定義ファイル８１での定義次第で、ビーンフロー実行層ＥＪＢ５５に、それら多数のプログラムモジュールの中から一又は複数のプログラムモジュールが選択させ、選択された一又は複数のプログラムモジュールの実行順序を決定させ、決定された順序で一又は複数のプログラムモジュールが実行させられる。これにより、例えば、様々なトランザクションコントロールをＥＪＢサーバに行わせたい場合でも、それら様々なトランザクションコントロールをそれぞれ実行させるために様々なエンティティビーンを作成する必要はなくなる。
【０１４０】
また、上述した実施形態によれば、ビーンフロー定義ファイル８１の定義次第で、例えば、第一のビーンのゲッターで取得した情報を第二のビーンにセットしたり、第一のビーンフローの出力（例えば処理結果）を第二のビーンフローに入力しその出力を用いて第二のビーンフローに処理を実行させたりすることもできる。つまり、こういったことを別の言い方をするのであれば、「ステートフルなビーンをステートレスに表すことができる」と言えよう。すなわち、ＥＪＢ５１、５３及び５５は、ステートレスなビーンであるが、インスタンス化されるＰＯＪＯに入力される属性情報次第で（つまり、ビーンフロー定義ファイル８１の定義次第で）、そのＰＯＪＯをステートフルなビーンとして動作させることができる。
【０１４１】
さて、上述した通り、コマンドオブジェクトに含まれているビーンフローキーから一又は複数のビーンフローが特定されるが、それに加えて、ビーンフローキーに基づいて、一又は複数のインターセプタが特定される。特定された一又は複数のインターセプタによる処理は、特定された一又は複数のビーンフローの実行の前及び後の少なくとも一方で行われる。以下、それに関して詳細に説明する。
【０１４２】
図１２は、インターセプタ定義ファイル９１の一例を示す。
【０１４３】
インターセプタ定義ファイル９１は、所定形式のファイル、例えば、ＸＭＬ形式のファイルとすることができる。インターセプタ定義ファイル９１には、プログラムモジュール記憶域６１に存在する全てのインターセプタ（例えばＪａｖａ（登録商標）のクラス）についての定義が記述されていてもよい。また、所定の種別毎にインターセプタ定義ファイル９１が用意され、各インターセプタ定義ファイル９１に、その種別に応じたインターセプタ定義が記述されていてもよい。
【０１４４】
インターセプタ定義ファイル９１には、例えば、多数のインターセプタ９５のうちの複数のインターセプタ９５の各々について、インターセプタ名と、そのインターセプタ名を持つインターセプタが選択されるための条件（以下、インターセプタ選択条件）とが設定される。図１２では、インターセプタ名は、<intercepter-name>と</intercepter-name>とのタグ間に存在する記述であり、インターセプタ選択条件は、<pattern>と</pattern>とのタグ間に存在する記述である。
【０１４５】
インターセプタ選択条件は、様々な方法で表し得るが、本実施形態では、キーワードと正規表現（ワイルドカード）との組み合わせで表すことができる。すなわち、この図１２に例示するインターセプタ定義ファイル９１によれば、インターセプタ名「bank#Inter-cepter-A」というインターセプタ（以下、説明の便宜上、これを「インターセプタＡ」と称する）は、ビーンフローキーにキーワード「bank.」が含まれてさえいれば選択される。また、インターセプタ名「bank#Inter-cepter-B」というインターセプタ（以下、説明の便宜上、これを「インターセプタＢ」と称する）は、ビーンフローキーにキーワード「bank.service.」が含まれてさえいれば選択される。また、インターセプタ名「bank#Inter-cepter-C」というインターセプタ（以下、説明の便宜上、これを「インターセプタＣ」と称する）は、ビーンフローキーにキーワード「bank.service.furikomi」が含まれてさえいれば選択される。また、インターセプタ名「bank#Inter-cepter-D」というインターセプタ（以下、説明の便宜上、これを「インターセプタＤ」と称する）は、ビーンフローキーにキーワード「master.」が含まれてさえいれば選択される。
【０１４６】
なお、例えば、ビーンフローキーが指すものをビーンフロー名とエイリアス名のどちらにするかによって、同一のビーンフローが実行されても、選択されるインターセプタを違えることができる。具体例を言えば、ビーンフロー名「bank.service.」とエイリアス名「master.」とを有したビーンフローがあった場合、ビーンフローキーが「bank.service.」であっても「master.」であっても、そのビーンフローが実行されることになるが、そのビーンフローの実行の際に選択されるインターセプタは異なる。すなわち、ビーンフローキーが「bank.service.」であった場合には、インターセプタＡ及びＢが選択されることになるが、ビーンフローキーが「master.」であった場合には、インターセプタＤが選択されることになる。
【０１４７】
以上のようなインターセプタ定義ファイル９１では、四つのインターセプタＡ〜Ｄの名称とインターセプタ選択条件とが定義されている。そのインターセプタ選択条件に従って複数のインターセプタが選択された場合、例えば、選択された複数のインターセプタがビーンフローの実行の前に実行されるのであれば、選択された複数のインターセプタは、このインターセプタ定義ファイル９１での記述の順序で実行される。また、例えば、選択された複数のインターセプタがビーンフローの実行の後に実行されるのであれば、選択された複数のインターセプタは、このインターセプタ定義ファイル９１での記述の順序とは逆の順序で実行される。
【０１４８】
以下、コマンドオブジェクト内のビーンフローキーに基づいて選択されるインターセプタがＡ及びＢである場合を例に採り、その場合に行われる処理の流れについて説明する。
【０１４９】
図１３Ａは、コマンドオブジェクト内のビーンフローキーに基づいて選択されるインターセプタがＡ及びＢである場合に実行される処理の説明図である。図１３Ｂは、その処理の流れを示す。
【０１５０】
ビーンフロー実行層ＥＪＢ５５には、インターセプタ管理オブジェクト４０２と、ビーンフロー実行オブジェクト４０３とが含まれている。ビーンフロー実行層ＥＪＢ５５は、インターセプタ管理オブジェクト４０２により、ビーンフローキーとインターセプタ選択条件とに基づいて一以上のインターセプタを選択したり、インターセプタ定義ファイル９１での記述に基づいて、上記選択された一以上のインターセプタの実行順序を特定したりすることができる。また、ビーンフロー実行層ＥＪＢ５５は、ビーンフローを実行させるビーンフローオブジェクト４０３により、ビーンフローキーに適合するビーンフローを実行させることができる。
【０１５１】
具体的には、インターセプタ管理オブジェクト４０２が、インターセプタＡ及びＢの順序で実行することが特定された場合に、まず、インターセプタＡを実行させる（Ｓ６０）。それにより、インターセプタＡが、所定の前処理（ビーンフローの実行前に実行すべき所定の処理）を実行し（Ｓ６１）、その前処理が終わったならば、インターセプタ管理オブジェクト４０２を呼び出す。次に、インターセプタ管理オブジェクト４０２が、インターセプタＢを実行させる（Ｓ６２）。それにより、インターセプタＢが、所定の前処理を実行し（Ｓ６３）、その前処理が終わったならば、インターセプタ管理オブジェクト４０２を呼び出す。最後のインターセプタＢから呼び出されたならば、インターセプタ管理オブジェクト４０２が、ビーンフロー実行オブジェクト４０３を呼び出す（Ｓ６４）。呼び出されたビーンフロー実行オブジェクト４０３は、ビーンフローキーに適合するビーンフローを実行させる。
【０１５２】
その後、ビーンフローの実行終了が検出されたならば（例えば、ビーンフロー実行オブジェクト４０３がビーンフローから所定の出力を受けたならば）、ビーンフロー実行オブジェクト４０３がインターセプタ管理オブジェクト４０２を呼び出す。呼び出されたインターセプタ管理オブジェクト４０２は、上記特定された実行順序（前処理の実行順序）とは逆の順序でインターセプタを実行させる。すなわち、インターセプタ管理オブジェクト４０２は、インターセプタＢを実行させる（Ｓ６６）。インターセプタＢにより所定の後処理（ビーンフローの実行後に実行すべき所定の処理）が実行された後（Ｓ６７）、インターセプタＢから呼び出されたならば、インターセプタ管理オブジェクト４０２は、インターセプタＡを実行させる（Ｓ６８）。インターセプタＡにより所定の後処理が行われた後（Ｓ６９）、インターセプタＡから呼び出されたならば、インターセプタ管理オブジェクト４０２は、情報（例えば、上記選択された一以上のインターセプタの実行結果）を出力する（Ｓ７０）。
【０１５３】
以上の説明によれば、インターセプタ定義ファイル９１に設定するキーワードと正規表現との組み合わせにより、コマンドオブジェクトに含まれているビーンフローキーに応じて、実行させる一以上のインターセプタやそれらの実行順序とを違えることができる。
【０１５４】
以上、本発明の好適な実施形態を説明したが、これは本発明の説明のための例示であって、本発明の範囲をこの実施形態にのみ限定する趣旨ではない。本発明は、他の種々の形態でも実施することが可能である。例えば、上述の説明では、或る対象を特定するためのキーとして名称が用いられているが、それに限らず、多種のＩＤが採用されてもよい。また、ファサードバリュー上でのトランザクション境界の定義の仕方は、トランザクション分離の対象となるコマンドオブジェクトをユニットオブワークに内包させる仕方に限らず、例えば、トランザクション分離の対象となるコマンドオブジェクトに所定コードを付加する等の仕方を採用することもできる。
【図面の簡単な説明】
【０１５５】
【図１】図１は、本発明の一実施形態に係るシステムのハードウェア構成の概要を示すブロック図である。
【図２】図２は、図１に示したシステムのソフトウェア構成の概要を示すブロック図である。
【図３】図３は、図２に示したシステムで行われる処理の流れの概要を示す。
【図４】図４Ａは、ファサードバリューの構成の一例を示す。図４Ｂは、図４Ａに示したファサードバリュー４６の処理流れを示す。
【図５】図５Ａは、ファサード層ＥＪＢ５１が行う処理の流れを示す。図５Ｂは、トランザクション分離層ＥＪＢ５３が行う処理の流れを示す。図５Ｃは、ビーンフロー実行層ＥＪＢ５５が行う処理の流れを示す。
【図６】図６Ａは、ファサードバリューの構成の別の一例を示す。図６Ｂは、図６Ａに示したファサードバリューの処理流れを示す。
【図７】図７Ａは、ビーンフロー実行層ＥＪＢ５５が行うことのできる一つの処理の流れを示す。図７Ｂは、ビーンフロー定義ファイル８１の構成の概要を示す。
【図８】図８Ａ、図８Ｂ及び図８Ｃは、ビーンフロー定義ファイル８１における記述の具体例を示す。
【図９】図９Ａは、ビーンフローの構成例を示す。図９Ｂは、コマンドオブジェクトの処理依頼を受けた場合にビーンフロー実行層ＥＪＢ５５が行う処理の流れを示す。
【図１０】図１０Ａは、外部ＡＰにビーンフローの参照が提供されるための方法の説明図である。図１０Ｂは、ビーンフロー８３が行う処理の流れの一例を示す。
【図１１】図１１Ａは、ビーンフローの第一の処理実行例を示す。図１１Ｂは、ビーンフローの第二の処理実行例を示す。図１１Ｃは、ビーンフローの第三の処理実行例を示す。図１１Ｄは、ビーンフローの第四の処理実行例を示す。図１１Ｅは、ビーンフローの第五の処理実行例を示す。
【図１２】図１２は、インターセプタ定義ファイル９１の一例を示す。
【図１３】図１３Ａは、コマンドオブジェクト内のビーンフローキーに基づいて選択されるインターセプタがＡ及びＢである場合に実行される処理の説明図である。図１３Ｂは、その処理の流れを示す。
【符号の説明】
【０１５６】
１…情報処理サーバ  ３…クライアントシステム  ５…ＷＥＢサーバ  ７…ＥＪＢサーバ  １３、２３、３３…ＣＰＵ  １５、２５、３５…メモリ  １７、２７、３７…ハードディスク  ３８…データベース  ４３…ＷＥＢブラウザ  ４５…外部アプリケーション  ４７…ファサードバリュー選択プログラム  ４９…ファサードバリュー記憶域  ５１…ファサード層ＥＪＢ  ５３…トランザクション分離層ＥＪＢ  ５５…ビーンフロー実行層ＥＪＢ  ５７…ビーンフロー定義ファイル記憶域  ５９…ビーンフロー記憶域  ６１…プログラムモジュール記憶域  ６３…インターセプタ定義ファイル記憶域
【図１】
2006251951.tif 000003
【図２】
2006251951.tif 000004
【図３】
2006251951.tif 000005
【図４】
2006251951.tif 000006
【図５】
2006251951.tif 000007
【図６】
2006251951.tif 000008
【図７】
2006251951.tif 000009
【図８】
2006251951.tif 000010
【図９】
2006251951.tif 000011
【図１０】
2006251951.tif 000012
【図１１】
2006251951.tif 000013
【図１２】
2006251951.tif 000014
【図１３】
2006251951.tif 000015