Archive for 10月, 2013

Java EE 7 HoL on JJUG CCC


2013 年 11 月 9 日に JJUG CCC 2013 Fallベルサール西新宿で開催されますが、13:15 – 15:05 まで「R5-1 Java EEハンズオン」を実施します。今日はそのハンズオンで実施する内容についてご紹介します。

2013年11月 11日追記:JJUG CCC で実施したハンズオンの資料を下記に公開しました。また、本プロジェクトの全ソースコードは下記より参照できます。
https://github.com/yoshioterada/JavaEE7-HoL/
HoL の資料は Step by Step で記載したためページ数が多いですが、実装コード量はとても少ないです。

本 HoL では Java EE 7 に含まれる技術だけを使ってリアルタイムの情報配信をするアプリケーションを作成します。WebSocket のサンプルというとチャットのようなアプリケーションは数多くありますが、WebSocket はアイディア次第でとてもおもしろい物を作れるだけでなく、実際にビジネスで即使えるような物も作れます。

ただ、WebSocket を本番環境で大規模に扱うためには負荷も考慮しなければなりません。基本的には Java EE 7 に準拠したアプリケーション・サーバ1台で WebSocket アプリケーションを動作させた場合、そのサーバに接続するクライアントにのみしか状況発信、共有などができないため、おのずと接続数に限界が生じます。実際には接続数ではなく、情報配信の部分がボトルネックとなり接続数を制限せざるおえない状況になるでしょう。

それでは、単純に台数を増やしてクラスタ構成を組めば良いと考えるかもしれませんがそんなに簡単にはいきません。なぜならば JSR-356 の WebSocket ではサーバ・エンドポイントに接続するクライアントの管理は自身でする事になっており、インスタンスをまたいで接続しているクライアントの情報を管理するのはとても大変だからです。
例えば、Collection に WebSocket のクライアント・エンドポイントの情報(全クライアント情報)を入れたとして、その情報をインスタンス間で交換するのはデータ量も多くナンセンスです。また、ある一つのインスタンスで受信したメッセージを他の全インスタンスに共有させるのも、インスタンスの増加の度にコードを修正しなければならなくなるので現実的ではありません。

そこでこうした WebSocket のクラスタリングを実現するために、外部のメッセージ・プロバイダ(MQ 関連製品)を使用します。メッセージ・プロバイダにメッセージをキューイングし、アプリケーション・サーバの各インスタンスがキューを監視していれば、キューにデータが入ってきた時点でそのメッセージを取り出し処理をする事ができます。

実際には、内部的には JMS の Publish-Subscriber を利用しています。Web アプリケーションで1人が JMS のトピックに対して配信したメッセージを、各インスタンス上で稼働する MDB が同一トピックをサブスクライブしており、メッセージが入ってきた事を検知した後、全 WebSocket クライアント・エンドポイントに対してメッセージを配信を行います。



また、Web アプリケーションと WebSocket 側の実装パッケージをを分ける事によって、上記の概念図に示すように、よりセキュアに情報発信側と受信側を分けて運用する事もできるようになります。だれでもが WebSocket サーバに接続する全クライアントに情報配信ができようなシステムは危険ですよね。

そこで、今回は上記のような概念図を念頭に、簡単なアプリケーションを構築し、GlassFish のクラスタリング構成を作成します。実際にクラスタ環境で WebSocket を動かしている動画を下記に示します。
※ 今回は Load Balancer や Firewall の部分は対象範囲外とします。

最後に、
今回のハンズオンは少し応用するだけで、スポーツ・ニュースの配信サイトで行われているようなリアルタイムの試合経過速報等をとても簡単にさらに効率良く提供する事ができるようになります。またそれ以外にもお客様にリアルタイムの情報をいち早くお届けしたいニーズがあればすぐにご利用いただけるでしょう。
今回このようなアプリケーションを作成する HoL を実施しますので楽しみにしておいてください。
また HoL を元に大規模 WebSocket リアルタイム情報配信を是非ご検討ください。

HoL で必要なのは事前準備としては JDK 7 u45 以降のインストールと NetBeans 7.4 (GlassFish バンドル版)以降のインストールをしていただくだけです。それ以外は一切必要ございません。
それぞれ、下記より御入手ください。
※ Java SE 8 の HoL も両方参加される方は JDK 7,8 共にインストールが必要ですが、本 HoL では JDK 7 を使用して行います。

● http://www.oracle.com/technetwork/java/javase/downloads/index.html
● https://netbeans.org/downloads/index.html 
 (Java EE : 203 MB版 もしくは、すべて : 220 MB 版)

※ さて、これから説明、配布用の資料を作成しよう。(^_^;)

2013年11月 11日追記:JJUG CCC で実施したハンズオンの資料を下記に公開しました。

2013年10月23日 at 3:53 PM 1件のコメント

JavaOne 2013 Report & Java EE 7 & Avatar & Java Puzzlers


2013年 10 月 15 日(火) にJava Festa in 札幌 2013 が開催されました。今日は、JavaFesta で発表した3つのセッションの資料を下記に公開します。


JavaOne 2013 のレポート


世界が注目する Java EE 7 の最新動向(Project Avatarの情報も含む)


Java Puzzlers with 櫻庭さん

PS.
JavaFesta は今年で10回目となるそうですが、今年を持って JavaFesta という名前のイベントは終了するとの事でした。元 Sun のメンバーとして、Sun の頃から非常に多くの先輩や同僚がこの札幌の地で発表されてきて、私もこの場に2度程立たせていただきましたが、それをとても光栄に思っております。Java という名前のつくイベントが一つ無くなってしまう事を少し寂しくも思いますが、事務局の皆様のご意向を伺いとても納得できるものでした。札幌 IT の今後のさらなる繁栄、そして札幌の地から日本全国、世界に対して情報発信をしていきたいという思いから Java だけではなくそれをとりまく IT 技術全般のノウハウが必要で、そうした取り組みをしていきたいという事、そして名前を変えて新たなステージに立ちたいという思想はとても素晴らしい事だと思います。
JavaFesta 事務局の皆様、最後の JavaFesta に朝から夕方まで Java のセッションをご用意して頂きまして誠にありがとうございました。

そして、10年間本当にお疲れ様でした。

2013年10月17日 at 3:44 PM 2件のコメント

はじめての Project Avatar



https://avatar.java.net/

JavaOne 2013 San Francisco で Project Avatar のオープン・ソース化が発表されました。そこで、本エントリでは Avatar にご興味を持って頂いた方が、どこから Avatar に触ればよいのかを分かりやすくするために、Avatar プログラムの実行方法、Avatar プログラムの作成方法をご紹介します。

※ 昨年、Project Avatar について、下記のプレゼンでアーキテクチャ等をご紹介していますが基本的なコンセプトは変わっていません。しかしこの1年で実装方法が大きく修正されています。昨年の時点では、View の実装部分で Avatar 専用のタグライブラリを使用しなければなりませんでしたが、今回 OSS 化された Avatar の実装を確認すると、標準の HTML 5 + JavaScript + EL 構文で実装できるようになっています。昨年の JavaOne 2012 の BoF で開発者から頂いたフィードバックを受けて、今回の実装方法に修正された事と想定します。

それでは、実際に OSS 化された Avatar の実行方法、プログラムの作成方法を下記にご紹介します。

1. まずはじめに、JDK 8 をダウンロードしてインストールしてください。
 (※Avatar の動作のためには、JDK 8 の build 103 以降が必要です。)
   Open JDK 8 Early Access のダウンロード

2. 次に Avatar の実行環境をバンドルした GlassFish v4 を入手してインストールしてください。
  入手はこちらから

3. 次に AVATAR_HOME (GlassFish のインストールした場所) の環境変数と GlassFish の bin へのパスを設定してください。

  csh 系の場合:
  setenv AVATAR_HOME /Applications/NetBeans/avatar-gf-1.0-ea
  set path=($path;/Applications/NetBeans/avatar-gf-1.0-ea/glassfish4/bin)

4. Avatar プロジェクトの作成
  3. でパスを通しておくと、avatar コマンドが実行できるようになってます。
  avatar コマンドで Avatar プロジェクトを作成してください。
  Avatar プロジェクトを作成するとデフォルトで下記のディレクトリが作成
  されます。
  # avatar new [project-name]
  # ls -F project-name/ 

  WEB-INF ディレクトリ配下には readme.txt が作成されています。
  view ディレクトリ配下に src ディレクトリが存在し、hello.html ファイルが
  作成されます。

hello.html ファイルの内容

<!DOCTYPE html>
<html>
    <head>
        <META http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Hello</title>
    </head>
    <body>
        Hello
    </body>
</html>

5. GlassFish v4 の起動
  GlassFish を起動します。
   # asadmin start-domain

6. Avatar プロジェクトのデプロイ
  GlassFish に Avatar プロジェクトをデプロイします。
   # asadmin deploy project-name

7. デプロイした Avatar プロジェクトの動作確認
  ブラウザで http://localhost:8080/project-name へアクセスしてください。
  Hello のみがブラウザ上に表示されます。

8. Avatar アプリケーションの作成の準備
  まず、Avatar の基本概念を簡単にご紹介すると、Avatar は View
  (クライアント側の実装) と Service(サーバ側の実装)をそれぞれ実装します。
  また、Avatar はクライアントとサーバの通信に、RESTful, Server-Sent
  Event, WebSocket を利用可能です。

  今回は、まず最も簡単なアプリケーションを作成するために、
  RESTful 対応のアプリケーションを作成します。
  4. で Avatar プロジェクトを下記のコマンドを実行し作成しましたが、
   # avatar new project-name

  上記コマンドを実行した際には、下記のように view のディレクトリしか
  作成されていません。
   # ls -F project-name/

  サーバ側の実装も行うためには、service ディレクトリとそのディレクトリ
  配下にsrc ディレクトリを作成する必要があります。下記のコマンドを
  実行して service ディレクトリを作成してください。

  # mkdir service
  # mkdir service/src
  # ls -F

  # ls -F service
   src/

  今回作成する RESTful 対応のサンプル・アプリケーションは、ブラウザ
  からボタンを押下すると GET リクエストを送信し、サーバ側の時間を
  取得してクライアントに表示させるアプリケーションを作成します。

9. Avatar RESTful 対応のサーバ側 (Service) の実装
  まず、サーバ側の実装を行うために、service ディレクトリの下の
  src ディレクトリに移動し、main.js ファイルを作成します。
  ここでは、下記のコードを実装してください。

  # cd service/src
  # vi main.js

var avatar = require("org/glassfish/avatar");

var getTime = function(){
    var current = new Date();
    return{
        h: current.getHours(),
        m: current.getMinutes(),
        s: current.getSeconds()
    };
};

avatar.registerRestService({ url:"data/message"},
    function(){
        this.$onGet = function(request, response){
            response.$send(getTime());
        };
    }    
);

  備考:
  Service 側の API は下記 URL に記載されておりますが、REST, Server-Sent
  Event(SSE), WebScoket それぞれの実装ができるようになっています。
  https://avatar.java.net/jsdoc/service/avatar.html

  例:
  RESTful : registerRestService(metadata, restService)
  SSE : registerPushService(metadata, pushService)
  WebSocket : registerSocketService(metadata, socketService)

10. Avatar RESTful 対応のクライアント側(View)の実装
  View は下記の内容を実装してください。

<!DOCTYPE html>
<html>
    <head>
        <META http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Hello</title>
    </head>
    <body>
        <script data-model="rest">
            var Message = function(){
                this.msg = this.h = this.m = this.s ='';
            };
        </script>
        <script data-type="Message" data-instance="message" data-url="data/message"></script>
        <output class="time">#{message.h}:#{message.m}:#{message.s}</output>
        

        <button onclick="#{message.$get()}">Update</button>
    </body>
</html>

  今回、REST のモデルを使用しますので、<script data-model=”rest”>を
  定義しています。
  REST モデルで利用可能な API は下記の通りです。
  https://avatar.java.net/jsdoc/view/module-RestModelBase.html

  今回はボタンを押下した際に GET リクエストでサーバにリクエストを
  送信し、サーバ側の時間を表示しますが、Avatar ではモデル・データの
  バインディングに Java EE に含まれる Expression Language(EL) 構文
  を使用します。
  具体的には、#{message.h} , #{message.m} , #{message.s} と記載している
  部分が EL 式になります。

11. Avatar プロジェクトのコンパイル
  View と Service をそれぞれ実装完了した後、プロジェクトをコンパイル
  してください。
  # avatar compile project-name

  コンパイル後、このアプリケーションを動作させるために必要なファイルが
  自動的に追加されます。

12. Avatar プロジェクトを GlassFish にデプロイ
  コンパイルが完了すると、アプリケーション・サーバにデプロイします。
  # asadmin deploy project-name

13. RESTful アプリケーションの動作確認
  ブラウザより http://localhost:8080/project-name にアクセスしてください。
  ボタンを押下するとサーバ側の時刻が表示され、ボタンを押す事に
  サーバの時刻が更新されるようになります。

14. RESTful アプリケーションから SSE アプリケーションへ移行
  RESTful の場合、ボタンを押下しなければサーバ側のデータが取得
  できません。
  そこで、RESTful から SSE にアプリケーションを変更し、サーバ側から
  自動的に時刻を通知するように変更します。
  それぞれ、View と Service の実装を下記のように修正してください。

  View 側の修正

<!DOCTYPE html>
<html>
    <head>
        <META http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Hello</title>
    </head>
    <body>
        <script data-model="push">
            var Time = function(){
                this.msg = this.h = this.m = this.s ='';
            };
        </script>
        <script data-type="Time" data-instance="time" data-url="data/time"></script>
        <output class="time">#{time.msg}#{time.h}:#{time.m}:#{time.s}</output>

</body>
</html>

  Service 側の修正

var avatar = require("org/glassfish/avatar");

var message = 'The Server Time is ';

var getTime = function(){
    var current = new Date();
    return{
        msg: message,
        h: current.getHours(),
        m: current.getMinutes(),
        s: current.getSeconds()
    };
};

avatar.registerPushService({ url:"data/time"},
    function(){
        this.$onOpen = this.$onTimeout = function(context){
            context.$setTimeout(1000);
            return context.$sendMessage(getTime());
        };
    }    
);

15. SSE アプリケーションのコンパイル
  ソースコードを修正したら、再度コンパイルします。
   # avatar compile project-name

16. SSE アプリケーションの動作確認
  ブラウザより、http://localhost:8080/project-name にアクセスしてください。
  ブラウザでアクセスすると自動的にサーバの時刻が表示されるように
  なります。

最後に
  今回は、Avatar で簡単な RESTful, SSE のアプリケーションを作成
  しましたが、WebSocket なども扱う事ができます。
  色々と試してみたい場合、バンドルされている、exapmples をご参考頂く
  ことがとても有用です。
  example をデプロイして色々なサンプルコードをご覧いただき試して
  頂ければ幸いです。また試していただいた後、Avatar プロジェクトでは
  フィードバックを求めています。是非、色々なフィードバックを頂ければ
  誠に幸いです。

Avatar サンプル・アプリケーションのデプロイ方法
  インストールした GlassFish v4 のインストール・ディレクトリ
  直下にサンプル・アプリケーションが用意されています。
  サンプル・アプリケーションをデプロイして確認してください。
  # asadmin deploy avatar-gf-1.0-ea/examples/examples.ear

サンプル・アプリケーションの動作確認
  ブラウザより http://localhost:8080/examples にアクセスしてください。
  豊富なサンプルが用意されていますので、こちらをご参照頂き
  Avatar でどのような事ができるかをご覧ください。

2013年10月10日 at 9:20 PM

JavaOne ストラテジー・キーノートのまとめ



まとめ:
今年の、JavaOne のテーマは昨年に引き続き、「MAKE THE FUTURE JAVA」でしたが、今年の JavaOne のもう一つのテーマは「Internet Of Things」ではないかと思います。昨今 Java というと、エンタープライズでの適用が多いかと想定しますが、Java はエンタープライズ用途だけではなく、幅広くインターネットに接続する全てのデバイスに Java を適用できる、そのような時代がやってくるのではないかと思わせるような基調講演でした。Java EE 7 は今年の 6 月に正式リリースし次の Java EE 8 のリリースに向けて準備をまさに始めた所です。そして、来年の春にリリース予定の Java SE 8 についても機能 FIX し、興味のある開発者はいますぐ、お試し版を利用できるようになっています。しかし、Java SE や Java EE のようなプラットフォームだけではなく、今組み込みデバイス用の Java にも大きな変化が生まれようとしています。今年の JavaOne では、Internet Of Things (組み込みのデバイス) に向けての Java の取り組みを大きく紹介した内容となっていました。今まで組み込みというと、同じ Java の開発者でも敷居が高そうと思われた方もいらっしゃるかと思いますが、来年登場する Java SE 8 以降は、Java SE 8 のノウハウを使い、Raspberry PI や Lego Mindstorm なども制御できるようになります。こうした取り組みは大学・研究機関で色々な研究用途で使用して頂きたいですし、さらに製造業などでも是非実用化を目指していただきたいと思っております。

今年で JavaOne は Sun の頃から数え通算 18 回目の開催となります。また、4年ぶりに JavaOne がモスコーン・センターに帰ってきました。今年の JavaOne は Oracle の Java プロダクト・マネージメントのバイス・プレジデントPeter Utzschneiderが取りまとめました。

Peter は冒頭で、今年は、昨年の JavaOne よりもイベント規模を大きくし、そして昨年よりも良いイベントにしたいと考えていると語りました。実際、今年の JavaOne には世界 92 カ国から参加頂いています。JavaOne は開発者による、開発者のためのイベントで 5 日間で 400 以上のテクニカルセッションが提供されます。このプログラムを決定するにあたって、コンテンツの選定委員は量や質を十分に検討し、選定は非常に難航した事もつげました。

また、今年は単にセッションを行うだけではなく、より多くのコミュニティの活動を行います。例えば、展示会場で開催される、Codegarten に参加してください、そこではご自身の Java のコードの改善方法についてエキスパートが教えてくれます。また、スケジュールを確認し都合が合えば Raspberry Pi チャレンジにも参加してみてくださいと語りました。

まず、Peter は昨年と同様、Java に関する進捗のアップデートを行いました。コミュニティにおいては、OpenJDK コミュニティの参加者が1年間で10%増加し、また、Java の開発者によって新しい Java ユーザグループも作成され Java のコミュニティが世界中で広がってきました。テクノロジーの分野では、今年 Java EE 7 を正式にリリースする事ができました。オラクルの運営(Stewardship)においては、Java のエバンジェリストチームや、OTN の活動によって各種イベントや参加メンバーが増えてきています。また、コミュニティ・メンバーの協力やチームの活躍によって Java Magazine の発行も継続して行っています。
これらを通じ、今年は Java にとって良い1年だったと言えます。

* 9 Million Java Developers Worldwide
* #1 Choice for Developers
* #1 Development Platform
* 3 Billion Mobile Phones Run Java
* 100 Percent of Blu-ray Disc Players Ship with Java
* 97 Percent of Enterprise Desktops Run Java
* 5 Billion Java Cards in Use
* 7 Billion Java Cards Sold
* 89% of desktops run java
* 125 million TV devices run java
* 5 of top 5 OEMs ship java

我々にとって重要な事は未だ、世界の中で Java は No.1 の開発プラットフォームである事です。Java は巨大なコミュニティを形成しており、Java をベースとして持つ開発者も多数います。そして、巨大なインフラストラクチャや、インターネット・デバイスもまた Java で稼働しています。

今日のキーノートで皆様に提供する内容は、将来を築きあげていくための信じられないほど多くの基礎知識を提供します。今年の JavaOne のテーマは昨年と同様、将来の Java を築き(Make The Future Java)上げる事ですが、それらの内容を今日ここでご覧頂くことができます。

我々は、Make The Future Java について今一度考えなければなりません。昨年を振り返ってみると、我々はやり残した作業があり、それらに対応していく必要があります。今、IT 業界は、非常に多くの技術革命や、非常に大きな変革を迎えています。そしてそれらは多くの課題が存在し、それらを解決する事が今後大きな機会を得る事になります。それを、皆様と一緒に解決していきたいと考えています。

我々自身は、Java をより良く、さらに強く、より堅牢に、そして今後 10 年間の使われ続けるプラットフォームとして適切に築きあげる事です。

インターネットにおいて、毎月、毎週、毎日、毎時間、1 分間でモバイルとソーシャルを組み合わせると、信じられないほど大量のデータが作成されています。人々はそれを共有したり作ったり、そのための新しいサービスや新しいアプリケーションを作成しています。これらを実現するためには大量のインフラが必要になりますが、多くが Java プラットフォーム上で稼働しています。そして、多くの人々は今これらのインフラを電気や水のような通常インフラと同様に扱っています。また、皆様は日々、信じられないほどのデータ取り扱っています。
過去データを扱うためには、リアルタイム性、フィルタリング、ファイルの大小などを検討し取り扱っていましたが、今全く新しいパラダイムが利用できるようになっています。例えば BigData や FastData なども利用できます。また、BI(Business Intelligence)や解析を通じて全てをバックアップできます。
また、データの配置場所、データ自身の寿命等も考えなければなりません。
データ自身が生命の源となり、開発者はそれらのデータを活用して革新的な新しいアプリケーションを構築できるようになります。

また、これらにモバイルやソーシャルを組み合わせて操作すると新たな事も発生します。
見積もりは色々とありますが、デバイスが今後数年間で、インターネットに接続するデバイス数は、100億〜500億と見積もられています。10 億としてもとても巨大な数です。そしてこれらのデバイスの多くは組み込み分野に存在し、ムーアの法則に従い、より安価になりますが、一方でパワフルになってきます、そして最も重要な事はインターネットに接続できる事です。これが IoT(Internet Of Things)なのです。
今まさに、業界全体が大きな変革が行われおり、Java の開発者にとって大きな変化がおき、大きなコミュニティが形成されようとしています。

我々が現在使用する全てのモバイルデバイスは、相互に接続する事ができリモートから制御もできます。ます。そして将来的には、我々が住む物理的な世界(家電製品や様々な物理的な物)をインターラクティブに制御できるようになるでしょう。

また、クラウドベースでの開発へ本格的にシフトし始めました。
数年前はどのクラウド環境で動作させるのかを議論していました。要求・要望に対する選択、インフラを気にせずに簡単にプロビジョニングできるか否か、アプリケーション開発に集中できるか否かを検討すると当然の事に思えます。また、クラウドベースへ移行する際に、セキュリティや、どのようにしてコンテナ・ベースから、サービス・ベースに移行できるか、それぞれ再度考えなければなりません。また、移植性も考えなければなりません。どのようにしてアプリケーションを物理的なサーバからクラウド環境へ移行するのか。また異なるクラウド環境への移植が可能かどうかも検討しなければなりません。

まとめると、今、IT 業界は信じられないほどの大きな変革が必要になってきます。2013 年の JavaOne では我々の業界を取り巻く変革についてご紹介します。
3年前のオラクルの Stewardship において、Java SE 7/EE 7 に関するメジャーなアップデートの発表を行いました。そして、Java を前進させる事(Moving Java Forward)を発表しました。この中で、IT 業界をとりまく世界では、dizzying(めまいがするような)変化がおきています。我々オラクルは Java の開発者が将来にわたって適用できる技術を身につけるために必要な事を提供しますと強調した。この作業に関して、どうぞご一緒に参加してください。

ここで、今年の JavaOne の最初のデモをご紹介します。皆様は恐らく気付いていないと思いますが、皆様ご自身がこのデモに参加しています。


ここに表示される図は、この会場にお集り頂いている皆様で、パートナー企業の一社である日立コンサルティング・ユーロテック(Hitachi Consulting and Eurotech)が作成したデモですが、モスコーンの会場入り口のドアにセンサーがつけてあり、通過する人を記録しています。そして参加者皆様の来場状況を示すデモです。このデモは、人間か犬かを判別し、入場か退場かも判別します。そして、これはゲートウェイ上で稼働する Java SE ベースのアプリケーションで作成されています。

計算が完了した後、そのデータはクラウド上でアップロードされ、分析と BI(Business Intelligence)アプリケーションを起動し、集計結果を Java ベースのアプリケーションで表示しています。このデモの重要なポイントはいくつかありますが、既存の Java の構成部品を利用し、洗練されたデモを作成する事ができ、また異なる技術を組み合わせ、全ての小型のデバイスからクラウドベースにオープンスタンダードの技術だけを利用してできるという事です。
このデモは、ほんの数週間で実装され、まさに Java の素晴らしさを証明するデモになりました。

ここで、Peter から Nandini Ramani, Vice President of Engineering, Java Client
and Embedded Platforms を壇上に迎え入れました。Nandini はまず、世界における Java 適用状況を歴史を振り返り紹介しました。Java は様々な範囲のデバイスで動作します。以前はそれぞれのデバイス用に特化し、カスタマイズした Java VM の実装を行ってきました。そして、Java はそれぞれの分野において成功してきました。しかし、それぞれの実装は分岐していき年を重ねる毎にどんどん独立して動作するようになっていきました。我々はプラットフォームの視点で考えると、統一されたプラットフォームがとても重要と考えています。

統一プラットフォームは、API と言語仕様の視点で考えなければなりません。Java SE 7 を見てみると3つの実装(CLDC, CDC, Java SE)が存在します。それらは、Java 構文の観点では共通事項がありますが、多くの部分で様々な違いが存在します。CDC、CLDC の存在はプラットフォームとしてはは正しいと考えています。また、言語の視点では、CLDC は今なお Java 1.3 の言語仕様で、CDC は Java 1.4.2 をベースにしています。つまり Java ME は Java SE がバージョン 5, 6, 7 で得てきたような進化や革命に追随できていませんでした。そこで、将来我々は、Java ME と Java SE の統一したプラットフォームを提供する予定で考えています。実際に統一プラットフォームを構築するためには、非常に多くの事を実施しなければなりません。そこで、まず我々は Java SE 8 で CDC の置き換えとなるコンパクト・プロファイルを提供します。

また、API の観点では、Java ME 8 で、NIO, 新しいコレクションのようなライブラリを利用できるようにします。言語の観点では Java ME 8 から、皆様になじみのある構文(アノテーション、ジェネリクス、string in switchのような構文)を使用できるようにします。
つまり、Java MEと Java SE を API と言語の視点で共通部分を増やしていき、複雑な実装の部分を抽象化し、簡単に開発ができる点にフォーカスします。これによって開発者は、ご自身のスキルセットをJava ME, Java SE といったプラットフォームによる区別をなくし、1人の Java 開発者が組み込みからデスクトップまで同じノウハウで共有できるようになります。

組み込み分野における上位レイヤについて紹介します。現在、ARM, freescale, QUALCOMM, Rasbery PI, gemalto, ST など、チップセット提供企業と共にに作業をしています。組み込み分野では、現在開発は断片的です。なぜなら非常に多くのベンダーが存在し、非常に多くのチップセットが存在し、またそれらは、それぞれ別の OS やデバイス・ドライバを使用しています。つまり全てのデバイスを同じように稼働させる事は困難である事を皆知っています。だからそれぞれに特化し開発が必要で断片的になります。一方で、それらのベンダーの多くは、Internet Of Thing を実現する為には、オープン・スタンダードな標準のプラットフォームが必要と考えています。そこで、市場に投入するために Java が合理的な選択肢になっているのです。ARM, freescale, QUALCOMM 等は今年の JavaOne でスポンサー企業として名を連ねていますが、freescale に関しては最終日のコミュニティ・キーノートの基調講演で発表してくれます。そこで何故 Java がそれらの IoT デバイスにとって意味があるのかが語られるでしょう。また、皆様は、デモ・展示会場に是非お越しください。そこで彼らが何をしているのかを是非尋ねてみてください。その時に何故、こうした事に意味があるのかが理解できるでしょう。今年の、Java ME 3.2.0 のリリース以降、ME プラットフォームのポーティングが行われています。Java SE Embedded 同様 Java ME も Rasbery PI のような大きなプラットフォームで利用できます。また、いくつかのパートナーで SDK をリリースして、とても簡単に入手、利用ができるようになっています。これには全ての Java Development Kit が含まれます。

ここで、Nandini は gemalto のワイヤレス・モジュールを観客に見せ、gemalto は Java ME を大々的にサポートしている事を紹介しました。我々は、様々なチップセット用、様々なプラットフォーム用に、積極的に Java ME のリリースを行っています。また、それを実現するために、今年の 8月に Oracle Java Platform Integrator Program を正式リリースしました。このプログラムでは基本的に2つの内容をパートナーに対して提供します。一つ目は、現在まだ、サポートをしていないプラットフォームに対して、簡単に Java SE Embedded をポーティングをできるようにする事です。2つ目は、ご自身のライブラリを使って、例えば、ヘルスケアや、製造、スマートフォン、ファクトリ・オートメーションなど市場のニーズに応えるために、プラットフォームを拡張できる機会を与える事です。
エコシステムを包容(Embrace)し、パートナーにとって必要な機能を、パートナー自身で実装できるような仕組みを提供します。これは大きな一歩です。

コミュニティからのフィードバックは如何ですか?我々は、Java エバンジェリスト・チームを通じてたくさんのコミュニティに対する支援活動を行っており、彼らを通じてたくさんの、積極的なフィードバックを得ています。

ここで、Nandini はサンディエゴで開催されたQualcomm Uplinq conference の Uplinq ハッカソンで最優秀賞を受賞した APX ラボの Andrew Sugaya 氏を壇上に招き入れました。通常、JavaOne の基調講演に招く方は何ヶ月もかけて調整をしますが、Andrew とは数日間をかけて登壇して頂く事を調整しました。それほど Andrew が実装した内容は素晴らしいものでした。

APX ラボではヘッドフォンやワイヤレス・デバイスを作成しています。Qualcomm の Uplinq conferenceでは朝 10:00に開場に集まって朝食をとりイベントを開始します。このハッカソンには4つのカテゴリが存在していて、私は、”Connected to Home experience” のカテゴリに参加しました。それは、まさに Internet of Things を表すカテゴリでした。最初に黒い箱を手に入れました。それは開発プラットフォームとして全ての機能が含まれるものでしたが、その黒い箱はとても強力で、その使い方について最初は理解ができませんでした。幸運にも、私は実装において Java ME を選択し約 7 時間で実装することができました。最初に、部屋の温度データを取得し、そのデータをクラウド上のサーバ側に送信します、サーバ側でデータの解析をし、家の電球の色を変更しるような物を作成しました。彼は言いました。今回は電球を使用しましたが、今や何でもできます、トースターでも、ビールのジョッキ、今座っている椅子でさえ将来的にはつながるのです。

彼は、それまで Java での開発を経験した事はありましたが、 Java ME を使用した経験はありませんでした。しかしJava ME を使うととても簡単に実装できることを理解し、Java ME を選択しました。

ご参考:
 http://www.apx-labs.com/company/press/andrew-wins-hackathon/

我々は、プラットフォームの統合、エコシステム、Andrew の経験などについて語ってきました。我々は重要な事を伝えなければなりません、来年の春には Java SE 8 がリリースされますが、Java SE 8 にはたくさんの機能が含まれています。重要な機能には、Lambda 式の対応やJavaScript エンジンの Nashornが重要です。Nashorn は、JSR 292: Supporting Dynamically Typed Languages on the JavaTM Platform を利用した物ですが、これらの詳細は、テクノロジー・キーノートでも紹介されるでしょう。そして、Java SE 8 の先の将来については、Java 9 で Project Jigsaw を導入し、モジュール化が可能なプラットフォームを提供する予定です。また、Java SE 9 以降になるかと思いますが、Java で GPU を制御する Project Sumatra 等も今 OpenJDK の元で開発をはじめています。これらにご興味がある場合、是非、OpenJDK にアクセスして、チェックアウトしてください。

最後にまとめますと、これからの Java は下記のようなロードマップで提供予定です。Java SE 8 のリリース時には Java ME 8 も同時にリリースをする予定です。テストプレビューがダウンロードできるようになっていますので、入手して試していただきフィードバックをください。

最後に、モスコーン・センターに帰ってきた事をとても喜んでいますと語って Nandini は壇上を去りました。

次に、Peter は Cameron Purdy, VP of Cloud Application for Oracle を壇上に招き入れました。Cameron にとって今年は、とてもお忙しい年だと思いますが、Java EE 7 の正式リリース大変おめでとうございます。2年前の JavaOne で私たちは Java EE 7 で何を含めるかを話しました。そして昨年は、Java EE 7 で含まれる機能について紹介しました。そして、今年ついに Java EE 7 をリリースできました。これも、パートナー、業界団体、コミュニティ、そして我々の開発チームの成果です、皆様に大変感謝しています。


ここで、Java EE 7 のメジャーなテーマについて今一度振り返って説明をしてください。最初に、私たちは Java EE 7 では Java の中でもエンタープライズの側面にフォーカスしています。今回、エンタープライズ・ニーズへの対応としてバッチ処理を含めています。また開発生産性の向上も実現しています。Java EE 7 ではとても開発がかんたんになる仕組みを取り入れています。例えば、CDI (Context Dependency Injection)ですが、Java EE 6 につづいて全ての Java EE のプラットフォームで利用できるように改善しています。これによって開発生産性の向上が多いに見込まれます。

また、Java EE 7 の中でもっとも重要なテーマとして HTML 5 のサポートがあげられます。実際とても素晴らしい技術が含まれています。WebSocket,RESTful のサポートなどがあげられます。これらは、通常の Web ベースのアプリケーション開発が可能です。

それでは、Java EE のアプリケーションが、現在のクラウド・ベースのアプリケーション開発への適用については如何でしょうか?
2年前の時点で Java EE 7 のメインテーマとしてクラウドを取り上げておりクラウド環境におけるアプリケーション開発に関する部分を盛り込む予定でした。タイミング的な問題から、Java EE 7 のテーマは HTML 5 対応に変更したわけですが、現在の Java EE 7 でも非常に多くの機能がクラウド環境で利用可能です。

まず、新しいセキュリティ・ロールがあげられますが、クラウドにおけるセキュリティを提供します。また DB などのデータソースの設定も簡単にできるようデフォルトのリソースが利用可能になっています。また標準で DB スキーマを生成する仕組みなども提供され、テーブル作成と同時に事前にデータを取り込む事もできます。

また、一つのアプリケーションから他のアプリケーションに対して RESTful Web サービスを通じて簡単に利用する事もできます。また、JSF では表面的なアプリケーションの開発が可能で、マルチテナントに対応したアプリケーションの開発も容易にできるようになっています。

既にあなた達は、将来的に含める機能について検討していると思いますが、その一部を共有していただけないでしょうか。

Java EE は Java EE 5 以降、Java EE 6, Java EE 7 とエンタープライズアプリケーションにおける簡単開発にフォーカスしてきました。そして、これらの技術間の関連性は今後も継続します。今実際に我々が検討している技術をいくつかあげるとするならば、JCache,JSON-Binding等があげられますが、EE 業界や、コミュニティ、パートナーから、素晴らしいサポートを頂いて、Java EE 業界が何をしているか関連性をたしかめながら検討していきます。

Java EE 7 のローンチの際は、非常に多くの方がイベントに参加し、動画を参照し、実際にダウンロードをしてくださいました。Java EE 7 のお披露目は成功をおさめることができました。

Java EE 7 の開発に並行して実施されていたと想定しますが、2年前の JavaOne で Cameron はもう一つのプロジェクトを紹介しましたが、その進捗について教えてください。2年前に Project Avatar というプロジェクトを発表しました。その時は、とても多くの情報が掲載されましたが、Avatar はいつ出てくるのか
質問をされる事もありました。Avatar の概要は次の通りです。

まず、単純な、HTML 5 対応の Java EE のアプリケーションを作成します。例えば Java EE 7 のWebSocketなどのプログラミングモデルです。次に、従来は、DB に対してリクエスト、レスポンス型の問い合わせを行っていました、もちろんそれも利用できますが、新たに、NoSQL データベースをサポートし、データベース側からライブ情報や変更通知等をアプリケーションに送るような実装もできるようになります。つまり、今までのリクエスト・レスポンス型のアプリケーションではなくイベントによる通知、検知などが行えるようになります。また、Avatar は Java SE 8 上で動作する JavaScript エンジンの Nashorn とも共同動作できるようになっています。Avatar 自身は Java EE コンテナ上で稼働し、既存のJava EE のアプリケーションに対して、Node.js の開発スタイル等を取り込んで、既存の Java EE アプリケーションを拡張できるようになっています。つまり Node.js のアプリケーションがアプリケーション・サーバ上で動作する事になるのです。

今年、ここでご紹介している内容は、プレ・アナウンスメントではなく、正式な公開情報です。本日、ただいまより、Project Avatar をオープン・ソース化し皆様に提供します。これは全く新しいオープンソースプロジェクトです。

Project Avatar のオープンソース化の発表後、Cameron は壇上を去りました。

Peter は最後に下記のようにまとめました。皆様は、いつも Java に関するテクノロジーの情報を探していらっしゃるかと思いますが、OTN の Java の Web サイトから情報を入手してください。また、それ以外にも Twitter, FaceBook などからも情報を入手できます。ぜひ、これらのサイトにアクセスして情報を得たり、またそれらに参加をしてください。

今日、Nandini や Cameron Purdy が話しをした内容をみた時、この業界に大きな変化がおこっている事がご理解いただけるでしょう。今日参加して頂いた事を心より感謝します。ファンタスタティックな週をお迎えください。

2013年10月3日 at 8:11 PM

JavaOne 2013 コミュニティー・キーノートのまとめ


今年の Java コミュニティ・キーノートは、エンタープライズ環境で利用が多い現在の Java において、Java エコシステムは、エンタープライズの利用にとどまらず、幅広い分野で Java が利用されている事、利用できる事を学ぶ機会を開発者に与えました。

冒頭で、Senior Director, Product Management, Java Platform Groupの Donald Smith から過去の振り返りを行いました。2 年前の JavaOne では Moving forward Javaがテーマでした。その後、Java SE 7 が正式リリースし、我々は Java のエコシステムを再構築してきました。2012 年のテーマはイノベーションで、Java をコアな場所で採用する、例えば、クラウドや、BigData, IoT に対応させていく事でした。そこで鍵となるのがオープン・コミュニティでした。

今年は、過去の2回とは趣向を変え、さらにテーマを拡大させていきます。Java は過去ご紹介してきたような ISV(独立系ソフトウェア企業)の要望だけでなく、エンドユーザやアプリケーション開発者のニーズをかなえていきます。Java エコシステムにおいて、現在、様々な方が色々な分野で Java を適用しています。今年はそれら世界中の開発者が Java で実施している内容についてご紹介します。これによって、現在の Java エコスシステムを理解できます。

その前に、若干今年の JavaOne を振り返ります。ここでSenior Java Developer Community Manager (Twitter ID : @java) のTori Weldtが壇上に招かれました。Tori はOTN (Oracle Technology Network)を取りまとめていますが、OTN としてJavaOne に参加した事を誇りに思い、世界中にいらっしゃる、Java の開発者コミュニティを支援することを誇りに思っていますと語りました。また、Tori は今年の JavaOne で、テクニカル・セッション以外に実施されたイベントについていくつか紹介しました。

Toriはまず、始めにRaspberry Pi チャレンジについて紹介しました。これはRaspberry PI のハッキングを行うイベントで、参加した開発者はテクニカル・セッションの受講を欠席してまで参加された方々でしたが、参加した開発者は皆、参加した事に大変満足していたと報告しました。参加者はRaspberry PI について深い知識を持たなくても参加でき、エキスパートと共に協力してプロジェクトを作成していきました。期間中には7個のプロジェクトが完了しましたが、中にはとてもすばらしい物がいくつか作成されました。例えば、Google Glass のアプリケーションとして作成したアプリケーションは、Raspberry PI と心拍計と連動し、心拍計をつけた人の心拍数をリアルタイムでモニタリングし、Google Glass 上に表示するといった内容でした。


[Heart of Glass の動画]

また、モンスター・トラックの車に Raspberry PI を搭載したプロジェクトも、基調講演のまさに直前に完成したとの事でした。Raspberry PI を搭載したトラックは、クラウド上に情報を持たせる物で、完成品を MTaaS (Monster Truck As a Service)と命名しました。これは、直接トラックを操作するのではなく、iPhone の加速時計を利用し操作し、データを Amazon クラウドのデータ・サービスに保持されるという物でした。

このRaspberry PIチャレンジには、日本人技術者 (Twitter ID : @tomo_taka01 さん)も参加され、その内容がこちらのブログで公開されています。

Raspberry PI チャレンジの内容をご紹介した後、Donald Smithから3つの新しい発表を行いました。

● Raspberry PI OEM 契約の締結
オラクルは、Raspberry PI の OEM 契約の同意書にサインしました。これにより、Java SE が含まれるRaspberry PIのイメージを http://raspberrypi.org から入手可能となりました。今回の契約締結は世界中の何百万もの Raspberry PI の開発者にとってとても有益で、簡単に Raspberry PI上で Java が扱えるようになっています。

● ブラウザ上の Java バージョンのモニタリング・サービスの提供開始
この jcountdown.com で提供されるサービスは、Javaチャンピオンと、JUG リーダ、Adopt OpenJDK プログラムのジョイントプロジェクトで、ブラウザ上で利用されている Java のバージョン情報をトラッキングし最新バージョンへのアップグレードを支援するサービスです。エンドユーザがいつも常に最新の Java と、Javaテクノロジーを利用できるようにするためのサービスです。上記サイトには Java SE 7 へアップグレードするための 64 個の理由を記載したプレゼンテーション・コンテンツのリンクも記載されています。

OpenJDK コミュニティにモバイル決済企業が新しく参加
サンフランシスコに本社を構えるモバイル決済企業の Square 社が OpenJDK コミュニティに参加する事を発表しました。Square 社は、コミュニティと共に、Java 言語、JavaVMやコアライブラリの拡張に貢献する事を発表しました。低電力はとても重要ですが、特にSquare 社のCTO Bob Lee は、低電力で利用可能な暗号化技術の分野で貢献すると報告しました。

その他、OTN ラウンジで実施した Codegartenオープンソース・プロジェクトの内容も発表しました。これは既存のJava API に対して、参加したエンジニアが集まりその場で改善を施す内容です。例えば、JSR 354 の JodaタイムやMoney に対する改善、GEB を Arquillian に統合、JSON-B ライブラリのリリースの準備等をおこないました。

また、JavaOne の開催前に、JavaコミュニティによるJava コミュニティのテーマを決めるコンテストを実施しましたが、その優勝者とその内容も発表されました。コンテストの趣旨としてマニアックで面白いJava のスローガンを募集した内容で、Daniel Ellmerer さんが優勝し、JavaOne のフリー・パスをゲットしました。このコンテストは、ブラジルの SouJava, ロンドン LJC、iJUG によるオーガナイズで実施されました。

2013 Javaコミュニティのトップ5テーマ

  • Java is the Community
  • One Java to Rule Them All
  • The World runs on Java Technology
  • Java Collecting New Garbage since 1995
  • Java: from the First Cup to the Last line of Code

これらの発表後、昔のJavaOne を彷彿させる Tシャツ投げのイベントがDonald より提案され、世界中の Java のキーマンや、Java Champion, James Gosling などが会場前方に集まりTシャツ投げを実施しました。そして何と私も急遽Tシャツ投げイベントに、投げる側の人間として加わらせて頂きました。(^_^;)

次に、Donald に代わってJava Platform グループ、Product management ,Vice President の Henrik Stahl が壇上に上がり、コミュニティ・キーノートを続けました。Henrik は壇上に上がるまではスーツでしたが、「Java はビジネスの場じゃないからスーツを脱がなければね!!」と観客に伝え、壇上でTシャツ姿となりキーノートを始めました。このHenrik の立ち振る舞いに、Java開発者は彼に大喝采を浴びせました。

Java エコシステムは、様々な分野で適用できますが、Henrikは大きく 5 つのセグメント領域(教育、安全、環境、宇宙、海洋)にわけ、Javaの利用事例紹介をはじめました。


まずJava の教育について、Henrik はBeJUG, Devoxx(4kids), Parleys, playpass.be の創設者でJava Champion でもある Stephan Janssen を壇上に招きました。ここで、Stephan Janssen は Devoxx における子供用の1日セミナーの開催をビデオを使って報告しました。セミナーを開催した理由は、彼の 11 歳の子供が、「父さん僕プログラミングをやりたいんだよ」と尋ねてきたのがきっかけでした。子供の願いをかなえようと自身の母国語で書かれたプログラミング言語の書籍を探しましたが見つからなかったため、無いのであれば、自分がイベントを開催し教える事が一番良いのではないかと考えました。この子供用のイベントは当初は参加者も少なかったようですが、現在では多くの子供達が参加しています。

「世界中に存在する JUG でこのような子供向けのイベントに興味がある方はどうか、私に連絡を取って欲しい、コンテンツも、教え方も、場合によってはハードウェアも提供したいと考えています。是非、ご自身の国でもこのような子供向けのイベントを開催してください。」と語り締めくくりました。

次に、Henrik はOracle Academy Vice President, Alison Derbrenwick Millerを壇上に招きました。オラクル・アカデミーは3つの軸を柱にコンピュータ・サイエンスの教育をグローバルに展開しています。

  • オラクル・ボランティア
  • オラクル・ギビング
  • オラクル・アカデミー


オラクルは、大学生など若い学生に接触するのはとても重要な事だと考えています。一方で、オラクル・アカデミーの部門にいる社員数は世界中の子供達の数に比べ圧倒的に少ないためDevoxx 4 KIDS のように世界中の JUG の協力が必要と考えています。Java だけではありませんが、オラクルはこのような支援をしてくれるコミュニティに対して年間2700 億円の支援を行っています。このような内容に興味を持っていただく場合、Twitter,FaceBookもしくはオフィシャル・サイトにアクセスしてメールをしてくださいと語りました。

● https://twitter.com/OracleAcademy
● https://www.facebook.com/oracleacademy
● http://academy.oracle.com

次に、Henrik はJavaOne開催至上、最年少の登壇者Aditya Guptaを壇上に招き入れました。彼は、まだほんのわずか10 歳の少年で、父は Java EE のエバンジェリストとして世界的にも有名な Arun Gupta でした。Henrik は今回彼を Minecraft のハッカーとして壇上に招き入れました。

「Henrik はどんな事をしているの?」と尋ねた所、彼は冒頭、「昨年の冬、僕のゲームが壊れたんだけど、どうやったら jar ファイルを直せるの?」と父に尋ねました、なぜなら、そのゲームはJavaで作られていて jar ファイルが壊れてしまったためでした。その直し方を父に教えてもらった後、プログラミングに興味を持ち、Minecraft のコードをデコンパイルしたり、ゲームのパラメータを修正したり、ゲームの振る舞いを変更(メソッドの記載内容を修正して)するような事をしています。基調講演では実際に、Eclipse を使い 400以上の自身が書いたコードの内、ゲーム振る舞いを変更するための内容を参加者に分かりやすく紹介しました。彼の素晴らしい発表にJavaOne の参加者はスタンディング・オベーションで拍手を送りました。

その他、基調講演では様々な分野で適用される Java エコシステムについて紹介しました。

安全

環境

  • 電気消費量の減少のため、家庭の電気消費量の監視・通知システム by Opower : Drew Hylbert,(Vice President, Technology and Infrastructure)ご参照(http://opower.com/)

適用範囲・宇宙

  • NASA MMS ミッション(地上からの衛生管理システム)by AI Solutions : Sean Philips (Sr. Software Engineer)
  • ゴールドマン・サックスにおける Java コミュニティへの貢献 by Goldman Sachs : Mike Marzo (Technology Fellow)

海洋

  • Liquid Robotics の海洋センサーの制御 by Liquid Robotics : James Gosling (Chief Software Architect)

最後に、今年のJava のコミュニティ・キーノートでは、世界中のエンジニアが親として子供に母国語でプログラミング言語を教えている内容や、ほんのわずか10歳の子供が Java プログラミングを実施しゲームを改造している内容など日本の一エンジニアとしてはとても刺激を受けました。こうした子供向け、学生向けの教育は非常に重要で日本でも業界の垣根を超えて実施すべきではないかと思います。

また、Java の適用範囲は単なるエンタープライズ分野にとどまらず、ゲーム、ロボット、電気消費量計測、自動車制御などあらゆる場面で利用ができる事が紹介されました。これらの発表を受けて Java エコシステム全体像を把握でき、Java はまだまだ楽しい事がいっぱいできると感じられる内容でした。組み込み分野に精通していない開発者も、Java さえ理解していれば、Raspberry PIや Lego Mindstorms 等、組み込み・ロボット制御等で利用できるようになる他、こういったデバイスがJavaと共にインターネットに接続される、IoT (Internet of Things) 時代が到来していると感じられる基調講演でした。

2013年10月1日 at 6:37 PM


Java Champion & Evangelist

ご注意

このエントリは個人の見解であり、所属する会社の公式見解ではありません

カレンダー

2013年10月
« 9月   11月 »
 123456
78910111213
14151617181920
21222324252627
28293031  

カテゴリー

Twitter

clustermap

ブログ統計情報

  • 935,481 hits

Feeds