今回から、Jettyを使ってWebSocketの実装例を説明していきます。
なお、この連載では、開発に以下の環境を使用します。
- Mac OS X 10.5
- JavaVM 1.6
- Eclipse 3.5.1[1]
EclipseはNLpackで日本語化[2]しています。また、Eclipseには、m2eclipseプラグイン[3]がインストールされています。今回の内容は、EclipseとMavenに慣れている方を想定していますが、必要だと思われるところは掘り下げて説明します。そして最終的には、サーバ側はServletを作成しデプロイするのではなく、デスクトップアプリケーションとして動作するようにしたいと思います[4]。
Jettyについて
今回使用するJettyは、Javaで作成されたウェブサーバです。
以前は、codehausで公開されていましたが、最新のJetty7以降はEclipse Foundationで公開されています。しかし、ネット上でJettyの事を調べてもバージョンが6のことが多く、Jetty7の情報が検索結果の上位にあまり上がってきません。JettyでWebSocketを利用するにはバージョン7以上が必須ですが、Jetty7で削除されたメソッドもありますので注意してください。
また、Jetty6のライセンスはApache License 2.0でしたが、Jetty7のライセンスはApache 2.0 LicenseとEclipse Public License 1.0のデュアルライセンスになっています。
Mavenプロジェクトの作成
それでは、Eclipseを起動してください。
図1 Eclipseを起動
「ファイル」→「新規」→「その他...」を選択してダイアログを表示し、「Maven」→「Maven Project」を選択し「次へ」をクリックします。
図2 新規→その他から、Maven Projectを選択
単純なプロジェクトを作成するために、「Create a simple project(skip archetype selection)」をチェックし、「次へ」をクリックします。
図3 Create a simple projectにチェック
「Artifact」の「Group Id」と「Artifact Id」にはそれぞれ「WebSocketChat」と入力し、「完了」をクリックします。
図4 作成するプロジェクトの属性を入力
これでMavenプロジェクトが生成されました。
図5 ウィザードによるMavenプロジェクトの生成完了
POMファイルの編集
Mavenにおけるプロジェクト管理は、POMファイルを通じて行ないます。POMは「Project Object Model」の略で、POMファイルには、Mavenが管理するプロジェクト名やバージョン、ライブラリの依存関係等を記述していきます。
POMファイルの実体はpom.xmlというXMLファイルで、Mavenプロジェクトを生成した時に自動的に作成されます。「プロジェクト・エクスプローラー」から、「WebSocketChat」を展開し、「pom.xml」をダブルクリックします。pom.xmlが「Maven POM Editor」上に表示されます。
図6 Maven POM Editorで表示される、pom.xml
ここでは、POMファイルを直接編集していきますので、「Maven POM Editor」の下のタブから「pom.xml」を選択し、ソースを表示させます。
図7 POMファイルのソースを表示
今回必要なライブラリ(MavenではDependencyと読んでいます)は、「org.eclipse.jetty:jetty-webapp」と「org.eclipse.jetty:jetty-websocket」です。
JettyがWebSocketに対応したのは7.0.1.v20091125以降です。ここでは、原稿執筆時で最新バージョンである7.1.4.v20100610のJettyを使用します。同時に「maven-compiler-plugin」の設定を行ない、JavaVMのバージョンや文字エンコード等をEclipseに通知します。
pom.xmlを以下のように書き換えてください。
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>WebSocketChat</groupId>
<artifactId>WebSocketChat</artifactId>
<version>0.0.1-SNAPSHOT</version>
<build>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.6</source>
<target>1.6</target>
<encoding>UTF-8</encoding>
<debug>true</debug>
<optimize>false</optimize>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-webapp</artifactId>
<version>7.1.4.v20100610</version>
</dependency>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-websocket</artifactId>
<version>7.1.4.v20100610</version>
</dependency>
</dependencies>
</project>
Mavanが正常に動作していれば、このpom.xmlを保存すると同時に、Jettyのダウンロード[5]がはじまります[6]。
さて、プロジェクトのコンパイル時に使用されるJavaVMのバージョンを1.6に指定しましたが、このままではEclipseに反映されません。プロジェクト・エクスプローラー内の「WebSocketChat」プロジェクトを右クリックしコンテキストメニューを表示し、「Maven」→「Update Project Configuration」を選択すると、変更したPOMファイルの内容がEclipseの設定に反映されます。
「Maven POM Editor」の「Dependency Graph」タブを選択すると、Mavenを使って読み込んだパッケージの依存関係を見ることができます。
図8 POMファイルで管理されるライブラリの依存関係
次回予告
次回は、WebSocketのサーバ側の実装を解説したいと思います。