Java初心者が超俊敏にWebアプリを作る方法
連載インデックスへ

最終回 流れるようにSQLっぽくO/RマッピングできるS2JDBC


株式会社パワーエッジ
新田 智啓(newta
2008/3/18


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

 通常ほとんど変更する必要はありませんが、ここではどのような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アプリケーションの開発を行ってみてはいかがでしょうか。

参考資料

@IT関連記事


オブジェクトで通信するAMFとS2JDBCによるDB接続
業務用RIAの本命!? Flex+Java開発入門(4)
Flex+Java開発においてS2BlazeDSを使うと、AMFを使った通信が使え、S2JDBCによる簡単なDB接続で生産性が上がります
リッチクライアント & 帳票」フォーラム 2008/8/22
Java開発者のためのFAQ集
Java開発者が 最低限押さえておくべきJavaに関する基礎知識、実際のソリューション構築の場面で定石とされるノウハウ、プログラミングTIPSなどのFAQをご紹介していきます。

JDBCの基礎知識と活用編
Javaデータアクセスの基礎
Javaからデータベースにアクセスする際の定番ミドルウェア「JDBC」を使ったデータアクセスを理解しよう
SeasarV2によるDBアクセス機能
Seasar Projectの全貌を探る(3) 今回はS2でDBアクセスするための手順を紹介することで、S2のDI+AOP技術がDBアクセスにおいてどう活かされているかを理解いただこう
Java Solution」フォーラム 2005/9/3
SeasarのO/RマッピングツールS2Dao
Seasar Projectの全貌を探る(5) SeasarV2のプロダクトにはO/Rマッピングツールも用意されている。XMLの設定などユニークな特長を持つS2Daoを紹介する
Java Solution」フォーラム 2005/12/23
SeasarのDBアクセスにHibernateを使う
Seasar Projectの全貌を探る(6) SeasarV2のプロダクトにはHibernateを使ったDBアクセスを実現するS2Hibernateが用意されている
Java Solution」フォーラム 2006/1/19
Webアプリの常識をJSPとStrutsで身につける
JSP/サーブレット+StrutsのWebアプリケーション開発を通じて、Java言語以外の開発にも通用するWebアプリケーション全般の広い知識・常識を身に付けるための連載です。初心者・中堅・ベテランも大歓迎!

筆者プロフィール
新田 智啓(しんでん ともひろ)

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


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

著者ブログ(newta)

1-2-3

 Index
最終回 流れるようにSQLっぽくO/RマッピングできるS2JDBC
  Page1
注意! 「Doltengの現在のバージョンについて」
超便利なJDBC、「S2JDBC」とは?
  Page2
S2JDBCでDB操作をしてみよう
S2JDBCを利用した超簡単なトランザクション管理
Page3
実はDoltengよりも良い?「S2JDBC-Gen」とは
Seasar 2.4で、あなたも超俊敏なWebアプリ開発を





Java Solution全記事一覧



TechTargetジャパン

Java Solution フォーラム 新着記事

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

RSSフィード

キャリアアップ

- PR -
@IT Sepcial

イベントカレンダー

PickUpイベント

- PR -
もっと見る
- PR -

お勧め求人情報

ホワイトペーパーTechTargetジャパン

@IT Sepcial
ソリューションFLASH