ひでっぷの技術メモ

はてなダイアリーから移行しました

phoneME使用上の注意メモ

Armadillo-9+Javaで開発をしています。
最初はオープンソースのSableVM1.13を使用しようと思っていましたが、致命的なバグがあり使用を断念しました。
(バグについては後日落ち着いてから記事にしたいと思います。)
SableVMの代わりに使用するのがphoneMEです。
phoneMEはもともとJavaME(J2ME)と呼ばれていたものです。
ちなみにJavaME(J2ME)とは

Sun Microsystems社のプログラミング言語Java 2」の機能セットの一つで、家電製品や携帯情報端末、携帯電話などの組み込み機器向けの機能をまとめたもの。
「CDC」(Connected Device Configuration)と「CLDC」(Connected Limited Device Configuration)という2つの想定環境(コンフィギュレーション)に分かれており、前者はカーナビや高性能PDAといった32ビットCPUと十分なメモリを持った環境を、後者は携帯電話やネットワーク家電、通常のPDAなどの、低速なCPUと少ないメモリからなる環境を対象としている。

 現在のところ、一般にJ2MEとして知られているのはCLDCであり、KVM仮想マシンとして採用されているのもこちらになる。
 サーバ向けのJ2EE、パソコン向けのJ2SEとの大きな違いとして、基本部分には仮想マシン(実行環境)と最小限のコアAPI(中核機能)だけを持ち、デバイス(機器)の種類ごとに定義された「プロファイル」と呼ばれるAPIやクラスライブラリをそれに付加していくことで機能を補うという方式を採用している。
 プロファイルの例としては、携帯電話や通信機能を持った携帯情報端末向けに定められたCLDC用のMIDPなどがあり、これらはSun Community Processを通して業界ごとに定義されている。

これのCDC(ハイエンドなPDAや、テレビのセットトップボックス、ゲーム機、カーナビなど中程度の処理能力を持つ端末を対象としているコンフィギュレーション)を使用します。
phoneMEはsunが作成しているため安心(SableVMはフリーでしかも開発が止まっている)。
動かしてみましたが、SableVMと比べるとメモリ使用量がはるかに少なく快適に動きます。
ところが説明にも書いてある通りに最小限のコアAPIしか持っていないためJ2SEでコンパイルが通ってもphoneMEでは動かないということがあります。
ということでプログラミングの際に気をつけなければいけないのでここにメモを残しておきます。

phoneMEで動かないもの

  1. JDBC関連 → こちらソースコードを使用して組み込む方法があるが試してはいない。
  2. XML関連(org.w3c.dom) → XMLParserを自作するしかないか
  3. 正規表現関連(java.util.regex) → Jakarta Regexpで代用
  4. JavaMailJakarta Commons NetのSMTPClientやPOPClientで代用
  5. java.lang.StringクラスのreplaceAll(String,String)メソッドがない → 使わないようにするしかない・・・
  6. java.lang.Stringクラスのsplit()メソッドがない*1Jakarta RegexpのREクラスのsplit()メソッドで代用(2008/12/08追加)

気づいたものがあれば追記していきます。

*1:Stringのsplit()メソッドをちょっと覗いてみると正規表現用Patternクラスのsplit()メソッドを使ってました・・・使えないの納得。