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

業務用RIAの本命!? Flex+Java開発入門(2):S2BlazeDSを用いたFlex+Javaアプリの【いろは】 (4/4)

[福田寅成,クラスメソッド株式会社]
前のページへ 1|2|3|4       

【3】RemoteObjectコンポーネント

 RemoteObjectコンポーネントを利用すると、リモートアプリケーションサーバのJavaオブジェクトのメソッドを直接呼び出すことができます。処理の動きはこれまでの解説のとおりです(Java側はこの後簡単に解説しますが、メソッドがあってそれが呼ばれるだけです)。

 RemoteObjectはJava以外のオブジェクトを呼ぶことができますが、Javaの場合も何らかのソフトウェアとペアで利用する必要があります。

サーバソフトウェア サーバ側で利用できるオブジェクト
BlazeDS Java、JMS
LiveCycle Data Services ES(LCDS) Java、JMS、ColdFusion、HibernateSQL
S2Flex2 Java
WebORB Java、.NET、Ruby on Rails、PHP
AMFPHP PHP
SabreAMF PHP
PyAMF Python
Django AMF Python
表6 Flexで呼び出せるリモートオブジェクト(主なもの)

 こうして見ると、Flexに対するサーバ側アプリケーションの実装はどんな言語でもOK、ということが分かります。RemoteObjectと設定ファイル(次回以降解説予定)を修正すれば、Flex側のコードの記述はほとんど変えずに、「Hello! S2BlazeDS」アプリケーションも動くということになります。付け加えると、Adobe AIRの通信処理もFlexの場合とまったく同様です。

 このRemoteObjectの通信方式は「AMF 3」というものが使われています。「AMF(Action Message Format)」はバイナリ通信の技術(データのフォーマット技術)です(以降、本連載での「AMF」はAMF 3のことです。ほかにも「AMF 0」という通信方式があります。これは、Flash Playerのバージョン6から8までの時代で主に使われていたフォーマットです)。

 この通信方式の特徴は、通信で必要なデータを圧縮して送受信するというところです。ほかのHTTPServiceコンポーネントやWebServiceコンポーネントの通信時のように、タグ(<や>など)などの無駄な情報は送信しません。

 一般的に、RemoteObject、HTTPService、WebServiceの順に通信が速いといわれています。

サーバ側のJavaとDBの処理はどうなっている?

 これ以降は、サーバ側のソースコードを簡単に説明していきます。

「S2Container」でコンポーネントを自動登録

 Seasar2のS2Container(DIコンテナ)に自動登録されているコンポーネントはHelloWorldServiceの1個だけです。自動登録の設定はSeasarのデフォルトの設定を利用しています。そこで、最初は「serviceパッケージ以下に○○ServiceというJavaクラスを作るとコンポーネントとして自動登録される」というルールを覚えれば、OKです。

HelloWorldService.javaより一部抜粋
    public HelloWorldResponseDto getWorld(
        HelloWorldRequestDto requestDto){

        // 戻り値の作成
        HelloWorldResponseDto responseDto
            = new HelloWorldResponseDto();

        // クライアントからの検索条件の取得 ……【い】
        Test test = requestDto.test;

        // 検索の実行……【ろ】
        Test returnVal = testJdbc.getTest(test);

        // 戻り値への検索結果のセット……【は】
        responseDto.test = returnVal;

        // 検索結果をクライアントに返す……【は】
        return responseDto;
    }

  • クライアントからのDTOを受け取る(【い】の処理)
  • DBアクセス処理を呼び出す(【ろ】の処理)
  • DBアクセス結果をDTOに詰めてクライアントに返す(【は】の処理)

 処理の流れは非常にシンプルです。

シンプルで使いやすいDB接続技術「S2JDBC」

 本アプリケーションではDBアクセスにS2JDBCを使っています。この技術はSQLではなくJavaでDBへのクエリを実装できる形の(一般的には)新しい技術です。JPA(Java Persistence API)や.NET Framework 3.5から導入された「LINQ」と文法は似ていますが、後発なこともあって、非常にシンプルで使いやすい技術になっています。この技術も「S2」という文字列から始まることから分かるとおり、Seasar Foundationで開発されている技術です。

 ただ、SQLではなくJavaでクエリを記述することで、複雑なSQLで行っていたものと同等なクエリを「考え出す」ことには少しハードルが高いかもしれません。その場合、SQLを直接実行するメソッドも用意されているので、そちらを利用します。

TestJDBC.java
/**
* JDBCマネージャ
*/
public JdbcManager jdbcManager;

/**
* {@link Test}テーブルのidを基に{@link Test}情報を取得
*
* @param test {@link Test}
* @return Test情報
*/
public Test getTest(Test test) {
    return jdbcManager.from(Test.class)
                      .where("id = ?", test.id)
                      .getSingleResult();
}

 getTestメソッドでは、Testエンティティ(検索条件)を受け取り検索を実行し、検索結果のTestエンティティを返しています。この処理のように、DBアクセス処理はエンティティかエンティティのリストを引数に取り、エンティティかエンティティのリストを返すという形がポピュラーです。insertのときなどは、insert件数としてint型が返ってきたりします。

 jdbcManagerは、H2データベースの設定が行われたJDBCアクセスを管理しているオブジェクトです。S2Containerから自動的にインスタンスがDIされています。設定はs2jdbc.diconとjdbc.diconに記述されています。実際の処理を見てみましょう。処理を日本語に訳すと、「TESTテーブルから条件はid = test.id(画面で設定された777)で検索し、1件の検索結果を取得する」というものです。シンプルなクエリであればSQLを記述する必要はありませんね。

H2データベース

 H2は軽量で埋め込みモードでも実行可能なDBです。サーバ起動が不要なので、今回のサンプルでも利用しました(Seasar関連のサンプルでよく利用されています)。今回利用したテーブルがTESTテーブルなのは、H2にデフォルトでサンプルとして付いているのがTESTテーブルだったので、そこに1レコード(id=777、name=World!)を追加しています。

 H2には、Webベースの管理ツールが付いているのですが、EclipseプラグインのDBViewerを利用してもDBの内容を確認できます。DBViewerのインストールはUpdateSiteを利用すると簡単です。

次回はFlexとStrutsの連携

 以上で、「Hello! S2BlazeDS」アプリケーションの解説を終わります。「HelloWorld!」なのにとても長くなってすみません。

 次回は、Flex+Strutsの連携をお伝えする予定です。FlexとポピュラーなサーバサイドJava技術のStrutsを連携させて簡単なeラーニングアプリケーション(クイズアプリケーション)を作成する予定です。今回登場したBlazeDSやS2JDBCは第4回以降の連載で再登場する予定です。以下、連載の簡単な予定です。次回もお楽しみに。

第1回 Webアプリケーション開発の歴史とFlexの紹介、Flex+Java開発環境構築(2008/5/22公開済み)
第2回 S2BlazeDSを用いたFlex+Javaアプリケーションの基礎 (今回)
第3回 (予定) Flex+Struts連携。FlexとポピュラーなサーバサイドJava技術のStrutsを連携させる
第4回 (予定) Flex+S2Flex2+Seasar2。Flex部分はそのままにJavaをSeasar2に差し替えてサクサク開発を体験
第5回 (予定) Flex+S2BlazeDS+Seasar2。最新のBlazeDSを用いてFlexとJavaを連携させてみる
第6回 (予定) クイズアプリケーションの総仕上げ。よく使う技術トピックを実装しながらアプリケーションを仕上げる
表7 「業務用RIAの本命!? Flex+Java開発入門」連載予定

@IT関連記事

Tomcatの環境を構築する
やり直し「JSPとTomcat」(2) JSPの実行環境となる「Webコンテナ」の1つ、「Tomcat」を実行するための環境を構築し、次回以降の実習環境を作ります
Java Solution」フォーラム 2006/3/2

EclipseでTomcatを使ったJ2EE開発を行う
[連載]Eclipseを使おう!(3) Eclipseは単体ではJ2EE開発に対応しない。LombozプラグインとTomcatを使ったWebアプリケーションを作成してみよう
Java Solution」フォーラム 2003/2/14

Seasar Projectの全貌を探る
国産オープンソースプロダクトのコミュニティとして急成長するSeasar2。大手SIerもサポートを表明したJ2EEプロダクトの全貌を探る

いまさら聞けないFlex、そして、いまこそ入門のとき!?
Flex 3正式版リリース! Flexの過去・現在・未来 先日ついに正式リリースされたFlashベースのRIA技術Flex 3。いまが入門に最適なFlexの過去・現在・未来を一挙に解説
リッチクライアント & 帳票」フォーラム 2008/3/31

作って学ぶAIRウィジェットの基礎→応用
最近よく聞くAdobe AIRって何だっけ? ウィジェットを簡単に作れるらしいけど…… と曖昧な知識のあなたに贈る超入門連載。楽しいサンプルを作って基礎から応用まで学ぼう

プロフィール

福田 寅成(ふくだ ともなり)

クラスメソッド株式会社 エンタープライズサービス部門 システムエンジニア

大手SIerでの長いJava開発経験を経てクラスメソッドに。 Java、JavaScript/Ajax、Flex、AIR、C#など、さまざまな分野に関する技術調査研究、および業務アプリケーション開発に携わる。 FlexやAIRの開発依頼はコチラ



前のページへ 1|2|3|4       

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

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

メールマガジン登録

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