BEA ホーム | 製品 | デベロッパ・センタ | support | askBEA |
![]() |
![]() |
|
![]() |
e-docs > WebLogic Portal > 開発者ガイド > ポータル ナビゲーションのセットアップ |
開発者ガイド
|
ポータル ナビゲーションのセットアップ
ポータルのナビゲーションは Webflow を用いて実現されます。この Webflow は、Web アプリケーションの構築を支援し、プレゼンテーション ロジックと基礎となるビジネス プロセスとを常に分離しておくのに役立つよう設計されたメカニズムです。訪問者が、ページ上で [次へ] をクリックするといったイベントを発生させると、Webflow は訪問者に次に表示するコンテンツを決定します。Webflow はまた、訪問者の操作の適切なタイミングを捉えて、Pipeline という定義済みの専用コンポーネントを呼び出すこともあります。Pipeline は、データの検証やバックエンド ビジネス プロセスの実行に用いられます。
Web サイトの訪問者に対するページの表示順序は Webflow の XML コンフィグレーション ファイルによって一元的に指定されるので、Webflow メカニズムを使用すると、Web サイトのフローを作成および変更するのに必要な労力を軽減することが可能です。
この章では、以下の内容について説明します。
Webflow の作成
この節では、必要なノードを Webflow に追加し、それらのノードを遷移で互いに接続することで、基本的な Webflow を作成する方法を示します。
Webflow を作成するには、以下の手順を実行する必要があります。
これらの手順を実行すれば、基本的な Webflow ができあがります。そのあとは、以降の節で示す作業を行うことで、Webflow 作成プロセスが完了します。
注意: この章で説明している手順では、Webflow および Pipeline の特定の作成順序を念頭に置いていますが、これは説明の都合上そうしているだけであり、必ずそうしなければならないわけではありません。各自の開発ニーズに最も合う順序であれば何でもかまいません。たとえば、Webflow を実際に作成する前にまずその Webflow の Pipeline を作成したほうがよい場合もあるでしょう。ただし、Webflow が存在しないうちは、Webflow をアプリケーションに同期化することはできないので、くれぐれも注意してください。
Webflow コンポーネントの概要
Webflow の作成と実装を試みる前に、後述の手順で使用する Webflow コンポーネントのいくつかを理解しておくことが必要です。
ノードと遷移
ノードは、Webflow 内のある状態の機能をグラフィカルに表現したものです。ノード タイプに応じて、発生する可能性のある定義済みイベント(訪問者による Web ページ上のリンクのクリックなど)が多数用意されています。個々のイベントが発生すると、Webflow はどの後続ノード を呼び出してフローを続行するかを決定します。このプロセスを遷移と呼び、その概要を図 9-1 に示します。
図9-1 一般的な Webflow 遷移
図 9-1 に示されているとおり、ノードは、遷移内の位置に応じて、起点ノードまたは遷移先ノードと呼ばれます。 ノードのタイプ ノードの主要なタイプには、プレゼンテーション ノードとプロセッサ ノードの 2 つがあります。プレゼンテーション ノードとプロセッサ ノードはどちらも、Webflow 内で起点ノードまたは遷移先ノードとして使用することができます。 プレゼンテーション ノード プレゼンテーション ノードは、Web アプリケーションを操作している人に Webflow が何かを表示する状態を表します。プレゼンテーションの形式には、以下のものがあります。
また、拡張(カスタム)プレゼンテーション ノードを作成して Webflow 内で使用することも可能です。拡張プレゼンテーション ノードの詳細については、拡張プレゼンテーション ノードの作成方法を参照してください。
プロセッサ ノード
プロセッサ ノード は、Webflow が専用コンポーネントを呼び出して、フォーム検証や、サイトのプレゼンテーションを駆動するバックエンド ビジネス ロジックなどの処理を行う状態を表します。利用可能なプロセッサ ノードは、表9-1 のとおりです。
ワイルドカード ノード Webflow が特定のプレゼンテーション ノードまたはプロセッサ ノードを見つけて遷移を完了できない場合には、ワイルドカード プレゼンテーション ノードまたはワイルドカード プロセッサ ノードを検索して遷移先ノードとして使用します。そのため、ワイルドカード プレゼンテーション ノードとワイルドカード プロセッサ ノードは、Web アプリケーションのデフォルトの動作を実装しています。言い換えれば、ワイルドカード ノードを用いることで、共通の機能を抽出して Webflow 内の 1 箇所にまとめておくことができます。ワイルドカード ノードを用いるのは、遷移先ノードをまだ Webflow に明示的に定義していない場合に限ります。ネームスペースごとに、ワイルドカード プレゼンテーション ノードとワイルドカード プロセッサ ノードを 1 つずつ用意することができます。 ワイルドカード ノードの一例として、[ヘルプ] というリンク(どのページにも存在する)をクリックすると、ヘルプ情報が記載されている JSP に常に移動するようにしたい場合を考えてみましょう。それには、ワイルドカード プレゼンテーション起点を使用することができます。さらに、プロセッサ ノードから返された例外が、そのエラーに関する詳細な情報が記載された JSP に常に遷移するようにしたい場合もあります。これらの状況はどちらも、ワイルドカード プロセッサ ノードで処理することができます。 注意: Webflow がワイルドカード ノードを検索する必要がある場合には、必要な処理が増えるため、パフォーマンスに少し影響が出ることがあります。 遷移のタイプ 遷移には、イベント遷移と例外遷移の 2 種類があります。
遷移の原因となるイベントの詳細については、イベントのタイプを参照してください。
イベントのタイプ
Webflow 内の各ノードはイベントに応答し、その結果、遷移(すなわち、起点ノードから遷移先ノードへの移動)が発生します。ただし、ノードが応答するイベントのタイプは、ノードがプレゼンテーション ノードかプロセッサ ノードかによって異なります。
プレゼンテーション ノードは以下のイベントに応答します。
すなわち、Web サイトの訪問者がリンクやボタンをクリックすると、Webflow はそのイベントに応答します。応答として考えられるのは、別のプレゼンテーション ノード(JSP など)への遷移や、プロセッサ ノード(訪問者から入力されたフォーム データを検証する入力プロセッサなど)への遷移でしょう。
一方、プロセッサ ノードは以下のイベントに応答します。
例外が発生するのは、入力プロセッサや Pipeline が正常に実行されず、エラー状態を示す場合です。そうでない場合には、これらのプロセッサ ノードはオブジェクトを返し、Webflow ではそれを用いて処理を続行できます。
注意: ポータル アプリケーションで用いられる Webflow では、上記より多くのイベントに応答する場合があります。
Webflow エディタのツールとボタン
Webflow の作成には、図 9-4 に示すような Webflow エディタを使用します。ほとんどの作業では、ツール ボタンかコマンド ボタンのどちらかを選択する必要があります。利用可能なツール ボタンについては表9-2 で、コマンド ボタンについては表9-3 で、それぞれ説明します。
ステップ 1: Webflow を作成する Webflow を作成するには、以下の手順に従います。 注意: この手順では、以下の事がらを前提としています。
図9-2 E-Business Control Center で [新規作成] ドロップダウン メニューを開く
ステップ 2: Webflow キャンバスにノードを追加する
Webflow は 2 種類のノードから成ります。すなわち、プレゼンテーション ノードとプロセッサ ノードです。プレゼンテーション ノードとプロセッサ ノードはそれぞれ、Webflow 内の起点ノードまたは遷移先ノードに用いることができます。Webflow ノードの詳細については、Webflow コンポーネントの概要を参照してください。
以下の手順に従って、Webflow エディタ キャンバスに最初のノードを追加します。
ステップ 3: 開始ノードを指定する
開始ノードは、訪問者のアプリケーション操作の出発点として用いられます。開始ノードは Webflow の最初のエントリ ポイントすなわち初期状態として指定されるもので、プレゼンテーション ノードまたはプロセッサ ノードに自動的に遷移します。開始ノードは通常、JSP 形式のプレゼンテーション ノードです。
URL で起点、ネームスペース、またはイベントが指定されていない場合には、Webflow メカニズムがデフォルト ネームスペース内で開始ノードを検索します。開始ノードは省略可能ですが、デフォルト ネームスペースに最低 1 つ定義しておくことをお勧めします。
ノードを開始ノードに指定するには、以下の手順に従います。
注意: Webflow に存在できる開始ノードは 1 つだけです。
ステップ 4: ノード間の遷移を作成する
ノードをすべてキャンバス上に配置したら、それらの間の遷移を作成してノード同士を接続します。これらの遷移の作成には、表9-2 に示すような [イベント ツール] と [例外ツール] を使用します。 [例外ツール] は赤で、 [イベント ツール] は黒で示されます。
イベント遷移を追加する
イベント遷移を追加するには、以下を実行します。
例外遷移を追加する
例外処理が必要と思われるすべてのノードを、その例外処理を行うノードに接続するには、[例外ツール] を使用します。たとえば、受け渡しの前に検証しておく必要があるデータを入力プロセッサが受け取るとしましょう。そのデータにエラーが含まれていたら、入力プロセッサは例外を送出する必要があるでしょう。[例外ツール] を使用すれば、例外を処理し、その結果などの情報を表示することができます。例外の場合には、ノード間の遷移リンクは赤で表示されることに注意してください。
例外遷移を追加するには、以下を実行します。
ノードがすべて正しく配置され、適切な遷移で接続されたら、Webflow は 図 9-12 に示すようなものになるでしょう。
図9-12 Webflow のサンプル レイアウト
遷移ツールの使い方 遷移の追加(イベント遷移を追加する と 例外遷移を追加するで説明)だけでなく、既存遷移の接続ポートを移動したり、遷移にエルボーを追加したり、あるいは遷移を削除することもできます。 接続ポートの移動: 遷移を受け入れる接続ポートは入力接続ポートと呼ばれ、遷移の起点となる接続ポートは出力接続ポートと呼ばれます。場合によっては、ノードの接続ポートを移動すると有益なことがあります。ノード上の接続ポートの位置を変更するには、以下の手順に従います。
自己参照遷移に関連付けられている接続ポートの場合には、同じノードの外縁上にしか移動できません。
別ノードへの遷移の移動: 遷移の終点(矢印で示される)をあるノードから別のノードへ移動することができます(接続が許される場合)。それには、以下を実行します。
遷移線でのエルボーの作成、移動、削除: エルボーを移動、作成、または削除することにより、エディタ キャンバス上で遷移線の位置を変更することもできます。エルボーを利用すれば、図 9-13 に示すように遷移線を折れ線にして、フローをわかりやすくすることができます。
図9-13 遷移線におけるエルボー
既存の遷移内のエルボーを移動するには、以下の手順に従います。
既存のエルボーを削除するには、以下の手順に従います。
Pipeline の作成と Webflow への追加
Webflow の詳細表示を図 9-14 に示します。この例では、PL01 および PL02 というラベルの付いた 2 つのノードが表示されています。これらのノードは Pipeline と呼ばれます。
図9-14 Webflow の例: Pipeline ノードを示す詳細表示
Pipeline はプロセッサ ノードの一種で、通常、Webflow でバックエンド ビジネス ロジックを実行するのに用いられます。各 Pipeline は、特定のタスクを実行する多数の Pipeline コンポーネントから成ります。WebLogic Portal 製品スイートには、新たに作成する Pipeline で再利用していただけるような Pipeline コンポーネントが多数付属しています。ただし、所属組織の特定のビジネス プロセスを実行する Pipeline コンポーネントを独自に作成したほうがよい場合もあります。 この節では、以下の手順に従って Pipeline を作成する方法を示します。
Pipeline エディタの概要
Pipeline を作成し、そこに機能を追加するには、Webflow の場合と同様に、E-Business Control Center で Pipeline エディタ(図 9-15 および 図 9-18 を参照)を用います。
図9-15 Pipeline エディタの表示された E-Business Control Center
Pipeline エディタの上部には、 一連の表示および動作制御ボタンと一連のコマンド ボタンが用意されており、左端には一連のツール ボタンが用意されています。 ツール ボタン、表示および動作制御ボタン、コマンド ボタンについては、それぞれ表9-5、表9-6、表9-7 で説明します。
Pipeline エディタでは、 Webflow エディタで使用されるのと同じコマンド ボタン(表9-3 を参照)と、表9-7 に示すボタンが使用されます。
これらのボタンの機能と使い方を理解すれば、Pipeline の作成を迅速かつ容易に行えるようになります。 ステップ 1: 新しい Pipeline コンポーネントを作成する この節では、Webflow で使用する Pipeline コンポーネントを作成するのに必要な手順について説明します。 注意: この手順では、以下の事がらを前提としています。
図9-16 選択された Pipeline ネームスペースに対する [新規作成] メニュー
図9-19 [Pipeline Component Editor]
図9-20 [Pipeline コンポーネント作成ツール]
examples.wlcs.sampleapp.order.pipeline.ValidateBookmarkClass
入力の完了したダイアログ ボックスは、図 9-21 に示す例のようになるでしょう。
図9-21 入力の完了した [Pipeline コンポーネント作成ツール] ダイアログ ボックス
図9-22 プロパティ エディタ ― コンポーネントの選択
図9-23 validateBookmark - Abort Exception 間の接続
ステップ 2: 新しい Pipeline コンポーネントを Webflow に追加する
さて次は、新しい Pipeline コンポーネントを Webflow に追加する必要があります。それには、以下の手順に従います。
アプリケーションへの Webflow の同期化
上記で作成した Webflow が機能するためには、それを Web アプリケーションに同期化する必要があります。データの同期化によって、Webflow と Pipeline の XML 定義がデータベースとマスター データ リポジトリ(インメモリ データ ストア)にロードされます。
警告: アプリケーション データはすべて、一斉に同期化されます。同時に複数の開発者が単一のエンタープライズ アプリケーションに対してデータを同期化すると、お互いの作業結果を上書きしたり、デバッグしにくい矛盾した変更を作り込んでしまうおそれがあります。そのような事態にならないようにするには、アプリケーションの別個のインスタンスに対して同期化を行います。
新しい Pipeline コンポーネントと変更済みの Webflow を同期化するには、以下の手順に従います。
これで、Webflow がアプリケーションに同期化されました。
入力プロセッサの新規作成
すでに述べたように、入力プロセッサは定義済みの専用 Java クラスであり、Webflow メカニズムから呼び出されて、より複雑なタスクを実行します。入力プロセッサは通常、HTML フォーム データの検証や、Web ページ内での条件分岐の実現に用いられます。WebLogic Portal には、開発済みの入力プロセッサが多数付属しています。開発するアプリケーションではこれらの入力プロセッサを再利用したほうがよい場合がある一方、独自の入力プロセッサを作成してアプリケーションの Webflow で使用するほうがよい場合もあるでしょう。
InputProcessor インタフェースを用いて入力プロセッサを作成する
新しい入力プロセッサを作成するには、process() メソッド(リスト 9-1 に示す)の詳細を用意することによって、com.bea.p13n.appflow.webflow.InputProcessor インタフェースを実装する必要があります。
コード リスト 9-1 InputProcessor インタフェースの Process() の実装
public java.lang.Object process(javax.servlet.http.HttpServletRequest req,
java.lang.Object requestContext)
throws ProcessingException
このインタフェースは、HttpSession 内に存在する HttpServletRequest や PipelineSession を処理します。 リターン オブジェクトは何でもかまいませんが、そこに用意されている toString() の実装は意味のあるものでなければなりません。Webflow エグゼキュータは、返されたオブジェクトに対して toString() を呼び出して、プロセッサ用のイベントを生成します。
パラメータ |
req - HttpServletRequest オブジェクト requestContext - リクエストを一意に識別する Object |
戻り値 |
Object(toString() を意味のあるものに実装してあること) |
送出する例外 |
ProcessingException または、そのサブクラス |
入力プロセッサの命名規約
入力プロセッサの名前の末尾には、「IP」 という接尾辞を付けなければなりません。たとえば、届け先住所の削除を担当する入力プロセッサには、DeleteShippingAddressIP という名前を付けるといった具合です。こうした命名規約に従うことで、入力プロセッサがより把握しやすくなるはずです。
入力プロセッサでのビジネス ロジックの実行
入力プロセッサ内では、通常、ビジネス(アプリケーション)ロジックは実行しない方がよいでしょう。特に、入力プロセッサでは、Enterprise JavaBeans(EJB)を呼び出したり、データベースへのアクセスを試みるべきではありません。そのようなロジックはすべて、Pipeline コンポーネントに実装すべきです。そのロジックを入力プロセッサ内で実行することも可能ですが、そうしたロジックはトランザクション対応でないことがあり、その場合には Webflow アーキテクチャの主たる目的を達成できなくなります。ビジネス ロジックとプレゼンテーション ロジックを分離することで、Web サイトの柔軟性が本質的に高くなります。機能の変更や追加は、Pipeline あるいは入力プロセッサを新たに作成してプラグインする程度の単純な作業になります。
InputProcessorSupport クラスを拡張する
あるいは、リスト 9-2 に示すような com.bea.p13n.appflow. webflow.InputProcessorSupport クラスを拡張する入力プロセッサを新たに作成することもできます。名前のとおり、この抽象クラスを使用すれば、入力プロセッサの働きを補助する静的ヘルパー メソッドを利用できるようになります。ただし、新しい入力プロセッサ クラスが何か他のクラスを拡張する必要がある場合には、InputProcessorSupport クラスを利用することはできません。
コード リスト 9-2 InputProcessorSupport クラスの拡張
public abstract class InputProcessorSupport
extends java.lang.Object
implements InputProcessor, ValidatedFormConstants
注意: InputProcessorSupport クラスの実装の詳細については、com.bea.p13n.appflow.webflow の『Javadoc』を参照してください。
キャンバス上に配置した入力プロセッサ ノードのプロパティを、Webflow エディタを用いて指定する場合には、新たに作成した入力プロセッサのクラス名を該当するフィールドに入力すればよいだけです。入力プロセッサを既存の Webflow メカニズムと連携させるために必要な作業は、それ以外にはありません。
拡張プレゼンテーション ノードと拡張プロセッサ ノードの作成による Webflow の拡張
入力プロセッサと Pipeline コンポーネントを新たに作成して、製品にあらかじめ用意されているものに追加しても、必要を満たせない場合には、拡張(カスタム)プレゼンテーション ノードや拡張(カスタム)プロセッサ ノードとして使用できるクラスを作成して、Webflow メカニズムを拡張することにしてもかまいません。これらのノードに関連付けられるクラスを作成したら、新しいノードを webflow-extensions.wfx ファイルに登録する必要があります。この節では、これらの作業の実行方法を示します。
拡張プレゼンテーション ノードの作成方法
拡張(カスタム)プレゼンテーション ノードを作成するには、以下の手順に従います。
WebLogic Portal では、portal という拡張(カスタム)プレゼンテーション ノードが使用されるので、このノードを一例と考えることができます。Portal では、この拡張ノードを用いて、ポートレットのコンテンツが変更されていない(つまり、最後の URL を表示すべきである)ことをポータル Webflow に知らせます。portal ノードの実装クラスは LastContentUrlNodeHandler.java です。
拡張プロセッサ ノードの作成方法
拡張(カスタム)プロセッサは、(BEA ではなく)開発者の所属組織がアプリケーションの Webflow 用に開発するプロセッサです。たとえば、入力プロセッサや Pipeline プロセッサと同じレベルで動作する拡張(カスタム)プロセッサを作成したいとしましょう。拡張プロセッサは、Webflow で現在サポートされていない処理を実行するのに用いることができます。ただし、拡張プロセッサの入出力フローは、やはり Webflow メカニズムによって制御されます。拡張プロセッサは Webflow エディタでは、入力プロセッサノードや Pipeline ノードによく似たノードとして表現されますが、表現が多少異なるので、容易に識別できます。
たとえば、BEA ルール エンジンと連携して、何らかの条件(顧客セグメントへの所属の有無など)に基づくさまざまな Webflow をサポートする拡張(カスタム)プロセッサを作成するといった場合もあるでしょう。また、もっと単純な例としては、ページ本文のコンテンツが与えられたときに JSP にヘッダーとフッターを自動的に付加するレイアウト マネージャ プロセッサがあります。実際に、そうしたプロセッサはすでに作成されています。
拡張(カスタム)プロセッサ ノードを作成するには、以下の手順に従います。
コード リスト 9-3 Processor インタフェースの実装
public java.lang.Object process(java.lang.String webapp,
java.lang.String namespace,
javax.servlet.http.HttpServletRequest request,
java.lang.Object requestContext)
throws java.lang.Exception
このインタフェースは、リクエストで示されるプロセッサを実行します。リターン オブジェクトは何でもかまいませんが、そこに用意されている toString() の実装は意味のあるものでなければなりません。Webflow エグゼキュータは、返されたオブジェクトに対して toString() を呼び出して、プロセッサ用のイベントを生成します。
注意: webflow-extensions.wfx ファイルに拡張ノードを登録する方法については、拡張プレゼンテーション ノードおよび拡張プロセッサ ノードを Webflow エディタや Pipeline エディタで使用可能にするを参照してください。
拡張プレゼンテーション ノードおよび拡張プロセッサ ノードを Webflow エディタや Pipeline エディタで使用可能にする
拡張(カスタム)プレゼンテーション ノードや拡張(カスタム)プロセッサ ノードを作成したら、そのノードを webflow-extensions.wfx ファイルに登録して、チームの他の開発者から利用できるようにする必要があります。
注意: webflow-extensions.wfx ファイルは <BEA_HOME>/user_projects/myNEWDomain/beaApps/ portalApp-project/default/webflow/ フォルダ内にあります(ここで、<BEA_HOME> は WebLogic Portal のインストール先ディレクトリです)。たとえば、以下のフォルダです。
bea/user_projects/myNEWDomain/beaApps/portalApp-project/
default/webflow/
拡張(カスタム)プロセッサ ノードを登録すると、E-Business Control Center の再起動後に、Webflow エディタ パレット上の対応するツールが使用可能になります。
拡張プレゼンテーション ノードを登録する
拡張プレゼンテーション ノードを webflow-extensions.wfx ファイルに登録するには、以下の手順に従います。
拡張プロセッサ ノードを登録する
拡張プロセッサ ノードを webflow-extensions.wfx ファイルに登録するには、以下の手順に従います。
![]() |
![]() |
![]() |
![]() |
||
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |