Java ME8とモノのインターネット

組み込みシステムは、完全なデバイスに組み込まれたコンピュータシステムであり、その専用機能は、より大きな機械的または電気的システム内にあります。通常、産業用アプリケーションと民生用アプリケーションの両方で使用される組み込みシステムは、モノのインターネット(IoT)で脚光を浴びています。IoTを使い始めたばかりの開発者向けに、この記事は、OracleのIoTプラットフォームを構成するテクノロジー(Java ME 8、Java ME Embedded、Java SE Embedded、およびJava Embedded Suite)について詳しく学ぶためのガイドです。

1991年、当時ゼロックスのパロアルトリサーチセンター(PARC)の責任者だったマークワイザーは、ユビキタスコンピューティングの次の時代を捉えようとしました。「最も深遠な技術は消滅する技術である」と述べ、ワイザー氏は、コンピューターを組み込みシステムとして考える新しい方法を模索しているときに、PARCの同僚が行ったさまざまな思考と技術実験について説明しました。1991年にホバークラフトのように素晴らしく見えたかもしれない彼らのビジョンは、今日急速に一般的になりつつあります。

サルは目覚めます:彼女はコーヒーのにおいがします。数分前、目覚める前に落ち着きのない回転で警告された彼女の目覚まし時計は、静かに「コーヒー?」と尋ね、彼女は「はい」とつぶやいた。「はい」と「いいえ」だけが知っている言葉です[...]

朝食時にサルはニュースを読みます。ほとんどの人がそうであるように、彼女はまだ紙の形を好みます。彼女はビジネスセクションのコラムニストからの興味深い引用を見つけました。彼女は新聞の名前、日付、セクション、ページ番号をペンで拭いてから、引用符を丸で囲みます。ペンは紙にメッセージを送信し、紙は見積もりを彼女のオフィスに送信します[...]

サルが職場に到着すると、(車内の)フォアビューは、彼女が駐車場をすばやく見つけるのに役立ちます。彼女が建物に入ると、オフィスのマシンがログインの準備をします...

ワイザーの平日の朝のシナリオに組み込まれたデバイスは、センサーを使用して人間のユーザーの操作を追跡し、ワイヤレス接続を使用して応答を調整します。サルのベッド、目覚まし時計、コーヒーメーカーはすべて接続されており、ロールする前に最初のコーヒーが飲まれていることを確認します。ベッドから。ワイザーと彼の同僚にとって、これは穏やかなコンピューティングでした。今日、私たちはそれをモノのインターネット(IoT)と呼ぶかもしれません。

PARCでのWeiserの仕事とユビキタスコンピューティングの彼の理論についてもっと読む:「穏やかなコンピューティングの時代にWebサービスの品質を確保する」(FrankSommers、JavaWorld、2001年4月)。

IoTの概要

IoTの特徴を定義するものがあるとすれば、それは相互運用性、つまり複数のデバイスの調整です。上記のシナリオで観察されたように、IoTはセンサーを使用してデータ(この場合はSalの環境での相互作用に関する)とワイヤレス接続を使用して応答を調整します。 IoTは、新旧のハードウェアプラットフォーム、ビッグデータ、クラウドコンピューティング、マシンツーマシン(M2M)コンピューティングなどのテクノロジーの融合に基づいて構築されています。 APIは必要な接着剤であり、これらすべての可動部分をまとめます。

Java開発者にとって最も重要なことは、Javaはすでに多くの新しいIoTテクノロジーの鍵であり、オラクルはJavaをIoTの主要なプラットフォーム(プラットフォームではないにしても)にすることを約束しています。Java ME 8は、Javaのスモールデバイステクノロジーに新たな息吹を吹き込み、組み込みJavaプラットフォームの差別化されたラインでそれを拡張します。

次のセクションでは、オラクルのIoTプラットフォームを構成するテクノロジーを紹介します。リンクをたどって、Java ME、Java ME 8、および3つの組み込みフレームワーク(Java ME Embedded、Java SE Embedded、およびJava Embedded Suite)の詳細を確認してください。

Java ME

Java Micro Editionは元々、小型デバイス用のアプリケーションの構築に関連する制約に対処することを目的としていました。Java SEに基づいて、Java ME(または1999年に知っていたJ2ME)は、メモリ、ディスプレイ、および電力容量が制限された小型デバイスで実行されるJavaアプリケーションのプラットフォームでした。今日では、産業用制御装置から携帯電話(特にフィーチャーフォン)、セットトップボックス、ブルーレイプレーヤーに至るまで、組み込みシステムの開発に使用されています。

Java MEで作業する開発者は、複数の構成、プロファイル、およびオプションのパッケージから選択できます。

  • コンフィギュレーションは、デバイスの幅広いライブラリと仮想マシンの能力の最も基本的なセットを提供します。
  • プロファイルは、デバイスのより狭い範囲をサポートするAPIのセットです。
  • オプションパッケージは、技術固有のAPIのセットです。ワイヤレスメッセージングAPIはその一例です。オプションパッケージの詳細については、オラクルのオプションパッケージ入門書をご覧ください。

構成とプロファイル

やがて2つの構成が登場しました。ConnectedLimitedDeviceConfiguration(CLDC)は小型デバイス用の構成であり、Connected Device Configuration(CDC)はスマートフォンやセットトップボックスなどのより高性能なモバイルデバイス用の構成です。

Java MEプロファイルは構成の上にあり、特定のアプリケーションで使用する高レベルのAPIを定義します。たとえば、モバイル情報デバイスプロファイル(MIDP)は、CLDCの上に配置され、ユーザーインターフェイス、ネットワーク、および永続ストレージAPIを提供します。CLDC / MIDP環境で実行されるアプリケーション(ゲームなど)は、MIDletと呼ばれます。

CLDC / MIDPを使用したデバイスプログラミング

「MIDPを使用したデバイスプログラミング」(Michael Cymerman)には、CLDC / MIDPを初めて使用する開発者向けの実践的なデモンストレーションが含まれています。「MIDletの構築」(JonathanKnudsenとSingLi)および「小型デバイス向けの大きなデザイン」(BenHui)も参照してください。

CDCの場合、Foundation、Personal Basis、Personalの3つのプロファイルがあります。

  • Foundation Profileは、リソースが限られており、グラフィカルユーザーインターフェイス(GUI)を必要としない低フットプリントデバイス用に調整されたJavaAPIのセットです。
  • Personal Basis Profileは、Foundation Profile APIのスーパーセットであり、軽量のGUI要件を持つデバイスをサポートします。このプロファイルには、軽量GUIコンポーネントを構築するためのフレームワークが付属しており、いくつかのAbstract Window Toolkit(AWT)クラスをサポートしています。
  • パーソナルプロファイルは、AWTに基づくGUIツールキットを使用してパーソナルベーシスプロファイルを拡張します。これは、完全なAWTサポートを備えた完全なJava MEアプリケーション環境を提供し、PDA、セットトップボックス、ゲームコンソールなどのハイエンドデバイスを対象としています。

CDC / Foundation / Personal Basis / Personal環境(Blu-rayムービーメニューなど)で実行されるアプリケーションは、Xletsと呼ばれます

軽量ユーザーインターフェースツールキット

JavaのAWT(Abstract Window Toolkit)を使用して、幅広いユーザーにアピールするクロスプラットフォームのモバイルアプリケーションを作成することは困難です。フォント、レイアウト、およびその他の違いにより、同じアプリケーションの外観と動作がデバイスごとに大きく異なります。さらに、アニメーションやエフェクトなどの高度なユーザーインターフェイス機能はありません。これらの欠陥を認識して、Sun MicrosystemsはLightweightUser Interface Toolkit(LWUIT)[PDF]を開発しました。これは、MIDP2.0を備えたCLDC1.1およびPersonalBasisProfileを備えたCDCをサポートするJavaME用のSwingに着想を得たUIツールキットです。Codename Oneは、元のLWUITの人気のあるオープンソース実装です。

Java ME 8

2012年後半、オラクルはJavaMEプラットフォーム標準のメジャーアップデートを提供するという野心的なプロジェクトに着手しました。2つのJavaSpecification Request(JSR)は、組み込みデバイスの現在の市場要件を満たし、将来のJavaプラットフォーム仕様に備えてJavaMEを準備するように設計されました。CLDC1.1.1の進化的アップデートであるJSR360(CLDC 8)は、仮想マシンJavaをもたらします。言語、およびJava SE8で最新のライブラリ。JSR361(Java ME Embedded Profile / MEEP 8)は、Information Module Profile-Next Generation(IMP-NG)を更新します。

CLDC8およびMEEP8

CLDC8はJSR139(CLDC 1.1)に基づいており、コアJava ME仮想マシン、言語サポート、ライブラリ、およびその他の機能をJava SE8と連携させます。

  • 仮想マシンは、JVM仕様のバージョン2に準拠するように更新されました。
  • ジェネリック、アサーション、アノテーション、try-with-resourcesなどの新しいJavaSE言語機能がサポートされるようになりました。
  • コレクション、NIOサブセット、ロギングAPIサブセットなどの新しいライブラリがサポートされるようになりました。
  • マルチプロトコルI / O用の統合および拡張された汎用接続フレームワークがサポートされています。

MEEP 8は、元のIMP-NG仕様を更新して、小規模な組み込みJavaプラットフォームに強力で柔軟なアプリケーション環境を提供します。この仕様は、CLDC8に基づいて次の機能を備えています。

  • 新しい軽量のコンポーネントとサービスモデル
  • 共有ライブラリ
  • マルチアプリケーションの同時実行性、アプリケーション間の通信、およびイベントシステム
  • アプリケーション管理
  • フットプリントの少ないユースケースに対応するためのAPIオプション

MEEP 8は、組み込みアプリケーション開発者に、幅広いユースケースとデバイス向けに最適化されたモジュール式の堅牢で洗練されたソリューションである組み込みソリューションの開発と展開を容易にする最新のアプリケーション環境を提供します。

Java ME8の詳細

TerrenceBarrがJavaME 8のトップ10機能を紹介したことで、2014年4月のリリースに含まれるコンポーネントが特定されました。詳細なドキュメントについては、Java ME SDK8のダウンロードページも参照してください。

Java Embedded

Java Embeddedは、JavaMEとJavaSEの派生物であり、組み込みデバイスを特に対象とする3つのプラットフォームのスイートです。これらの各製品は、非常に特殊で最適化されたJava仮想マシンを提供し、インストールされたソフトウェアとサービスを更新する手段を提供します(たとえば、OSGiを使用して)。以下では、Java ME Embedded、Java SE Embedded、およびJava EmbeddedSuiteについて説明します。

組み込みシステム用のJava?

この記事では取り上げていませんが、特定の課題と手法は組み込みプログラミングに関連しています。すべての開発者が、Javaがそれらを解決するのに最適であることに同意しているわけではありません。

Java ME Embedded

Java ME Embeddedは、実際にはJava MEEmbeddedとJavaME EmbeddedClientの2つのバージョンで構成されています。

Java ME Embeddedは、Java ME CLDC実装であり、常時接続、ヘッドレス(グラフィックス/ユーザーインターフェイスがないことを意味します)、および接続されたデバイス専用の組み込み機能を備えた堅牢で柔軟なアプリケーションプラットフォームを提供します。システム設計者と開発者は、Java ME Embeddedを使用して、Java言語、ランタイム、およびエコシステムの利点を活用しながら、厳しいシステムリソース目標を達成する、洗練された小さな組み込みソリューションを作成できます。 Oracle Java ME Embeddedは、メモリが1メガバイト未満のデバイスで使用できます。

Java ME Embedded Clientは、リソースに制約のあるデバイスの制限に合わせて縮小され、低から中規模の組み込みシステム向けに最適化されたJava MECDC実装です。この製品はフットプリントが小さいですが、Java開発者が知っていてJavaSEに慣れているJava言語とランタイム機能のほとんどを提供します。Java ME Embedded Clientは、メモリが10メガバイト未満でグラフィックがないデバイスで使用できます。

Java ME 8Embeddedを入手する

さまざまなARMデバイス用のJavaME Embedded 8、またはARM、MIPS、およびx86環境用のJava ME Embedded Client1.1.1をダウンロードできます。このプラットフォームを実行するには、Java ME SDK8をインストールする必要があります。『OracleのJava ME CDC to Java SE Embedded 8 Migration Guide』も参照してください。

Java SE Embedded

Java SE Embeddedは、組み込みシステム用に最適化されたJavaSEプラットフォームのフル機能の実装です。このプラットフォームの現在の最新リリースであるバージョン8には、次の機能が含まれています。

  • 開発者の生産性を向上させる新しいJavaSE8言語機能
  • カスタマイズされた、スペースが最適化された仮想マシンを作成するためのコンパクトなプロファイルとツール
  • Java SE 8のおかげで、以前のバージョンよりも50%優れたパフォーマンス
  • GPUで高速化されたJavaFXを備えた見栄えの良いGUIアプリケーション
  • 詳細なランタイム監視と事後インシデント分析のためのツール

Java SE Embedded 8は、11メガバイト以上のストレージを備えたデバイスで使用できることに注意してください。ARM、Power Architecture、およびx86プラットフォーム用のJava SE Embedded8をダウンロードします。

Java PlatformIntegrator

オラクルは、Java ME Embedded、Java ME Embedded Client、Java SE EmbeddedなどのJavaEmbedded製品をカスタマイズして、さまざまなデバイスタイプや市場セグメントに到達する機能をパートナーに提供するJava PlatformIntegratorプログラムを導入しました。

Java Embedded Suite

Java Embedded Suiteは、JavaEmbeddedファミリーの最後の製品です。このツールスイートは、エンタープライズタイプの機能をJava SE Embeddedランタイムに追加し、アプリケーションが次のことを実行できるようにします。

  • JavaDBリレーショナルデータベースにデータを格納します。
  • たとえば、GlassFishサーブレットベースのWebアプリケーションをホストして、デバイスのデータと操作への安全なリモートアクセスを提供します。
  • OracleのJAX-RS仕様のJersey実装を使用して、RESTfulWebサービスをホストおよびアクセスします。

基本的に、Java Embedded Suiteは、Java SE Embedded 7(Javaアプリケーションのランタイムを提供)とJava DB(ローカルコンテンツを安全に保存するデータベースを提供)、GlassFish for Embedded Suite(Webページのアプリケーションサーバーを提供)、Jerseyを組み合わせたものです。 Webサービスフレームワーク(Webサービスをホストおよびアクセスするため)、およびJava Embeddedのイベント処理(リアルタイムのイベント処理を処理し、オプションのコンポーネントです)。

ARMまたはx86用のJavaEmbeddedSuiteをダウンロードします。

結論

オラクルは、IoTを最終目標として、組み込みデバイス向けの開発の課題に対応するためにJavaMEと関連テクノロジーを位置付けています。この記事では、Java MEの簡単な入門書を紹介した後、OracleのJava ME 8、Java ME Embedded、Java SE Embedded、およびJava EmbeddedSuite製品を紹介しました。

IoTの基礎を始めるのに役立つプログラミングチュートリアルとベストプラクティスについては、JavaWorldのJava ME、MIDP、およびEmbeddedJavaプログラミングページにアクセスしてください。オラクルのIoT戦略とこの戦略におけるJavaの位置付けについて詳しくは、オラクルのモノのインターネット情報ページにあるさまざまな記事、ビデオ、ホワイトペーパー、パンフレットをご覧ください。

このストーリー「JavaME8とモノのインターネット」は、もともとJavaWorldによって公開されました。