【1】データの取得
そもそも、アプリケーション内にオブジェクト形式の1万件のデータがすでにサーバから取得済みですが、ここではあえてSQLiteデータベースからSQLのSELECT文でデータを取得してきています。xmlButtonClickHandlerから呼ばれるselectRecordメソッドは下記になります。
private function selectRecord():void { sqlStatement = new SQLStatement(); sqlStatement.sqlConnection = sqlConnection; sqlStatement.text ="SELECT id,name,ruby,mail,sex,age," +"birthday,married,bloodtype,prefecture," +"prefectureCode,phone,keitai,carrier,curry FROM USER"; // ここ重要!!!!! sqlStatement.itemClass = User; //イベント登録 sqlStatement.addEventListener(SQLEvent.RESULT, selectRecordResultHandler); sqlStatement.addEventListener(SQLErrorEvent.ERROR, sqlStatementErrorHandler); //実行 sqlStatement.execute(); }
データ取得処理ですが、いままでのSQL実行処理と流れはまったく同じです。違いはSQLStatementオブジェクトにSELECT結果の1件1件を格納するエンティティの型を指定している部分(コメント「ここ重要!!!!!」の直下の行)です。
これにより、SELECTした結果を後続の処理で扱いやすくなるうえに、型を指定してオブジェクトを扱っているので、Object型に格納した場合に比べてパフォーマンスが向上します。
【2】取得したオブジェクト形式のデータのXML化
このSELECT処理の結果、イベントでは取得したSELECT結果をselectedUserListに格納し、writeRecordメソッドを呼び出しています(この部分は省略)。
【3】XML書き出し処理
次に、XML書き出し処理であるwriteRecordメソッドを見ていきましょう。
private function writeRecord():void { var xml2Write:XML = convertObject2XML(); var file:File = File.desktopDirectory.resolvePath( User.XML_DEFAULT_FILE_NAME); if(writeXML(file, xml2Write)) { Alert.show(User.XML_DEFAULT_FILE_NAME + MessageConsts.MESSAGE_SUFFIX_FILE_WRITING_SUCCESS); } else { Alert.show(User.XML_DEFAULT_FILE_NAME + MessageConsts.MESSAGE_SUFFIX_FILE_WRITING_ERROR); } // ビジーカーソルを削除する CursorManager.removeBusyCursor(); }
最初にオブジェクト形式の1万件のデータを1つのXMLに変換しています。詳細は実際のソースを確認してください。
次に、Fileオブジェクトとしてデスクトップ上のファイル名「users.xml」を指定しています。そして、writeXMLメソッドを呼び出して実際のXML書き出し処理を行って、成功した場合は、ダイアログ表示後、ビジーカーソルを元に戻して処理を終了しています。
実際のXML書き出し処理を行っているwriteXMLメソッドの内容は、Java言語でのファイル書き出し処理に似ていて、非常にシンプルな処理です。
private function writeXML(file:File, xml:XML):Boolean { var stream:FileStream = new FileStream(); var returnValue:Boolean; try { stream.open(file, FileMode.WRITE); stream.writeUTFBytes(xml.toString()); returnValue = true; } catch(error:IOError) { returnValue = false; } finally { stream.close(); } return returnValue; }
FileStreamを開き、書き出しモードでストリームをオープンし、ストリームにファイルの内容を書き出して、最後に(finallyで)ストリームをクローズしています。Java言語でのファイル操作については以下の記事が参考になると思います。
以上で今回の拡張機能の部分のソースの解説は終わりです。
AIRを採用する際の問題点とは?
最後に、AIRを採用する場合によく問題点に挙げられることに触れておきます。
アプリケーションの配布/更新
WebブラウザベースのWebアプリケーションに比べ、デスクトップアプリケーションは“配布”の問題が常にあります。しかし、ほかのデスクトップアプリケーション構築技術同様、AIRにもアプリケーション配布やバージョン管理の仕組みが提供されています。
AIRでは「インストールバッチ」を用意することにより、Flash PlayerやAIRのインストール状況のチェックからアプリケーションのインストールまでをWebブラウザ経由でシームレスに行うことが可能です。
また、アプリケーション起動時にアプリケーションの最新バージョンをチェックし、自動更新する機能があります。
本当にAIR構築時にFlex以外のノウハウは不要?
まったくのゼロとはいいませんが、ほかのデスクトップアプリケーション開発技術に比べ、学習コストは圧倒的に低いです。
AIRでは、構築技術にHTML+JavaScript(Ajax)の形式を選択することもでき、HTMLのWebアプリケーションやFlexアプリケーション開発経験者であればスムーズにAIRで開発ができます。開発ツールもFlex Builderなので、新しいツールを購入したりプラグインを導入したりといったことも不要です。
AIRにする必要あるの? Flexで十分じゃない?
構築したいアプリケーションの要件によってはFlexで十分であることが多いです。FlexとAIRそれぞれで実際に実現できることをよく調査し、理解したうえで、要件定義の際にFlexとAIRどちらをベースにアプリケーションを開発するべきかを検討すべきです。
可能性を秘めたAIR+Javaペア
今回は、これまでのFlex+Javaとはクライアントの動作環境が変わったAIR+Javaに関してお届けしました。Flexのアプリケーション開発技術に加えて、今回ご紹介したSQLite連携やファイル連携の機能を持ち合わせたデスクトップアプリケーション開発環境がAIRです。
もちろんAIRはサーバサイドのJavaとの連携も自由自在です。Webの世界からデスクトップの世界に進出したAIRはまだまだ技術的には新しく、どのような形で開発者の型に料理されるかはまだまだ未知数のところが多く、それでいて可能性を感じさせてくれるアプリケーション開発環境です。
Flex+Java同様、AIR+Javaも今後さまざまなシーンで利用されると思いますので、読者の皆さんも今回のサンプルアプリケーションをきっかけにいろいろなAIR+Javaアプリケーションを作成してみてください。
最後の最後に
まだFlexは若い技術です。FlexとJavaを組み合わせた開発もまだ世に登場したばかりです。一方で、Flex+Javaペアを用いたRIA開発は間違いなく今後のRIA開発シーンを牽引していく技術の1つであるのは確かです。そんな若くて魅力的なRIA開発の世界にこの連載をきっかけに1人でも多くの開発者の方がチャレンジしていただければ幸いです。長い間連載を読んでいただきありがとうございました。
@IT関連記事
いまさら聞けないFlex、そして、いまこそ入門のとき!?
Flex 3正式版リリース! Flexの過去・現在・未来 先日ついに正式リリースされたFlashベースのRIA技術Flex 3。いまが入門に最適なFlexの過去・現在・未来を一挙に解説
「リッチクライアント & 帳票」フ ォーラム 2008/3/31
作って学ぶAIRウィジェットの基礎→応用
最近よく聞くAdobe AIRって何だっけ? ウィジェットを簡単に作れるらしいけど…… と曖昧な知識のあなたに贈る超入門連載。楽しいサンプルを作って基礎から応用まで学ぼう
Flex/AIR開発でデザイナとの協業を楽にする「yui」
デザイナとプログラマを“結”ぶオープンソース(前編) Flex/AIR開発でデザイナと協業することになったら、ぜひ試してみてほしいオープンソースのフレームワークがあります
「リッチクライアント & 帳票」フォーラム 2008/10/1
yuiを使ったFlexアプリを作って、便利さを体感しよう
デザイナとプログラマを“結”ぶオープンソース(後編) ChartやDataGrildでデータが編集できるグラフアプリを実際に作成しながらyuiのさまざまな便利機能を体感しましょう
「リッチクライアント & 帳票」フォーラム 2008/10/30
プロフィール
福田 寅成(ふくだ ともなり)
クラスメソッド株式会社 エンタープライズサービス部門 システムエンジニア
大手SIerでの長いJava開発経験を経てクラスメソッドに。 Java、JavaScript/Ajax、Flex、AIR、C#など、さまざまな分野に関する技術調査研究、および業務アプリケーション開発に携わる。 FlexやAIRの開発依頼はコチラ
Copyright © ITmedia, Inc. All Rights Reserved.