BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース Derek Wischusen氏によるFlex、BlazeDSとScala/Liftを使用した統合開発

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

昨年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

この記事に星をつける

おすすめ度
スタイル

BT