kikumotoのメモ帳

インフラ・ミドル周りを中心に、興味をもったことを適当な感じで。twitter : @takakiku

CometDを試す

背景はともかく、CometDに興味を持ったのでまずは使ってみることに。

Primerのページによると、Maven で scaffold 見たいなものを作れるようになっているが、この日記を書いた時点でのバージョンでは少し出力が異なっていたので、Primer をなぞる形で自分が実行した内容をメモしておく。

まずは、以下の通りにmvnコマンドを実行する。

$ mvn archetype:generate -DarchetypeCatalog=http://cometd.org
...
Choose archetype:
1: http://cometd.org -> cometd-archetype-dojo-jetty6 (1.1.2 - CometD archetype for creating a server-side event-driven web application)
2: http://cometd.org -> cometd-archetype-jquery-jetty6 (1.1.2 - CometD archetype for creating a server-side event-driven web application)
3: http://cometd.org -> cometd-archetype-dojo-jetty7 (1.1.2 - CometD archetype for creating a server-side event-driven web application)
4: http://cometd.org -> cometd-archetype-jquery-jetty7 (1.1.2 - CometD archetype for creating a server-side event-driven web application)
Choose a number: :

ここで、jetty のバージョンと、JavaScript ライブラリとして dojo/jQuery の組み合わせの選択をする。なお、括弧内の1.1.2という数字はCometDのバージョンのようだけど、この直後に2.0.0の選択もできるようになっているのであまり意味はないかも。

で、今回は4番を選択することにする。jQueryを普段使っているのと、なるべく最新を選択したいから。
そすると、CometDのバージョンの選択をせまられるので、こちらも最新の2.0.0を選択する。

Choose a number: : 4
Choose version: 
1: 1.1.2
2: 2.0.0
Choose a number: : 2

あとは、groupId とかを聞かれるので適当に入力し、確認して、'BUILD SUCCESSFUL'が出ればOK。

Define value for property 'groupId': : org.cometd.primers
Define value for property 'artifactId': : jquery-jetty7-primer
Define value for property 'version': 1.0-SNAPSHOT: 
Define value for property 'package': org.cometd.primers: 
Confirm properties configuration:
groupId: org.cometd.primers
artifactId: jquery-jetty7-primer
version: 1.0-SNAPSHOT
package: org.cometd.primers
cometdVersion: 2.0.0
jettyVersion: 7.1.5.v20100705
Y: 
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------

Primerにあるのと同じようにディレクトリの状況を確認すると以下のような感じ。

$ cd jquery-jetty7-primer
$ tree
.
|-- pom.xml
`-- src
    `-- main
        |-- java
        |   `-- org
        |       `-- cometd
        |           `-- primers
        |               |-- BayeuxInitializer.java
        |               `-- HelloService.java
        `-- webapp
            |-- WEB-INF
            |   `-- web.xml
            |-- application.js
            `-- index.jsp

引き続いて

$ mvn install

で、コンパイルして環境を整える。

実行してできたディレクトリ構成は以下の通り。必要なものをとりあえずすべて集めきてくれるようである。

$ cd target/jquery-jetty7-primer-1.0-SNAPSHOT
$ tree
.
|-- META-INF
|-- WEB-INF
|   |-- classes
|   |   `-- org
|   |       `-- cometd
|   |           `-- primers
|   |               |-- BayeuxInitializer.class
|   |               `-- HelloService.class
|   |-- lib
|   |   |-- bayeux-api-2.0.0.jar
|   |   |-- cometd-java-common-2.0.0.jar
|   |   |-- cometd-java-server-2.0.0.jar
|   |   |-- jetty-continuation-7.1.5.v20100705.jar
|   |   |-- jetty-servlets-7.1.5.v20100705.jar
|   |   `-- jetty-util-7.1.5.v20100705.jar
|   `-- web.xml
|-- application.js
|-- index.jsp
|-- jquery
|   |-- jquery-1.4.2.js
|   |-- jquery.cometd-ack.js
|   |-- jquery.cometd-reload.js
|   |-- jquery.cometd-timestamp.js
|   |-- jquery.cometd-timesync.js
|   |-- jquery.cometd.js
|   `-- jquery.json-2.2.js
`-- org
    |-- cometd
    |   |-- AckExtension.js
    |   |-- ReloadExtension.js
    |   |-- TimeStampExtension.js
    |   `-- TimeSyncExtension.js
    `-- cometd.js

元のディレクトリに戻って

$ mvn jetty:run

とすることで、サーバを実行できる。

これで、http://localhost:8080/jquery-jetty7-primer をブラウザで開くと

Server Says: Hello, World
CometD Connection Established

のように表示される。Primerにある結果とは、出力順が違うようであるけれど、多分それはタイミングの問題とかかもしれない。

まずは、このscaffoldのソースを参考にしつつ、CometDを理解することにする。