SOAフレームワークBeehiveに挑戦(3) 1/4

PollinateでNetUI Page Flowプログラミング

BEAシステムズがApache財団にWebLogic Workshopの一部を寄贈したことで誕生した、オープンソースのSOAフレームワーク「Apache Beehive」。本連載はその仕様を詳細に検証することで、J2EEの目指している新たな方向性を明らかにする。(編集局)

www.netpotlet.com
原田洋子
2005/7/1

NetUI Page Flowの概要

主な内容
--Page 1--
NetUI Page Flowの概要
プログラミング環境
プログラミングのためのドキュメント
--Page 2--
シンプルなプログラム
  −コントローラのプログラミング
--Page 3--
  −JSPページのプログラミング
  −サーバのセットアップと実行
--Page 4--
データ表示方法とバリデーション
まとめ&サンプルコードのダウンロード

 本連載では第1回「Beehiveでメタデータ(JSR 175/181)を体験しよう」でApache Beehiveの概要を、第2回「Beehive開発環境「Pollinate」を使ってみよう」でEclipseプラグインのPollinateを紹介してきましたので、今回はPollinateを使ってどのようにApache Beehiveのプログラミングを行うかを見ていきます。

 今回紹介するプログラミングはApache Beehiveの3つのプロジェクトのうち、「NetUI Page Flowプロジェクト」が提供する機能を利用するものです。このプロジェクトは短くして「Page Flows」と呼ぶことが多いので、本記事でもPage Flowsと呼ぶことにします。

 Page Flowsは第1回の記事で簡単に触れたように、StrutsベースのWebアプリケーション・フレームワークです。JSR 175メタデータを利用するのがApache Beehiveの最大の特徴ですが、Page FlowsでもJSR 175の仕様に従った注釈が多数定義されています。プログラマはこれらの注釈を使ってアプリケーションを作っていきます。注釈を利用すると、すべてを通常のJavaコードで記述するよりも制御の流れが分かりやすくなると同時に、プログラムの行数も減っていきます。開発の最初の段階でEoD(Ease of Development)になっているばかりではなく、後になってプログラムを手直ししなければならない場合でも、比較的EoDになっているといえるでしょう。

 Page Flowsのプログラミングは、図1に示すようにJSPページでPage Flowタグライブラリを、コントローラ(JPFファイル)で注釈を使います。また、注釈だけでは不十分な場合にはコントローラでPage Flow APIも使います。コントローラには.jpfという拡張子を付け、通常、Controller.jpfというファイル名にしますが、これはJavaのクラスファイルそのもので、実際にはControllerクラスの定義です。

図1 Page Flowsのプログラミング

 では、プログラミングの環境を整えて、実際に動かしてみましょう。

プログラミング環境

Pollinateのインストール

 本記事ではEclipseプラグインのPollinateを使ってプログラミングを行いますので、まず、Pollinateが動くように環境を整えます。Pollinateについては第2回ですでに説明しているので、それに従ってインストールすればいいのですが、その後、新しいバージョンがリリースされましたので、本記事では次の環境で動作を確認しました。

  • JDK           1.5.0_03
  • Eclipse       3.1M5a
  • Web Tools  1.3M3
  • Pollinate     M3
  • Tomcat       5.5.9

 Eclipse、Web Toolsともにここに挙げたバージョンより新しいものがリリースされていますが、上記の組み合わせにしないとPollinateが満足に動かないので注意してください。なお、Web ToolsがWebサービスにも対応したため、必要なアーカイブが増えています。Web Services Required Jars Download Instructionsを参照してください。

Eclipseの起動

 前回記事でも説明しましたが、Apache Beehiveは注釈を利用するので、注釈解釈ツール「apt」が必要です。本来はEclipseの設定だけでaptコマンドが使えるようになるはずですが、Pollinateは開発中のプラグインということもあり、まだ対応できていません。そのため、次のようにしてEclipseを起動します。

UNIX
eclipse -vmargs -Xbootclasspath/a:${JAVA_HOME}/lib/tools.jar

Windows
eclipse -vmargs -Xbootclasspath/a:%JAVA_HOME%\lib\tools.jar

 Eclipseが立ち上がったらワークベンチの状態にして、Javaコンパイラのバージョンを指定します。指定方法は前回記事を参照してください。

プロジェクトの作成

 プロジェクトの作成についても前回記事と同じ作業を行います。ただし、今回はサンプルを動かすのではありませんので、前回記事の図6で行ったテンプレートの指定は行いません。

 ファイル → 新規 → その他 → Pollinate/Beehive Project → 次へ
  → Nameにプロジェクト名入力(本記事ではeaves)
  → New...(Target Serverのボタン)

 (サブウィンドウ上の作業)
  → Apache → Apache Tomcat v5.5 → 次へ
  → Browse(Tomcat 5.5.9のトップディレクトリを選択)→ 終了

 (元ウィンドウで)
  → 終了

 以上でPollinateプロジェクトができました。作業しやすくするためにパースペクティブをJ2EEに変えておきましょう。

 ウィンドウ → パースペクティブを開く → その他 → J2EE選択 → OK

 作成したeavesプロジェクトは図2に示すようにProject ExploreのDynamic Web Porject以下にあります。

図2 Pollinateプロジェクト「eaves」

問題の解決

 J2EEパースペクティブに切り替えると3つの問題が報告されます(図3)。1つはeaves/WebContent/WEB-INF/netui-validator-rules.xmlで発生している問題ですが、Eclipse画面右下にある問題ビューの記述欄を見るとvalidator要素の必須属性であるmsgがないことが原因であることが分かります。リスト1に示すように1051行目に「msg=""」の属性を追加しておきます。

図3 Pollinate M3プラグインで発生する問題(画像をクリックすると拡大します)

1042     <validator name="netui_validwhen"
1043        classname=
"org.apache.beehive.netui.pageflow.validation.ValidatorRules"
1044        method="validateValidWhen"
1045        methodParams="java.lang.Object,
1046          org.apache.commons.validator.ValidatorAction,
1047          org.apache.commons.validator.Field,
1048          org.apache.struts.action.ActionErrors,
1049          javax.servlet.http.HttpServletRequest,
1050          javax.servlet.ServletContext"
1051        msg="">
1052     </validator>
1053 
1054   </global>
1055    
1056 </form-validation>
リスト1 netui-validator-rules.xmlの修正
(注:は表示の都合で改行していることを表します)

 残り2つの問題は、どちらもlog4j.xmlから参照されているlog4j.dtdがないために発生しています。Log4Jのアーカイブを取得して同梱されているlog4j.dtdをlog4j.xmlと同じディレクトリに置くと解決されます 注1。ただし、log4j.xml自身にも問題があり、このままではログが出力されないので、本記事ではlog4j.xmlの代わりにリスト2に示すlog4j.propertiesを使い、log4j.xmlを削除しています。

注1
プラグインに何かの問題があるようで、Eclipseを何度か再起動しないと解決されませんでした。

log4j.rootCategory=WARN,BEEHIVE_FILE_LOG,BEEHIVE_CONSOLE_LOG
log4j.appender.BEEHIVE_FILE_LOG=
org.apache.log4j.RollingFileAppender
log4j.appender.BEEHIVE_FILE_LOG.File=beehive.log
log4j.appender.BEEHIVE_FILE_LOG.Append=true
log4j.appender.BEEHIVE_FILE_LOG.MaxFileSize=500000KB
log4j.appender.BEEHIVE_FILE_LOG.layout=
org.apache.log4j.PatternLayout
log4j.appender.BEEHIVE_FILE_LOG.layout.ConversionPattern=
%d{DATE} %-5p %-15c{1} [%x]: %m%n
log4j.appender.BEEHIVE_CONSOLE_LOG=
org.apache.log4j.ConsoleAppender
log4j.appender.BEEHIVE_CONSOLE_LOG.layout=
org.apache.log4j.PatternLayout
log4j.appender.BEEHIVE_CONSOLE_LOG.layout.conversionPattern=
%d{DATE} %-5p %-15c{1} [%x]: %m%n
リスト2 log4j.properties
(注:は表示の都合で改行していることを表します)

プログラミングのためのドキュメント

 以上で準備が整いプログラミングを始められるようになりましたが、プログラムの話をする前に、プログラミングをするためには何を見ればいいかについて触れておきます。

注釈のドキュメント

 Beehiveを使いこなすうえで、注釈のドキュメントは必須です。Page Flowsについてはhttp://incubator.apache.org/beehive/の左側にあるナビゲーションを

 Documentation → Reference Docs → Page Flows → Page Flow Annotations

とたどったところにありますので参照してください。

Page Flowタグライブラリのドキュメント

 動的に埋め込むパラメータの表示やフォームの処理にはコントローラ内の注釈やメソッドなどとJSPを連携させますが、そこで必要になるのがPage Flowタグライブラリです。注釈同様、Beehiveを使ううえではタグライブラリのドキュメントも必須です。参照するにはhttp://incubator.apache.org/beehive/の左側にあるナビゲーションを

 Documentation → Reference Docs → Page Flows → <netui> Tags

とたどります。

Page Flow APIのドキュメント

 フォワード先のJSPで利用するパラメータをセットするなど、コントローラのメソッドで使用するAPIのドキュメントです。注釈、Page Flowタグライブラリばかりではなくこのドキュメントも見ると、より便利にBeehiveを使えるようになるでしょう。参照するにはhttp://incubator.apache.org/beehive/の左側にあるナビゲーションを

 Documentation → Reference Docs → Page Flows → Page Flow Javadoc

とたどるか、

 Documentation → Javadoc → Page Flow Javadoc

とたどります。

 なお、Apache Beehiveのサイトで公開されているドキュメントはBeehiveの最新版に対応していますが、Pollinate M3がサポートしているBeehiveは最新版ではないので、ドキュメントにあってもPollinateではコンパイルできないなどの問題が起こることがあります。(次ページに続く)

  1/4

 Index
SOAフレームワークBeehiveに挑戦(3)
PollinateでNetUI Page Flowプログラミング
Page 1
・NetUI Page Flowの概要
・プログラミング環境
・プログラミングのためのドキュメント
  Page 2
・シンプルなプログラム
 −コントローラのプログラミング
  Page 3
 −JSPページのプログラミング
 −サーバのセットアップと実行
  Page 4
・データ表示方法とバリデーション
・まとめ&サンプルコードのダウンロード


「SOAフレームワークBeehiveに挑戦」


XML & SOA フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

HTML5+UX 記事ランキング

本日月間