Unofficial
"CLDC 1.1
+ MIDP 2.0"
API Reference.
(日本語版)

javax.microedition.io
クラス PushRegistry

java.lang.Object
  上位を拡張 javax.microedition.io.PushRegistry

public class PushRegistry
extends Object

このクラスはインバウンド接続(外部から内部へ向かう接続)のリストを維持管理します。

アプリケーションは、registerConnection メソッドを呼び出すか、アプリケーション・ディスクリプタ・ファイル(JAD ファイル)の項目によってインバウンド接続を登録することができます。

アプリケーションが稼働中は、インバウンド接続に関連するすべての入出力操作にアプリケーションが責任を負います。 アプリケーションが稼動していないときは、アプリケーション管理ソフトウェア(AMS : Application Management Software)がインバウンド通知要求を受け取ろうとします。 登録された MIDlet に通知が到着すると、AMS は通常の方法で MIDlet.startApp メソッドを呼び出して、MIDlet を開始します。

宣言された接続のインストールの取り扱い

インバウンドの Generic Connection による衝突を避けるために、アプリケーション・ディスクリプタ・ファイルは MIDlet スイートによって必要とされる静的な接続に関する情報を含める必要があります。 アプリケーション・ディスクリプタに存在する、すべての静的な Push 宣言を実現することができないことがインストール時に判明した場合には、コンフリクトが発生していることをユーザーに通知しなければなりません。そして、その MIDlet スイートをインストールしてはなりません (Over The Air User Initiated Provisioning Specification の errors reported in the event of conflicts(コンフリクトの発生に関するエラー報告)セクションを参照してください)。

宣言が実現不可能な状態は以下の場合です:

Push 登録条件を満たすことができない場合でも、MIDlet スイートが意味のある機能を発揮することができるならば、PushRegistry のダイナミックな登録方法を用いて Push 接続を登録しなければなりません。

コンフリクトの発生しないインストールでは、スイート内のそれぞれの MIDlet が使用する専用の接続のために、要求された接続を予約します。 インストールされたスイートが存在している間、他のアプリケーションによる予約された接続に対する全ての試みは IOException を throw して失敗します。 スイートに含まれる MIDlet による、予約した接続に対する Connector.open() メソッドによる呼び出しは、スイートがすでに接続を開いている場合を除いて常に成功します。

2つの MIDlet スイートが共通の静的な Push 接続を持つ場合、それらは一緒にインストールしても、ともに正しく機能することができません。 一般にエンド・ユーザーは、もう片方のインストールを成功させるために、コンフリクトするアプリケーションをアンインストールしなければならないでしょう。

Push を登録するための属性

それぞれの Push 登録項目は以下の情報を含みます。

MIDlet-Push-<n>: <接続 URL>, <MIDlet クラス名>, <許可する送信元>

意味は以下の通りです。

MIDP 2.0 仕様はデータグラムおよびソケットによるインバウンド接続のための構文を定義します。 他の仕様が追加の接続タイプのために Push セマンティクスを定義する際には、接続 URL 文字列のために想定される形式と同様に、想定される構文をフィルタ・フィールドとして定義する必要があります。

ディスクリプタ・ファイルの宣言記述例

以下にストリーム・ソケットのポート番号 79 とデータグラム接続のポート 50000 を予約するサンプルのディスクリプタ・ファイル用の項目を示します(ポート番号は、IANA によって維持管理されており、よく知られている/Well-Known ポート番号、ユーザー定義ポート番号およびダイナミック・ポート番号をカバーしています→参照: IANA Port Number Registry)。

 MIDlet-Push-1: socket://:79, com.sun.example.SampleChat, *
 MIDlet-Push-2: datagram://:50000, com.sun.example.SampleChat, *

バッファされたメッセージ

メッセージのバッファリングのための要件は、Push に使用する各プロトコルに依存し、各プロトコルごとに個別に定義されます。 全てのプロトコルに適用される、バッファリングに関連するどのような一般的な要件もありません。 実装がメッセージをバッファリングする場合、MIDlet を開始して、Push のために登録された関連する Connection をオープンした MIDlet に、これらのメッセージを提供しなければなりません。

データグラム接続が Push と共にサポートされる場合、実装はデータグラム Push のために登録された MIDlet が受け取ったデータグラムに対応して開始する際、MIDlet が開始してから UDPDatagramConnection をオープンすることによって、少なくとも MIDlet を開始させた要因となるデータグラムを実装はバッファリングし、MIDlet が利用可能であることを保証しなければなりません。

ソケット接続が Push と共にサポートされる場合、実装はソケット Push のために登録された MIDlet が接続要求によるソケット接続に対応して開始する際、MIDlet が開始してから ServerSocketConnection をオープンすることによって、この接続を受け取ることができることを保証しなければなりません(タイムアウトの場合を除く)。

Connection vs Push 登録サポート

全ての Push アプリケーションのデータ転送にとって、全てのケースにおいて Generic Connection の使用が適切であるというわけにはいかないでしょう。 プロトコルがインバウンドの接続方式としてデバイスでサポートされていたとしても、それを有効な Push メカニズムとして使用できることを要求するものではありません。 例えば、プラットフォームは MIDlet でサーバー・ソケット接続をサポートするものの Push 受け付けのためにはソケット接続をサポートしないかもしれません。 プラットフォームはこのオプション機能をサポートしない場合には、registerConnection メソッドおよび registerAlarm メソッドの呼び出し時に ConnectionNotFoundException を throw します。

AMS による接続の取り扱い

登録された Push 接続への責任は AMS(Application Management Software : アプリケーション管理ソフトウェア)とインバウンドの接続の際に入出力操作を行う MIDlet の間で共有されます。 どのような場合にもデータの喪失を防ぐために、アプリケーションは全ての接続に対する入出力を Connector.open() メソッドの呼び出しから Connection.close() メソッドの呼び出しの間に行います。

AMS はインバウンド接続の通知を受け取ろうとします。 これは新しいインバウンド・データを探すためにネイティブ・ソフトウェアのコールバックまたはポーリング・メカニズムで扱うかもしれません。 AMS は MIDlet スイートを呼び出す前に、PushRegistry のセキュリティの実施し、(必要に応じて)ユーザーに通知を提示する責任があります。

AMS は(必要であれば)Push MIDlet メソッドの呼び出しの前に、全ての実行中のアプリケーションをシャットダウンする責任があります。

AMS が Push アプリケーションを開始した後に、MIDlet は接続を開いた後の全ての入出力サブシーケンスに責任があります。 ブロッキングを伴う入出力操作を行うアプリケーションはインタラクティブなユーザー操作を考慮して別々のスレッドを使用すべきです。 一度アプリケーションが開始し、接続がオープンされると AMS はもうその接続のために Push 通知を受け取ることに責任はありません。 アプリケーションは全てのインバウンド・データを読む責任があります。

アプリケーションが全てのインバウンド・データの処理を終えたなら、close() メソッドを呼び出して接続を閉じます。 接続が閉じられると、AMS もアプリケーションの Push 通知を受け取りません。 全てのデータを受け取る前にアプリケーションが接続を閉じるなら、インバウンド・データは失われます。

アプリケーションが破棄されると、AMS はインバウンド接続を受け取るための責任を持ちます。

Push メカニズムで非同期なデータを取り扱う際、Push アプリケーションは予測可能な振舞いをすべきです。 正しい振る舞いのアプリケーションはデータを処理してあることをユーザーに通知すべきです(ユーザーの目に見えるどのようなインタフェースも使用しないアプリケーションを記述した場合、バックグラウンド機能を実行するだけであり、アプリケーションを実行することでエンド・ユーザーに混乱を経験させるかもしれません)。

実行中の MIDlet によるダイナミックな接続の登録

IANA に登録されたよく知られている/Well-Known ポートの定義を使用する必要が無い場合があります。 簡単なアプリケーションは、MIDlet とサーバー・アプリケーションの間で取り決めた独自プロトコルでデータの交換を望むかもしれません。

このタイプのアプリケーションに適応するために、アプリケーションがインストールされた時にダイナミックに接続を割り当てて、まるでそれがあらかじめわかっていたかのように、その情報を登録するためのメカニズムを提供します。 そして、登録された MIDlet とコミュニケートするためのメカニズムを使用するのに必要な情報をエージェントに送ることができます。

例えばアプリケーションが UDPDatagramConnection を開く際にポート番号を指定せず、現在利用可能なポート番号からダイナミックに割り当てるように要求します。 registerConnection を呼び出すことにより、MIDlet はそれがインバウンド・コミュニケーションのための目標であることを AMS に通知します。この通知は MIDlet が破棄(破棄状態の定義に関しては「MIDlet ライフサイクルの定義」を参照してください)された後にも有効です。 アプリケーションが携帯電話(さかき注:デバイス)から削除される場合、ダイナミックなコミュニケーション接続は自動的に登録解除されます。

AMS 実行時の取り扱い −− 実装上の注意

インストール時に、既知のアドレスに関するインバウンド・コミュニケーションを望む各 MIDlet のマニフェストかアプリケーション・ディスクリプタ・ファイルの中の Push 登録属性から情報を得て AMS にて記録します。 一度インストールが正常に完了(OTA 推奨手続きに沿って、インストール通知メッセージを正常に送信し、アプリケーションを公式にインストールします)後、MIDlet はインバウンド・コミュニケーションを受信するでしょう(例えば Push 通知イベント)。

AMS が始動すると、それは登録された接続リストをチェックして、インバウンド・コミュニケーションを受け取る準備をします。 通知が到着すると AMS は登録された MIDlet を開始します。 そして各種入出力操作において必要とする、特定の接続タイプに対応する接続を MIDlet は Connector.open() を呼び出して開きます。 例えば、サーバー・ソケットに対してアプリケーションは acceptAndOpen() メソッドを使用してソケットに接続し、続いて receive() メソッドを使用して提供されたメッセージを読み出します。

メッセージ指向の転送において、インバウンド・メッセージは AMS によって読み込まれ、MIDlet がデータの読むように要求するまで配送のために保存します。 ストリーム指向の転送において、接続要求がタイムアウトになるまでサーバーが接続を受け入れない場合、接続は失われます。

MIDlet が登録された Push 接続通知に対応して開始する時、どれが現在実行中のアプリケーションになるかはプラットフォームに依存します。 MIDlet ライフサイクルは中断している MIDlet が、pauseApp() の呼び出しから destroyApp() の呼び出しの間に見ることができる想定された振る舞いを定義しています。

用例シナリオ

用例シナリオ1

スイートにはコミュニケーションのためのよく知られた/Well-Known ポートを持つ MIDlet を含んでいます。 startApp() 処理中に受信データを取り扱うためにスレッドを開始します。 別々のスレッドを用いるのは、正常なユーザーインタフェース・イベントを妨げるブロッキングを伴う入出力操作との衝突を避けるために推奨される方法です。 スレッドは MIDlet が破棄されるまでメッセージを受け取りつづけます。

サンプルのチャットのディスクリプタ・ファイル

このサンプルのディスクリプタ・ファイルは静的な Push 接続登録を含んでいます。 また、この MIDlet がインバウンド Push メッセージにデータグラム接続を使用する許可を必要とする指示も含みます(MIDlet パーミッションに関する詳細についてはパッケージ概要の PushRegistry のセキュリティを参照してください)。 注記:サンプルは突発するデータグラムのサンプルとして有効です。受け取ったメッセージを処理して接続ループをするために記述されています。

 MIDlet-Name: SunNetwork - チャット・デモ
 MIDlet-Version: 1.0
 MIDlet-Vendor: Sun Microsystems, Inc.
 MIDlet-Description: ネットワーク・デモンストレーション・プログラム for MIDP
 MicroEdition-Profile: MIDP-2.0
 MicroEdition-Configuration: CLDC-1.0
 MIDlet-1: InstantMessage, /icons/Chat.png, example.chat.SampleChat, *
 MIDlet-Push-1: datagram://:79,  example.chat.SampleChat, *
 MIDlet-Permissions: javax.microedition.io.PushRegistry, \\
                     javax.microedition.io.Connector.datagramreceiver

サンプルのチャット MIDlet 処理

 public class SampleChat extends MIDlet {
     // カレントのインバウンド・メッセージ接続
     DatagramConnection conn;
     // メッセージ読み出しスレッドの終了フラグ
     boolean done_reading;
 
     public void startApp() {
         // アクティブな接続のリスト
         String connections[];
 
         // このセッションがインバウンド接続通知のために開始
         // されたか否かをチェックします。
         connections = PushRegistry.listConnections(true);
 
         // ディスクリプタ・ファイルにて静的に構成した接続に対する利用
         // 可能なインバウンド・メッセージのためにインバウンド
         // メッセージ処理スレッドを開始します。
         for (int i=0; i < connections.length; i) {
           Thread t = new Thread (new MessageHandler(
                            connections[i]));
           t.start();
         }
 
         ...
        }
     }
 
     // インバウンド・メッセージを読むのをやめて、AMSリスナー
     // のPush接続を開放します。
     public void destroyApp(boolean conditional) {
        done_reading = true;
        if (conn != null)
            conn.close();
        // 必要に応じて、現在のセッションが終了することをネットワー
        // ク・サービスに通知します。
        ...
     }
 
     // 必要に応じてネットワーク・サービスに通知します。
     public void pauseApp() {
         ...
     }
 
  // 別々のスレッドでインバウンド・メッセージを取り扱う内部クラスです。
  class MessageHandler implements Runnable {
      String connUrl ;
      MessageHandler(String url) {
           connUrl = url ;
      }
      // メッセージのフェッチを行う、ブロッキングを伴う受信ループです。
      public void run() {
        try {
          // インバウンド・メッセージとバッファに保持されているインバウ
          // ンド・メッセージに対応する接続ハンドルを取得します。
          DatagramConnection conn = (DatagramConnection)
               Connector.open(connUrl);
          Datagram data = conn.newDatagram(conn.getMaximumLength());
 
          // インバウンド・メッセージを読み出します。
          while (!done_reading) {
             conn.receive(data);
            ...
          }
         } catch (IOException ioe) {
         ...
      }
      ...

用例シナリオ2

スイートには MIDlet が最初に起動した時に初めてダイナミックにポートを割り当てる MIDlet を含みます。

サンプルの Ping のディスクリプタ・ファイル

このサンプルのディスクリプタ・ファイルは、アプリケーションがインバウンドの Push メッセージにデータグラム接続を使用する許可を必要とする指示を含みます。 MIDlet が初めて実行されるときにコンストラクタはダイナミックな接続割り当てを行います。 オープンされている接続をサブシーケンス・セッションで使用し、その後のセッションでインバウンド接続通知に対応して再開させることができます。

 MIDlet-Name: SunNetwork - Demos
 MIDlet-Version: 1.0
 MIDlet-Vendor: Sun Microsystems, Inc.
 MIDlet-Description: ネットワーク・デモンストレーション・プログラム for MIDP
 MicroEdition-Profile: MIDP-2.0
 MicroEdition-Configuration: CLDC-1.0
 MIDlet-1: JustCallMe, /icons/Ping.png, example.ping.SamplePingMe, *
 MIDlet-Permissions: javax.microedition.io.PushRegistry, \\
                     javax.microedition.io.Connector.datagramreceiver

サンプルの Ping MIDlet 処理

public class SamplePingMe extends MIDlet {
    // Push 登録するカレント・アプリケーションの名前
    String myName = "example.chat.SamplePingMe";
    // Push 接続の登録済みリスト
    String connections[];
    // インバウンド・データグラム接続
    UDPDatagramConnection dconn;
 
    public SamplePingMe() {
 
        // Ping 接続が既に登録されているかどうかチェックします。
        // この MIDlet を初回実行時にダイナミック接続の確保を行い
        // ます。
        connections = PushRegistry.listConnections(false);
 
        if (connections.length == 0) {
            // 帯域外通知のためのダイナミック・ポートを要求します。
            // (ポート番号を省略すると使用可能なポートの中からシ
            // ステムが確保します。)
            try {
                dconn = (UDPDatagramConnection)
                        Connector.open("datagram://");
                String dport = "datagram://:" + dconn.getLocalPort();
 
                // MIDlet が終了した後にメッセージをポストすると MIDlet が目覚
                // めるようにポートを登録します。
                PushRegistry.registerConnection(dport, myName, "*");
 
                // ネットワークに自分のデータグラム・アドレスをポストします。
                  ...
            } catch (IOException ioe) {
                ...
            } catch (ClassNotFoundException cnfe) {
                ...
            }
    }
 
    public void startApp() {
       // まだ接続がオープンされていなければオープンします。
       if (dconn == null) {
          // dconn がコンストラクタによってオープンされていないので
          // これがはじめての実行ではありません。
 
          // 受信したデータグラムによる開始かどうかチェックします。
          connections = PushRegistry.listConnections(true);
 
          if (connections.length > 0) {
             // 受信可能な未処理のデータグラムがあります。
             dconn = (UDPDatagramConnection)
                 Connector.open(connections[0]);
 
             // データグラムを読み出します。
             Datagram d = dconn.newDatagram(dconn.getMaximumLength());
             dconn.receive(d);
          } else {
             // 未処理のデータグラムはありませんが、後で使用するために
             // 接続をオープンします。
             connections = PushRegistry.listConnections(false);
             if (connections.length > 0) {
                     dconn = (UDPDatagramConnection)
                         Connector.open(connections[0]);
             }
         }
      }
 
    public void destroyApp(boolean unconditional) {
        // 終了する前に接続をクローズします。
        if(dconn != null){
           dconn.close()
           dconn = null
        }
    }
    ...

導入されたバージョン:
MIDP 2.0

メソッドの概要
static String getFilter(String connection)
          要求した接続に対応する登録されたフィルタを返します。
static String getMIDlet(String connection)
          要求した接続に対応する登録された MIDlet を返します。
static String[] listConnections(boolean available)
          カレントの MIDlet スイートのために登録された接続リストを返します。
static long registerAlarm(String midlet, long time)
          指定されたアプリケーションを指定の時刻に実行するように登録します。
static void registerConnection(String connection, String midlet, String filter)
          アプリケーション管理ソフトウェアとのダイナミック接続を登録します。
static boolean unregisterConnection(String connection)
          ダイナミック接続を登録解除します。
 
クラス java.lang.Object から継承されたメソッド
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

メソッドの詳細

registerConnection

public static void registerConnection(String connection,
                                      String midlet,
                                      String filter)
                               throws ClassNotFoundException,
                                      IOException

アプリケーション管理ソフトウェアとのダイナミック接続を登録します。 一度登録すると、接続が記述ファイルに最初から記載されていたようにダイナミック接続は扱われます。

ダイナミック接続の登録のための解説は静的な登録と同じ Push を登録するための属性です。

connection または filter 引数が null ならば、IllegalArgumentException を throw します。 midlet 引数が null ならば、ClassNotFoundException を throw します。

パラメータ:
connection - Generic Connection 接続文字列(プロトコルホストポート番号)を渡します(オプションのパラメータをセミコロン (;) 区切りで含めることもできます)。
midlet - 新しい外部データによって起動する MIDlet のクラス名を渡します。 ディスクリプタ・ファイルか jar ファイル内のマニフェストの MIDlet-<n>レコードで命名されている MIDlet を登録しなければなりません。 このパラメータは前述のクラス記述で定義された Push 登録属性で、MIDletClassName と同じセマンティクスを持っています。
filter - どの送信元が MIDlet を起動させることができるかを示す接続 URL 文字列を渡します。
例外:
IllegalArgumentException - 接続文字列が有効ではないか、フィルタ文字列が有効でなければ throw します。
ConnectionNotFoundException - 要求された接続プロトコルをランタイム・システムが Push デリバリにおいてサポートしていない場合に throw します。
IOException - 接続が既に登録されているか、登録要求を取り扱うために必要なリソースが足りない場合に throw します。
ClassNotFoundException - 現在の MIDlet スイート内で MIDlet クラス名が見つからないか、またはこのクラスがディスクリプタ・ファイルか jar ファイル内のマニフェストの MIDlet-<n>に含まれていない場合に throw します。
SecurityException - MIDlet が接続を登録するために必要なパーミッションを持っていない場合に throw します。
関連項目:
unregisterConnection(java.lang.String)

unregisterConnection

public static boolean unregisterConnection(String connection)

ダイナミック接続を登録解除します。

パラメータ:
connection - Generic Connection 接続文字列(プロトコルホストポート番号)を渡します(オプションのパラメータをセミコロン (;) 区切りで含めることもできます)。
戻り値:
登録解除に成功した場合は true を、接続が登録されていないか引数 connectionnull の場合は false を返します。
例外:
SecurityException - 別の MIDlet スイートが登録した接続を登録解除しようとすると throw します。
関連項目:
registerConnection(java.lang.String, java.lang.String, java.lang.String)

listConnections

public static String[] listConnections(boolean available)

カレントの MIDlet スイートのために登録された接続リストを返します。

パラメータ:
available - true を渡すと入力として利用可能な接続リストを、false を渡すとカレントの MIDlet スイートのために登録されている全ての接続リストを返します。
戻り値:
登録されている接続文字列の配列を返します。各接続は Generic Connection 接続文字列(プロトコルホストポート番号)表現で識別します。

getMIDlet

public static String getMIDlet(String connection)

要求した接続に対応する登録された MIDlet を返します。

パラメータ:
connection - Generic Connection 接続文字列(プロトコルホストポート番号)を渡します(オプションのパラメータをセミコロン (;) 区切りで含めることもできます)。
戻り値:
新しい外部データが利用可能な場合に起動する MIDlet のクラス名、または指定された接続が登録されていないか、引数 connectionnull ならば null を返します。
関連項目:
registerConnection(java.lang.String, java.lang.String, java.lang.String)

getFilter

public static String getFilter(String connection)

要求した接続に対応する登録されたフィルタを返します。

パラメータ:
connection - Generic Connection 接続文字列(プロトコルホストポート番号)を渡します(オプションのパラメータをセミコロン (;) 区切りで含めることもできます)。
戻り値:
どの送信元が MIDlet を起動させることができるかを示す接続 URL 文字列、または指定された接続が登録されていないか、引数 connectionnull ならば null を返します。
関連項目:
registerConnection(java.lang.String, java.lang.String, java.lang.String)

registerAlarm

public static long registerAlarm(String midlet,
                                 long time)
                          throws ClassNotFoundException,
                                 ConnectionNotFoundException

指定されたアプリケーションを指定の時刻に実行するように登録します。 PushRegistry は現在のスイートで1つの MIDlet あたりに1つの実行時刻の指定をサポートしています。 アプリケーションの実行中、アプリケーションが時刻に基づいたイベントの通知に TimerTask を使用することを想定しています。

既に実行時刻が登録されている場合、前回の値を返します。アラームをはじめて登録する場合は 0 を返します。

パラメータ:
midlet - アラーム時刻に達した時に実行するカレントの MIDlet スイート中の MIDlet のクラス名を渡します。 ディスクリプタ・ファイルか jar ファイル内のマニフェストの MIDlet-<n>レコードで命名されている MIDlet を登録しなければなりません。 このパラメータは前述のクラス記述で定義された Push 登録属性で、MIDletClassName と同じセマンティクスを持っています。
time - MIDlet を実行する時刻を Date.getTime() で得られる形式で渡します。
戻り値:
この MIDlet が実行される予定だった最新の時刻を Date.getTime() で得られる形式で返します。
例外:
ConnectionNotFoundException - ランタイム・システムがアラームベースのアプリケーション実行をサポートしていないなら throw します。
ClassNotFoundException - 現在の MIDlet スイート内で MIDlet クラス名が見つからないか、またはこのクラスがディスクリプタ・ファイルか jar ファイル内のマニフェストの MIDlet-<n>に含まれていない場合に throw します。
SecurityException - アラームの登録を行うためのパーミッションを MIDlet が所持していない場合に throw します。
関連項目:
Date.getTime(), Timer

Unofficial
"CLDC 1.1
+ MIDP 2.0"
API Reference.
(日本語版)

公式仕様書原文の著作権表記等(※):

Mobile Information Device Profile Specification ("Specification")
Version: 2.0
Status: FCS
Release: November 5, 2002

Copyright 2002 Sun Microsystems, Inc. and Motorola, Inc.
All rights reserved.
※ただしこの API リファレンスは英語仕様を一語一句正確に翻訳したものではなく、一度私が英語の仕様原文を読んだ上で元の意味と構造をなるべく保つように書き起こしたものです。このため一部は完全に異なる説明となっています。また CLDC 1.1 部分は同仕様の範囲外であるため、まったく参考とはしていません。

※仕様書のライセンス上、問題は無いと考えておりますが、万が一問題があるとお考えの関係者の方がいらっしゃいましたらメールにて連絡をいただけると幸いに存じます(第一言語に日本語、第二言語に英語を希望しますが、返信は基本的に日本語で行います)。

この API リファレンスは仕様書の日本語版という位置づけでは作成していませんし、仕様書ほど厳格でもありません。MUST、SHOULD、MAY などの仕様の条件を強調する文を維持していません(反映すらしていない個所もあります)。仮想マシンおよび MIDP の実装のために使用することは避けてください。そのような用途には必ず公式仕様書原文そのものを用いるべきです。
この API リファレンスに記載されている内容は"さかきけい"が Sun Microsystems, Inc や Motorola, Inc、Java Community Process が公開している各種公式資料を元に、独自に調査・編集したものであり、Sun Microsystems, Inc や Motorola, Inc、Java Community Process 等とは一切関係ありません。したがってこの API リファレンスに関する問い合わせを関係各社等に対して行うことを固く禁じます。
また、記載された内容には既知か否かに関らず誤りが含まれる可能性があり、一切保証はありません。本 API リファレンスを使用した結果、不利益が生じたとしても"さかきけい"は一切の責任を負いません。
許可無く公開/非公開および Internet/Intranet/LAN を問わず他サイトに転載すること、複写および複製すること、ローカル・ファイル等に保存することを禁じます。


Copyright© 2001-2002,2005-2009,2011 by KEI SAKAKI.
ALL RIGHTS RESERVED.
無断転載を禁じます。

Unofficial "CLDC 1.0 + MIDP 1.0" API Reference はこちらです。