サーブレットはHTTPだけじゃない!
NGN時代の有力な基盤技術? SIPサーブレット入門


ナレッジオンデマンド 宮下知起
2007/7/30

SIPサーブレットが必要とされる背景


そもそもSIPとは何か? − NGN時代の到来


今回の主な内容

SIPサーブレットとは何か?

HTTPサーブレットとの類似点から見たSIPサーブレット
HTTPサーブレットとの相違点から見たSIPサーブレット
ソースコード・シーケンス図でSIPサーブレットをひも解く
SIPサーブレットも試してみよう

 IP電話による通話は、VoIPVoice over IPや、「シグナリング」と呼ばれる発信者と着信者の接続を確立・切断するための技術によって実現されています。従来、シグナリングにはH.323プロトコルやベンダの独自プロトコルが使われていましたが、ここ数年でSIPSession Initiation Protocol)を採用するケースが増えてきました。

 さらにSIPは、次世代のネットワークインフラであるNGNNext Generation Network)において、標準プロトコルとして採用されています。SIPはIP電話の中核技術ですが、電話にとどまらず、チャットプレゼンス(在席確認)やメディアシェアリング(通話をしながらファイル共有動画共有)など通信系と情報系を融合した新しいコミュニケーションサービスを構築するためのプロトコルとして期待されています。

SIPはJavaの新しいトレンドの1つ

 このような時代のニーズから、JavaにもSIPプロトコルを制御するAPIが標準化されています。その1つがSIPサーブレットです。

 SIPサーブレットのコンテナ(アプリケーションサーバ)も各社が製品化しており、海外ベンダではBEAシステムズやオラクル、IBMなどが、国内ベンダでは富士通やNECなどがSIPに対応したJavaアプリケーションサーバを出荷しています。

 最近では、サン・マイクロシステムズも、Java EEのオープンソースプロジェクトであるGlassFishを通じて、オープンソースのSIPアプリケーションサーバの共同開発を発表しました(参考:ITMedia News「SunとEricsson、GlassFishを通じて共同開発」)。いまJavaの世界では、SIPは新しいトレンドの1つです。

なぜJavaでSIPなのか

 SIPは標準プロトコルでありながら、ベンダが独自に拡張を行うため、多くの場合において、異ベンダ間の接続ができない問題を抱えています。そこで、独自に拡張されたSIPシステム間を接続する取り組みが登場しています。オープンソースプロジェクト「SIProp」は、SIPの方言を吸収する仕組みをオープンソースとして公開し、あらゆるSIPシステム間の接続を実現しようとしています。

画面1 SIPropの開発者サイト
画面1 SIPropの開発者サイト

 JavaによるSIPのサポートは、さらにもう一歩進み、完全な標準化を目指した流れといえるでしょう。プロプライエタリな技術が占めていた通信の世界にJava標準がもたらすメリットは非常に大きいでしょう。具体的には、以下のように整理できます。

  • 開発生産性が高い
    デベロッパのノウハウが豊富なJavaで開発できる
  • 技術者の確保が容易
    従来の通信系エンジニアだけでなく、Javaを習得したアプリケーションエンジニアを開発に投入できる
  • 拡張性がある
    Javaアプリケーションは開発の自由度が高い

 これらの特長によって、スピーディーなサービスデリバリ(ニーズに応えるサービスのタイムリーな提供)、アプリケーション(サービス)の拡張や既存サービスとの連携が容易といったメリットが享受でき、NGN時代の企業情報システムにおける通信系と情報系の融合に、さまざまなチャレンジを生み出す可能性を秘めています。

SIPサーブレットとは何か?


JAIN SIPとSIPサーブレット=Java SEとJava EE

 Javaの仕様を策定するJCPでは、JSR32でJAIN SIPと呼ばれる、JavaでSIPを扱うためのAPIが策定されています。JAIN SIPとSIPサーブレットの関係は、JAIN SIPがJava SEだとすると、SIPサーブレットはJava EEという見方をすると理解しやすいでしょう。

 すなわち、サーバサイドのサーブレットでSIPを制御するのがSIPサーブレットです。SIPサーブレットはJSR116として定義されています。その仕様は、JCPのページで確認できます。なお、2007年7月現在、最新仕様としてSIP Servlet v1.1(JSR289)が策定中です。

画面2 JCPのサイト(JSR116 SIP Servlet API)
画面2 JCPのサイト(JSR116 SIP Servlet API)

HTTPサーブレットとの類似点から見たSIPサーブレット


HTTPサーブレットとの類似点その1:リクエスト

 SIPサーブレットの特長として、HTTPサーブレットと非常によく似ているという点が挙げられます。HTTPサーブレットがHTTPリクエストを受け付け、それに応じたアプリケーションが動作するのに対して、SIPサーブレットはSIPリクエストを受け付け、それに応じたアプリケーションが動作します(図1)。

図1 HTTPサーブレットとSIPサーブレットの類似点
図1 HTTPサーブレットとSIPサーブレットの類似点

 また、SIPサーブレットでは、実行環境の仕様としてシグナリングの実装、アプリケーションのライフサイクル、トランザクション、セッション管理、セキュリティなどが定義されています。これらの仕様を満たしたものがSIPアプリケーションサーバです(図2)。

図2 SIPサーブレットとSIPアプリケーションサーバの関係
図2 SIPサーブレットとSIPアプリケーションサーバの関係


HTTPサーブレットとの類似点その2:継承

 HTTPサーブレットによく似た点をもう少し見ていくと、例えば、HTTPサーブレットはjavax.servlet.http.HttpServletを継承しますが、SIPサーブレットはjavax.servlet.sip.SipServletを継承します。また、SIPサーブレットのライフサイクルは、基本的にHTTPサーブレットのそれと同様です。


HTTPサーブレットとの類似点その3:doXxxメソッド

 また、HTTPサーブレットには、GET/POSTリクエストに対応するdoGet/doPostメソッドがあります。同様に、SIPサーブレットにはSIPリクエストに対応するdoXxxメソッドがあります。開発者は、リクエストに応じて必要なdoXxxメソッドをオーバーライドして実装を行います。ただし、SIPサーブレットのメソッドには引数が1つしかありません(表1)。

表1 SIPリクエストをハンドリングするためのメソッド例
メソッド名 引数 対応するSIPリクエスト
doInvite SipServletRequest RFC3261で定義しているINVITEリクエストに対応
doAck SipServletRequest RFC3261で定義しているACKリクエストに対応
doBye SipServletRequest RFC3261で定義しているBYEリクエストに対応
doCancel SipServletRequest RFC3261で定義しているCANCELリクエストに対応


HTTPサーブレットとの類似点その4:セッション管理

 セッション管理の概念も、基本的にHTTPのHttpSessionと同じです。ただ、SIPサーブレットには、HTTPサーブレットには存在しない「SIPアプリケーションセッション」という概念があります。これは、SIPセッションとHTTPセッションを関連付けて管理するのに合わせ、アプリケーションデータを格納する機能も提供します。

 それでは次に、HTTPサーブレットにないSIPサーブレットの特徴的な機能について見ていきましょう。

 
1/3

 INDEX NGN時代の有力な基盤技術? SIPサーブレット入門
Page1
  SIPサーブレットとは何か?
HTTPサーブレットとの類似点から見たSIPサーブレット
  Page2
  HTTPサーブレットとの相違点から見たSIPサーブレット
  Page3
  ソースコード・シーケンス図でSIPサーブレットをひも解く
SIPサーブレットも試してみよう


Java Solution全記事一覧



Java Agile フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Java Agile 記事ランキング

本日 月間