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

iBATISのORMとSpringのAOPを活用したDBアクセスオープンソースTERASOLUNAで作るWebアプリ(3)(3/3 ページ)

[正野勇嗣,株式会社NTTデータ]
前のページへ 1|2|3       

作成したWebアプリをTomcatで動かすと……

 それではWebアプリケーションを動かしてみましょう。Tomcatへのプロジェクトの追加やTomcatの起動については連載第2回を参考にしてください。

DBへのデータの登録

 Webブラウザに「http://localhost:8080/terasoluna-sample/inputSCR.do」を入力してください。表示されるフォームに「001」「terasoluna」と入力し、下記の画面が出力されれば成功です。

図5 入力画面の例 図5 入力画面の例
図6 出力画面の例 図6 出力画面の例

 上記の操作の結果、DBへデータが登録されたかどうかをHSQL Database Managerで確認してみましょう。HSQL Database Managerの起動およびHSQLDBへの接続方法は前述したとおりです。

 「select * from user_list where id = ‘001’;」と入力し、Executeを押下してください。ID列、NAME列に値「001」「terasoluna」が表示されれば成功です。

図7 データ登録結果 図7 データ登録結果

 なお、ユーザーの一覧をテーブルで表示したいなど、さらに詳しいWebアプリケーションを作成したい場合は下記のチュートリアルを参考にしてください。「http://sourceforge.jp/projects/terasoluna/releases/」からterasoluna-server4jweb-doc_2.0.1.0.zipをダウンロードし、TERASOLUNA Server Framework for Java(Web版)チュートリアル.pdfがチュートリアルの資料となります。

ロールバックの確認

 上記では、正常にトランザクションが完了した結果DBにデータが登録されたことを確認しました。今度は業務ロジックの途中でエラーが発生した場合に、それまでのSQL操作をロールバックされることを確認します。なお、トランザクション管理の設定については「手順【5】Spring FrameworkのBean定義ファイル(applicationContext.xml、commonContext.xml)の設定追加」を参照してください。

 業務ロジッククラスを編集し、SQL操作を失敗させ、トランザクションをロールバックさせます。画面から入力されたIDのデータを登録する処理を2回書くことで、DBの一意性制約違反エラーを発生させます。

//略
 
public BLogicResult execute(ConcatInput input) {
 
    //業務処理(DB登録)の実行
    AddUserDaoInput addUserDaoInput = new AddUserDaoInput();
    addUserDaoInput.setAddUserId(input.getFirstTerm());
    addUserDaoInput.setAddUserName(input.getSecondTerm());
 
    //画面から入力されたIDのデータを登録
    this.updateDAO.execute("addUser", addUserDaoInput);
 
    //再度同じデータを登録
    this.updateDAO.execute("addUser", addUserDaoInput);
 
//以下省略
リスト11 業務ロジッククラス(ConcatBLogic.java)

 Webブラウザ(Internet Explorer)に「http://localhost:8080/terasoluna-sample/inputSCR.do」を入力してください。表示されるフォームに「002」「terasoluna」と入力し、下記の画面が出力されれば成功です。

図8 入力画面の例 図8 入力画面の例
図9 出力画面の例 図9 出力画面の例

 Tomcatのコンソールログを見ると、一意制約違反を示すログ(Unique constraint violation)が出力されていることが分かります。

[2008/12/04 16:34:43][DEBUG][UpdateDAOiBatisImpl] execute Start.
[2008/12/04 16:34:43][DEBUG][UpdateDAOiBatisImpl] execute End. success count:1
[2008/12/04 16:34:43] [DEBUG][UpdateDAOiBatisImpl] execute Start.
[2008/12/04 16:34:43][WARN][RequestProcessor] 処理できない例外がスローされました: class org.springframework.dao.DataIntegrityViolationException
[2008/12/04 16:34:43][ERROR][RequestProcessorEx] sessionHash = 32A9396F15521CC50B3AAB414352FCE0F417AAFB
[2008/12/04 16:34:43][ERROR][RequestProcessorEx] javax.servlet.ServletException: SqlMapClient operation; SQL []; 
--- The error occurred in sqlMap.xml. 
--- The error occurred while applying a parameter map. 
--- Check the addUser-InlineParameterMap. 
--- Check the statement (update failed). 
--- Cause: java.sql.SQLException: Unique constraint violation: SYS_IDX_48 in statement [ INSERT INTO user_list ( id ,name ) VALUES ( ? ,? ) ]; nested exception is com.ibatis.common.jdbc.exception.NestedSQLException: 
--- The error occurred in sqlMap.xml. 
 
…【以下略】…
リスト12 Tomcatのコンソールログ

 HSQL Database Managerで確認すると、図7の状態のままであることが確認できます。2回目に発行されたSQLにて一意制約違反のエラーが発生し、トランザクションがロールバックされたため、画面から入力されたID「002」のデータが登録されませんでした。

図10 トランザクションのロールバック 図10 トランザクションのロールバック

フレームワークに“お任せ”しちゃおう!

 今回は、サンプルWebアプリケーションの作成を通して、TERASOLUNAフレームワークを使ったDBアクセスについて学びました。

 TERASOLUNAフレームワークのDAOを利用した業務ロジックの実装、SQL設定ファイルへのSQLの記述について紹介しました。TERASOLUNAフレームワークが提供するupdateDAOとqueryDAOを利用することで、コネクションを意識しないDBアクセスが可能になります。また、SQLを業務ロジックとは別のSQL設定ファイルに記述することで、メンテナンス性が向上します。

 また、SpringのAOPを利用したトランザクション管理について紹介しました。トランザクションの設定を業務ロジックごとには記述せず、SpringのBean定義ファイル(applicationContext.xml、commonContext.xml)に記述を集約します。今回は、業務ロジックを1つのみ作成しましたが、業務ロジックの数が増えた場合に集約の効果が高まります。

 次回は、長年のシステム開発のフィードバックを受けて開発された、TERASOLUNAの便利な拡張機能について説明します。

@IT関連記事

Webアプリの常識をJSPとStrutsで身につける
JSP/サーブレット+StrutsのWebアプリケーション開発を通じて、Java言語以外の開発にも通用するWebアプリケーション全般の広い知識・常識を身に付けるための連載です。初心者・中堅・ベテランも大歓迎!

Strutsを使うWebアプリケーション構築術
ステップ・バイ・ステップの解説で誰にも分かるStruts講座。効率の高いWebアプリケーション開発をマスターしよう

開発の標準化とフレームワークの普及
21世紀はじめのWeb技術史(2) 今回は、ソフトウェア品質を高めるために進化を遂げてきたアプリケーション開発環境の最近の道筋を概観する。キーワードはフレームワーク
情報マネジメント > アーキテクチャ 2007/3/19

Javaバッチ処理は本当に業務で“使える”の?
オープンソースフレームワークを使ってバッチ処理の開発手法やノウハウを学んでいく本連載。バッチ処理を知っている人も知らない人も、業務システムに欠かせないバッチ処理について理解を深めましょう

.NET開発でもオープンソース・フレームワークを使おう
TERASOLUNA for .NETフレームワーク概説 .NET Frameworkだけの業務システム開発で起こる問題とは? それを解消するのに役立つフレームワークの条件とは?
Insider.NET」フォーラム 2003/9/30


前のページへ 1|2|3       

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

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

メールマガジン登録

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