Archive for 6月, 2013

You are the “Make the future Java”


本日、GlassFish ユーザ・グループ・ジャパンによる Java EE 7 リリース記念のナイトセミナーが開催されました。本日ご登壇いただいた、上妻さん、久保田さん、槇さん、蓮沼さんには大変感謝すると共に、ご参加頂いた皆様にも大変感謝いたしております。(下記の写真の通り会場は満員で、ご登録者数は 140 名、実際にご参加頂いた方も 88 名でした。)
Java EE 7 そして GlassFish の最新情報をコミュニティ・ドリブンでお届け頂ける、このような機会はとても貴重だと感じております。GlassFish ユーザ・グループ・ジャパン副会長のの蓮沼さん、そして参加者の皆様ありがとうございます。

GlassFish は元々、日本では元 Sun の3人のメンバーが日本での啓蒙活動を開始しましたが、今や GlassFish はこの3人の手を離れ、Java EE の参照実装として、コミュニティ・ドリブンで情報提供がなされ、さらには多くのユーザが GlassFish の良さに気付きご賛同頂きはじめた事を、日本で活動を始めた3人の内の1人として大変嬉しく思っております。

Java EE 7 は、WebSocket, JOSN, jBatch, Concurrency Utilities for EE といった新機能が含まれ、特に WebSocket, JSON あたりの技術は特に開発者が注目する技術だと思います。また本日、上妻さんに発表して頂いた、jBatch に関しても非常に詳しい内容をご紹介頂いたため、今後多くの開発者にとってとても有用な情報だったのではないかと思います。

その一方でツイート上を除くと「Java EE 7 が流行ればいいな」といった、(言葉が若干悪いかもしれませんがお許しください)他人まかせなご意見も見受けられました。これに対して私が皆様にご期待する内容として、本ブログのタイトルにもございますように、「将来の Java を創っていくのは皆様です!!」

もし、Java EE 7 もしくは GlassFish に関して、ご興味を頂いた方、もしくは試して見ようと思われ方がいらっしゃったら、どんな些細な事でも結構です。実際に試して頂いた内容を、体裁問わず、ブログや Wiki、その他何でも結構です、試された内容を是非公に公開してください。それらの情報が他の開発者にとっても有用な情報になり、それが流行(トレンド)になっていく物と心より信じております。

例えば、今このエントリで Java EE 7 のどの技術にご興味があるかアンケートを実施しています。結果をみると、圧倒的に Java EE 7 のご興味のある技術は WebSocket になっていますが、全ての開発者が WebSocket に興味を持っているわけではなく、JAX-RS 2.0, JSF 2.2, JSON, Concurrency , CDI 等の技術にご興味を持って頂いている方も多く見受けられます。実際、jBatch に関しては現在7番目の人気となっておりますが、本日、上妻さんにご登壇頂いた内容は多くの開発者にとってとても有用だったと思います。

ここで申し上げたい事は、皆様、それぞれ異なる興味分野を持っていらっしゃると思います。1人が全てを一度に試す(把握する)事は困難ですが、自分の興味分野、試した内容を公開する事でかならず、他の Java 開発者の為にもなります。

もちろん、私も今後も継続して情報発信してまいりますが、1人でできる事はとても限られています。スケールも致しません。それを支えていただけるのは皆様です。仮に、試してダメだと思った所は、正直この機能のここがダメだとフィードバックをください。それが将来の Java を創っていく事だと思います。
「将来の Java を創っていくのは皆様」なのです。

是非、お試しいただいた内容を、どのような形でも結構です。是非情報をご共有頂ければ大変嬉しく思います。
最後にくどいようですが、繰り返します「将来の Java を創っていくのは皆様です!!」

2013年6月15日 at 2:14 AM

Java EE 7 トレーニング・コースについて


Oracle University では、現在 Java EE 7 のトレーニング・コース(Java EE 7: New Features Coming Soon (¥145,530) )を全世界への提供に向けて準備しています。

これは、Java EE 7 に含まれる新機能を2日間で紹介し、加えてラボで実際に手を動かしながら演習を行うこともできるトレーニング・コースになっています。これによりいち早く Java EE 7 の全体像とプログラミング方法を習得できます(このトレーニング・コースに関してはレビューの要望が私の元にも入ってきたため、一部私もレビューをし改善を加えた部分もあります)。

本トレーニング・コースでは Batch, JSON, WebSocket, JAX-RS, EL 3.0, JMS 2.0 , EJB, JPA, CDI, Bean Validation 等 Java EE 7 に含まれるの技術をとりあげ、既存のアプリケーションを Java EE 7 に対応させるために必要な情報も提供してくれます。

本トレーニング・コースについて日本の担当者と話をした所、本コースは世界で正式公開された後も、現時点では英語でのみ提供予定のようです。ただし、日本の Oracle University に対して、日本語での開催リクエストを行い、かつご希望者が多い場合、日本人講師による日本語でのサービス提供も可能との事でした。

Java EE 7 のトレーニング・コースを日本語で受講されたい方は、今から本トレーニング・コースに対する日本語開催リクエストを出されてみては如何でしょうか。

トレーニングの紹介ページにアクセスした後、「コース開催日のリクエスト」を押下するとリクエストを行う事ができます。途中の質問で「集合研修(Clasroom Training)」にチェックしてください。

どうぞ宜しくお願いします。

2013年6月14日 at 5:29 PM

Virtual Developer Day-Java 開催 (6/19 or 6/25)





Oracle Technology Network (通称:OTN) 主催で Virtual Developer Day : Java が開催されます。下記のスケジュールに詳細を記述していますが、Java SE/FX/Embedded/EE の各テクノロジーに関して、無償で、オンラインでご覧頂く事ができます。Java SE 8 に含まれる 52 の新機能、Lambda 式、JavaFX、Java EE 7、Raspberry Pi など各テクノロジーの最新情報をご確認いただけます。またライブ・チャットもご用意しておりますので、エキスパートに対して直接質問を投げかける事もできます。本イベントにご興味のある方はご登録の上受講してください。
(※ 日本の開発者の皆様は恐らく 6 月 25 日開催のヨーロッパ向けの方が受講しやすい時間帯かと思います。)

  • アメリカ    :6 月 19 日(日本時間夜中の1時〜5時)
  • ヨーロッパ:6 月 25 日(日本時間夕方5時〜9時)

詳しくは、コチラをご参照ください。

2013年6月14日 at 3:28 PM

祝 Java EE 7 ローンチの日本における反応


日本時間の深夜から午後に掛けて、世界に渡る Java EE 7 ローンチ・イベントがおかげさまで無事終了致しました。日本から深夜、もしくは午後にご参加頂いたエンジニアもいらっしゃいますが、本イベントにご参加頂いた皆様には、Java EE 7 の3つテーマ(HTML 5 対応、開発生産性の向上、エンタープライズ・ニーズへの対応)をご理解頂けたのではないかと思います。
また主要な統合開発環境(Eclipse, NetBeans, Intellij)も Java EE 7 へ対応する事で、今後日本におけるエンタープライズ開発の標準も Java EE 7 へ移行していく物と思われます。今回リリースされた Java EE 7 には様々なテクノロジーが含まれますが、Java EE 7 に含まれる各種機能を試された方は、是非その試された内容をブログや Wiki 等で記載して頂ければ嬉しく思います。

Java EE 7 は EE 6 に対して開発生産性を向上したバージョンであるため、本来であれば Java EE 7 を直接試していただきたいのですが、仮に Java EE にはじめて触れられる方で Java EE の全体像が理解できない方、もしくは英語が大の苦手な方は、既存の Java EE 6 の日本語書籍(Amazon : Beginning Java EE 6 GlassFish 3で始めるエンタープライズJava (Programmer’s SELECTION) [大型本]) をご参照頂き全体像をご理解頂いた上で、Java EE 6 と EE 7 の差分を抑えて頂く事も可能ですので、いずれかのやりやすい方法で Java EE 7 に触れていただければ幸いです。

最後に、Java EE 7 のローンチに関連して各種メディア、ブログ等に記載された内容を下記にご紹介します。今まで Java EE に実際に触れて来られた方も、この新しい Java EE 7 に期待している内容などが記載されていますので、是非下記の記事もご参照頂ければ幸いです。
(※ 私もブログ書いたよという方がいらっしゃいましたら是非ご連絡ください、下記に追加させて頂きます。)

オンラインメディア

個人ブログ

Java EE 7 対応関連書籍

2013年6月13日 at 6:42 PM

Java EE 7 ローンチ (US 時間: 06/12 午前9時)


US 時間で 2013 年 6 月 12 日 午前 9 時より Java EE 7 のローンチ・イベントが開始します (日本では 2 回目のローンチ・イベントで 6 月 13 日 午後 1 時から参加頂けます)。Java EE 7 は、 2009 年にリリースされた Java EE 6 をベースに、4 つの新機能 (WebSocket, JSON, Batch, Concurrency Utilities for EE) と、既存の機能に対する大幅な更新 (JSF 2.2, JAX-RS, EL 3.0, JMS 2.0)を加えた、最新のエンタープライズ向け Java 標準技術です。

Java EE 7 に含まれる各種技術に触れたい場合、Java EE 7 の参照実装である GlassFish v4 を入手した上で、Java EE 7 のチュートリアルをご参照いただきお試しください。また、GlassFish v4.0 をバンドルし、 Java EE 7 の開発に対応した NetBeans 7.3.1 を入手いただく事で余計な設定は不要でいち早く Java EE 7 の開発を体験していただく事ができます。

Java EE 7 の新機能

  • Web Socket API
  • JSON Processing
  • Batch
  • Concurrency Utilities for Java EE

今日は、Java EE 7 の正式リリースを記念して、私が今まで様々な所で紹介してきた Java EE 7 のプレゼン資料をまとめ、また過去に発表した内容の中で、正式リリース時点で変更してしまった部分等も改めて見直し、最新情報にアップデートした資料を下記に共有します。全部で P165 ありますので、必要に応じて SlideShare よりダウンロードしてご参照ください。




本ブログをご参照頂いた皆様へ:
もしよろしければ、下記のアンケートにご協力頂けないでしょうか。今後の情報提供の際に役立てたいと思います。(※ アンケートにお応え頂くと他の方の結果をご覧頂けます。)



下記に Java EE 7 の技術のうち新規追加された 4 つの機能について簡単にご紹介します。

* Java API for WebSocket 1.0 (JSR-356):


WebSocket は RFC 6455 で定義された HTTP をアップグレードした TCP ベースのプロトコルで、双方向・全二重の通信が可能なプロトコルです。最新バージョンのブラウザであれば IE 10 を含む、ほぼ全てのブラウザが WebSocket に対応しています。JSR-356 は Java EE に含まれる技術ですのでアプリケーション・サーバ上で動作する WebSocket を実装する事はもちろんできますが、Java SE の環境上でも WebSocket のプログラムを実装するための API を提供しています。サーバ、クライアント共にクラスに対してアノテーション(@ServerEndpoint, @ClientEndpoint) を付加、もしくは javax.websocket.Endpoint クラスを継承したクラスを定義し実装します。クラス内には WebSocket の各ライフサイクルで必要な実装をそれぞれ、OnOpen, OnClose, OnError, OnMessage 内で実装します。
WebSocket はクライアントとサーバ間の通信において、HTTP のように通信時に余分なデータ(HTTP ヘッダ)を互いに送り合う事はなく通信コストを大幅に削減し、リアルタイム通信が必要な環境などで大きな注目を浴びている技術です。今まで、Comet, Reverse Ajax 等の技術を使って実装していたリアルタイムの情報配信システムにとっては、大幅にパフォーマンス向上が可能なWebSocket が標準の Java EE に含まれる事で、エンタープライズ環境でも安心して使う事ができます。

参考資料:

● Java EE 7新機能の目玉「WebSocket対応」、「バッチ処理」をアルン・グプタが解説──Java Day Tokyo 2013レポート
● Java EE 7 チュートリアル : WebSocket API
● DZone : JSR 356, Java API for WebSocket
● java.net WebSocket Spec

* Java API for JSON Processing (JSR-342)


JSON-P は JSON の処理(パース、生成、クエリなど)を Java で実施するための API を提供します。実装は、ストリーミング API もしくは オブジェクト・モデル API の2種類の方法のいずれかを利用することができます。
ストリーミング API は、イベント・ベースのパーサを利用して、発生するイベントに応じて JSON の解析処理、生成処理などのプログラミングを行う事ができます。開発者はコールバックイベントではなく、次に発生するイベントの処理を実装していきます。ストリーミング API を利用するためには、javax.json.stream パッケージ内の JsonParser や JsonGenerator を利用します。

オブジェクト・モデル API はメモリ上に JSON のデータをオブジェクトのツリー構造として表現し、開発者はこのツリーに対して解析や修正を行います。この方法はとても簡単でさらに直感的に扱う事ができますが、その一方で Streaming モデルよりも若干遅く、またメモリもより消費します。オブジェクト・モデル API を利用するためには、javax.json パッケージ内の JsonReader, JSonWriter, ビルダー(JsonObjectBuilder, JsonArrayBuilder)等を利用します。

参考資料:

● Java EE 7 チュートリアル:JSON
● java.net : JSON
● Java EE エキスパートグループ・メンバー(Markus Eisele):Test driving Java API for Processing JSON with GlassFish 4.0
● InfoQ :
JSON用標準JavaAPI

* Batch Application for the Java Platform (JSR-352)


バッチは、ユーザとのインタラクティブな操作が不要な処理を実行します。jBatch ではバッチ・ジョブの定義、実装方法を提供します。ジョブ仕様言語を XML で定義し 、バッチ関連アノテーション、インタフェースから構成されるビジネスロジックを実装します。またバッチ・コンテナでバッチ・ジョブの実行を管理します。

バッチ・ジョブはチャンク形式とタスク(Batchlet)形式のステップを含んでいます。
チャンク形式のステップはデータ・ソースからデータを読み込み、各データに対してビジネスロジックを適用し結果を保存します。
チャンク形式は3つの要素(入力、操作、出力)から構成されます。まず、はじめにデータ入力の部分では、データ・ソースから一度に一つのデータを読み込みます。たとえばデータベースのエントリやファイル、ディレクトリ、ログファイルに含まれるエントリ等がこれに当てはまります。次にビジネス・ロジックの適用部分では、アプリケーションで定義されたビジネス・ロジックを使用して一度に一つのデータの操作を行います。例えばデータのフィルタリング処理、データのフォーマットなどがこれに当てはまります。最後の出力部分では処理が行われたデータの保存を行います。データの入力では、javax.batch.api.chunk.ItemReader インタフェースを実装したクラスを定義します。データの処理には、javax.batch.api.chunk.ItemProcessor インタフェースを実装したクラスを定義します。出力ではjavax.batch.api.chunk.ItemWriter インタフェースを実装したクラスを定義します。

タスク形式のステップは、データ・ソースからデータを取得して処理を行うのではなく、任意のタスクを実行します。例えば、ディレクトリの作成、削除、ファイルの変更、データベース・テーブルの作成・破棄、リソース設定等がこれに当てはまります。タスク・ステップはチャンク形式とは異なり通常短時間で終わる処理を実装します。タスク形式のステップでは、javax.batch.api.chunk.Batchlet インタフェースを実装したクラスを定義します。

参考資料:

● Java EE 7新機能の目玉「WebSocket対応」、「バッチ処理」をアルン・グプタが解説──Java Day Tokyo 2013レポート
● Introducing JSR-352 – Batch Applications for the Java Platform

* Concurrency Utilities for Java EE (JSR-236)


Concurrency Utilities for Java EE はエンタープライズ環境における並列処理タスクの実装方法を提供します。Java EE 6 まではWeb コンテナ(JSP/Servlet)、もしくは EJB コンテナ(EJB)上から新しいスレッドを生成する事は禁止されていました。これは、これらのコンテナ上からスレッドを生成した場合、生成されたスレッドがコンテナ外部で動作しコンテナから生成されたスレッドを管理する事ができなくなるためです。Concurrency Utilities for Java EE ではコンテナ上で安心して新しいスレッドを生成する方法を提供します。

最も簡単に並列タスクを EE 環境で利用するためには、javax.enterprise.concurrent.ManagedExecutorService を利用します。ManagedExecutorService は Java SE の Concurrency Utilities で提供されるjava.util.concurrent.ExecutorService インタフェースを継承していますが ManagedExecutorService は Java EE の実行環境(つまりアプリケーション・サーバ)で実装されています。サーバ側の ManagedExecutorService の実装への参照を、自身のプログラム上で JNDI ルックアップ、もしくは @Resource アノテーションを使用してインジェクトし利用できるようにします。リソースをインジェクトした後は、Runnable, Callable インタフェースを実装したタスクを execute(), submit(), invokeAll(), invokeAny() 等のメソッドを呼び出して実行します。

参考資料:

● JSR 236 スペックリード:Anthony Lai の説明資料 (PDF) : Concurrency Utilities for Java EE
● Concurrency Utilities for EE の説明(私のブログ)
● ZDNet builder : マルチコア時代のCPUリソースを有効活用–Java EE 7で進化した並列処理を理解する
● @IT : エンタープライズ環境におけるマルチスレッド/並列処理の過去・現在・未来
● DZone : Modern concurrency and Java EE



以上が Java EE 7 で提供される新機能です。Java EE 7 の参照実装である GlassFish v4 をダウンロードして頂き、Java EE 7 の新機能を是非お試しください。

※ 下記に JSF 2.2 と EL 3.0 に関して説明していますが、これらは Java EE 6 から更新された技術です。

JavaServer Faces 2.2(JSR-344)


JSF は Java EE 環境におけるデフォルトの Web 開発フレームワークで世界中で幅広く使用されています。Java EE 6 の正式リリース時には JSF 2.0 が標準で提供され、その後、JSF 2.1 がリリースされました。
JSF 2.1 では JSP ベースのページを .jspx ファイルとする事で、Facelets として扱う事ができるようなり、JSF 1.2 で実装されたコードをマイグレーションしやすいような方法を抵抗した他、プラグイン可能な Facelet のキャッシュ機能を実装しています。また ServletContainerInitializer が追加されデフォルトの設定で問題ない場合、web.xml での設定は不要となりました。
そして、Java EE 7 では JSF 2.2 としてさらに大きな変更が加わりました。

* HTML 5 への対応(Pass-througu の属性が追加)
* 画面遷移における新機能の追加
Faces Flow
* ステートレス・モードの追加
* リソース・ハンドリング機能の改善
(マルチ・テンプレート機能は次のバージョンへ持ち越されました)
/contracts, META-INF/contracts にテンプレートのリソースを配置
* その他

この中で、特筆すべき事は JSF にステートレス・モードが追加された事です。JSF は 1.x のリリース当初から JSF における View の全てのステート(状態の情報)を保持していました。これはメモリも大量に消費し、パフォーマンスも良くありませんでした。そこで JSF 2.0 からは、部分的に状態を保存する Partial State Saving の機能が追加され、JSF 1.x の頃に比べパフォーマンスを改善する事ができました。そして JSF 2.2 からはついに状態を持たないステートレス・モードが JSF 2.2 に追加されました。これは現在の流行にそう形ですが、パフォーマンスが大幅に改善しメモリの使用量も減ります。またクラスタ環境で任意のノードに対してリクエストを送信する事が可能になります。今まで JSF をパフォーマンスの観点から見送っていた方々も JSF 2.2 の stateless (<f:view transient=”true”>)モードをご使用ください。

* Expression Language 3.0 (JSR-341)


EL は Java Beans のプロパティやメソッドとのバインディングに使用する式言語で、通常、JSP, JSF のビューから CDI で実装されたバッキング・ビーンのプロパティやメソッド呼び出しなどを結びつけるために使用します。
EL 3.0 では新たな構文が追加されています。新たに Java のコレクションに対して LINQ式を記述できるようになった他、Lambda 式も EL 式内に記述できるようになりました。ただし、EL における LINQ 式はコレクションに対する操作のみが許可されているため、直接 DB を操作する事はできません。また、EL 内で記述する Lambda 式は Java SE 8 で提供される Lambda 式の文法と同一ですが、動作環境は Java SE の環境には依存しません。つまり Java SE 7 の環境上でも EL 式内においてのみ Lambda 式を記載できるようになっています。
また EL は今まで Java EE の環境でしか動作しませんでしたが、EL 3.0 では Java SE 環境上でも動作するようになりました。

最後に、本日正式リリースされた Java EE 7 は Java EE 6 をベースに、プラスαの要素をご理解いただく事で、簡単に Java EE 7 に移行する事ができます。

2013年6月12日 at 7:07 PM 2件のコメント

GlassFish v4.0 正式リリース


Java EE 7 のローンチ・イベントを直前 (日本時間:6/13 午後1時) に控え、オラクル(GlassFish コミュニティ)は本日 2013年6月10日(日本時間:6 月 11 日) Java EE 7 の参照実装で Java EE 7 の仕様に完全準拠した、アプリケーション・サーバ GlassFish v4.0 を、世界で最も早くリリースしました。

glassfish.java.net の Web サイト・デザインも一新され各種項目へのリンクがわかりやすくなっています。是非、glassfish.java.net をご覧いただき、最新の GlassFish を入手してください。

GlassFish v4.0 の管理ガイドはコチラ
GlassFish v4.0 アプリケーション開発ガイドはコチラ
The Java EE 7 Tutorial ドキュメント

1点、下記の点にご注意頂きたいのですが、今回リリースされた製品は開発者がいち早く Java EE 7 の新機能や更新された機能を試すために提供された物で、本番環境で動作させるために必要な下記の機能は、今回のリリース時では十分に動作しない可能性があります。機能としては含まれていますが、Java EE 7 で追加された新機能を利用した場合に正しく動作しない可能性がありますので、まずは、本バージョンをご利用頂き、開発環境で Java EE 7 の新機能を試してください。そして将来提供される本番環境用の製品リリースまで Java EE 7 & GlassFish の API や操作方法について慣れて準備してください。

  • クラスタ環境構築
  • 高可用性機能
  • アップグレード機能
  • 組み込みサーバ

追記:誤解が発生する可能性がございますので下記を追記しました。
本日、RIとしてリリースされたバージョンは Java EE 7 で提供される各 API (各 JSR)が正しく動作する事を主に提供されています。つまりクラスタリング・高可用性機能など本番環境で動作させる為に必要な管理機能に対する十分なテストがされていません。そこで本番環境でのご適用はお控え頂き、近い将来十分にテストされたバージョンがリリースされた後に本番環境にご適用ください。ここで申し上げた内容は OSS 版、製品版の違いはございません。OSS 版と製品版の違いは、製品に対するサポートの有無(パッチ提供等を含む)、製品版でのみ利用可能な追加機能の有無などになります。クラスタリング機能、インメモリによる高可用性機能などは OSS 版、製品版共に提供予定です。

リリースノートに記載されている注意事項の原文は下記

Note : The main thrust of the GlassFish Server Open Source Edition 4.0 release is to provide an application server for developers to explore and begin exploiting the new and update technologies in the Java EE 7 platform. Thus, the following features of GlassFish Server were not a focus on this release :

* Clusters and standalone instances
* High availability features
* Upgrade
* Embedded Server

These features are included in the release, but they may not function properly with some of the new features added in support of the Java EE 7 platform.

上記以外にもいくつか、既知の問題があります、詳細はリリース・ノートをご参照ください。

既知の問題の例:

  • ubuntu 環境でエラーを発生しインストールに失敗
  • 空白を含むパスを使用した場合に package-appclient スクリプトで失敗
  • OSGi のクラス・ローダの問題で JDK 8 を使用した場合、ロガー・リソースバンドルのルックアップに失敗
  •   

  • その他(詳しくはコチラ)

2013年6月11日 at 3:19 PM


Java Champion & Evangelist

ご注意

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

カレンダー

2013年6月
« 5月   9月 »
 12
3456789
10111213141516
17181920212223
24252627282930

カテゴリー

Twitter

clustermap

ブログ統計情報

  • 922,847 hits

Feeds