JSR 271: Mobile Information Device Profile 3

携帯電話をはじめとした携帯端末でJavaを使用する場合、ベースとなる仕様はCLDC(Connected Limited Device Configuration)向けのプロファイルであるMIDP(Mobile Information Device Profile)である。MIDPの現行バージョンはMIDP 2.0で、その仕様はJSR 118として標準化されている。

JCPでは現在、次期バージョンのMIDPとなるMIDP 3.0の仕様策定が進められていて、これがJSR 271として登録され、Public Reviewが実施されている最中だ。今回は公開されたドラフトを元に、MIDP 3.0の概要を追ってみたい。

まず、MIDP 3.0では次のようなエリアを対象として機能拡張が実施される。

  • プラットフォーム…CLDCとCDCの双方でMIDletを正しく動作させる
  • 共有コンポーネント…静的な共有ライブラリをサポートする
  • アプリケーションライフサイクル…複数のMIDletの並列実行時の振る舞いを明確にする
  • セキュリティ… セキュリティ・フレームワークおよびセキュリティ・ポリシーをサポートする
  • ネットワーク…接続のプレファレンス
  • 永続化ストレージ…レコードストアのための安全なバイナリ転送フォーマットを定義する
  • ユーザインタフェース…ゲームのためのもののような、ユニークな入力や表示をサポートする

逆に、次のエリアについてはMIDP 3.0のスコープに含まないとされている。

  • システムレベルAPI…MIDPの主な目的が(システムプログラミングでなく)アプリケーションプログラミングを可能にすることであるため
  • 低レベルのセキュリティ…コンフィギュレーションに依存する部分であるため
  • SOA(Service Oriented Architecture)…MIDPでは必要とされる項目ではない

以下では、MIDP 3.0における主な新機能や改良点について紹介する。

MIDP 3.0の新機能 その1

MIDletのための共有ライブラリ「LIBlet」

MIDP 3.0における非常に大きな変更点のひとつに、複数のMIDletから利用可能な「LIBlet」と呼ばれるソフトウェア部品の導入がある。LIBletはMIDletのための共有ライブラリのようなもので、それ単体で実行することはできず、またLIBlet内で定義されたクラスはMIDlet実行環境以外のコンテキストから利用することができない。LIBletはMIDletスイートと同様に、クラスファイル、リソース、永続化されたデータ、マニフェストファイルなどをまとめてJAR (Jaca ARchive) 形式でパッケージングされる。

MIDletスイートがLIBletを利用する場合や、LIBletが他のLIBletを利用する場合は、その依存関係をマニフェスト・ファイルやJAD (Java Application Descriptor) ファイルに記述しなければならない。MIDP 3.0にはそのために新しくDependency-n属性 (nはエントリの番号) が追加されており、ここで依存するLIBletの名前やバージョン、ベンダー名などを指定できるようになっている。

MIDletスイートをインストールする際に依存するLIBletがある場合には、それを取得するかユーザに確認し、許可されればMIDletスイートと共にインストールされる。MIDletとLIBletは別のサーバ上に置かれていてもよい。MIDletスイートをアンインストールした場合には、依存関係が解消されて不要になるLIBletが出てくるかもしれない。その場合にはユーザはアプリケーション管理ソフトウェアによって不要なLIBletを削除することができる。

CLDCだけでなくCDCもサポート

従来のMIDPはCLDCを前提として設計されており、MIDP 2.0ではCLDC 1.0とCLDC 1.1が対応するプラットフォームとなっていた。MIDP 3.0ではCLDCだけでなくCDCが加わり、対応プラットフォームはCLDC 1.1とCDC 1.1の2種類になる。これはデバイスの性能向上にともなってCDCの要件を満たすモバイル機器の割合が増えたからとのことだ。ただし、MIDP 3.0の必須要件はあくまでもCLDC 1.1であって、CDC 1.1はオプションの要件になるとのこと。MIDletがどちらの構成で動作するかは、MIDletスイートのJADファイルに用意されたMicroEdition-Configuration属性によって指定する。

ただし、CLDCとCDCではMIDletの振る舞いが異なる部分や、機能が重複している部分などがある。それらの問題に関する開発者のためのガイドラインが必要となる。