BT

Derek Wischusen氏によるFlex、BlazeDSとScala/Liftを使用した統合開発

| 作者: Moxie Zhang フォローする 0 人のフォロワー , 翻訳者 八角研究所 フォローする 0 人のフォロワー 投稿日 2008年2月28日. 推定読書時間: 5 分 |

昨年12月にAdobe社はLiveCycleデータサービス(サイト・英語)をBlazeD(サイト・英語)という名でオープンソース化すると発表した(source)。BlazeDSはJEE環境で開発されたサーバサイド技術である。それは、コンテンツのストリーミング、及びFlexやAIRベースのRIAアプリケーションへのサーバサイドプッシュを容易にするものである。Derek Wichusen氏はflexonrails.netでFlex、BlazeDSとScala/Liftを使用した統合開発に関する記事をよせている(source)

Adobe社の発表に関してWischusen氏は次のように記述している。
この発表はもちろん喜ばしいニュースである一方で、BlazeDSを使うためにJavaを使用しなければいけないという誤解を与えてしまっているかもしれない。BlazeDSはただJavaプラットフォーム(source)を使用しているのであって、必ずJava言語(source)を使用しなければならないというものではない。

実際、Groovy(サイト・英語)、Python(Jython)(サイト・英語)、Ruby(JRuby)(サイト・英語)、Scala(サイト・英語)、そして勿論ColdFusion(サイト・英語)といった様々な言語(source)をJava プラットフォームで動作させることができる。理論上、これらのどの言語もBlazeDSと容易に統合開発することができるはずである。

Wischusen氏は彼がなぜScalaを採用したのか次のように説明している。

最近、私自身今まであまり知らなかったプログラミング言語の知識を深めたいと考えていた矢先に、Scalaが非常におもしろく、かつ強力な言語であることに気がついた。Scala はオブジェクト指向的でかつ関数型言語の特徴も併せ持ち、それらが組み合わさったスタイルで構成されていて、Erlang(サイト・英語)的な並行処理を行うことができるActorsライブラリがあったり、ほかにも多くの優れた特徴を持っている(サイト・英語)。私がScalaを選んだ最後の、そしてもしかしたら一番の理由は、Scalaで書かれた非常に素晴らしいLift(サイト・英語)というwebアプリケーションフレームワークの存在があったからである。

Wischusen氏の統合開発プロジェクトは最新版のJDK1.5+、Scala(source)、Eclipse(source)、EclipseのScalaラグイン(source)、Maven(source)、BlazeDS(サイト・英語)とFlex(サイト・英語)を同時に使用したものである。

Wischusen氏はLiftのプロジェクトを作成するプログラミングから始め、順を追ってその解説をwebに投稿した。そしてMavenを使用したEclipseのプロジェクトを作り、作成したLiftのプロジェクトをインポートし、BlazeDSのjarファイルをプロジェクトのビルドパスに加えた。開発環境のセットアップ方法についての解説の後に、Wischusen氏はLiftがどうやってHTTPリクエストを処理するのかを次のように述べている。

Liftはビューファースト(source) なフレームワークである。LiftはデフォルトではHTTPリクエストをまずLiftのビューに対してマッチさせようとする。うまくビューを見つけることができたら何らかの処理を行い、そしてHTMLを出力する。LiftがどのようにHTTPリクエストを処理するかについてもっと詳しく知りたいのであれば、このページを参照してほしい(source)
このプロジェクトではFlexがビューとして使用されるので、LiftはUIの一部としてではなく、webサービスを処理するためだけに設定されていた。

Wischusen氏はScalaプログラミングに関する解説とサンプルコードをwebに投稿した。彼は作成したActor(source)ついて次のように解説をしている。

Notifier Actorが始動されると(後にこれがどこで実行されるかわかるはず)actメソッドが呼び出される。actメソッド内での最初の処理はスケジュールヘルパーメソッドであるActorPing.scheduleの呼び出しである。このメソッドは0.5秒でこのActorへNotifyメッセージを送信しようとする。次に単純なループ処理があって、その中のリアクトブロックで受信されるメッセージに応じた処理がケース文として記述されている。これにより、Notifyもしくは"stop"メッセージが受信されたときに、メッセージに対応した処理が実行される。

サーバサイドのアプリケーションを作成した後に、Wischusen氏はFlexアプリケーションについて記述している。

私たちは二つのボタンと一つのテキスト入力フィールドからなる非常にシンプルなUIを持つアプリケーションを作成した。そのアプリケーションには二つのHTTPServiceとConsumerも存在している。ここで、次の二つの事柄について注意してほしい。一つ目は Consumerが“notifications”という名の宛先にサブスクライブし、同じ宛先に対してNotifier Actorがメッセージを発行するということ。二つ目はHTTPServiceがwebservices/start_feedと webservices/start_feedを呼び出すということ。これらの呼び出しが私たちが作成したWebServicesクラスのメソッドを呼び出すことができるように私たちはLiftアプリケーションを作成した。

アプリケーションの開発が完了し、Wischusen氏は次のように記述している。

これでLiftアプリケーションを起動し、Flexアプリケーションを立ち上げ、“Subscribe to ‘notifications’”ボタンをクリックすることで、Notifier Actorの始動とConsumerをサブスクライブすることができる。そうすると、IDナンバーと時間がテキスト入力フィールドに表示され、0.5秒置きに自動的に更新されるはずだ。さらに、“Unsubscribe from ‘notifications’”ボタンをクリックすることでNotifier Actorを停止させConsumerをアンサブスクライブすることができる。

最後にWischusen氏は次のように締めくくっている。

これら三つの技術を使用することによって、リアルタイムでサーバからクライアントへデータを非常に簡単に自動的に送信することができる。今回の例は非常にシンプルな例であったかも知れないが、より洗練されたアプリケーションのために、この手法は確実に進化していくと考えている。

このプロジェクトのソースコードはLife Appat(zip)とFlex App(zip)から取得することができる。

原文はこちらです:http://www.infoq.com/news/2008/02/integrating-flex-blazeds-scala

この記事に星をつける

おすすめ度
スタイル

こんにちは

コメントするには InfoQアカウントの登録 または が必要です。InfoQ に登録するとさまざまなことができます。

アカウント登録をしてInfoQをお楽しみください。

あなたの意見をお聞かせください。

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする
コミュニティコメント

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする

ディスカッション

InfoQにログインし新機能を利用する


パスワードを忘れた方はこちらへ

Follow

お気に入りのトピックや著者をフォローする

業界やサイト内で一番重要な見出しを閲覧する

Like

より多いシグナル、より少ないノイズ

お気に入りのトピックと著者を選択して自分のフィードを作る

Notifications

最新情報をすぐ手に入れるようにしよう

通知設定をして、お気に入りコンテンツを見逃さないようにしよう!

BT