Liberty CoreはWAS v8.5から追加されたLibertyプロファイルをベースとして構成されている。LibertyプロファイルはJava EE 6のWebプロファイルを完全サポートしたアプリケーションランタイムである。Webプロファイルに含まれるAPI群だけでなく、JAX-WSやJAX-RS、JMSといったWebサービスに必要となる各種APIもサポートされており、現在はJava EE 7の一部機能の実装も進められている。
そのJava EE 7で新たに追加された注目機能の一つに「WebSocket」がある。Java用のWebSocket APIは「Java API for WebSocket」としてJSR 356で標準化されており、Libertyプロファイルでは2014年12月8日にリリースされたV8.5.5.4より正式にJSR 356へのサポートが追加されている。そこで本稿では、この新機能を活用してWebSocketアプリケーションを開発する方法を紹介したい。
1. WebSocketとJava
まずWebSocketについて簡単におさらいしておこう。WebSocketはWebサーバーとWebブラウザが直接コネクションを張って双方向通信するための技術規格である。HTTPとは異なる独自の軽量プロトコルを利用して通信を行うため、オーバーヘッドが小さく、長時間に渡って通信する場合でもHTTPコネクションを占有することがないというメリットがある。オンラインゲームやオンライントレーディング、チャットやSNSによるコミュニケーションなど、リアルタイム性が求められるサービスやアプリケーションで威力を発揮するものとして期待されている。
WebSocketのプロトコル仕様は「RFC 6455 - The WebSocket Protocol」として、API仕様は「The WebSocket API」として仕様化が進められている。そして冒頭で触れたように、Javaアプリケーションから利用するためのAPIは「JSR 356: Java API for WeSocket」として標準化されており、Java EE 7を構成するAPIの一つになっている。
WebSocketを利用したJava Webアプリケーション開発の一般的な流れについては、IBM developerWorksのサイト内で公開されている『Java EE 7 アプリケーション設計ガイド - WebSocket編』による解説が詳しい。WebSocket自体についての詳しい解説やエンタープライズアプリケーションでWebSocketを利用する上でのポイントなどが掲載されているので、本稿と併せて参考にしていただきたい。
2. 最新版Libertyプロファイルの導入
Liberty Core向けアプリケーションの開発環境を整えるには、Eclipse用プラグイン「WebSphere Application Server Developer Tools(WDT)」を導入するのが一番手軽である。今回は、Eclipse 4.4(Luna) Java EE Developers(Pleiadesで日本語化済み)をベースに、プラグイン「IBM WebSphere Application Server V8.5.5 Liberty Profile Developer Tools for Eclipse Luna V8.5.5.4」を追加して利用した。WebSocketが正式にサポートされているのはこのV8.5.5.4からなので、それ以前のバージョンを導入済みの人も最新版にアップデートしておく必要がある。
WDTのEclipseへのインストールは、マーケットプレースから行うことができる。[ヘルプ]-[Eclipse マーケットプレース]を選択してマーケットプレースを立ち上げ、「WebSplere Liberty」で検索をかければ図2.1のように対象のプラグインが見つかるはずだ。環境構築の方法についての詳細はこちらの記事を参照していただきたい。
プラグインをインストールできたら、Libertyプロファイルのサーバー定義を作成する。サーバー定義の作成手順もV8.5.5.1の場合とほぼ同様だが、今回はWebSocketを使いたいため、プラグインの選択画面から「Java API for WebSocket 1.0」をインストールしておこう。図2.2のように右側の[インストール]ボタンをクリックして[インストール保留中]という表示に変えた上で[次へ]をクリックし、ライセンスに同意すればインストールできる。
サーバー定義が作成できたら、続いてWebSocketを使うための設定を追加しておく。サーバーマネージャーにおいて「サーバー構成」をダブルクリックしてservers.xmlを開き、「フィーチャーマネージャー」を表示して、 [追加]ボタンで「websocket-1.0」をフィーチャーに追加すればよい(図2.3)。これで、このサーバー定義でWebSocketが有効になる。