寄稿:iアプリを活かす──サーバとの連携がカギ

iアプリをゲームだけでなくビジネスに利用するにはサーバとの連携が不可欠だ。しかしiアプリではhttpしか使えず,プログラミングが困難である。その解決法の1つが「x-ORB」のようなミドルウェアを利用することだ。

【国内記事】 2001年3月23日更新

 1月26日にNTTドコモよりJavaVMが搭載された携帯電話が出荷された。この携帯電話で動作するアプリケーション(iアプリ)のサイズは10Kバイト以内でなければならない。しかしながら,サーバ側にある無尽蔵ともいえるコンピュータ資源を活用することにより,iアプリの可能性は無限に広がる。

 とはいえ,携帯電話で動作するJavaVMであるJ2ME/CLDCではRMI(Remote Method Invocation,詳細は後述)が省略されている。そのため,サーバ側と連携したプログラムを開発するためには,通信プロトコルレベルでの煩雑なプログラミングを強いられる。

 2001年夏にはKDDI,J-フォンからもJ2ME/CLDCを搭載した携帯電話が出荷される。当然,サーバと連携して動作する携帯Javaアプリケーション開発のニーズは急激に高まることとなろう。

*J2ME/CLDC (Java 2 Micro Edition/Connected Limited Device Configuration)

iアプリとサーバとの連携で可能になること

 大雑把にいって,iアプリとサーバの連携がもたらすメリットは次の3つである。

・サーバ資源を活用することにより10Kバイトの大きさを超えてしまうiアプリを開発できる

・サーバを介して,iアプリ同士でコミュニケーションやデータ交換ができる

・これまでサーバでやっていた内容を一部携帯電話側で処理することによりサーバの負荷を軽減できる

 しかし,大きな問題点が1つある。それは,現在の携帯Javaの開発環境下では通信プロトコルに則った煩雑なプログラミングが必要になるということである。

 例えば,「プログラムA」を見て頂きたい。これは,単に“x-ORB”という文字列をサーバに送信するだけのプログラムだが,NTTドコモのJava仕様に従ってプログラミングするとプログラムAのようになる。

 ドコモのJava仕様に従って通信プログラムを作成するには,httpという通信プロトコルをよく理解する必要があるし,プログラム自体が極めて複雑な構造になってしまうという難点もある。

プログラムA
iアプリとサーバでデータ通信するためのプログラミング例

      Com.nttdocomo.io.HttpConnection con;
      con = (com.nttdocomo.io.HttpConnection)Connector.open(app.getSourceURL()+"/servlets/hello");
      con.setRequestMethod(con.POST);
      con.setRequestProperty("content-type", "application/octet-stream");
      DataOutputStream out = new DataOutputStream(con.openOutputStream());
      out.writeUTF("x-ORB");
      out.flush();
      out.close();
      con.connect();
      DataInputStream in = new DataInputStream(con.openInputStream());
      String msg = in.readUTF();
      in.close();
      con.close();

クライアント/サーバプログラミングを容易にするためのRMI

 クライアント/サーバプログラミングを容易にするためのソリューションとしては,最初に,RPC(Remote Procedure Call)と呼ばれる方法が考えられた。この方法は,サーバにある処理への要求を複雑なネットワークプログラミングをすることなく単純な通常の関数呼び出しで実現するメカニズムである。

 その後,RPCはオブジェクト指向プログラミング言語向けに,ORB(Object Request Broker)へと発展した。

 ORBを利用すれば,インタフェースのメソッド定義の情報から,データ通信に必要なプログラムが自動生成される。そのため,クライアントからサーバ上にあるオブジェクトのメソッド呼び出しを,同じコンピュータ上にあるオブジェクトのメソッド呼び出しのような感覚でプログラミングできる。

 ORBにより,プログラマは通信プロトコルレベルでの煩雑なネットワークプログラミングから解放される。従来なら100行程度必要であったプログラミングが数行のコーディングをするだけでよくなる。その結果,開発生産性が向上し,かつソフトウェアライフサイクルにおいて最もコストがかかる保守費用が大幅に削減される。

 通常,JavaにはRMI(Remote Method Invocation)と呼ばれるORBが標準APIとして提供されている。しかしながら,iモードに搭載されているJava(J2ME/CLDC)ではRMIが提供されていない。

 そこで,フレックス・ファームが取った方法が,携帯JavaからサーバにあるオブジェクトへRMIと同じ方法でアクセスできるようなメカニズムを,ミドルウェアとして実現することだった。「x-ORB」と名付けられたこの製品では,J2ME/CLDCのAPIのみを利用して,RMIを実装している。

x-ORBの機能

 x-ORBにはRMIが実装されているので,「プログラムB」にあるようにserver.hello("x-ORB")のようなシンプルな書き方で,サーバに“x-ORB”という文字列を送ることができる。プログラムAにあるような煩雑な通信プログラムはx-ORBが自動的に生成してくれる。図1において,2重線で囲った部分がこれに相当する。

 また,プログラムAの通信プログラムはキャリアごとに微妙に異なるが,x-ORBを利用した場合は,キャリアに依存しない統一的な通信APIを利用できる。キャリアごとの違いはx-ORBが吸収する。

プログラムB
x-ORBを使用する場合

    XOrb.init(this, "/servlets/xorb"); HelloServer server = (HelloServer)Naming.lookup("hello"); String msg = server.hello("x-ORB");

図1 X-ORBアーキテクチャ
 青い部分は自動生成される。図中の「RMIリモートインタフェース」「x-ORBプロキシリモートインタフェース」は同一のもの(拡大画像

 NTTドコモの仕様では,iアプリは,ダウンロード元のWebサーバとしか通信できない。従って,そのWebサーバとは別のRMIサーバ上で動くRMIリモートオブジェクトと通信するためには,Webサーバを中継してRMIサーバまで到達するネットワークプログラミングが必要となる。しかし,図1にあるようにx-ORBではRMIリモートオブジェクトまでの中継処理のためのプログラムは自動生成される。

 また,iアプリとサーバはhttpプロトコルで通信するため,複数回のリクエストにまたがる一連の処理を実行するためにはリクエストごとのセッション情報を保持しなければならない。大規模アクセスに対処すべく負荷分散のためにWWWサーバを複数稼働させ,リクエストするたびに異なるWWWサーバにリクエストが振り分けられる場合でも,セッション情報を保持できなければならない。x-ORBはそのためのセッション管理システムも独自機能として実装している。

 次世代携帯電話のシステムではIPv6,Bluetoothや電子マネーなどの技術が利用される。例えば,無線で電子マネーなどのデータを情報機器間でやり取りするようなニーズが急激に高まってくる。この場合,x-ORBのようなiアプリとサーバとの連携をサポートするソフトウェアは,電子マネー情報をやり取りするための効果的なインフラとなってくるだろう。

[杉山和徳 フレックス・ファーム最高技術責任者,ITmedia]

Copyright © ITmedia, Inc. All Rights Reserved.



モバイルショップ

最新CPU搭載パソコンはドスパラで!!
第3世代インテルCoreプロセッサー搭載PC ドスパラはスピード出荷でお届けします!!

最新スペック搭載ゲームパソコン
高性能でゲームが快適なのは
ドスパラゲームパソコンガレリア!