GAE開発の落とし穴
Googleのクラウド環境をつかったGoogle App Engineによる開発するにあたり、初めての試みで苦悩する開発者達の経験をもとに、各開発フェーズにあわせて問題点やどう解決したかをご紹介します
ブックマークされました!
ブックマークがエラーになりました。もう一度お願いします。
作者 Alex Blewitt , 翻訳者 吉田 英人 投稿日 2009年9月22日
OSGi Alliance が OSGi 4.2 仕様をリリースした。これまで早期ドラフトが入手可能だったが,これはその最終リリース版である。
すでに Equinox や Felix などの処理系は,それぞれ 3.5 および 2.0 リリースから 4.2 互換機能の提供に向けての作業を開始していた。しかし,その時点では OSGi 4.2 がリリースされていなかったので,OSGi 4.2 準拠をうたうことができなかったのだ。最終仕様がリリースされた今,それに適合するために必要な作業(まだ残っていればだが)を各処理系の開発チームが確定するのは時間の問題だ。
今回のリリースには何があるのだろうか? InfoQ では以前,予想される内容についての隠れプレビュー取材を行ったが,今ここにあるのがその最終仕様になる。注目すべきは次の点だ。
起動フレームワーク。組込形式 OSGi エンジン(Equinox の servlet bridge など)の Javaアプリケーションからの起動はこれまでも可能だったが,これは特定のエンジンに依存したアプローチだった。Pax Runner のようなラッププログラムを使えば,任意のエンジンを比較的簡単に起動できるようにはなるのだが,この場合はエンジン特有の知識をその中にコード化する必要があった。今回,透過的な機構によってこれが可能になる。すなわち OSGi ランタイムの種類に関わらずに起動できるようになるのだ。これによってブートストラップクラスパス上の適当な JAR ファイルを単に置き換えるだけで,ひとつのアプリケーションが Equinox と Felix いずれの下でもテスト可能となる。
リモートサービス。OSGi VM を相互接続する技術は,これまでは分散OSGi および RFC 119 として知られていた。リモートサービスはその新たな名称だ。リモートサービスは(ほとんどの動的 OSGi アプリケーションにおいて,キーとなる)サービスの概念を導入して,それをリモート利用者にエクスポートする(ないしはリモートサービスをローカルで使用する)機構を提供する。他のアプローチ(RMIなど)と違い,リモートサービスは特定のインターフェースを実装したり,チェック例外をスローしたりする必要はない。またリモートサービスは,すべてのものを動作させようとしているわけではない。しかし OSGi サービスが動的であることを考慮すれば,ひとつの OSGi 環境内ならばいかなるサービスも相互利用可能ではあるはずだ。
ブループリントサービス。Spring の制御反転(inversion of control)や依存性注入(Dependency Injection)をよく知っているならば,ブループリントサービスはごく近いものと思えばよいだろう。これはクライアントが接続されるサービスの外部設定ファイルによる指定と,それらのサービスとの動的な結合を可能にするものだ。宣言型サービス(Declarative Service:DS)のように使用可能なサービスのタイプの制約(それが必須であるか否か,など)を指定することもできるが,宣言型サービスと違うのは,ブループリントサービスでは有効なサービスが存在しない場合にプロキシを提供することができることだ。クライアントのコードがサービスへの接続を試みると,サービスが配置されるまでクライアントはブロックされる。ブループリントサービスなどの利用によって,結果的にはアプリケーションにコンテナ特有のコードを含むことを回避できる。これはシステムがOSGi ランタイム内外の両方で実行されるような場合には有益だろう。
バンドルトラッカ。OSGi には以前から,行き来するサービスの監視を行うためのサービストラッカがあった。バンドルトラッカはその概念をバンドルの追跡に拡張したものだ。動的に移動するバンドルをサービスで監視することは,これまでも BundleListener を用いれば可能だった。しかし BundleTracker を使えば,ServiceTracker が ServiceListenerに対して行うのと同じ使い勝手でこれを実行することができる。この機能が利用されそうなのは,ブループリントサービスと宣言型サービスがメタデータを読み込む(あるいは処理する)ときに行う動的登録の実行時などである。例えば Webベースのエンジンが web.xml に新たにインストールされたバンドルを自動的にスキャンし,実行対象となる HttpService を通じてサーブレットを自動登録するような場合だ。
サービスフック。存在するサービスの検出に加えて,サービス間のイベントをインターセプトし,場合によってはフィルタすることができる。ロールベースの認証モデルの実装や,製品の能力ベースが異なる種類の機能セットを実現する目的で使用できるだろう。また別のアプローチとして,他のバンドルへのイベントをインターセプトして取り去ることによるプロキシ(あるいはロードバランシング)機能の提供がある。ここで取り去ったイベントは,後のステージで他のメカニズム(分散サービスなど)によって代理処理される。これらは前もって登録しておかなくても,必要時にリスナフックで有効にすることが可能だ。
条件付パーミッション。OSGi 4.2 が提供するパーミッション機能の向上の中に,許可と同様な拒否(DENY)機能がある。これは資格署名の組み合わせの一部であり,バンドルのサブセット上で行われるオペレーションに対して明示的な許可を与えるものだ。無署名のバンドル実装をロックダウンすることができるこの機能は,セキュアなOSGiプラットフォームの開発に役立つと考えられる。
仕様の変更は他にもたくさんある。OSGi バンドルに自身の MIME タイプ(application/vnd.osgi.bundle)が与えられたこと,Bundle-Icon と Bundle-License の参照,パーミッションの縮小セット(protected を使わずにパッケージフレンドリなもの)を許容する宣言型サービスの変更などがそうだ。また,DS(宣言型サービス)のスキーマは他のXML要素も許可するようになった。これはサービス固有の情報を渡すのに役立つだろう。さらに Application Admin によって管理されるアプリケーションは,終了時の戻り値を取得する機構を持つようになった。
Equinox 3.5 はすでにいくつかの OSGi 4.2 機能のサポートを提供していて,Apache Felix は今月始め(4.2 仕様が承認されるよりも前)にテストセットをパスしている。4.2 仕様での公式結果とテストキットは月末までには明らかになるだろう。
InfoQ は Paremus Service Fabric OSGi クラウドの製作元 Paremus 社の創業者であり,CEOである Richard Nicholson 氏に,新リリースの感想を聞いた。
"私たちには過去数年にわたっての分散OSGiベースシステムの開発経験があるので,リモートサービスとブループリントサービスの標準を取り入れた今回の OSGi 4.2 仕様のリリースには,特別な喜びを持っています。"
OSGi 4.2 のもっとも注目すべき部分,あなたは何だと思うだろうか?
【豆蔵】大好評のため、Jenkins講座を追加開催致します!Jenkins作者の川口氏が講師です。
【ネクストスケープ】.NET、C#のアプリケーション開発者募集
Googleのクラウド環境をつかったGoogle App Engineによる開発するにあたり、初めての試みで苦悩する開発者達の経験をもとに、各開発フェーズにあわせて問題点やどう解決したかをご紹介します
去る1月12日、定理証明支援系ツールCoqの初心者向けチュートリアルが開催さ れた(http://kokucheese.com/event/index/23667/)。今後も2月2日 (http://kokucheese.com/event/index/23744/)、2月9日、2月16日と引き続き開 催されていく予定である。本記事では、開催の様子をレポートする。
Neal Gafter氏はOracleによるJava買収の影響に関する議論、Javaにセグメンテッドスタックやメタオブジェクトプロトコルを追加することについての主張、そしてJavaとC#との比較について話をしてくれた。
GoogleはVMをともなう新しい言語であり、JSコンパイラでもあるDartをプレビューした。 InfoQはDartのアプリの構築に貢献する文法の裏側を探った:スナップショット、Isolate、モジュール方式
本記事ではCSPベースの「マルチドメイン・モデル検査ツール」である、PAT(Process Analysis Toolkit)について紹介する。モデル検査は、形式手法(Formal Method)という方法論を基礎とする技術であり、複雑さが増大しながらも安全性を求められる、現在のソフトウェア開発の状況に対する処方箋の1つとして注目されている手法である。
前回まで、Jenkinsの幾つかの側面に注目して解説をしてきました。シリーズ最後の今回は、Jenkinsをサービスとして使う方法を紹介します。
Alloyは、MITにて開発された仕様記述言語であり、ツールによる自動解析を使い、インクリメンタルに形式仕様が書けることが特長である。筆者らはAlloy開発者による、Alloyを使った形式手法入門書を翻訳、今夏にオーム社より刊行した。本記事では、Alloyの簡単な概要と、翻訳書『抽象によるソフトウェア設計』(「Alloy本」)を紹介する。
スマートフォンを中心としたマルチデバイスにおけるタッチユーザーインターフェイスへの対応は、既に必須の項目となりつつある。本記事では、Windows デバイスにおける UX のベースとなっている「メトロ」というデザイン言語を掘り下げながら、既存環境を意識しつつもどのようにタッチユーザーインターフェイス開発に取り組んでいくべきであるかについて解説していく。
No comments
スレッド表示 返信