木曜日 12 26, 2013

Java ME Embedded 8を使ったM2Mアプリケーション開発 (3/3)

Java ME Embedded 8を使ったM2Mアプリケーション開発 (2/3) の続きです。今回はRaspberry PiとNetBeansを使って、リモートデバッグを行う方法をご紹介します。NetBeansでステップ実行しながら、Raspberry Pi上で動くJavaアプリの様子をみることが可能となります。以下の説明は(1/3) / (2/3)で行った開発環境がすべて整っていることを前提とします。

注1) 現時点(2013年12月)ではOracle Java ME Embedded 8の正式リリースは2014年3月を予定しているため、今回はEarly Access版を使います。正式リリース前なので動作が不安定な場合があること、将来的に仕様変更が生じる可能性があることをご了承ください。
注2) Oracle Java ME Embedded 8 Early Access版は、開発を目的としてご提供させていただいております。 従ってセキュリティが十分に確保されていない環境でのご使用は避けてください。詳細はこちらのセキュリティガイドラインを参照ください。

1. ホストPC側で、Java ME SDK 8のインストールディレクトリのemulator.exeを起動します。 

>emulator.exe -Xjam -Xdevice:EmbeddedExternalDevice1

注)ホストPC側のポート55123が利用可能となっていることをご確認ください。

2. Raspberry Piにログインして、Java ME Embedded 8のbinディレクトリ以下の、usertest.shを起動します。

>sudo ./usertest.sh

注1)bin/run.shで、runMidletコマンドのオプションに、+UseProxyが設定されている必要があります。

注2)bin/jwc_properties.iniのVM_AGENT_ADDRESSにホストPCのIPアドレス/ホスト名が設定されている必要があります。

3. NetBeansでリモートデバッグを行うための設定を行います。

1. その1で作成したサンプルアプリプロジェクトを右クリックし、Properties画面を開きます。

2. CategoryからPlatformを選択します。

3. Emulator PlatformOracle Java(TM) Platform Micro Edition SDK 8.0 EAとなっていることを確認します。

4. Deviceメニューから、EmbeddedExternalDevice1を選択し、OKを押します。

Description of Figure 2-1 follows

5. 任意の場所にブレークポイントを設定し、プロジェクトのデバッグを行います。デバッグ実行はCtrl + F5もしくは、Debug -> Debug Projectを選んで開始することができます。デバッグ実行を開始すると、Raspberry Piにアプリが自動的にインストールされ、通常のデスクトップでのデバッグと同じ感覚で開発を行うことが可能になります。

リモートでバッグについてさらに詳細が必要な方はこちらを参照ください。

また、1/3, 2/3, 3/3までの情報はこちらを元に作成しております。必要に応じてご参照ください。

Java ME Embedded 8を使ったM2Mアプリケーション開発 (2/3)

Java ME Embedded 8を使ったM2Mアプリケーション開発 (1/3)で作成したサンプルアプリを、Raspberry Pi上で動かす手順をご紹介したいと思います。

注1) 現時点(2013年12月)ではOracle Java ME Embedded 8の正式リリースは2014年3月を予定しているため、今回はEarly Access版を使います。正式リリース前なので動作が不安定な場合があること、将来的に仕様変更が生じる可能性があることをご了承ください。
注2) Oracle Java ME Embedded 8 Early Access版は、開発を目的としてご提供させていただいております。 従ってセキュリティが十分に確保されていない環境でのご使用は避けてください。詳細はこちらのセキュリティガイドラインを参照ください。

Raspberry Piのセットアップ

手順はこちらを参照 → Raspberry Pi で JavaFX - かんたん3ステップ

PuTTY(ターミナルエミュレータ)のダウンロード

PuTTYはコマンドラインを使ってアプリのインストール等(詳細は後述)をホストPCから行う場合に使います。またscpやsftpでRaspberry Piにファイルを転送する場合にも使うことが可能です。

ダウンロードはこちら → http://www.putty.org/

Java ME Embedded 8のダウンロード(注:Early Access版となります)

ダウンロードリンク http://www.oracle.com/technetwork/java/embedded/downloads/javame/java-embedded-java-me-8ea-download-2015091.htmlから、oracle-jmee-8-0-ea-raspberrypi-linux-bin.zipというファイルがダウンロードされますが、解凍すると以下のディレクトが含まれています。

  •  /appdb - Javaプラットフォームが内部で使用するためのディレクトリです。Raspberry Pi上で必要となります。
  •  /bin - Javaの実行ファイルや設定ファイル等が格納されています。Raspberry Pi上で必要となります。
  •  /legal - Legal関連の文書が格納されています。
  •  /lib - Windowsからリモートデバッグを行う際に使用します。

Raspberry PiへJava ME Embedded 8を転送

上記でダウンロードしたファイル(oracle-jmee-8-0-ea-raspberrypi-linux-bun.zip)をRaspberry Piに転送します。転送はsftpもしくはscpで行います。Windowsの場合PuTTYを使って送信することも可能です。ターミナルでRaspberry Piにログインし、転送したファイルをお好みの場所へ展開後、appdbとbinディレクトリのアクセス権を変更します。

>chmod -R 777 appdb bin

HTTP Proxyの設定

もしアプリがRaspberry PiからHTTP接続を行い、proxyサーバを必要とする場合、bin/jwc_properties.iniファイルにproxyサーバの情報を登録します。

com.sun.midp.io.http.proxy.host = proxy.mycompany.com
com.sun.midp.io.http.proxy.port = 80

Raspberry Piへサンプルアプリを転送

Java ME Embedded 8を使ったM2Mアプリケーション開発 - その1で開発したサンプルアプリ(NetworkDemoIMPNG.jar)をPuTTY等を使って、Raspberry Piへ転送します。NetworkDemoIMPNG.jarはNetBeansのプロジェクトフォルダ(NetworkDemoIMPNGフォルダ)の下のdistフォルダ以下に保存されています。ここでは、転送したJarファイルをJava ME Embedded 8のbinディレクトリの下に格納します。

アプリの起動 

アプリの起動方法は以下の2つがあります。

  1. ターミナルエミュレータから直接Raspberry Piにログインし、コマンドラインを使って起動
  2. ホストPCからリモートでの起動 (注:セキュアな通信ではないため、開発用途でのみご使用ください) 

1. コマンドラインを使った起動 

まず、最初に1のコマンドラインを使う場合についてですが、ターミナルエミュレータからRaspberry Piに入り、Java ME Embedded 8のbinディレクトリまで移動します。binディレクトリには下記のシェルが含まれています。コマンドのサンプルもその下に書いておきます。

注)bin/run.shの中で、runMidletコマンドに+UseProxyオプションが設定されている場合は外してください。


listMidlets.sh [SUITE_ID or NAME]     --- インストール済みのアプリとステータス等を表示します。
installMidlet.sh <URL> [<URL label>] --- アプリをインストールします。JARファイルを引数に指定します。
removeMidlet.sh <SUITE_ID>             --- インストール済みのアプリをアンインストールします。
sudo runSuite.sh <SUITE_ID or NAME> [IMLET_ID or classname] --- 指定されたアプリを起動します。アプリの起動後は標準出力へLogが出力されます。


インストール

pi@raspberrypi ~/pi/bin $ ./installMidlet.sh NetworkDemoIMPNG.jar

インストールが成功すると、IDが自動的に割り当てられます。IDはコンソールに表示される以下のメッセージにて確認することが出来ます。

The suite was successfully installed, ID: 2

またインストールでエラーとなった場合、AMSインストーラのエラー番号を参照してください。

起動

pi@raspberrypi ~/pi/bin $ sudo ./runSuite.sh 2

引数には、アプリの名称もしくは、インストール時に割り当てられたIDを指定します。また起動後のアプリのログ等は標準出力へ表示されます。アプリを終了する場合はCtrl + Cで行ってください。

アンインストール

pi@raspberrypi ~/pi/bin $ ./removeMidlet.sh 2

引数には、インストール時に割り当てられたIDを指定します。 

インストール済みアプリの確認

pi@raspberrypi ~/pi/bin $ ./listMidlets.sh

2. ホストPCからリモートでの起動 

次に、ホストPCからアプリの起動を行いますが、Tooling Proxyというツールを使います。Tooling Proxyは事前の準備でダウンロードした、oracle-jmee-8-0-ea-raspberrypi-linux-bin.zipの中に入っています。以下はTooling Proxyを使うための準備です。

Raspberry Pi側の準備

1. Raspberry Piのbin/jwc_properties.iniの中の、VM_AGENT_ADDRESSにホストPCのIPアドレスもしくはホスト名を設定します。

2. 同じく、binの下のrun.shファイルで、runMidletのオプションに+UseProxyを下記のように付加してください。
   ./runMidlet runMidlet +UseProxy =VMAgentBufferSize4000 $*

3. 最後に、bin/usertest.shを起動します。sudoをつけて、sudo ./usertest.shのように起動します。

ホストPC側の準備

1. oracle-jmee-8-0-ea-raspberrypi-linux-bin.zipをホストPCの任意の場所に解凍します。

2. appdbとbinディレクトリを削除します。

3. libディレクトリの下のproxy.jarを下記のように起動します。

C:\me8\Raspberrypi\lib>java -jar proxy.jar

Starting with default parameters: -vmport 2200 -jdbport 2801

Waiting for connection on port 55508

Waiting for VM connections on port 2200

4. PuTTYを起動します。Host Name (or IP address)にRaspberry Piの情報を設定し、Portに65002を指定し接続を開始します。

 接続できると下記のOracle Command Line Interfaceの画面が表示されます。

下記のAMSコマンドを使ってアプリの管理を行うことが可能です。


ams-list [INDEX or NAME|VENDOR] --- インストール済みのアプリとステータス等を表示します。
ams-install <URL> [username:password] --- 指定されたIMletをインストールします。JAR/JADファイルを指定します。ユーザ名/パスワードを指定することも可能です。
ams-update <INDEX or NAME|VENDOR> --- インストール済みのIMletを更新します。
ams-remove <INDEX or NAME|VENDOR> --- IMletをアンインストールします。
ams-run <INDEX or NAME|VENDOR> [IMLET_ID][-debug] --- 指定されたIMletを起動します。-debugをつけるとデバッグモードで動作します。
ams-stop <INDEX or NAME|VENDOR> [IMLET_ID] --- IMletを停止します。
ams-suspend <INDEX or NAME|VENDOR> [IMLET_ID] --- IMletをpause状態に移行させます。
ams-resume <INDEX or NAME|VENDOR> [IMLET_ID] --- Pause状態のIMletを再開させます。
ams-info <INDEX or NAME|VENDOR> --- インストール済みのIMletの情報を取得します。
help [command name] --- 利用可能なコマンドの詳細を表示します。
exit --- セッションを終了します。

 AMSコマンドのサンプルは以下となります。

1. ローカルファイルのhello.jarをインストールする場合

oracle>> ams-install file:///some/directory/hello.jar
<<ams-install,start install,file:///some/directory/hello.jar
<<ams-install,install status: stage 0, 5%
<<ams-install,install status: stage 3, 100%
<<ams-install,install status: stage 4, 100%
<<ams-install,OK,Install success

2. HTTPサーバに置かれたnetdemo.jarをインストールする場合

oracle>> ams-install http://www.example.com/netdemo.jar
<<ams-install,start install,http://www.example.com/netdemo.jar
<<ams-install,install status: stage 0, 5%
<<ams-install,install status: stage 3, 100%
<<ams-install,install status: stage 4, 100%
<<ams-install,OK,Install success

3. HTTPサーバ上のnotthere.jarをインストールしようとして、エラーとなった場合

oracle>> ams-install http://www.example.com/notthere.jar
<<ams-install,start install,http://www.example.com/notthere.jar
<<ams-install,FAIL,errorCode=103 (OTHER_ERROR)
エラー番号の内容は以下のリンクにて確認ください。
http://docs.oracle.com/javame/config/cldc/rel/8/rpi/html/getstart_rpi/errorcodes.htm#CHDHDFGG

4. インストールされたアプリの一覧を取得する場合。AMSがそれぞれのアプリに番号を割り当てます。

oracle>> ams-list
<<ams-list,0.hello|Oracle,STOPPED
<<ams-list,1.netdemo|Oracle,STOPPED
<<ams-list,2.rs232dem|Oracle,RUNNING
<<ams-list,OK,3 suites are installed

5. アプリをアンインストールする場合。AMSによって割り当てられた番号を指定します。

oracle>> ams-remove 0
<<ams-remove,OK,hello removed

6. アプリを起動します。AMSによって割り当てられた番号を指定します。

oracle>> ams-run 1
<<ams-run,OK,started


トラブルシューティングはこちらを参照ください:http://docs.oracle.com/javame/config/cldc/rel/8/rpi/html/getstart_rpi/troubleshooting.htm#T4444444444


Java ME Embedded 8を使ったM2Mアプリケーション開発 (1/3)

Java ME Embedded 8を使ったM2Mアプリケーションの開発手順をご紹介したいと思います。今回は、NetBeansを使い、エミュレータ上で簡単なサンプルアプリを動作するところまで行いたいと思います。

また、Java ME Embedded 8は、センサーデバイスや通信モジュール等の小型デバイスをターゲットとしたJavaの実行環境で、従来のもの(Java ME Embedded 3.x)と比較すると以下の特徴を備えており、開発効率がさらに上がっています。

  • 言語仕様がJava SE Embedded 8と同期しており、APIもSE 8のサブセット版を実装していることから、SEとのソースコードの共有化が可能
  • New IO, コレクションフレームワーク等、SEで利用されている便利なAPIを追加
  • モバイル通信系のAPIの拡張。また従来通りGPIO, I2C等の低レベルH/WアクセスAPIも実装

注1) 現時点(2013年12月)ではOracle Java ME Embedded 8の正式リリースは2014年3月を予定しているため、今回はEarly Access版を使います。正式リリース前なので動作が不安定な場合があること、将来的に仕様変更が生じる可能性があることをご了承ください。
注2) Oracle Java ME Embedded 8 Early Access版は、開発を目的としてご提供させていただいております。 従ってセキュリティが十分に確保されていない環境でのご使用は避けてください。詳細はこちらのセキュリティガイドラインを参照ください。

開発用PCへのJava SE 7のインストール

開発用PCはWindows 7を想定しています。またJava SE 7はUpdate 25以上をインストールし、環境変数PATHを設定ください。以下は参考の設定例です。
    C:\>set JDK_DIR=C:\Program Files\Java\jdk1.7.0_25
    C:\>set PATH=%PATH%;%JDK_DIR%\bin

Java ME SDK 8のインストール(注:Early Access版となります)

下記のリンクからSDKをダウンロードします。ダウンロードした.exeファイルをダブルクリックし、インストールを行います。インストール先は任意の場所を選んでください。

http://www.oracle.com/technetwork/java/javame/javamobile/download/sdk/java-embedded-me-sdk-8ea-download-2015112.html

Java ME Embedded 8対応のNetBeansのインストール(注:Early Access版となります)

NetBeansのダウンロードリンクはこちらです。 ダウンロードした圧縮ファイルを解凍し任意の場所へコピーしてください。なおWindows 7 64bit環境のPCの場合、binフォルダの下の、netbeans64.exeをダブルクリックすると起動します。

http://deadlock.netbeans.org/job/javame8/lastSuccessfulBuild/artifact/nbbuild/NetBeans-dev-javame8-5-on-20130925-full.zip

Java ME SDK Plugin for NetBeansのインストール(注:Early Access版となります)

1. NetBeans向けのPluginを下記のリンクからダウンロードし、任意の場所で解凍します。

http://www.oracle.com/technetwork/java/javame/javamobile/download/sdk/java-embedded-me-sdk-8ea-download-2015112.html

2. NetBeansを起動し、Tools -> Pluginsメニューを開きます。

3. 古いバージョンのPluginがインストールされている場合はアンインストールを行います。以下はアンインストール手順となります。 

  • InstalledタブのShow detailsにチェックを入れ、インストール済みPluginの一覧を表示します。
  • Java ME SDK ToolsJava ME SDK Demosがあれば、チェックを入れ (下図)、Uninstallボタンをクリックします。Uninstall後はNetBeansを再起動してください。

Description of Figure 2-1 follows

4. NetBeans再起動後、Tools -> Pluginsメニューを開き、Downloadedタブを開きます。

Description of Figure 2-2 follows

5.  Add Plugingsボタンを選択し、1でダウンロードしたPluginを解凍したフォルダを参照します。.nbmファイルをすべて選択し(下図)、Openボタンを押します。

Description of Figure 2-3 follows

6. Downloadedタブを開き、ダウンロードしたPluginをすべて選択した後、Installボタンを押します。

Description of Figure 2-4 follows

7. Pluginのインストールが開始されます。License termsをAcceptし、インストールを完了させてください。インストール完了後は、NetBeansを再起動します。

8. 再びTools -> Pluginsメニューを開き、Installedタブを開きます。Java ME SDK ToolsJava ME SDK Demosがインストールされており、Activeとなっていることを確認したください。(下図)

Description of Figure 2-6 follows

 9. インストールが完了すれば、Java ME Embedded SDKがNetBeansから利用可能となります。

Java ME Embedded 8の開発用プラットフォームのインストール

1. NetBeansを起動し、File -> New Projectを選択します。

2. CategoriesからJava MEを選び、ProjectsからJava ME 8 Embedded Applicationを選択し、Nextボタンを押します。(下図)

Description of Figure 2-7 follows

3. New Embedded Application画面が開きますので、Install SDK/Platform/Emulator...ボタンを押してください。

Description of Figure 2-8 follows

4. Java Platform Managerが開きますので、Add Platformボタンから、開発用プラットフォームをインストールします。

Description of Figure 2-9 follows

 5. Java ME CLDC Platform Emulatorを選択し、Nextボタンを押します。

Description of Figure 2-10 follows

 6. Java ME SDK 8をインストールした場所へ行き、Java_ME_platform_SDK_8.0_EAフォルダを選択し、Openボタンを押します。

Description of Figure 2-11 follows

 7. 問題なくインストールできたら、Nextボタンを押して、次に進んでください。

Description of Figure 2-12 follows

8.  Oracle Java(TM) Platform Micro Edition SDK 8.0 EAが認識されていることを確認し、Finishボタンを押すと、インストールは完了です。

※ プラットフォームのインストールは、Tools -> Java Platformsから、後でインストールすることも可能です。

サンプルアプリのコンパイル

上記に引き続いて、 新規プロジェクトを作成しサンプルアプリを作ります。

1.  File -> New Projectを選ぶと、新規プロジェクトの作成ダイアログが表示されます。CategoriesからSample -> Java ME SDK 8.0を選択し、Network Demo (MEEP-8.0)を選んだ後、Nextボタンを押してください。

2. プロジェクト名とLocationはデフォルトのままで、Nextボタンを押してください。

3. 次の画面では各項目が以下のように設定されていることを確認し、Finishボタンを選択してください。

  • Emulator Platform    ->    Oracle Java(TM) Platform Micro Edition SDK 8.0 EA
  • Device    ->    EmbeddedDevice1
  • Device Configuration    ->    CLDC-1.8
  • Device Profile    ->    MEEP-8.0

4.  NetworkDemoIMPNG1というプロジェクトが新規に作成されるので、プロジェクトを選択し、右クリックメニューから、Clean & Buildを行った後、同じく右クリックメニューから、Runを実行してください。

5.  アプリが正常起動すると、エミュレータが自動起動し、アプリが起動できていることが確認できます。


6. NetBeansのOutput画面では、アプリが標準出力へ出力した以下のメッセージが表示されます。

Waiting for connection on port 5000

上記のように、Java ME Embeddedのアプリケーションはデバイスが無くても、エミュレータにより簡単に開発ができることがご理解いただけたかと思います。さらに詳しい情報はこちらをご参照下さい。


Java ME Embedded 3.4 for Qualcom IOE


9月末に行われたJavaOne 2013でJava ME 8 Early Access版が公開されました。
Java ME 8の正式版のリリースは来年初旬に予定されておりますが、我々は引き続きJava ME Embedded 3.xシリーズのアップデートも行います。

今回はJava ME Embeddedの最新バージョン、Java ME Embedded 3.4のご紹介です。

Java ME Embedded 3.4はバージョン3.3をベースにしておりますが、Qualcomm IOE("Internet Of Everything";) developer platformをサポートしております。

Qualcomm IOE developer platform:
・QSC6270T processor with 64 MB DDR RAM and 128 MB NAND Flash
・Tri-band UMTS/HSDPA + quad-band GSM, SIM slot
・2.4 GHz WiFi a/b/g/n
・GPS
・Supported I/O: SPI, I2C, GPIO, ADC, UART, SD card, on-board accelerometer, light + temp sensor

さらにQualcomm IOE platformとPCをUSBでつないで開発、デバッグできるようJava ME SDKのアップデートも行いました。


このリリースにより、Java ME EmbeddedはQualcommのエコシステムを支えることができるようになり、また組み込みJavaの未来へ大きく前進する機会となるでしょう。


Java ME Embedded 3.4とJava ME SDK 3.4は開発・評価用に無料でOTNからダウンロードすることができます。

About

日本オラクルのエンベデッドJavaチームから、最新情報をお送りしていきます。

Search

Archives
« 12月 2013
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
27
28
29
30
31
    
       
Today