Java実験室
コミュニケーションアプリケーションの構築


SIP Communicatorを評価すると?

 さて、実際にコミュニケーションアプリケーションを構築しアプリケーションを動作させてみて如何でしたでしょうか? 音声や映像の送受信に遅延を感じた方もいらっしゃるでしょう。一点気を付けていただきたいのが、この遅延は、メディア操作によるもので、JSLEEやJAIN SIPによるところでは無いということです。今回使用したSIP Communicatorは、音声や映像、画像を操作するためにJMFを用いています。そのため、メディアフォーマット変換を専用のH/Wではなく、JVM上で行うため、専用H/Wデバイスと比べると若干の遅延は発生します。しかしその一方で、遅延は殆ど感じなかったという方もいらっしゃるでしょう。勿論、人それぞれの感覚の違いはありますが、おそらくJMFのパフォーマンスを十分に生かせるマシンを用意された方は、それほどの遅延は感じなかったでしょう。人間が検知できる音声遅延は50msが限界だといわれています。それより短くても人間は遅延があったことを検知できないのです。一方、電話サービスの遅延は、最悪でも150ms−200msが限界だといわれています。それ以上になると、サービスとして品質が悪いということになってしまうようです。

 今回使用したSIP Communicatorは、実は、ハードコーディングで音声データを300msバッファしてから、それをコンバートするという仕組みになっています。これは、SIP Communicatorのソースコードをダウンロードして、中をのぞいてみると、ハードコーディングされている箇所を見つけることが出来るはずです。よって、ハイスペックなマシンを持っている方であれば、このバッファ時間を短くすることで、遅延をより短くすることが出来ます。逆に、バッファ時間を短くしすぎても、コンバート処理作業でボトルネックが生じてしまえば、遅延を減らすことはできません。

 今回のサンプルアプリケーションでは、JSLEE、JAIN SIPに加え、JMFというテクノロジを使用したわけですが、コミュニケーションアプリケーションのクライアントサイドでもパフォーマンスを満たしさえすれば、Javaを用いる事のメリットである、アプリケーションの移植性のよさ、柔軟性、Java Web StartやAppletといった、配布のしやすさ、管理性のよさを活かすことで、よりよい環境の構築が出来るでしょう。

 さて、今回は、主にJSLEEサーバを用いたテレビ電話環境の構築について解説を行ってきました。但し、読者の皆さんの中には、JSLEEサーバを活用するためには、この後、何をすればいいんだ? JSLEEアプリケーションの開発は、どのように行えばよいのか?という疑問をお持ちの方もいるでしょう。また、お気づきの方もいらっしゃるでしょうが、Rhino-SDKの評価版ダウンロードサイトには、Eclipseのプラグインモジュールが提供されています。そうです、JSLEEのコンポーネントは、J2EEコンポーネントと同様にEclipseを用いて容易に構築、配備することが出来るのです。JSLEEサーバの操作、コンポーネントの開発は、またの機会にお話することにしましょう。

今後に向けて

 私は常々コミュニケーションツールの多さに飽き飽きとしています。私は(皆さんも同じでしょうが)、コミュニケーションツールとして会社のデスクに固定電話もあれば、個人のケータイ電話、さらには会社から支給されたケータイ電話にパソコン、とハードウェアだけでもこれだけたくさんのコミュニケーションデバイスを持っています。更に、ソフトウェアを考慮すると、携帯電話には留守電サービスやメールサービスが存在し、同様に、固定電話には、転送サービスや留守電サービス、PCでは会社標準のメールサービスに加え、Webメールなど、数多くのコミュニケーションツールが存在します。勿論、用途に応じてどのツールを使用するかは、都度選択するわけですが、その一方で、至急コミュニケーションをとりたいとなった場合、どのツールを選択するかは悩みます。とりあえず、連絡を取りたい相手の携帯電話に呼び出しを行うのが最適な手段になるのでしょうが、携帯電話に連絡をしても、繋がらなかったときに、留守電を残して待つべきなのか、他の手段を考えるべきか、色々と悩みます。というのも、連絡取りたい相手が私だとしたら。。。

 私は、うっかりケータイ電話を自宅に忘れることもあれば、ケータイ電話のバッテリーがなくなることもあります。海外出張に行き、携帯電話をレンタル(私の携帯電話は海外では使えませんので)していることもあれば、国内でも圏外の場所にいることもあります。加えて、私は、自分の会社の席にいるのであれば、携帯電話より受話器の大きな話しやすい(個人の好き嫌いですが)固定電話を好みますし、また、相手がプライベートな付き合いの人間であれば、すぐに席を立つことが出来る携帯電話の方がよいこともあります。私は、自分がこのような状況のときに、いつも、自分が受信したいデバイスを状況にあわせて選択できないものかと思います。このような時に、自分の状態と希望の通信手段を相手に伝えることができれば、なんと便利かと思います。今回、サンプルアプリケーションで使用したSIPは、まさにこのような、問題を解決するプロトコルであり、そのプロトコルをJavaで制御するためのAPIがJAIN SIPです。更に、SIPメッセージを受け、実行されるサーバサイドのアプリケーション実行基盤がJAIN SLEEになります。JAIN SLEEは、プロトコル非依存な環境を提供します。その結果、公衆回線網や携帯電話網のサービスと連携したりすることができるのです。繰り返しになりますが、JAIN SLEEの詳細については、前回の記事をご覧ください。

 さて、それではここから先は、冒頭でふれた通り今回構築したコミュニケーションアプリケーションと現在いろいろな用途で活用されているエンタープライズアプリケーションが連携することでどのような新しいサービスがうまれるかを考えてみましょう。

 今回構築したJSLEEとJAIN SIPを用いたアプリケーションでは、SIPアドレスを用い相手を呼び出し、SIPアプリケーションがそのSIPアドレスとIPアドレスのマッチングを行い、相手とのセッションを確立しました。例えば、このサービスに、SIPアプリケーション上で扱うデータをSIPアドレス、IPアドレスに加え、各人の状態やコメントなどを入れるとどうなるでしょう。

 まず、SIPレジストラサービスに自身の状態と受信したいデバイス、サービスを登録しておきます。そうすることで、発信者は、SIPアドレスを用い、相手を呼び出すことで、アプリケーションが受信者の状態を判断し、受信者は、期待するデバイス、サービスにて応答することが出来るのです。また、ミーティング中、移動中などで応答できない場合でも、コメントにミーティング中なので30分後に連絡可能と登録しておくことで、発信者は、たとえ電話が通じなくとも、このような情報を取得できれば、安心して留守番電話にメッセージを残せます。電車移動中であれば、電話は一切とれないため、SIPサーバに着信先を携帯電話ではなく、携帯電話のメールとして受信アドレスを登録する事もできるでしょう。このように、受信者の状態や希望する媒体を送信者に伝えることで、使い勝手のよいコミュニケーションアプリケーションとなるでしょう。このようなアプリケーションは、今回構築したアプリケーションにチョット手を加えるだけで構築することが出来るのです(ただし、転送先等、呼び出し相手がIP上では無い場合に、公衆回線網や携帯回線網をどの# ように使用するかは、頭をひとひねりする必要がありますが)。

 また、これらの状態情報を、社内のカレンダーサーバと連携しても面白いでしょう。
カレンダーサーバ(スケジュール管理サーバ)に日々の業務の予定を入れるとSIPレジストラサービスの情報も更新され、発信者は、随時相手の状態を得ることができます。

 その他にも、既に、実現されているサービスですが、社員名簿WebにSIPアドレスが表示されており、さらに状態が表示されている。 先方が電話可能状態であれば、それをクリックすると相手の電話が鳴り、かつ自分の電話も鳴り、それに応答する事で通信が可能になるといったサービスもそれほど難しくなく実現できるでしょう。お客様からの電話を受けたとき、お客様が会話をされたい人間が違うフロアにいることもあるでしょう。そのような場合に、今は、まずは社員検索システムで内線番号を調べ、受話器を上げダイヤルし、その挙句に、外出中で、結果お客様には、一分近く待ってもらって、「外出中です」なんて、告げることも良くあることでしょうが、このような問題も解決できるでしょう。


 また、社内のポータルサーバ上に、自分の所属するプロジェクトのメンバーの情報が表示されていて、音声や映像交換ができたり、ホワイトボード共有ができたり、などバーチャルオフィスも考えられるでしょう。近年、IT業界の不景気で、オフィスが縮小化する企業も少なく、在宅勤務や会社に固定席が無い、フリーオフィス形態を取っている企業があると聞きます。このような場合に、一緒に働くべき人間がどこにいるかわからずに、会社の内線、携帯電話を掛け捲って、相手を見つけ出すようなこともあります。このような場合にも、バーチャルオフィスは有効でしょう。

 このように非常に簡単な例をいくつか挙げましたが、コミュニケーションアプリケーションとエンタープライズアプリケーションの連携によって、今までになかったサービスがうまれるのです。


 SIPプロキシサービスは、セッションの確立や終了をすべて検知することになります。よって、SIPプロキシサービスは、それら開始時間や終了時間、通話場所、使用サービスなど、通話に関する全ての情報を取得する事ができます。 これら取得情報をJ2EE上の課金サーバに渡し、課金処理を行う事もできるでしょう。また、その課金情報からポイントを計算し、マイルポイントと共有化できるということもあるでしょう。勿論、このマイルポイントは、インターネット上の様々なサービスで共有されているのです。J2EEアプリケーションの世界では、それほど珍しくない、インターネットを介したアプリケーション連携ですが、その輪の中にコミュニケーションアプリケーションが入れることも十分考えられるでしょう。



最後に

 今回、アプリケーションを構築するために使用したJSLEEは、コミュニケーションアプリケーションの分野だけではなく、金融、証券サービスをはじめとする、いわゆるミッションクリティカルなサービスを構築する必要がある分野から注目されています。これは、JSLEEがトランザクション制御に強く、かつ高速で高可用性を実現できるアプリケーションの実行基盤だからです。例えば、オンライントレードでは、瞬時に爆発的なトランザクションが発生することもあるでしょう。その時に、お客さんが一度コミットした売り買いを障害が発生したため処理ができませんでしたとは言えないでしょう。このように、JSLEEはコミュニケーションアプリケーションが必要とする実行基盤を提供するものであり、コミュニケーションアプリケーションのためだけの実行基盤ではないこともご理解ください。

 今回はJSLEEコンポーネントの開発まで話を進めることは出来ませんでしたが、ぜひサンプルアプリケーションのソースコード、管理者ガイド、jslee.orgの情報を参考に、新しいアプリケーションの創造にお役立て下さい。また、皆様からの声がございましたら、今後JSLEEコンポーネント作成についても触れたいと思います。

3/3  

 INDEX

JSLEE、JAIN SIPSを用いた新しいコミュニケーションアプリケーション構築
  Page1
  Page2
Page3





「Strutsを使うWebアプリケーション構築術」




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

注目のテーマ

Java Agile 記事ランキング

本日 月間