BEA ホーム | 製品 | デベロッパ・センタ | support | askBEA |
![]() |
![]() |
|
![]() |
e-docs > WebLogic Integration > AI トピック > アダプタの開発 > 設計時 GUI の開発 |
アダプタの開発
|
設計時 GUI の開発
ADK の設計時フレームワークは、アダプタ ユーザがアプリケーション ビューの定義、デプロイ、およびテストのための Web ベースの GUI を作成するためのツールを提供します。各アダプタには EIS 固有の機能がありますが、アプリケーション ビューをデプロイするための GUI は、すべてのアダプタで必要です。設計時フレームワークでは、主に以下のコンポーネントを使用して、このような GUI の作成やデプロイメントの作業を最小限に抑えることができます。
この章の内容は以下のとおりです。
設計時フォーム処理の概要
Java サーブレットと JSP を組み合わせることにより、さまざまな方法でフォームを処理できます。いずれの方法でフォームを処理する場合でも、以下の基本的な必要条件が適用されます。
この機能を作成するには、以下の作業を行います。
この機能を作成するには、以下の作業を行います。
また、Web アプリケーションは、有効な情報の再入力を要求せずにユーザによる最後の入力内容を再表示することもできる必要があります。入力されたフィールド値がすべて有効になるまで、Web アプリケーションでは手順 2 を繰り返す必要があります。
Web アプリケーション開発者は、以下の事項を決定する必要があります。
フォーム処理クラス
Web アプリケーションで使用する各フォームに対してすべてのフォーム処理機能を実装するのは、単調であると同時に、エラーの原因になりやすいプロセスです。ADK 設計時フレームワークでは、「モデル/ビュー/コントローラ(MVC)」パラダイムによって、このプロセスが簡略化されています。このパラダイムでは、以下の 5 つのクラスが使用されます。
RequestHandler
com.bea.web.RequestHandler
このクラスにより HTTP 要求処理ロジックが提供されます。このクラスは、MVC ベース メカニズムのモデル コンポーネントです。RequestHandler オブジェクトは ControllerServlet によってインスタンス化され、HTTP セッション中に handler というキーの下に保存されます。ADKには com.bea.adapter.web.AbstractDesignTimeRequestHandler というクラスがあります。この抽象基本クラスにより、アプリケーション ビューをデプロイする際にすべてのアダプタに共通して必要となる機能が実装されます。アダプタまたは EIS 固有のロジックを定義するには、このクラスを拡張する必要があります。
ControllerServlet
com.bea.web.ControllerServlet
このクラスは HTTP 要求を受け取ると、要求中の各フィールド値の有効性を検証し、要求の処理を RequestHandler に委託します。また、表示するページを決定します。ControllerServlet は Java Reflection を使って、RequestHandler で呼び出すメソッドを特定します。ControllerServlet はフォーム処理ロジックを実装するメソッド名を指定するために、doAction という HTTP 要求パラメータを探します。このパラメータがなければ、ControllerServlet は RequestHandler でメソッドを呼び出しません。
ControllerServlet は、Web アプリケーションに合わせて web.xml ファイルでコンフィグレーションされます。ControllerServlet は、RequestHandler で実行するメソッドに HTTP 要求を委託します。ControllerServlet を使用する場合、コードを指定する必要はありません。ただし、37 ページの表 8-5 に示す初期パラメータを指定する必要があります。
ActionResult
com.bea.web.ActionResult
ActionResult では、要求の処理結果がカプセル化されます。また、ControllerServlet には、次に表示するページを決定するための情報が提供されます。
Word と子孫クラス
com.bea.web.validation.Word
Web アプリケーションのすべてフィールドについて、その有効性を一定の範囲で検証する必要があります。com.bea.web.validation.Word クラスおよびその子孫オブジェクトにより、フォーム中の各フィールドの有効性を検証するためのロジックが提供されます。無効なフィールドがあると、Word オブジェクトはメッセージ バンドルを使用して、該当するフィールドに応じてインターナショナライズまたはローカライズされたエラー メッセージを検索します。ADK では、表 8-1 に示すカスタム バリデータが提供されます。
AbstractInputTagSupport と子孫クラス com.bea.web.tag.AbstractInputTagSupport Web ツールキットで提供されるタグ クラスには以下の機能があります。
発行タグ
これ以外に、ADK では次のような発行タグを使用できます。
<adk:submit name='xyz_submit' doAction='xyz'/>
このタグにより、doAction パラメータが要求中の ControllerServlet に送られます。この結果、ControllerServlet から登録済の RequestHandler で xyz() メソッドが呼び出されます。
フォーム処理シーケンス
この節では、フォームを処理する順序について説明します。
前提条件
フォームを処理するための前提条件は、以下のとおりです。
<adk:int name='age' minInclusive='1' maxInclusive='120' required='true'/>
これら前提条件に従うと、リスト8-1 のような JSP フォームが表示されます。
コード リスト 8-1 JSP サンプル フォーム
<form method='POST' action='controller'>
Age: <adk:int name='age' minInclusive='1' maxInclusive='120'
required='true'/>
<adk:submit name='processAge_submit' doAction='processAge'/>
</form>
シーケンスの手順
フォーム処理の実行方法を、順を追って次のダイアグラムに示します。
図8-1 UI フォーム処理
public ActionResult processAge(HttpServletRequest request) throws Exception
設計時 GUI の機能
設計時 GUI の開発では、実行時アダプタを開発する場合とは異なる独自の機能を使用します。この節では、設計時 GUI の機能について説明します。
Java Server Pages
設計時 GUI は、一連の Java Server Pages (JSP) で構成されます。JSP とは、特定のトランザクションを開始する目的で Java サーブレットを呼び出すための HTML ページのことです。ユーザ側から見た JSP は、通常の Web ページと変わりません。
設計時 GUI を構成する JSP を以下の表に示します。
これらの JSP の実装方法については、手順 2 : ページ フローの定義を参照してください。 JSP テンプレート テンプレートとは、HTTP 要求で指定するパラメータに基づいて Java サーブレットが動的に生成する HTML ページのことです。テンプレートを使用することにより、Web アプリケーションで使用するカスタム ページやカスタム HTML の量を最小限に抑えることができます。 設計時フレームワークの JSP テンプレートを使用すると、アダプタの新しいアプリケーション ビューを定義、デプロイ、およびテストするための Web アプリケーションを効率的に作成できます。ADK のテンプレートでは、アダプタの開発者向けに次の 3 つの利点を提供します。
ADK で提供される JSP テンプレートのリストについては、JSP テンプレートを参照してください。
JSP タグの ADK ライブラリ
ADK で提供される JSP タグ ライブラリを使用することにより、使いやすい HTML フォームの作成が容易になります。アダプタ ページを開発する際、HTML フォーム入力コンポーネントのカスタム タグを使用して、検証メカニズムへシームレスにリンクできます。ADK が提供するカスタム タグについて、以下の表に示します。
JSP タグの属性 表 8-4 に記載されている属性を使用して JSP タグをさらにカスタマイズできます。
注意: タグの使用方法については、次の場所にある adk.tld を参照してください。
WLI_HOME/adapters/src/war/WEB-INF/taglibs
アプリケーション ビュー
アプリケーション ビューはアプリケーション中の特定機能に対するビジネス レベルのインタフェースを表しています。詳細については、アプリケーション ビューを参照してください。
ファイル構造
設計時 GUI アダプタを構築する場合、サービス アダプタの構築時と同じファイル構造が必要になります。手順 2a : ディレクトリ構造の設定を参照してください。この参照ページで説明されているファイル構造以外に、以下の点にも注意する必要があります。
イベントの処理フロー
図8-2 は、設計時 GUI の開発手順を表しています。
図8-2 設計時 GUI の開発のイベント フロー
手順 1 : 設計時 GUI 要件の定義
設計時 GUI の開発を始める前に、以下の質問に答えてその要件を定義する必要があります。
EIS では、イベントおよびサービス カタログにアクセスするための関数を定義する必要があります。EIS にこれらの関数がない場合は、カタログをブラウズできません。EIS がこれらの関数に対応していない場合は、次の設計原理に従うことをお勧めします。EIS のメタデータを入手するために設計時 UI を呼び出します。これは事実上、実行時コンポーネントを呼び出すことと同じです。いずれの場合も、バックエンド EIS で実行されます。
したがって、設計時メタデータの機能を提供するには、可能な限り実行時アーキテクチャを利用する必要があります。CCI Interaction オブジェクトを使用する設計時 GUI 固有の関数を呼び出す必要があります。ADK に用意されたサンプル アダプタでは、このアプローチに基づく例やフレームワークが提供されます。サンプル アダプタは、WLI_HOME/adapters/sample にあります。
一般に、特定の関数やイベントに関するメタデータを入手するには、アダプタから EIS を呼び出す必要があります。これにより、アダプタで EIS メタデータが XML スキーマ フォーマットに変換されます。このとき、SOM API を呼び出す必要があります。サンプル アダプタは SOM API の実装にも対応しています。この API の詳細は、JSP タグの ADK ライブラリを参照してください。
WLI_HOME/adapters/dbms/docs/api/com/bea/adapter/dbms/utils/
class-use/TestFormBuilder.html
A変換機能を呼び出して、HTML フォームを表示する JSP 指定の testform.jsp。このファイルの例については、次を参照してください。WLI_HOME/adapters/dbms/src/war/
手順 2 : ページ フローの定義
ユーザがアプリケーション ビューを呼び出した場合の JSP の表示順序を指定する必要があります。この節では、効果的なアプリケーション ビューで必要になる基本的なページのフローについて説明します。なお、フローには具体的な要求に応じてページを追加できるので、ここでは最低限の条件についてのみ説明します。
画面 1 : ログイン
アプリケーション ビューはセキュリティ対策が施されたシステムであるため、ビューを実装するには、まずログインが必要です。このため、最初は必ず [Application View Console - Logon] ページを表示します。
このページを使用するには、有効なユーザ名とパスワードを入力する必要があります。この情報の有効性が検証されて、ユーザが、デフォルトの WebLogic Server セキュリティ レルムに定義されたアダプタ グループのメンバーであることを確認します。
注意: アプリケーション ビューの Web アプリケーションに対するセキュリティ要件は、WLI_HOME/adapters/ADAPTER/src/war/WEB-INF/web.xml ファイルで指定します。これは、adapter.war ファイルに組み込まれています。
画面 2 : アプリケーション ビューの管理
ユーザが正しくログインすると、[Application View Console] ページが表示されます。このページには、アプリケーション ビュー、各フォルダのステータス、およびこれらに対して実行されたアクションを示すフォルダが表示されます。ユーザはこのページから既存のアプリケーション ビューを表示したり、新しいアプリケーション ビューを追加できます。
画面 3 : 新しいアプリケーション ビューの定義
[Define New Application View] ページ(defappvw.jsp)を使用して、クライアントが置かれたあらゆるフォルダに新しいアプリケーション ビューを定義できます。これには、アプリケーション ビューとアダプタを関連付けるための説明が必要になります。このフォームには、アプリケーション ビュー名と説明を入力するフィールドに加え、アプリケーション ビューと関連付けるアダプタを表示するドロップダウン リスト ボックスがあります。
新しいアプリケーション ビューを定義した後に [OK] を選択すると、[Configure Connection] ページが表示されます。
画面 4 : 接続のコンフィグレーション
新しいアプリケーション ビューが有効であれば、ユーザは接続のコンフィグレーションを行う必要があります。すなわち、アプリケーション ビューの有効性が検証された後、[Configure Connection Parameters] ページ(confconn.jsp)が表示されます。このページは、EIS の接続パラメータを指定するためのフォームです。接続パラメータは EIS 固有のものであるため、このページの外観はアダプタごとに異なります。
ユーザが接続パラメータを発行すると、アダプタはこのパラメータを使用して EIS への新しい接続を試みます。EIS に接続されると、ユーザには次の [Application View Administration] ページが表示されます。
画面 5 : アプリケーション ビューの管理
ユーザには、新しいアプリケーション ビューを管理する手段が必要になります。[Application View Administration] ページ(appvwadmin.jsp)には、アンデプロイされたアプリケーション ビューの概要が表示されます。具体的には、以下の情報を示します。
このページでは、アプリケーション ビューにイベント リストやサービス リストを提供する以外に新しいイベントやサービスを追加できるページへのリンクも設定します。
画面 6 : イベントの追加
イベントをアプリケーション ビューに追加する必要があります。[Add Event] ページ(addevent.jsp)で、これを行うことができます。
新しいイベントには以下のルールが適用されます。
新しいイベントを定義し、保存したときに [Application View Administration] ページに戻ります。
画面 7 : サービスの追加
アプリケーション ビューに新しいサービスを追加したい場合があります。[Add Service] ページ( addservc.jsp)で、これを行うことができます。
新しいイベントには以下のルールが適用されます。
新しいサービスを定義し、保存すると [Application View Administration] ページに戻ります。
画面 8 :アプリケーション ビューのデプロイ
1 つ以上のサービス、またはイベントを追加したら、アプリケーション ビューをデプロイできます。アプリケーション ビューをデプロイすると、イベントやサービスの処理にこれを利用できるようになります。アプリケーション ビューをデプロイすると、[Deploy Application View] ページ(depappvw.jsp)が表示されます。
このページで、ユーザは以下のデプロイメント プロパティを指定します。
ユーザ アクセスの制御
表示されたフォームでユーザ名、またはグループ名を指定することにより、別のユーザのアクセス特権を許可したり、無効にしたりすることができます。アプリケーション ビューでは 2 つの機能(読み込みと書き込み)へのアクセスを制御します。
アプリケーション ビューのデプロイ
ユーザは、デプロイ オプションを選択してアプリケーション ビューをデプロイします。ユーザは、アプリケーション ビューを永続的にデプロイするかどうかを決定する必要があります。永続的デプロイメントが選択された場合、アプリケーション サーバを再起動するたびにアプリケーション ビューを再デプロイします。
アプリケーション ビューの保存
アプリケーション ビュー コンソールを介して、アンデプロイしたアプリケーション ビューを保存したり、後でこれを復元したりできます。このプロセスでは、デプロイされたアプリケーション ビューがすべて、リポジトリの中に保存されていることが前提になります。すなわち、保存されていないアプリケーション ビューをデプロイすれば自動的に保存されます。
画面 9 : アプリケーション ビューの概要
アプリケーション ビューが正しくデプロイされると、[Application View Summary](appvwsum.jsp)ページが表示されます。このページにはアプリケーション ビューに関する以下の情報が表示されます。
ページには、アプリケーション ビューをアンデプロイするためのオプションがあります。ユーザが [Undeploy] リンクをクリックすると、この選択を確認する子ウィンドウが表示されます。ユーザが確認した後、アプリケーション ビューはアンデプロイされ、概要ページが再表示されます。このようにしてアンデプロイされたアプリケーション ビューは、続けてリポジトリに保存されるため、ユーザはアプリケーション ビューを編集したり、削除したりできます。
アダプタでイベントのテストがサポートされる場合は、[Summary] ページに各イベントのテスト リンクが表示されます。イベントのテストは、ADK で直接的にはサポートされていません。
アダプタでサービスのテストがサポートされる場合は、[Summary] ページに各サービスのテスト リンクが表示されます。ADK では、testservc.jsp と testrslt.jsp のファイルを提供することにより、サービスのテストに使用できる 1 つのアプローチが紹介されています。これらのページを自由に使用して自分のサービス テスト方法を作成できます。
ページには、アプリケーション ビューをデプロイするためのオプションがあります。ユーザが [Deploy] リンクを選択すると、アプリケーション ビューがデプロイされ [Application View Summary] ページが再ロードされます。
ページには、アプリケーション ビューを編集するためのオプションがあります。ユーザが [Edit] リンクをクリックすると、[Application View Administrtion] ページが表示されます。
ページには、アプリケーション ビューを削除するためのオプションがあります。ユーザが [Remove] リンクをクリックすると、子ウィンドウが表示され、実際に ADK リポジトリからアプリケーション ビューを削除するかどうかが確認されます。ユーザが確認した後、アプリケーション ビューがリポジトリから削除され、アプリケーション ビュー コンソールに戻ります。
手順 3 : 開発環境のコンフィグレーション
ここでは、設計時 GUI 開発をサポートするためのソフトウェア環境をセットアップします。
手順 3a : メッセージ バンドルの作成
エンド ユーザ向けのメッセージは、メッセージ バンドルに入れます。メッセージ バンドルは、「key=value」の組み合わせから構成される単純な .properties テキスト ファイルで、メッセージをインターナショナライズできます。実行時にロケールと母国語を指定すると、メッセージの内容が、キー値の組み合わせの指定に従って翻訳され、ロケールに合わせた言語でメッセージが表示されます。
メッセージ バンドルの作成方法については、次に示すサイトにある JavaSoft チュートリアルを参照してください。
http://java.sun.com/docs/books/tutorial/i18n/index.html
手順 3b : WebLogic Server を再起動せずに JSP を更新する環境のコンフィグレーション
設計時 UI は WAR ファイルの J2EE Web アプリケーションとしてデプロイされます。WAR ファイルは、JAR ファイルにある WEB-INF/web.xml 中で Web アプリケーション記述子が付いた JAR ファイルです。ただし、WAR ファイルでは、WebLogic Server 中の J2EE Web コンテナを使用してそのまま JSP を再コンパイルすることはできません。したがって、通常は単に JSP ファイルを変更するだけでも、WebLogic Server を再起動する必要があります。これは JSP 本来の考え方とは異なるため、ADK では WebLogic Server を再起動しなくても JSP を更新できるように次の解決策をお勧めします。
コード リスト 8-2 WAR ファイルの作成ターゲット
<target name='war' depends='jar'>
<!-- 既存の環境を削除する -->
<delete file='${LIB_DIR}/${WAR_FILE}'/>
<war warfile='${LIB_DIR}/${WAR_FILE}'
webxml='${SRC_DIR}/war/WEB-INF/web.xml'
manifest='${SRC_DIR}/war/META-INF/MANIFEST.MF'>
<!--
重要!WEB-INF/web.xml ファイルを WAR から削除する
このファイルは上記の webxml 属性によりすでに含まれている
-->
<fileset dir="${SRC_DIR}/war" >
<patternset >
<include name="WEB-INF/weblogic.xml"/>
<include name="**/*.html"/>
<include name="**/*.gif"/>
</patternset>
</fileset>
<!--
重要!ADK 設計時フレームワークをアダプタの設計時
Web アプリケーションに含める
-->
<fileset dir="${WLI_HOME}/adapters/src/war" >
<patternset >
<include name="**/*.css"/>
<include name="**/*.html"/>
<include name="**/*.gif"/>
<include name="**/*.js"/>
</patternset>
</fileset>
<!--
設計時 UI をサポートするアダプタのクラスを含める
-->
<classes dir='${SRC_DIR}' includes='sample/web/*.class'/>
<classes dir='${SRC_DIR}/war' includes='**/*.class'/>
<classes dir='${WLI_HOME}/adapters/src/war'
includes='**/*.class'/>
<!--
アプリケーションで必要とされ、EAR に共有されないすべての JAR
ファイルを、WAR ファイルの WEB-INF/lib ディレクトリ下に含める
-->
<lib dir='${WLI_LIB_DIR}'
includes='adk-web.jar,webtoolkit.jar,wlai-client.jar'/>
</war>
</target>
この Ant ターゲットは、PROJECT_ROOT/lib ディレクトリ内に設計時インタフェース用に有効な WAR ファイルを作成します。このディレクトリで、PROJECT_ROOT は WebLogic Integration がインストールされている場所で、開発者はここにアダプタを構築します。たとえば、DBMS アダプタは、次の場所で構築されます。
WLI_HOME/adapters/DBMS
コード リスト 8-3 アダプタ開発ツリーの名前
<Application Deployed="true" Name="BEA_WLS_SAMPLE_ADK_Web"
Path="WLI_HOME¥adapters¥PROJECT_ROOT¥lib">
<WebAppComponent Name="BEA_WLS_SAMPLE_ADK_Web"
ServletReloadCheckSecs="1" Targets="myserver" URI=
"BEA_WLS_SAMPLE_ADK_Web"/>
</Application>
コード リスト 8-4 監視間隔の設定
<jsp-descriptor>
<jsp-param>
<param-name>compileCommand</param-name>
<param-value>/jdk130/bin/javac.exe</param-value>
</jsp-param>
<jsp-param>
<param-name>keepgenerated</param-name>
<param-value>true</param-value>
</jsp-param>
<jsp-param>
<param-name>pageCheckSeconds</param-name>
<param-value>1</param-value>
</jsp-param>
<jsp-param>
<param-name>verbose</param-name>
<param-value>true</param-value>
</jsp-param>
</jsp-descriptor>
手順 4 : 設計時 GUI の実装
Web アプリケーションで使用するフォームごとに、設計時フォーム処理の概要で説明する手順を実行するのは、単調であると同時に、エラーの原因になりやすいプロセスです。設計時フレームワークでは、「モデル/ビュー/コントローラ」パラダイムをサポートすることにり、このプロセスが簡略化されています。
設計時 GUI を実装するには、DesignTimeRequestHandler クラスを実装する必要があります。このクラスでは、フォームからのユーザ入力を受け入れ、設計時 GUI のアクションを実行します。このクラスを実装するには、ADK の AbstractDesignTimeRequestHandler を拡張する必要があります。このオブジェクトが提供するメソッドの詳細については、DesignTimeRequestHandler クラスの Javadoc を参照してください。
AbstractDesignTimeRequestHandler の拡張
AbstractDesignTimeRequestHandler により、WebLogic Server でアプリケーション ビューのデプロイ、編集、コピー、削除を行うためのユーティリティ クラスが提供されます。これにより、アプリケーション ビュー記述子にアクセスできます。アプリケーション ビュー記述子では、アプリケーション ビューに適用する接続パラメータ、イベント リスト、サービス リスト、ログ レベル、およびプールの設定が提供されます。[Application View Summary] ページには、各パラメータが表示されます。
ユーザ レベルから見ると、AbstractDesignTimeRequestHandler により、アダプタ全体に共通するすべてのアクションに適用できる実装が提供されます。主なアクションは以下のとおりです。
注意: ADK には、CCI 接続を設定するための接続パラメータを処理するメソッドはありますが、confconn.jsp ページは提供されません。このフォームの作成方法については、手順 5a : confconn.jsp フォームの作成を参照してください。
インクルードするメソッド
これらのアクションを正しく実行するには、AbstractDesignTimeRequestHandler を実装する際に、次のメソッドを指定する必要があります。
AbstractDesignTimeRequestHandler の具象実装のたびに、次の 2 つのメソッドを指定する必要があります。
手順 4a : ManagedConnectionFactory クラスの指定
ManagedConnectionFactory クラスを指定するには、次のメソッドを実装する必要があります。
protected Class getManagedConnectionFactoryClass();
このメソッドはアダプタに対する SPI の ManagedConnectionFactory 実装クラスを返します。このクラスは、AbstractManagedConnectionFactory が EIS への接続を試みる場合に必要です。
手順 4b : initServiceDescriptor() の実装
サービス アダプタについて、アダプタのユーザが設計時にサービスを追加できるように、initServiceDescriptor() を実装する必要があります。このメソッドは、リスト8-5 のように実装します。
コード リスト 8-5 initServiceDescriptor() の実装
protected abstract void initServiceDescriptor(ActionResult result,
IServiceDescriptor sd,
HttpServletRequest request)
throws Exception
このメソッドは、AbstractDesignTimeRequestHandler の addservc() の実装によって呼び出されます。このメソッドには、IServiceDescriptor パラメータに関連付けられた EIS 固有の情報を初期化する役割があります。addservc() の基本クラスが、エラー処理などを実行します。ユーザが addservc JSP を発行すると、addservc() メソッドが呼び出されます。
手順 4c : initEventDescriptor() の実装
イベント アダプタは、アダプタのユーザが設計時にイベントを追加できるように、initEventDescriptor() を実装する必要があります。このメソッドは、リスト8-6 のように実装します。
コード リスト 8-6 initEventDescriptor() の実装
protected abstract void
initEventDescriptor(ActionResult result,
IEventDescriptor ed,
HttpServletRequest request)
throws Exception;
このメソッドは、AbstractDesignTimeRequestHandler の addevent() の実装によって呼び出されます。このメソッドには、IServiceDescriptor パラメータに関連付けられた EIS 固有の情報を初期化する役割があります。addevent() の基本クラスを実装することによりエラー処理などのコンセプトに対応できます。ユーザが addevent JSP を発行すると、addevent() メソッドが呼び出されます。addevent には共通のロジックが含まれていることに加えて EIS 固有のロジックが initEventDescriptor() に委託されるので、オーバーライドしないようにしてください。
注意: サービス記述子にプロパティを追加する場合は、Bean 属性の命名規約に従って名前を割り当てる必要があります。これに従っていない場合、サービス記述子では、InteractionSpec は正しく更新されません。
手順 5 : HTML フォームの作成
設計時 GUI を実装する際の最後の手順は、インタフェースを構成する各種のフォームを作成することです。フォームの作成に習熟するために、以下の節を参照してください。
以下の節では、これらのフォームのコードの作成方法について説明します。フォームのサンプル コードもあります。
手順 5a : confconn.jsp フォームの作成
このページでは、ユーザが EIS で接続パラメータを指定するための HTML フォームを示します。このページには、アダプタの設計時 Web アプリケーションを表示する必要があります。このフォームは doAction=confconn によって ControllerServlet にポストされます。すなわち、設計時インタフェースの RequestHandler では次のメソッドを指定する必要があります。
public ActionResult confconn(HttpServletRequest request) throws
例外
このメソッドを実装すると、指定した接続パラメータにもとづいてアダプタの ManagedConnectionFactory の新しいインスタンスを作成できます。ManagedConnectionFactory により、EIS への接続を設定するための CCI ConnectionFactory が指定されます。したがって、発行された confconn フォームを処理することにより EIS に接続するために必要なパラメータが正しく指定されているかどうかが検証されます。
リスト8-7 にサンプル アダプタの confconn フォームを示します。
コード リスト 8-7 confconn.jsp のコーディング
1 <%@ taglib uri='/WEB-INF/taglibs/adk.tld' prefix='adk' %>
2 <form method='POST' action='controller'>
3 <table>
4 <tr>
5 <td><adk:label name='userName' required='true'/></td>
6 <td><adk:text name='userName' maxlength='30' size='8'/></td>
7 </tr>
8 <tr>
9 <td><adk:label name='password' required='true'/></td>
10 <td><adk:password name='password' maxlength='30'size='8'/></td>
11 </tr>
12 <tr>
13 <td colspan='2'><adk:submit name='confconn_submit'
doAction='confconn'/></td>
14 </tr>
15 </table>
16 </form>
リスト8-7 の内容を以下の節に示します。
ADK タグ ライブラリのインクルード
リスト8-7 のライン 1 では、JSP エンジンに ADK タグ ライブラリをインクルードするように指定しています。
<%@ taglib uri='/WEB-INF/taglibs/adk.tld' prefix='adk' %>
ADK が提供するタグを表 8-3 に示します。
ControllerServlet のポスト
リスト8-7 のライン 2 では、フォームが ControllerServlet にポストされます。
<form method='POST' action='controller'>
ControllerServlet は、Web アプリケーションに合わせて web.xml ファイルでコンフィグレーションされます。これは、RequestHandler で実行するメソッドに HTTP 要求を委託します。ControllerServlet を使用するのに、いずれのコードも指定する必要はありません。ただし、表 8-5 にリストされた初期パラメータは指定する必要があります。
[Form] フィールドのラベルの表示 リスト8-7 のライン 5 では、フォーム中のフィールドのラベルを表示します。 表示する値は、ユーザのメッセージ バンドルから検索します。required 属性は、ユーザのパラメータ指定が必須であるかどうかを示します。 テキスト フィールドのサイズの表示 リスト8-7 のライン 6 では、テキスト フィールドにサイズ 8、最大長 30 が設定されます。 フォームの [Submit] ボタンの表示 リスト8-7 のライン 13 では、アダプタ ユーザが入力を発行するためのフォームにボタンが表示されます。 ボタンのラベルは、confconn_submit を使用してメッセージ バンドルから検索されます。フォーム データを発行すると、ControllerServlet が、登録済みのリクエスト ハンドラ(「RequestHandlerClass プロパティ」を参照)で confconn メソッドを検索し、リクエスト データをリクエスト ハンドラに送ります。 confconn() の実装 AbstractDesignTimeRequestHandler により、confconn() メソッドが実装されます。このメソッドの実装によって、Java Reflection API を利用して、アダプタの ManagedConnectionFactory インスタンスのセッター メソッドに、ユーザが指定した接続パラメータがマップされます。アダプタの ManagedConnectionFactory に具象なクラスを指定するだけで済むようになります。このクラスを指定するには、次のメソッドを実装します。 手順 5b : addevent.jsp フォームの作成 このフォームを使用してアプリケーション ビューに新しいイベントを追加できます。このフォームは EIS 固有のものです。リスト8-8 はサンプル アダプタの addevent.jsp フォームを示しています。 コード リスト 8-8 addevent.jsp フォームを作成するサンプル コード 以下の節に、addevent.jsp の内容を説明します。 ADK タグ ライブラリのインクルード リスト8-8 のライン 1 では、JSP エンジンに ADK タグ ライブラリをインクルードするように指定しています。 ADK が提供するタグを表 8-3 に示します。 ControllerServlet のポスト リスト8-8 のライン 2 では、フォームが ControllerServlet にポストされます。 ControllerServlet は、Web アプリケーションに合わせて web.xml ファイルでコンフィグレーションされます。これは、RequestHandler で実行するメソッドに HTTP 要求を委託します。ControllerServlet を使用するのに、いずれのコードも指定する必要はありません。ただし、表 8-5 「ControllerServlet パラメータ」にリストされた初期パラメータは指定する必要があります。 [Form] フィールド ラベルの表示 リスト8-8 のライン 5 では、フォーム中のフィールドのラベルを表示します。 表示する値は、ユーザのメッセージ バンドルから検索します。required 属性は、ユーザのパラメータ指定が必須であるかどうかを示します。 テキスト フィールドのサイズの表示 リスト8-8 のライン 6 では、テキスト フィールドにサイズ 50、最大長 100 が設定されます。 フォームの [Submit] ボタンの表示 リスト8-8 のライン 9 では、アダプタ ユーザが入力を発行するためのフォームにボタンが表示されます。 ボタンのラベルは、addevent_submit を使用してメッセージ バンドルから検索されます。フォーム データを発行すると、ControllerServlet が、登録済みのリクエスト ハンドラ(「RequestHandlerClass プロパティ」を参照)で addevent() メソッドを検索し、リクエスト データをリクエスト ハンドラに送ります。 フィールドの追加 イベントを定義するときに必要となるその他のフィールドを追加する必要があります。複数のフィールドがあるフォームの例については、DBMS サンプル アダプタを使用したアダプタ開発方法の学習を参照してください。 手順 5c : addservc.jsp フォームの作成 このフォームを使用して、アプリケーション ビューに新しいサービスを追加できます。このフォームは EIS 固有のものです。リスト8-9 にサンプル アダプタの addservc.jsp フォームを示します。 コード リスト 8-9 addservc.jsp のコーディング ADK タグ ライブラリのインクルード リスト8-9 のライン 1 では、JSP エンジンに ADK タグ ライブラリをインクルードするように指定しています。 タグ ライブラリでは、ADK で提供される使いやすいフォーム検証機能がサポートされます。ADK タグ ライブラリには、表 8-3 に示すタグが用意されています。 ControllerServlet のポスト リスト8-9 のライン 2 では、フォームが ControllerServlet にポストされます。 ControllerServlet は、Web アプリケーションに合わせて web.xml ファイルでコンフィグレーションされます。これは、RequestHandler で実行するメソッドに HTTP 要求を委託します。ControllerServlet を使用するのに、いずれのコードも指定する必要はありません。ただし、表 8-5 「ControllerServlet パラメータ」にリストされた初期パラメータは指定する必要があります。 [Form] フィールド ラベルの表示 リスト8-9 のライン 5 では、フィールドのラベルを表示します。 <adk:label name='serviceName' required='true'/> 表示する値は、ユーザのメッセージ バンドルから検索します。required 属性は、ユーザのパラメータ指定が必須であるかどうかを示します。 テキスト フィールドのサイズの表示 リスト8-9 のライン 6 では、テキスト フィールドにサイズ 50、最大長 100 が設定されます。 フォームの [Submit] ボタンの表示 リスト8-9 のライン 9 では、アダプタ ユーザが入力を発行するためのフォームにボタンが表示されます。 ボタンのラベルは、[addservc_submit]を使用してメッセージ バンドルから検索されます。フォーム データを発行すると、ControllerServlet が、登録済みのリクエスト ハンドラ(「RequestHandlerClass プロパティ」を参照)で addservc メソッドを検索し、リクエスト データをリクエスト ハンドラに送ります。 フィールドの追加 サービスを定義するときに必要となるその他のフィールドを追加する必要があります。複数フィールドのあるフォームの例については、DBMS サンプル アダプタを使用したアダプタ開発方法の学習を参照してください。 手順 5d : イベントおよびサービスの編集機能の実装(省略可能) 設計時にユーザに対しイベントやサービスを編集する機能を許可する場合は、アダプタ プロパティを編集し、edtservc.jsp と edtevent.jsp のフォームを作成して、具体的なメソッドを実装する必要があります。ここでは、以下のタスクについて説明します。 注意: この手順は省略可能です。ユーザにこれらの機能を提供する必要はありません。 アダプタ プロパティ ファイルの更新 まず、アダプタ プロパティ ファイルを次のように変更してサンプル アダプタに合わせてシステム プロパティを更新します。
<adk:label name='userName' required='true'/>
<adk:text name='userName' maxlength='30' size='8'/>
<adk:submit name='confconn_submit' doAction='confconn'/>
public Class getManagedConnectionFactoryClass()
1 <%@ taglib uri='/WEB-INF/taglibs/adk.tld' prefix='adk' %>
2 <form method='POST' action='controller'>
3 <table>
4 <tr>
5 <td><adk:label name='password' required='true'/></td>
6 <td><adk:text name='eventName' maxlength='100' size='50'/></td>
7 </tr>
8 <tr>
9 <td colspan='2'><adk:submit name='addevent_submit'
doAction='addevent'/></td>
10 </tr>
11 </table>
12 </form><%@ taglib uri='/WEB-INF/taglibs/adk.tld' prefix='adk'%>
<form method='POST' action='controller'>
<adk:label name='eventName' required='true'/>
<adk:text name='eventName' maxlength='100' size='50'/>
<adk:submit name='addevent_submit' doAction='addevent'/>
1 <%@ taglib uri='/WEB-INF/taglibs/adk.tld' prefix='adk' %>
2 <form method='POST' action='controller'>
3 <table>
4 <tr>
5 <td><adk:label name='serviceName' required='true'/></td>
6 <td><adk:text name='serviceName' maxlength='100' size='50'/></td>
7 </tr>
8 <tr>
9 <td colspan='2'><adk:submit name='addservc_submit'
doAction='addservc'/></td>
10 </tr>
11 </table>
12 </form><%@ taglib uri='/WEB-INF/taglibs/adk.tld' prefix='adk' %>
<form method='POST' action='controller'>
<adk:text name='serviceName' maxlength='100' size='50'/>
<adk:submit name='addservc_submit' doAction='addservc'/>
アダプタ プロパティ ファイルを更新した後、新しいファイルを元のファイルと比較し、同期されていることを確認します。
edtservc.jsp と addservc.jsp の作成
これらの Java サーバ ページは編集機能を提供するために呼び出されるものです。編集 JSP ファイルと追加 JSP ファイルの主な違いは、記述子の値のロード方法です。編集 JSP ファイルは、既存の記述子の値をロードします。このため、DBMS サンプル アダプタでの編集および追加には、同じ HTML ファイルを使用します。
これらの HTML ファイルは各 JSP ページに静的にインクルードされます。これにより、JSP/HTML とプロパティを複製しなくても済むようになります。記述子の値は編集ページに表示するコントロールにマップされます。ここから、いずれの変更も発行できます。
記述子に定義された値でコントロールを初期化するには、AbstractDesignTimeRequestHandler で loadEvent/ServiceDescriptorProperties() メソッドを呼び出します。このメソッドにより、サービスのプロパティがすべて、RequestHandler に設定されます。これらの値を設定すると、RequestHandler により JSP ファイルで使用する ADK コントロールにそれぞれの値がマップされます。
loadEvent/ServiceDescriptorProperties() をデフォルトの設定で実装すると、ADK タグに対応するプロパティ名を使用して、記述子の値をマップします。ADK タグ名以外の値を使用してサービスやイベントのプロパティをマップすると、これらの値をオーバーライドして ADK タグ名マッピングに記述子を送ります。
また、HTML を解決する前に、RequestHandler を初期化する必要があります。この初期化は、1 回だけ実行します。リスト8-10 に edtevent.jsp のロード時に使用するコード例を示します。
コード リスト 8-10 edtevent.jsp のロード時に使用するサンプル コード
if(request.getParameter("eventName") != null){
handler.loadEventDescriptorProperties(request);
}
edtservc.jsp ファイルを、edtservc に発行する必要があります。
<adk:submit name='edtservc_submit' doAction='edtservc'/>
edtevent.jsp ファイルを、edtevent に発行する必要があります。
<adk:submit name='edtevent_submit' doAction='edtevent'/>
以下の場所の DBMS サンプル アダプタに例を示します。
WLI_HOME/adapters/dbms/src/war
メソッドの実装
最後に、表 8-6 に示されているメソッドを実装します。
各メソッドの実装例については、サンプル アダプタを参照してください。 手順 5e : Web アプリケーションのデプロイメント記述子(WEB-INF/web.xml)の記述 アダプタに対して WEB-INF/web.xml Web アプリケーションを作成する必要があります。GenerateAdapterTemplate を使用してサンプル アダプタからアダプタを複製する場合は、新しいアダプタの web.xml ファイルが自動的に生成されます。 コード リスト 8-11 web.xml サーブレット コンポーネント リスト8-12 に示すこのコンポーネントでは、ControllerServlet が controller という名前にマップされます。このアクションには、ADK JSP フォームで ControllerServlet が controller という論理名にマップされるという前提に基づくため、重要な意味があります。 コード リスト 8-12 web.xml ControllerServlet マッピング コンポーネント リスト8-13 に示すこのコンポーネントでは ADK タグ ライブラリを宣言します。 コード リスト 8-13 web.xml ADK タグ ライブラリ コンポーネント リスト8-14 に示すこのコンポーネントでは Web アプリケーションに対するセキュリティ制約を宣言します。前のリリースでは、ユーザはアダプタ グループに属している必要がありました。リリース 7.0 以降では、ユーザは Administrators グループに属している必要があります(リスト8-14 および リスト8-15 のロール名を参照してください)。これは、デプロイメントに、ユーザが Administrators グループに属することが必須の MBeans へのアクセスが必要となるためです。 コード リスト 8-14 web.xml セキュリティ制約のコンポーネント リスト8-15 に示すこのコンポーネントでは、ログイン コンフィグレーションを宣言します。 コード リスト 8-15 web.xml ログイン コンフィグレーションのコンポーネント
<servlet>
<servlet-name>controller</servlet-name>
<servlet-class>com.bea.web.ControllerServlet</servlet-class>
<init-param>
<param-name>MessageBundleBase</param-name>
<param-value>BEA_WLS_SAMPLE_ADK</param-value>
<description>The base name for the message bundles
for this adapter. The ControllerServlet uses this
name and the user's locale information to
determine which message bundle to use to
display the HTML pages.</description>
</init-param> <init-param>
<param-name>DisplayPage</param-name>
<param-value>display.jsp</param-value>
<description>The name of the JSP page
that includes content pages and provides
the look-and-feel template. The ControllerServlet
redirects to this page to let it determine what to
show the user.</description>
</init-param> <init-param>
<param-name>LogConfigFile</param-name>
<param-value>BEA_WLS_SAMPLE_ADK.xml</param-value>
<description>The name of the sample adapter's
LOG4J configuration file.</description>
</init-param> <init-param>
<param-name>RootLogContext</param-name>
<param-value>BEA_WLS_SAMPLE_ADK</param-value>
<description>The root category for log messages
for the sample adapter. All log messages created
by the sample adapter will have a context starting
with this value.</description>
</init-param> <init-param>
<param-name>RequestHandlerClass</param-name>
<param-value>sample.web.DesignTimeRequestHandler
</param- value>
<description>Class that handles design
time requests</description>
</init-param> <init-param>
<param-name>Debug</param-name>
<param-value>on</param-value>
<description>Debug setting (on|off, off is
default)</description>
</init-param> <load-on-startup>1</load-on-startup>
</servlet><servlet-mapping>
<servlet-name>controller</servlet-name>
<url-pattern>controller</url-pattern>
</servlet-mapping><taglib>
<taglib-uri>adk</taglib-uri>
<taglib-location>/WEB-INF/taglibs/adk.tld</taglib-location>
</taglib><Security-constraint>
<web-resource-collection>
<web-resource-name>AdapterSecurity</web-resource-name>
<url-pattern>*.jsp</url-pattern>
</web-resource-collection> <auth-constraint>
<role-name>Administrators</role-name>
</auth-constraint> <user-data-constraint>
<transport-guarantee>NONE</transport-guarantee>
</user-data-constraint>
</security-constraint><login-config>
<auth-method>FORM</auth-method>
<realm-name>default</realm-name>
<form-login-config>
<form-login-page>/login.jsp</form-login-page>
<form-error-page>/login.jsp?error</form-error-page>
</form-login-config></login-config>
<security-role>
<role-name>Administrators</role-name>
</security-role>
手順 6 : ルック & フィールの実装
設計時 GUI の開発時に従うべき重要なプログラミング手法として、アプリケーション ビューで使用するすべてのページで一貫したルック & フィールを実装する必要があります。ルック & フィールは display.jsp によって決定されます。このページは ADK に組み込まれており、設計時 Web アプリケーションに以下の利点をもたらします。
全体のページを通じて一貫したルック & フィールを実装するには、次の手順を実行します。
<%pageContext.include(sbPage.toString());%>
手順 7 : サンプル アダプタの設計時インタフェースのテスト
WebLogic Integration では、サンプル アダプタの設計時インタフェースの基本的な機能を検証するための、テスト ドライバが用意されています。このテスト ドライバは、http://www.httpunit.org にあるテスト用 Web インタフェースのフレームワークである HTTP ユニットを基準に作成されています。HTTP ユニットは、JUnit テスト フレームワーク(http://www.junit.org にあるフレームワーク)に関連しています。HTTP ユニットと JUnit の両バージョンとも WebLogic Integration の中に組み込まれています。
テスト ドライバではいくつかのテストが実行されます。これによりアプリケーション ビューが作成されてイベントとサービスの両方がアプリケーション ビューに追加され、アプリケーション ビューにデプロイ/アンデプロイを実行し、イベントとサービスの両方についてテストを実行します。正常に実行が終了すると、テスト ドライバはすべてのアプリケーション ビューを削除します。
ファイルとクラス
すべてのテスト ケースが、DesignTimeTestCase クラス、または対応する親クラス(AdapterDesignTimeTestCase)で有効です。DesignTimeTestCase クラス(sample.web パッケージ、および WLI_HOME/adapters/sample/src/sample/web フォルダ にあります)には、サンプル アダプタに固有のテストが組み込まれています。AdapterDesignTimeTestCase (com.bea.adapter.web パッケージ、および WLI_HOME/lib/adk-web.jar ファイルにあります) には、すべてのアダプタと一部の便利なメソッドに適用されるテストが組み込まれています。
テストの実行
設計時インタフェースをテストするには、次の一連の手順を実行します。
cd WLI_HOME/adapters/sample/project
test.case=web.DesignTimeTestCase
ant designtimetest
![]() |
![]() |
![]() |
![]() |
||
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |