InfoQ

InfoQ

News

マイブックマーク

ブックマークするためにログイン または 会員登録 する

ブックマークされました!

ブックマークがエラーになりました。もう一度お願いします。

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

作者 Moxie Zhang , 翻訳者 八角研究所 投稿日 2008年2月28日

セクション
デベロップメント
トピック
Java ,
RIA
タグ
Flex ,
Scala

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

特集コンテンツ一覧

GAE開発の落とし穴

Googleのクラウド環境をつかったGoogle App Engineによる開発するにあたり、初めての試みで苦悩する開発者達の経験をもとに、各開発フェーズにあわせて問題点やどう解決したかをご紹介します

イベントレポート:「Coqチュートリアル#1」

去る1月12日、定理証明支援系ツールCoqの初心者向けチュートリアルが開催さ れた(http://kokucheese.com/event/index/23667/)。今後も2月2日 (http://kokucheese.com/event/index/23744/)、2月9日、2月16日と引き続き開 催されていく予定である。本記事では、開催の様子をレポートする。

Javaの未来についてのNeal Gafter氏とのディスカッション

Choosing Options

Neal Gafter氏はOracleによるJava買収の影響に関する議論、Javaにセグメンテッドスタックやメタオブジェクトプロトコルを追加することについての主張、そしてJavaとC#との比較について話をしてくれた。

Google Dartのエッセンス:アプリケーションの構築、スナップショット、Isolate

GoogleはVMをともなう新しい言語であり、JSコンパイラでもあるDartをプレビューした。 InfoQはDartのアプリの構築に貢献する文法の裏側を探った:スナップショット、Isolate、モジュール方式

CSPベースのモデル検査ツール「Process Analysis Toolkit」

本記事ではCSPベースの「マルチドメイン・モデル検査ツール」である、PAT(Process Analysis Toolkit)について紹介する。モデル検査は、形式手法(Formal Method)という方法論を基礎とする技術であり、複雑さが増大しながらも安全性を求められる、現在のソフトウェア開発の状況に対する処方箋の1つとして注目されている手法である。

Jenkinsによる継続的インテグレーションのススメ(4) ~CloudBeesでJenkinsをサービスとして使う~

前回まで、Jenkinsの幾つかの側面に注目して解説をしてきました。シリーズ最後の今回は、Jenkinsをサービスとして使う方法を紹介します。

書籍『抽象によるソフトウェア設計-Alloyではじめる形式手法-』の紹介

Alloyは、MITにて開発された仕様記述言語であり、ツールによる自動解析を使い、インクリメンタルに形式仕様が書けることが特長である。筆者らはAlloy開発者による、Alloyを使った形式手法入門書を翻訳、今夏にオーム社より刊行した。本記事では、Alloyの簡単な概要と、翻訳書『抽象によるソフトウェア設計』(「Alloy本」)を紹介する。

Windows デバイスで開発するタッチユーザーインターフェイス

スマートフォンを中心としたマルチデバイスにおけるタッチユーザーインターフェイスへの対応は、既に必須の項目となりつつある。本記事では、Windows デバイスにおける UX のベースとなっている「メトロ」というデザイン言語を掘り下げながら、既存環境を意識しつつもどのようにタッチユーザーインターフェイス開発に取り組んでいくべきであるかについて解説していく。