ページの先頭行へ戻る
 Apcoordinatorユーザーズガイド

F.7.7 ビジネスロジックをJavaではなくXMLで記述したい

Apcoordinatorの「コマンドスクリプティング」を利用すると、ビジネスクラス全体をJavaで記述する代わりに、処理のフローをXML形式で記述しJavaの記述を必要な部分のみに限定することができます。

コマンドスクリプティングには、以下の機能があります。

コマンドスクリプティングを利用すると、以下のメリットがあります。

以下のような場合は、Javaで記述する必要があります。

コマンドスクリプティングの記述の構成

コマンドスクリプティングの記述は以下の構成になっています。

<?xml version="1.0" encoding="UTF-8"?>
<commandMap>
  <!-- コマンドスクリプティングの動作を設定 -->
  <config>
    ....
  </config>

  <!-- bean, verbで指定したデータBean,コマンドを受けて実行する処理を記述 -->
  <entry bean="入力のデータBeanのクラス名" verb="コマンド">
    ....
  </entry>

  <!-- 同様に entryタグを必要なだけ記述 -->
  ....

  <!-- サブルーチンを定義 -->
  <procedure name="サブルーチン名">
    ....
  </procedure>

  <!-- 同様に必要なだけサブルーチンを定義 -->
  ....

</commandMap>

Webアプリケーションの場合、ユーザが初めてアプリケーションにアクセスしたときの処理は、bean, verbアトリビュートを省略したentryタグに記述します。

上記の記述では文字エンコーディングが"UTF-8"となっていますが、"Shift_JIS"等、Javaでサポートされている各種のエンコーディングが利用できます。

処理の記述

entry, procedureタグのコンテントには処理を実行するためのタグを記述します。簡単な例で基本的なタグの使い方を説明します。

この記述例で使用しているタグを解説します。

newBeanタグ

インスタンスを新しく作成します。Java のnew 演算子に相当します。クラス名をclsアトリビュートで指定します。作成されたインスタンスは、beanアトリビュートで指定したスクリプトデータ名で保存されます。スクリプトデータとは、コマンドスクリプティングで使用する変数です。

copyValueタグ

データBeanのプロパティの値を別のプロパティにコピーします。bean, propertyアトリビュートで指定したプロパティの値をtargetBean, targetPropertyアトリビュートで指定したプロパティにコピーします。この記述例ではプロパティの値ではなく文字列定数をプロパティに代入するためにcopyValueタグを使用しています。beanアトリビュートに"#"に続けて文字列を指定すると、その文字列がtargetBean, targetPropertyで指定したプロパティに代入されます。従って、記述例では「ようこそ」がBodyBeanのmessageプロパティに代入されます。

setResponseBeanタグ

paneアトリビュートで指定された領域にデータBeanを対応付けます。データBeanのスクリプトデータ名をbeanアトリビュートで指定します。表示モードを設定したい場合は、verbアトリビュートで指定します。設定不要の場合はverbを省略できます。

スクリプトデータ名"uji.current"はApcoordinatorで予約されている特別な名前で、現在処理中のオブジェクトを保存するために使用されています。newBean, setResponseBean タグのbeanアトリビュートやcopyValueタグのtargetBeanアトリビュートを省略した場合は、"uji.current"が指定されたものとみなされます。従って、上記の記述例は以下のように短く書くことができます。

<entry>
  <newBean cls="sample1.BodyBean"/>
  <copyValue bean="#ようこそ" targetProperty="message"/>
  <setResponseBean pane="body" verb="reqmode" />
</entry>

この3つ以外のタグでも多くの場合同様のルールが適用されます。

もう少し複雑な例を説明します。

この記述例で使用しているタグを解説します。

validateタグ

入力値のチェックを行ないます。チェックの対象となるデータBeanとプロパティ名をbean, propertyアトリビュートで指定します。記述例ではbeanが省略されているため"uji.current"が指定されたと見なされます。entryタグの直後では、"uji.current"にはリクエストBean (記述例ではsampl1.BodyBeanクラス) が保存されているため、BodyBeanのvalueプロパティがチェックの対象となります。 検証の内容はtype, minValue, maxValueアトリビュートなどで指定します。type="int" はプロパティの値をint型とみなすことを指定します。minValue, maxValueは許容する最小値、最大値を指定します。プロパティの値がこの範囲外の場合はエラーとなり、例外が発生します。この例外は、後述するcatchタグで処理できます。statusTextには、エラーが発生した時に、例外に付加する付加情報を文字列で指定します。catchタグでは、特定の付加情報を持つ例外のみを選んで処理することができます。

catchタグ

例外処理を記述します。catchタグのコンテントに例外処理を記述します。 statusアトリビュートに文字列を指定すると、その文字列を付加情報として持つ例外のみを処理します。記述例では、catchタグのstatusにvalidateタグのstatusTextと同じ文字列を指定しているため、validateタグで値をチェックしてエラーとなった場合にcatchタグの処理が実行されます。

invokeタグ

サブルーチン、Javaクラスのメソッド、EJBセションBeanを呼び出します。記述例ではJavaクラスのメソッドの呼び出しに使用しています。この場合、呼び出すJavaクラスのメソッドをnameアトリビュートで"クラス名.メソッド名"の形式で指定します。メソッドに引数として与えるデータBeanはbeanアトリビュートで指定しますが、ここでは省略されているため、"uji.current"に保存したデータBeanが与えられます。呼び出されるメソッドのシグネチャはビジネスクラスのメソッドと同様に以下の形式で作成してください。

public void someMethod(com.fujitsu.uji.DispatchContext context, [データBeabのクラス名] data);

メソッドの返却値は、resultアトリビュートで指定したスクリプトデータ名で保存されます。記述例ではresultを省略しているため、スクリプトデータ名"uji.current"で保存されます。

作成したコマンドスクリプティング記述を使用する

作成したコマンドスクリプティング記述を使用するには、コマンドマップにコマンドスクリプティング記述のファイル名を記述します。コマンドマップと同じディレクトリにコマンドスクリプティング記述"comscript.xml"を置いた場合、コマンドマップに次の1行を追加します。

+comscript.xml

以上で説明した以外の機能については、“定義ファイルリファレンス”、“第10章 コマンドスクリプティング”を参照してください。

関連項目