「jdbc.dicon」
最初のサンプルの初期設定のところで出てきましたが、サンプルDBのパスを登録しています。
「s2jdbc.dicon」
このファイルでは、S2JDBCで用いるSQLダイアレクト(方言)を指定しています。H2データベースを利用しているので、h2Dialectが有効になっています。
Seasarアプリケーションのレスポンス
次に、サーバ側アプリケーションのパッケージ構造を確認しておきましょう。シンプルで分かりやすいので、構造そのものに関しての解説は省略します。
それでは、QuizServiceクラスのソースを見ていきましょう。Flex側でのRemoteObjectによる呼び出しから分かるとおり、Flexから直接呼ばれるのが、このQuizServiceのメソッドになります。
Flex側からのリクエストDTOによる値の受け渡しはないので、空のレスポンスDTOを作成し、DB検索処理を行って必要なデータを取得し、それらを全部レスポンスDTOに詰め込んでクライアントに返しています。
public QuizResponseDto getQuiz(QuizRequestDto requestDto) { // 戻り値の作成 QuizResponseDto responseDto = new QuizResponseDto(); // 設問の検索の実行 responseDto.quizList = quizJdbc.getQuiz(); // コメントの検索の実行 responseDto.commentList = commentJdbc.getComment(); // 検索結果をクライアントに返す return responseDto; }
S2JDBCによるDBアクセス処理
サンプル解説の最後は、S2JDBCによるDBアクセス処理になります。
接続するDBの中身を確認
第2回の記事の4ページ目に書きましたDBViewerでDBの中身を確認しておきます。
データベース定義名 | H2 at QuizS2BlazeDS(適当でいいです) |
---|---|
JDBCドライバ | {AtmarkitQuizAppBlazeDSプロジェクト}\WEB-INF\lib\h2-2007-12-27.jar |
表1 |
JDBC Driver | org.h2.Driver |
---|---|
JDBCタイプ | タイプ4 |
接続文字列 | jdbc:h2:C:\Users\fukuda.tomonari\Documents\ FLEXBU~3\AtmarkitQuizAppBlazeDS\data\demo |
接続ユーザー | sa |
接続パスワード | (なし) |
接続スキーマ | sa |
表2 |
前回のStruts版クイズアプリケーションのXMLでデータを定義した場合と同じデータ構造です。「QUIZ」テーブルには「QUESTION」「SELECTORS」「CORRECT」カラムが、「COMMENT」テーブルには「COMMENT」カラムがあります。
S2JDBCのソースコードを見てみよう
次に、S2JDBCの処理ですが、「QUIZ」テーブルへの処理と「COMMENT」テーブルへの処理はほとんど同じなので、QuizJdbcクラスのソースを確認します。
/** * {@link Quiz}テーブルのデータを全件取得します。 * * @return {@link Quiz} */ public List<Quiz> getQuiz() { return jdbcManager.from(Quiz.class).getResultList(); }
1行しかないシンプルな処理です。日本語に翻訳すると「QUIZテーブルから(WHERE句やORDER BY句なしに)全件取得する」処理を行っています。SQLに直すと「select * from QUIZ」の処理を行っています。
こういったシンプルなクエリや簡単なWHERE句、ORDER BY句のクエリであれば、SQLを用意する必要がなしに処理を実装できるので、S2JDBCは楽ですね。複雑な検索処理などはS2JDBCでSQLを利用する方法を選択すればOKです(次回の記事で取り上げる予定です)。
O/Rマッピング部分のソースコードも見てみよう
このgetQuizメソッドの戻り値に注目するとQuizのListが返っています。ここでJava側のQuizエンティティのソースを見てみます。
/** * クイズテーブルに対応したエンティティ */ @Entity public class Quiz implements Serializable { static final long serialVersionUID = 1L; /** 問題 */ public String question;
プロパティの部分を見ると、普通のJavaBeansですが、クラスに「@Entity」アノテーションが付加されています。このアノテーションによりこのJavaBeansがエンティティとして認識され、S2JDBCによってテーブルとエンティティオブジェクト間のO/Rマッピングが行われます。
編集部注:O/Rマッピングについて詳しく知りたい読者は、連載「Hibernateで理解するO/Rマッピング」をご覧ください。
コラム 「エンティティをDBから自動生成するツールとは?」
今回解説しませんが、このエンティティをDBから自動生成してくれるツールがSeasarで提供されています(Dolteng(どぅるてん)というツールの中に存在します)。簡単なテーブルなら手でエンティティクラスを作れますが、カラムの多いテーブルのエンティティは手で作るのは時間がかかりますからツールで生成するのが楽です。
Doltengに関しての詳細は、「Dolteng − SeasarWiki」を参照してください(Daoクラスの生成のところが今回利用する機能です、Daoクラスは自動生成後削除してしまいましょう)。
以上で、Java側のアプリケーションの解説を終わります。
なぜAMF/BlazeDSを使うのか? 速いから!
今回は今後主流になる可能性の高いFlex+S2BlazeDS+Javaでのアプリケーション開発に関してお伝えしました。BlazeDSは商用サポート付きのバージョンや機能の充実した上位バージョンも存在し、実案件で安心して選択できる通信フレームワークになっています。上位版を使っても、アプリケーションの作りや設定はBlazeDSで開発した場合と同じです。
BlazeDSによる通信のメリットの1つに「パフォーマンス」があります。このパフォーマンス周りを実感できるサンプルアプリケーションを次回お伝えする予定です。
@IT関連記事
いまさら聞けないFlex、そして、いまこそ入門のとき!?
Flex 3正式版リリース! Flexの過去・現在・未来 先日ついに正式リリースされたFlashベースのRIA技術Flex 3。いまが入門に最適なFlexの過去・現在・未来を一挙に解説
「リッチクライアント & 帳票」フォーラム 2008/3/31
作って学ぶAIRウィジェットの基礎→応用
最近よく聞くAdobe AIRって何だっけ? ウィジェットを簡単に作れるらしいけど…… と曖昧な知識のあなたに贈る超入門連載。楽しいサンプルを作って基礎から応用まで学ぼう
Webアプリの常識をJSPとStrutsで身につける
JSP/サーブレット+StrutsのWebアプリケーション開発を通じて、Java言語以外の開発にも通用するWebアプリケーション全般の広い知識・常識を身に付けるための連載です。初心者・中堅・ベテランも大歓迎!
プロフィール
福田 寅成(ふくだ ともなり)
クラスメソッド株式会社 エンタープライズサービス部門 システムエンジニア
大手SIerでの長いJava開発経験を経てクラスメソッドに。 Java、JavaScript/Ajax、Flex、AIR、C#など、さまざまな分野に関する技術調査研究、および業務アプリケーション開発に携わる。 FlexやAIRの開発依頼はコチラ
Copyright © ITmedia, Inc. All Rights Reserved.