連載
» 2008年11月11日 00時00分 公開

Hello World!で理解する、Webアプリ開発の分業化オープンソースTERASOLUNAで作るWebアプリ(2)(2/3 ページ)

[師芳卓,株式会社NTTデータ]

6つの手順でTERASOLUNAを利用したサンプルを作ろう

 今回作るWebアプリケーションは、「2つの入力フォームに文字列を入力してボタンを押すと、結合した文字列が表示される」というシンプルなものです。

図3 今回作るWebアプリケーションの概要イメージ 図3 今回作るWebアプリケーションの概要イメージ

 また、URLについては、下記のとおりに命名規則を定義します。

パス アクション
/yyyySCR.do ForwardActionを実行し、yyyy.jspに遷移する
/zzzzBL.do BLogicActionによりBLogicインターフェイス実装クラスのZzzzBLogicを実行
表3 URLの命名規則

 今回のサンプルアプリは、分業を意識した形で作業を進めていきます。分業の際に重要なのは、独立して効率的に作業できるように、情報共有が必要な作業を初めにしっかりすることです。Webアプリケーションを作るうえで共有すべき情報は、画面遷移情報と変数情報であるため、今回の手順もそれを意識し、画面遷移と変数に関して先行して設定し、その後、画面の作成や業務処理を実装するという順番で進めていきます。

 この作業手順をTERASOLUNAフレームワークを利用したWebアプリケーションの開発に適用すると、以下のとおりです(下記リストはインデックスになっています)。

図4 各設定ファイルと分業化のイメージ 図4 各設定ファイルと分業化のイメージ

 それでは、実際に手順【1】【6】の順番で各設定を行ってWebアプリケーションを作っていきましょう。

手順【1】業務入出力ファイルblogic-io.xmlの設定追加

 まずは、Strutsのアクションフォームと各業務で扱う入出力DTOとのマッピング設定をする業務入出力ファイルblogic-io.xmlの設定を行います。今回は、入力に使うfirstTermやsecondTerm、結果を格納するresultTermの3つのフィールドを定義しましょう。

リスト1 業務入出力設定ファイル(blogic-io.xml、※太字はユーザー定義項目。以下同様
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE blogic-io PUBLIC
  "-//NTTDATA//DTD TERASOLUNA for Spring blogic-io 1.0//JA"
  "dtd/blogic-io.dtd">
<blogic-io>
  <!-- 【I】 -->
  <action path="/concatBL">
    <blogic-params bean-name="sample.ConcatInput">
      <!-- 【II】 -->
      <set-property property="firstTerm"
        blogic-property="firstTerm" source="form" />
      <set-property property="secondTerm"
        blogic-property="secondTerm" source="form" />
    </blogic-params>
    <blogic-result>
      <!-- 【III】 -->
      <set-property property="resultTerm"
        blogic-property="resultTerm" dest="form" />
    </blogic-result>
  </action>
</blogic-io>

【I】アクションパスと業務入力DTOクラスを設定
【II】業務ロジックで必要な変数を定義
【III】業務ロジックの結果を格納する変数を定義

 入力に使う変数はblogic-params要素、出力に使う変数はblogic-result要素の中に定義します。blogic-paramsについては、業務入力DTOクラスの指定が必要です。sourceやdest属性には、どのスコープのオブジェクトについて値を取得するか/反映させるかを設定します。スコープは、「form」「request」「session」「application」の4つの中から選択します。通常はアクションフォームであるため、ここではformを設定しています。

 また、propertyやblogic-propertyはそれぞれアクションフォーム、業務入出力DTOのフィールド名を設定する属性ですが、特別な理由がない限り設定値を同一にすることを推奨します。

手順【2】Struts設定ファイル(struts-config.xml)の設定追加 手順

 次に、struts-config.xmlにアクションフォームの設定と遷移情報を設定します。修正が必要な個所は2カ所です。

 1つ目は、アクションフォームを定義するform-beans要素です。ここで、今回使用するアクションフォーム「_form」を定義します。フィールドとして、blogic-io.xmlで定義したフィールドをすべて列挙します。

リスト2 struts-config.xmlのform-beans要素の設定
<form-beans>
  <form-bean name="_form"
    type="jp.terasoluna.fw.web.struts.form.DynaValidatorActionFormEx">
    <!-- 【I】 -->
    <form-property name="firstTerm" type="java.lang.String"/>
    <form-property name="secondTerm" type="java.lang.String"/>
    <form-property name="resultTerm" type="java.lang.String"/>
  </form-bean>
</form-beans>

【I】blogic-io.xmlで使用するすべての変数を定義

 2点目はアクションマッピングの設定です。TERASOLUNAフレームワークでは、Spring FrameworkとStrutsの連携機能を利用し、アクションクラスの定義をSpring FrameworkのBean定義ファイルに外部化し、struts-config.xmlには各パスに対する遷移先情報のみを設定します。

 TERASOLUNAフレームワークを利用する業務アプリケーションでは、1回の画面の遷移で複数のアクションを経由します。混乱を避けるため、アクション間の遷移情報を図にして整理しましょう。例えば、今回の画面遷移を図示すると、次のようになります。

図5 アクション間の遷移図 図5 アクション間の遷移図

 TERASOLUNAフレームワークでは、画面間の遷移の際にフレームワークを経由させる目的で、画面(JSP)表示の際にForwardActionを経由することを推奨しています。BLogicAction実行後の遷移についても、ForwardActionを経由することを推奨しています。そのため、まず画面(JSP)に対して対応するForwardActionを遷移図に追加し、その後、業務ロジックに対応するBLogicActionを追加し、表示する画面に対応するForwardActionに遷移させます。

 遷移図が完成したら、次にアクションマッピングの設定を記述します。図でBLogicActionとなっているところについては、使用するフォーム名の設定と、子要素として「success」などの各遷移文字列に対する遷移先を指定します。図でForwardActionとなっているところについては、parameter属性に遷移先のJSPを指定しましょう。

リスト3 struts-config.xmlのaction-mapping要素の設定
<action-mappings type="jp.terasoluna.fw.web.struts.action.ActionMappingEx">
  <!-- 【I】 -->
  <action path="/welcome" parameter="/welcome.jsp"/>
  <action path="/concatBL" name="_form" scope="session">
    <!-- 【II】 -->
    <forward name="success" path="/resultSCR.do"/>
  </action>
  <action path="/inputSCR" parameter="/input.jsp" />
  <action path="/resultSCR" parameter="/result.jsp"/>
</action-mappings>

【I】各アクションパスに対する遷移先のパスを設定
【II】BLogicActionの場合は、遷移文字列と遷移先パスを設定

手順【3】SpringのBean定義ファイル(moduleContext.xml)の設定追加

 Bean定義ファイルとは、Javaのオブジェクトと、オブジェクト間の依存性を定義する設定ファイルです。Bean定義など、Spring Frameworkについて詳しく知りたい読者は、インデックス「DI×AOP(Spring/Seasarなど)」をご覧ください。

 今回編集するBean定義ファイル(moduleContext.xml)では、Strutsとの連携機能を利用したアクションクラスのBean定義と、業務ロジックのクラスのBean定義の2点を設定します。

 まずは、Actionクラスを定義しましょう。Bean名にはstruts-config.xmlのaction要素に指定したパスと同じパスをname属性として指定してください。さらに、BLogicActionの場合は、name属性の設定のほか、businessLogicプロパティに実行する業務ロジックのBeanを指定する必要があります。

リスト4 struts-config.xmlのaction-mapping要素の設定
<!-- 【I】 -->
<bean name="/welcome" scope="singleton"
  class="jp.terasoluna.fw.web.struts.actions.ForwardAction" />
<bean class="jp.terasoluna.fw.web.struts.actions.BLogicAction"
  name="/concatBL" scope="singleton">
  <!-- 【II】 -->
  <property name="businessLogic" ref="concatBLogic" />
</bean>
<bean name="/inputSCR" scope="singleton"
  class="jp.terasoluna.fw.web.struts.actions.ForwardAction" />
<bean name="/resultSCR" scope="singleton"
  class="jp.terasoluna.fw.web.struts.actions.ForwardAction" />
<!-- 【III】 -->
<bean class="sample.concatBLogic"
  id="concatBLogic" scope="singleton" />

【I】各アクションパスに対するアクションクラスを指定
【II】BLogicActionの場合は実行する業務ロジックのBeanを指定
【III】業務ロジッククラスを定義。IDは手順【2】で指定したものと対応付け

 次に、業務ロジックのBean定義を行います。設定するクラスは、BLogicインターフェイスを実装した業務ロジッククラスである必要があります。Bean名が上記のBLogicActionの設定と対応していることに注意してください。

 以上で、業務入出力情報、画面遷移に関する設定は完了しました。次ページで、各画面やリクエスト処理について解説していきますが、ここから複数の業務開発者での分業が可能です。

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。