サーブレットはHTTPだけじゃない!
NGN時代の有力な基盤技術? SIPサーブレット入門
ナレッジオンデマンド 宮下知起
2007/7/30
ソースコード・シーケンス図でSIPサーブレットをひも解く
それでは、実際に簡単なSIPサーブレットのサンプルプログラムのソースコードおよびシーケンス図を見ながらSIPサーブレットを見てみましょう。
リスト1 サンプルコード |
1: package test; |
このプログラムは、INVITEリクエストおよびBYEリクエストを実装した単純なUASのプログラムSimpleUasServlet(リスト1)とデプロイメント・ディスクリプタ(リスト2)の例です。
■ SIPサーブレットサンプルプログラムのシーケンス
SimpleUasServletではINVITEリクエストに対応するdoInviteメソッドと、BYEリクエストに対応するdoByeメソッドがオーバーライドされており、図5で記載されているシーケンスが実装されています。
図5 サンプルプログラムのシーケンス図 |
SIPサーブレットコンテナがINVITEリクエストを受け取った際、デプロイ時に読み込まれているデプロイメント記述子のマッピングルールに沿って呼び出すべきサーブレットを特定します。
■ SIPサーブレットサンプルプログラムのデプロイメント・ディスクリプタ
なお、デプロイメント・ディスクリプタ(HTTPサーブレットでいう、WEB-INF/web.xml)で定義されたservlet-mapping要素は、特定のサーブレットを呼び出すルールを定義します。リスト2は、リクエストがINVITEで、かつRequest-URIのホスト部分に「atmarkit.co.jp」文字列が含まれている場合に、SimpleUasServlet.doInviteを呼び出すという例です。
リスト2 デプロイメントディスクリプタ |
<sip-app> |
■ SIPサーブレットサンプルプログラムを1行づつ見てみる
それでは、リスト1を行単位で説明していきましょう。SIPサーブレットがHTTPサーブレットとよく似たプログラミングモデルを持ち、Javaプログラマは特別なスキルを身に付けることなくSIPを制御するアプリケーションを書けることが理解できるでしょう。
1: package test; |
パッケージ名を宣言します。
2: import javax.servlet.sip.SipServlet; |
SIPサーブレットプログラムに必要なパッケージをインポートしています。各クラスで定義されている各メソッドをこのプログラム内で使用できるようになります。
5: public class SimpleUasServlet extends SipServlet { |
SipServletクラスを継承します。
6: protected void doInvite(SipServletRequest req) |
doInviteメソッドをオーバーライドします。INVITEメソッドを受信した際、このメソッドが実行されます。
8: req.createResponse(180).send(); |
受信したINVITEに対して、ステータスコードが180(Ringing)のレスポンスを生成し、送信します。User1には、呼び出し音が流れます。
9: req.createResponse(200).send(); |
受信したINVITEに対して、ステータスコードが200(OK)のSIPレスポンスを生成し、送信します。
11: protected void doBye(SipServletRequest req) |
doByeメソッドをオーバーライドします。BYEメソッドを受信した際、このメソッドが実行されます。
12: req.createResponse(200).send(); |
受信したBYEに対して、ステータスコードが200(OK)のレスポンスを生成し、送信します。User2が通話から切断されます。
13: req.getApplicationSession().invalidate(); |
通話が終了したため、SIPアプリケーションセッションを無効化します。
いかがでしょうか? IP電話における相手の呼び出し、通話、切断という制御を上記のたった13行のプログラムで記述できます。
SIPサーブレットも試してみよう
本稿では、HTTPサーブレットとの比較を中心に、SIPサーブレットの概要を説明しました。通信系プログラミングの世界に、HTTPサーブレットに極めて類似した開発スタイルを提供することを理解いただけたと思います。
■ サービス構築にはソフトウェアを開発するプラットフォームが重要
NGNの登場によって、通信とITを融合したサービスを構築するためのSDP(Software Development Platform)が重要になってきます。Javaであれば、開発者の確保、開発生産性、拡張性、メンテナンス性において優位であるため、SIPサーブレットのコンテナであるSIPアプリケーションサーバは、SDPの有力な候補になると予想されます。
■ SIPの企業内(エンタープライズ)での活用法
SIPの企業内における活用は、例えばClick to Dial(相手のプレゼンス状態に応じて適切な番号にワンクリックで発信。例えば、着席中であれば内線電話に、外出中であれば携帯電話に)やIM(インスタントメッセンジャー)、電話会議システムなどが挙げられます。
こういったサービスをJavaで開発できるようになることで、企業内における情報系と音声系の連携・融合が容易になり、従来の発想になかった企業向けの新しいサービスやアプリケーションの登場が期待されます。
■ SIPサーブレットの時代が来るか?
現在、SIPはNGNの標準に採用されているとはいえ、SIPサーブレットの実装はまだ多くはありません。SIPサーブレットを、無償でかつ日本語ドキュメントが整備された状態で評価できるコンテナは、国内ではBEAシステムズが提供するSIPアプリケーションサーバのみという状況です。
SIPサーブレットの仕様自体も発展途上にあり、まだまだこれからの技術という状況ですが、遠くないSIP時代の到来を見据え、いまから評価してはいかがでしょうか。
■ 参考サイト
■ 参考文献
本稿は筆者の許諾を得て「BEA WebLogic SIP Server 3.0J SIPアプリケーション構築ガイド」(日本BEAシステムズ著)を参考に執筆しています。
■ @IT関連記事
通信系サービスと情報系サービスを融合するJava J2EE Watch(9) JCPで策定されたSIP Servletは通信系サービスと情報系サービスを融合したアプリケーションを構築する基盤であり、大きな可能性をもっている 「Java
Solution」フォーラム 2006/4/22 |
Javaで音声チャットアプリを作ろう JavaでVoIPアプリケーションを作成するJavaテクノロジーとして注目されるJAIN SIPを使って音声チャットアプリを作成してみよう 前編 シンプルなSIPアプリケーションの構築 (2005/12/8) 後編 SIPアプリケーションを拡張する (2006/1/21) 「Java
Solution」フォーラム |
次世代コミュニケーションを担うJAIN VoIPをはじめとし、すべてのコミュニケーションがインターネットに集約されようとしている。そして、そのためのJava APIも誕生した 前編 マルチメディアを操るJava API登場 (2003/12/25) 後編 JAIN SLEEの機能を理解する (2004/2/7) 「Java
Solution」フォーラム |
SIP:マイクロソフトがIP電話を面白くする!? IPトレンド解説 IP網と電話網を統合させるVoIPの、基盤技術の1つ「SIP」。 MSの新サーバでも対応が始まった、この音声や画像などを扱うプロトコルはなぜ重要なのか 「Master of IP Network」フォーラム 2003/5/21
|
書籍で学ぶVoIPとSIP IP Network書評 IPによる音声通話の基礎テクノロジ「VoIP」、そのベースとして多用される通信プロトコル「SIP」。5冊の入門〜開発者向け解説書を紹介する 「Master of IP Network」フォーラム 2003/9/12
|
3/3 |
INDEX NGN時代の有力な基盤技術? SIPサーブレット入門 | ||
Page1 | ||
SIPサーブレットとは何か? HTTPサーブレットとの類似点から見たSIPサーブレット |
||
Page2 | ||
HTTPサーブレットとの相違点から見たSIPサーブレット | ||
Page3 | ||
ソースコード・シーケンス図でSIPサーブレットをひも解く SIPサーブレットも試してみよう |
Java Solution全記事一覧 |
- 実運用の障害対応時間比較に見る、ログ管理基盤の効果 (2017/5/9)
ログ基盤の構築方法や利用方法、実際の案件で使ったときの事例などを紹介する連載。今回は、実案件を事例とし、ログ管理基盤の有用性を、障害対応時間比較も交えて紹介 - Chatwork、LINE、Netflixが進めるリアクティブシステムとは何か (2017/4/27)
「リアクティブ」に関連する幾つかの用語について解説し、リアクティブシステムを実現するためのライブラリを紹介します - Fluentd+Elasticsearch+Kibanaで作るログ基盤の概要と構築方法 (2017/4/6)
ログ基盤を実現するFluentd+Elasticsearch+Kibanaについて、構築方法や利用方法、実際の案件で使ったときの事例などを紹介する連載。初回は、ログ基盤の構築、利用方法について - プログラミングとビルド、Androidアプリ開発、Javaの基礎知識 (2017/4/3)
初心者が、Java言語を使ったAndroidのスマホアプリ開発を通じてプログラミングとは何かを学ぶ連載。初回は、プログラミングとビルド、Androidアプリ開発、Javaに関する基礎知識を解説する。
|
|