4.Bao基礎編その1
前回から2週間も空いてしまった……orz ごめんなさいごめんなさい。このペースじゃ駄目駄目です。気合入れないと。
ちなみにS2Buri勉強会は私用により参加不可能。無念だ……。
さて、今まではXPDLを見てきましたが、今日はJavaの実行コードを見ていきます。
XPDLで定義したワークフローにアクセスするためのインターフェースとなるのが、Baoです。
Baoとは、リファレンスの説明によれば、"BusinessLogic Access Object"だとか。一説によるとBaoのBはBuriのBだという話も……。
今まで見てきたFurnitureManagement.xpdlを利用するBaoがBuriのtestソースフォルダ中にあるので、中身を見てみましょう。
package org.seasar.buri.bao; import java.util.List; import org.seasar.buri.bao.BuriConvert; import org.seasar.buri.dto.FurnitureItemDto; public interface FurnitureManagementBao { public static String PROCESS = "資産管理.備品管理"; public static BuriConvert CONVERTER[] = new BuriConvert[]{ new BuriConvert(Long.class,"FurnitureItemDao.getFurnitureItem(#data)") }; public static String getNowUse_ACTIVITY = "利用中"; public List getNowUse(); public static String findNowUse_ACTIVITY = "利用中"; public List findNowUse(FurnitureItemDto findDto); public static String getEndDepreciation_ACTIVITY = "償却期間終了"; public List getEndDepreciation(); public static String getEndLease_ACTIVITY = "リース終了"; public List getEndLease(); public void enterItem(FurnitureItemDto dto); public void timeorverItem(long itemID); }
ただのJavaのインターフェースです。
ただし、PROCESSとかCONVERTERとかACTIVITYとか名前がついた定数が書いてあるのが特徴的。この書き方はS2Daoの定数アノテーションに似てますね……。と思ってリファレンス中の説明を読むと、やはり定数アノテーションと書いてありますね。それに、このFurnitureManagementBaoはインターフェースですが、それに対応する実装クラスがソース中のどこにもありません。これもS2Dao同様。
さて、それはさておき、Baoの中を1行1行みていってみますか。
まず最初の行が、PROCESSアノテーション。
public static String PROCESS = "資産管理.備品管理";
これは、このBaoがどのワークフロー(プロセス)を扱うかを指定するアノテーションになります。この場合、「資産管理」パッケージの「備品管理」プロセスを示してます。XPDLの構造では、まずパッケージがあってその中にプロセスがある、という形になってるので、こういう形式で指定することが出来るわけですね。このPROCESSアノテーションは、Bao内に1つ定義しておく必要があるようです。
で次に出てくるのがCONVERTERアノテーションなんですが……。ちょっと説明省略。次のやつを説明してからの方がよいと思われるので(^^;
というわけでCONVERTERは飛ばし。そしてそれ以降の箇所なんですが、ここは基本的にメソッドと、メソッドに付随するアノテーションです。Baoのメソッドは、シグネチャによってメソッドの振る舞いが変わります。これもS2Daoと同様。Convention Over Configurationの一種ですね。詳しいルールは、マニュアルの方に載ってるのでそっち参照。そこにいろいろ書いてあるのですが、一番重要なのが、メソッド名に関して。メソッド名がget/select/find/countで始まる場合、データ取得用のメソッドと見なされます。それ以外ならば、フロー処理を行うメソッドとみなされます。ここで挙げた「データ取得」と「フロー処理」の二つが、Baoが持ってる二大処理、と思ってよさげ?
FurnitureManagementBaoの例でいうと、以下の4つがデータ取得用メソッドです。
- getNowUse()
- findNowUse(FurnitureItemDto findDto)
- getEndDepreciation()
- getEndLease()
残りの以下2つがフロー処理用メソッド。
- enterItem(FurnitureItemDto dto)
- timeorverItem(long itemID)
この各メソッドの役割ですが、これは実際に動作させてみて比較するのがよいかな……、ということで次回へ。