流れるようにSQLっぽくO/RマッピングできるS2JDBCJava初心者が超俊敏にWebアプリを作る方法(最終回)(3/3 ページ)

» 2009年03月18日 10時00分 公開
[新田智啓株式会社パワーエッジ]
前のページへ 1|2|3       

どのようにトランザクションをしているのか?

 通常ほとんど変更する必要はありませんが、ここではどのようなDIの設定になっているか見るために設定ファイルを見てみます。トランザクションの指定がされている設定ファイルは「customizer.dicon」で、以下のようになっています。

customizer.dicon
<components>
  <include path="default-customizer.dicon"/>
  <component name="formCustomizer" class="org.seasar.framework.container.customizer.CustomizerChain"/>
  <component name="actionCustomizer" class="org.seasar.framework.container.customizer.CustomizerChain">
    <initMethod name="addAspectCustomizer">
      <arg>"aop.traceInterceptor"</arg>
    </initMethod>
    <initMethod name="addAspectCustomizer">
      <arg>"actionMessagesThrowsInterceptor"</arg>
    </initMethod>
    <initMethod name="addCustomizer">
      <arg>
        <component class="org.seasar.framework.container.customizer.TxAttributeCustomizer"/>
      </arg>
    </initMethod>

    <initMethod name="addCustomizer">
      <arg>
        <component class="org.seasar.struts.customizer.ActionCustomizer"/>
      </arg>
    </initMethod>
  </component>
  <component name="serviceCustomizer" class="org.seasar.framework.container.customizer.CustomizerChain">
    <initMethod name="addAspectCustomizer">
      <arg>"aop.traceInterceptor"</arg>
    </initMethod>
    <initMethod name="addCustomizer">
      <arg>
        <component class="org.seasar.framework.container.customizer.TxAttributeCustomizer"/>
      </arg>
    </initMethod>

  </component>
</components>

 ここで、連載で初めてSeasar 2の設定ファイルが出てきて驚いた読者もいるかと思います。Actionをトランザクションしている限り、このファイルも見る必要はありません。詳細な見方は、Seasar 2の公式ページのリファレンスを参照してください。今回はトランザクションの部分のみポイントを絞って説明します。

 まず、重要なところは、componentで定義されているxxxxCustomizerです。xxxxの名前はそれぞれパッケージにも使われている名前ですね。formCustomizerやactionCustomizer、serviceCustomizerでそれぞれのクラスに動作を足しています(AOP)。formCustomizerは特に何も設定されていません。

 次に、actionCustomizerで設定されているorg.seasar.framework.container.customizer.TxAttributeCustomizerが重要です。この設定がトランザクションの管理を行います。この設定を加えることでActionクラスのメソッドが呼ばれた時点でトランザクションを開始し、Exceptionがthrowされてそのメソッドが終了するとロールバック、正常終了するとコミットを行います。

 serviceCustomizerでも同様の設定がされています。これは、どうなるのでしょうか? この場合、Actionでトランザクションが開始されている場合何もしません。トランザクションが開始されていなかった場合、ここでトランザクションが開始され同じような動きになります。

トランザクションの範囲をServiceのメソッド単位に変えると…

 それでは、トランザクションの範囲をServiceのメソッド単位に変えてみます。addAspectCustomizerに設定されていた、以下の行を削除するだけです。

    <initMethod name="addCustomizer">
      <arg>
        <component class="org.seasar.framework.container.customizer.TxAttributeCustomizer"/>
      </arg>
    </initMethod>

 これだけでトランザクションの範囲がServiceクラスのメソッド単位になりました。このように適応クラスを自由に変更でき、さらに、決めた後は設定ファイルにはまったく触る必要がなくトランザクション管理を行ってくれます。

 また、設定ファイルで設定されたトランザクション以外にもアノテーションを利用してソース上でより柔軟にトランザクションを設定できます。

実はDoltengよりも良い?「S2JDBC-Gen」とは

 実は筆者としては、データオブジェクトとサービスクラスについては、DoltengのScaffoldで生成されたソースよりも、ビルドツール「Ant」を使用してデータオブジェクトとサービスクラスを生成する「S2JDBC-Gen」を使った方が、より良いソースコードが生成されると考えています(連載開始時のDolteng 0.33.0バージョンと比較して)。

 DoltengのScaffoldができた後も、Doltengは開発が続けられ、S2JDBC-Genも改良を繰り返しています。新しいDoltengで生成されたプロジェクトにはデフォルトのS2JDBC-Gen実行用のファイルも含まれています。

図2 Javaファイル作成ダイアログ 図2 新しいDoltengで生成されたプロジェクトにはデフォルトのS2JDBC-Gen実行用のファイルも含まれている

 現時点では、データオブジェクトとサービスクラスはS2JDBC-Genで一括生成し、ActionとActionFormのクラスは必要な部分のみScaffoldで生成して必要な改修を加えていく方法が一番いいかもしれません。使うときにどちらの方がいいか試してみて決めるのがいいでしょう。両方を実行するのには5分もかかりません。

 S2JDBC-Genについては、また別の機会に紹介したいと思います。気になる方は公式ページを参照してください。

Seasar 2.4で、あなたも超俊敏なWebアプリ開発を

 これで、S2JDBCの基本的な利用方法が一通りできると思いますが、いかがでしたでしょうか。S2JDBCの便利さを実感いただけたかと思います。

 今回で本連載は終了です。これまでに連載した内容で、簡単ではありますがSAStrutsを中心としたSeasar 2.4の基本的な利用方法を解説してきました。より詳しい利用方法については各プロダクトの公式ページを利用するとよいと思います。

 SAStrutsを利用して、どんどん新しいWebアプリケーションの開発を行ってみてはいかがでしょうか。

筆者紹介

所属:
株式会社パワーエッジ
AD事業部(Application Development事業部)

新田 智啓(しんでん ともひろ)

SAStrutsコミッタ

Seasarプロダクトのsandboxで新たにS2Csvのプロダクトを公開。業務で汎用的に使えるように更新中。

著者ブログ(newta)


前のページへ 1|2|3       

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

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

メールマガジン登録

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