Hatena::ブログ(Diary)

IT-Walker on hatena このページをアンテナに追加 RSSフィード

2006-11-11 Ajax+Javaアーキテクチャ構築記第三回

Ajax+Javaアーキテクチャ構築記第三回です。

前回の予定では、今回はJMakiの続きをやるつもりでしたが、またもやいきなり予定変更。

すいません、ちゃんと続きもやりますよ?今は、アーキテクチャに採用できそうなテクノロジをどんどんつまみ食いしてる状態なので、毎日違うこと調べてるんです。しょうがないんです。

で、今回はCometdをやります。

Cometdって何?

http://cometd.com/

で開発されているオープンソースプロジェクトです。

どんなプロダクトかというと、ズバリCometの実装!

じゃあCometって何かと言うと、最近はやりのHTTPプロトコルの枠組み上でのPush配信技術。

何言ってるかわからないですね。

つまり、HTTPクライアントがリクエストしたらサーバがレスポンスを返すという、つまりコンテンツを「とってくる」というやり方が基本なのですが、Cometはそうじゃない。

サーバからクライアントに対してひたすらデータを送り続けることができるようになるのです!

これの何が便利かというとリアルタイム性が要求されるアプリケーション、例えば株価配信とかニュース配信、チャットなんてのもCometで実装するとなかなか便利です。

では、ちょいと試してみましょう。

Cometdのサンプル実行

この日記を書いている2006/11/11現在、Cometdには正式リリース版のディストリビューションなどはありません。ソースファイルをSubversionリポジトリから直接取得する必要があります。

以下のSubversionリポジトリからチェックアウトすると、cometdとcometd-demoという二つのモジュールを取得できます。

http://svn.codehaus.org/jetty/jetty/trunk/extras/

こいつをmaven2でビルドして、Webアプリとしてデプロイします。(つまり、maven2のインストールが前提。ここでは説明しませんが)

でも!あくまで現時点ですが、maven2の中央リポジトリに存在しない、org.mortbay.jettyの6.1-SNAPSHOTに依存する設定になっています(これは時期が来れば解決する問題だと思われます)。

なので、僕はpom.xmlの<parent>を以下のように修正しました。

<parent>
	<artifactId>project</artifactId>
	<groupId>org.mortbay.jetty</groupId>
	<version>6.1.0pre0<!-- 元は6.1-SNAPSHOTだったのを修正 --></version>
</parent>

この修正をcometd/pom.xml、cometd-demo/pom.xmlのどちらにも施せば、両ディレクトリで「mvn」コマンド一発でビルドできました。

とりあえず今回は役に立つサンプルの動作を見てみたいと言うことで、cometd-demoのビルド結果であるtarget/cometd-demo-6.1.0pre0.warをTomcat5.5.20にデプロイして、チャットアプリを実行(http://localhost:8080/cometd/chat/アクセス)しました。


...


動きません(^^;

動かない理由をいろいろ探って・・・多分これも時期が来れば解決しますが、サンプルのコードにバグがあるのを発見してしまいました。。。

cometd-demo/src/main/webapp/chat/index.htmlの以下の部分を修正することでなんとか動作させました。

<!-- もとは「/cometd」だったが、前にコンテキストパス(cometd-demo-6.1.0pre0)を補完 -->
<script type="text/javascript"> cometd.init({}, "/cometd-demo-6.1.0pre0/cometd"); </script>

で、動かしてみて。

ふむ、見た目はたいしたことのないチャットアプリですが、画面の更新一切なしでどんどんほかの人の発言が自分のブラウザに届きます。(ブラウザを2枚立ち上げてローカルで確認しました)

似たような動きは、短い間隔でPULL処理をしても十分実現できますが、それでも、まったくの遅延なしでチャットの発言が自分に届くのはやはり驚異。すばらしい!

こんなところで今日は終わり。

今回は深いところまで突っ込めませんでした。

次回は・・・(予告覆しまくりなので説得力ゼロですが)、Cometdを自分のWebアプリに取り込む方法を考察したいと思います。

こうご期待!

はてなユーザーのみコメントできます。はてなへログインもしくは新規登録をおこなってください。

トラックバック - http://d.hatena.ne.jp/Syunpei/20061111/1163266220