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

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

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 に移行する事ができます。

広告

Entry filed under: GlassFish, Java. Tags: , .

GlassFish v4.0 正式リリース 祝 Java EE 7 ローンチの日本における反応

2件のコメント


Java Champion & Evangelist

ご注意

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

カレンダー

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

カテゴリー

Twitter

  • RT @mreinhold: New release model in action: JEP 309 will not make JDK 10, so now proposed to target JDK 11: j.mp/2j93lME #jdk1015 hours ago
  • BSフジで、今TOSHIが昔のXのナンバーをXじゃない若い世代のバンドメンバーの演奏と共に歌っている。まじで懐かしい曲ばかり 2 days ago
  • 今日は所用がございまして、お先に失礼失礼大変申し訳ございませんでした。また、仙台に伺いますので、ぜひ今後ともどうぞよろしくお願いします。 twitter.com/ghustik/status… 4 days ago
  • RT @tokuhirom: Microsoft and GitHub team up to take Git virtual file system to macOS, Linux | Ars Technica #SmartNews https://t.co/D0PuHeE… 4 days ago
  • @nagise 誠に申し訳ございません!!2/3 (土)は、既に予定が入っておりました!!(T_T) 4 days ago

clustermap

ブログ統計情報

  • 1,014,554 hits

Feeds


%d人のブロガーが「いいね」をつけました。