狠狠撸

狠狠撸Share a Scribd company logo
JavaEE 再入門 
To Java EE 7 from J2EE 1.4 
November 2014 
@minazou67
JavaEE再入門 
はじめに 
本スライドは、J2EE 1.4 からJava EE 7 の新機能について広く浅く解説し、 短時間でJava EE に関する知識を網羅 的に学習することを目的としています。 
Java を学ぶきっかけになれば幸いです。 
2 
?本スライドでは、Java の基本的な事項(変数、演算子、制御構文、クラスなど) については取り扱いません。 
?本スライドで紹介している機能が、Java EE の新機能の全てではありません。 
?本スライドに掲載されている会社名、製品名、サービス名、ロゴは、各社?各団体の商標または登録商標です。
JavaEE再入門 
Target 
?Java の知識がJava EE 5 付近で止まっている人 
?Java 使ってるけど、実は よく知らないという人 
?Java EE 初心者な人 
3
JavaEE再入門 
Goal 
Java EEの各バージョンの更新内容 を再確認することにより、既存の知 識を整理すると共に、最新バージョ ンのJava EE について学び、より モダンなプログラミングスタイルを 身に付けましょう。 
4
JavaEE再入門 
Java に関する 
あれやこれや 
5
JavaEE再入門 
J2EE 1.4 
Java EE 5 
2003年11月 
JSR 151 
Java EE 6 
Java EE 7 
2006年5月 
JSR 244 
2009年12月 
JSR 316 
2013年5月 
JSR 342 
Java EE Release History 
2年6ヶ月 
3年6ヶ月 
3年5ヶ月 
6
JavaEE再入門 
JCP 
JSR 
Java 関連用語など 
JEP 
7 
「Java SE 再入門」に書いてます。 
JRE 
JDK 
JVM 
Java Byte Code 
JNI 
JNDI 
Reference Implementation 
Java Platform 
IDE
JavaEE再入門 
J2EE 1.4 
(JSR 151) 
8
JavaEE再入門 
?2003年11月24日にリリース 
?主なテーマは、Web サービス 
?20件のSpec 
?J2EE 1.3 と同様に、JCP のもとで仕様を考案 
?WS-I Basic Profile 1.0 に対応 
?Web サービス(SOAP) 機能を標準でサポート 
?EJB の機能拡張(Web サービス対応) 
?JavaServer Pages (JSP) のメジャーアップデート 
(Expression Language 式の導入など) 
J2EE 1.4 概要 
9
JavaEE再入門 
?WS-I (Web Services Interoperability Organization) は、 Web サービスの相互運用性を図ることを目的とし たオープンな団体 
?複数のプラットフォーム、開発言語、アプリケー ション上で、Web サービスの相互運用を容易にす るための利用法(プロファイル)を推進 
?Basic Profile は、SOAP, WSDL, UDDI の基本仕様 
?Attachments Profile は添付ファイルの仕様で、 Basic Profile 1.1 と組み合わせて利用 
?Basic Security Profileはセキュリティの仕様で、 Basic Profile の拡張プロファイル 
WS-I Basic Profile 
10
JavaEE再入門 
?JAX-RPC (Java API for XML-Based RPC) は、 XML ベースのRPC (Remote Procedure Call) の 標準仕様 
?分散型アプリケーションの構築が可能 
?JAX-RPC 1.1 は、WS-I Basic Profile 1.0 に準拠 し、SOAP 1.1 をサポート 
?SOAP 1.1 over HTTP プロトコルで通信 
?XML とJava オブジェクトとをバインディング 
?JAX-RPC 1.1 の実装として、Apache Axis が有名 
JAX-RPC 
11
JavaEE再入門 
?EJB (Enterprise JavaBeans) は、分散オブジェクト 指向に基づいたサーバコンポーネントモデル仕様 
?分散トランザクション管理やセキュリティ制限、 ネーミングサービスなど、ビジネスロジックの実装 に有用な機能をまとめて提供 
?Java に特化したCORBA のサブセットのようなもの 
?EJB コンテナの上で動作 
?EJB 2.0 から導入されたMDB (Message Driven Bean) は、非同期処理をサポート 
EJB 
12
JavaEE再入門 
EJB の利用イメージ 
13 
Java Platform, Enterprise Edition 
Client Container 
EJB Container 
Web Container 
Web Browser 
Application 
Client 
Enterprise 
Bean 
Enterprise 
Bean 
JSP 
Servlet 
JSF 
Enterprise 
Bean 
Database
JavaEE再入門 
?仕様が重厚長大で習得が困難 
?デプロイメント記述子(XML) の記述が冗長で複雑 
?インターフェースの実装が必要で密結合化 
?不要なコールバック?メソッドの実装が必要で面倒 
?データベースへのアクセスが面倒 
?開発生産性が低く、実行性能が悪い 
?環境構築やデプロイ、テストが面倒 
?若者のEJB 離れ 
EJB 2.1 の問題点 
14
JavaEE再入門 
?重量コンテナ(EJB) の代替として、軽量コンテナと ORM (Object Relational Mapper) が台頭 
?軽量コンテナは、DI (Dependency Injection) コンテ ナとも呼ばれる 
?POJO (Plain Old Java Object) ベースでの開発が可能 
?代表的な軽量コンテナとしては、Spring Framework やSeasar が有名 
?POJO とDI による疎結合化により、開発やテストが 容易に 
?JavaEEの次期バージョンへ多大な影響を与えた 
軽量コンテナとORM 
15
JavaEE再入門 
Java EE 5 
(JSR 244) 
16
JavaEE再入門 
?2006年5月11日にリリース 
?主なテーマは、Ease of Development (EOD) 
?23件のSpec 
?名称がJ2SE からJava EE に変更され、バージョ ン番号から小数点以下が削除された 
?アノテーションを使用したPOJO (Plain Old Java Object) ベースの開発が可能に 
?Enterprise JavaBeans (EJB)を単純化 
?Java Persistence API (JPA) の導入 
?Web サービスの新しい仕様であるJAX-WS を導入 
?新しいWeb フレームワークとしてJSF を正式導入 
Java EE 5 概要 
17
JavaEE再入門 
?POJO (Plain Old Java Object) ベースでの開発が可能 
?コールバック?インターフェイスの実装が不要 
?例外処理の簡素化 
?デフォルト値の設定によるコードの簡素化 
?JNDI アクセスのカプセル化 
?インターセプターの導入により、横断処理が可能 
?アノテーションの導入により、XMLファイルを削減 
?アノテーションとDI による疎結合化 
?Java Persistence API (JPA) の導入によるデータ ベースアクセスの簡素化 
EJB 3.0 
18
JavaEE再入門 
?Hibernate やJDO (Java Data Objects) の影響を 受けた、Java EE 標準のORM仕様 
?POJO ベースのO/R マッピングが可能 
?EJB コンテナは不要で、Java SE 環境でも動作可能 
?SQL によく似たク工リ言語であるJPQL (Java Persistence Query Language) により、Entity に対 する問い合わせが可能 
?JPQL により永続化対象のデータベースに非依存 
?JavaEE 5 のJPA 1.0 はEJB 3.0 の仕様の一部 
?JavaEE 6 のJPA 2.0 でEJB 3.1 と分離 
Java Persistence API (JPA) 
19
JavaEE再入門 
JPA のArchitecture イメージ 
20 
Application 
JNDI 
Database 
JDBC 
JTA 
EntityManager 
EntityManagerFactory 
Persistence Context 
Entity 
Entity 
Entity 
Entity 
<ライフサイクル管理> 
persist 
merge 
remove 
flush 
Entity 
<データ操作> 
Find 
createQuery 
createNamedQuery 
createNativeQuery
JavaEE再入門 
?JAX-WS(Java API for XML-Based Web Services) は、 JAX-RPC 1.1 の後継となるWeb サービスの仕様 
?RPC 指向(同期) からメッセージ指向(非同期) へと変化 
?JAX-RPC 1.1 と同様にSOAP 1.1 とWSDL 1.1 をサ ポート 
?SOAP 1.2 とWS-I Basic Profile 1.1 もサポート 
?アノテーションの使用が可能 
?XML とJava オブジェクトとのデータバインディング には、JAXB を採用 
?SOAP with Attachments (Sw/A) とMTOM の両方の 添付ファイル仕様をサポート 
JAX-WS 
21
JavaEE再入門 
?JSF(JavaServer Faces) は、Web アプリケーション 用のコンポーネントベースのフレームワーク 
?MVC アーキテクチャー?パターンに準拠 
?イベント駆動型のプログラミングモデルを採用 
?JSF 独自のTag Library を利用し、JSP ページを作成 
?再利用可能な「UIコンポーネント」を組み合わせて Web ページを構築 
?カスタムコンポーネントを容易に作成可能 
(PrimeFaces には100 以上のコンポーネントやスキンが存在) 
?GUI ツールによる画面開発が可能 
?参照実装は、Mojarra 
JSF 
22
JavaEE再入門 
?統合式言語(Unified EL) の導入 
(JSF のEL 式とJSP のEL 式を統合) 
?JSF で用いられていた遅延評価用のEL式が使用可能 
?trimDirectiveWhitespaces 属性が追加され、生成する HTML コードから余分なホワイトスペースを除去可能 
?アノテーションによるResource Injection をサポート 
?J2SE 5.0 で追加された列挙型(enum) をサポート 
?カスタムELResolver の作成が可能 
(Spring, EJB, JNDI などの標準ではサポートされていないオブ ジェクトの取り扱いが可能) 
JSP2.1 
23
JavaEE再入門 
?J2SE 5.0 が必須 
?アノテーションのサポート(リソースの注入が可能) 
?filter-mapping が複数サーブレット名指定、ワイルド カードに対応 
?servlet-mapping が複数URL パターンの指定に対応 
?http-method にHTTP/1.1 の全メソッド名を使用可能 
?getContextPathAPI の追加 
?web.xml のルート要素にmetadata-complete 属性を 追加し、アノテーション処理の実施を制御可能に 
?エラーハンドリング後のステータスコードの変更が可能 
Java Servlet2.5 
24
JavaEE再入門 
Java EE 6 
(JSR 316) 
25
JavaEE再入門 
?2009年12月10日にリリース 
?主なテーマは、柔軟性?拡張性の向上と軽量化 
?28件のSpec 
?Web Profile 形式での提供をサポート 
?プルーニングの導入 
?EJBの機能拡張とEJB Lite の導入 
?RESTful Web Services のサポート(JAX-RS) 
?JSF のメジャーアップデート 
?CDI, Interceptors, Bean Validation の導入 
?web.xml のオプション化 
Java EE 6 概要 
26
JavaEE再入門 
Full Profile 
JAXP 
JAXM 
JAXR 
JAX-RPC 
JAXB 
JAX-WS 
JAX-RS 
JCA 
JMS 
EJB 
JavaMail 
Management 
JACC 
JASPIC 
Web Profile 
27 
Web Profile は、Web アプリケーションに必要な API のみを集めた、Full Profile のサブセットです。 
サブセット形式での提供により、アプリケーション サーバの軽量化が可能になりました。 
Web Profile 
JSTL/JSP/EL 
Servlet 
JSF 
Managed Beans 
Common Annotations 
Interceptors 
JPA 
EJB Lite 
CDI/DI 
Bean Validation 
JTA
JavaEE再入門 
?古くなった仕様を削減し、プラットフォームを軽量化 するために導入した仕組み 
?仕様がプルーニングされると、次のPlatform リリー スでは必須コンポーネントではなくなり、オプション 扱いになる可能性がある 
?JavaEE6では、以下の仕様をプルーニング 
プルーニング 
28 
JSR 
Technology 
JSR 093 
JAXR (Java API for XML Registries) 
JSR 088 
Java EE Application Deployment 
JSR 101 
JAX-RPC (Java API for XML-Based RPC) 
JSR 153 
EJB Entity Bean
JavaEE再入門 
?パッケージングの簡略化(war に直接梱包可能に) 
?Singleton Session Beans が追加 
(スレッドセーフな唯一のBean を簡単に実装可能に) 
?タイマーサービスの仕様が大幅に強化 
(アノテーションでカレンダー形式のスケジューリングが可能) 
?アノテーションで非同期処理を簡単に実装可能 
?ローカルビジネスインタフェースの実装を省略可能 
?JNDI 名を標準化し、移植性を向上 
?組み込み可能なEJB コンテナが提供され、Java SE 環境での単体テストを容易に実施可能 
EJB 3.1 
29
JavaEE再入門 
apl.war 
WEB-INF/classes 
apl.ear 
EJB 3.0 
EJB パッケージの簡略化 
30 
apl.war 
EJB 3.1 
ejb.jar 
ejbA.class 
ejbB.class 
?クラスパス上に配置すればEJB として認識される 
?EJB クラス群をjar 化してWEB-INF/lib に配置することも可能
JavaEE再入門 
?EJB のサブセット仕様 
?Full Profile とWeb Profile の両形式のアプリケー ションサーバで実行可能 
?セキュリティが確保された、トランザクション対応の ビジネスロジックを手軽に実装可能 
?タイマーサービスやMDB (Message-Driven Bean)、 非同期メソッド呼び出しは、使用できない 
?インターセプターは使用可能 
EJB Lite 
31
JavaEE再入門 
?JAX-RS (Java API for RESTful Web Services) は、REST スタイルのWeb サービスを提供するための仕様 
?JAX-WS に代わる新しいWeb サービスの仕様 
?アノテーションベースで宣言的に実装可能 
?リソースの要求をURI のパスで定義 
?参照実装は、Jersey 
JAX-RS 
32 
importjavax.ws.rs.GET; 
importjavax.ws.rs.Path; 
importjavax.ws.rs.Produces; 
importjavax.ws.rs.core.MediaType; 
@Path(value="/welcome") 
publicclassWelcomeResource { 
@GET 
@Produces(MediaType.TEXT_PLAIN) 
publicString welcome() { 
return"welcome"; 
} 
}
JavaEE再入門 
?新たなテンプレート言語であるFacelets(xhtml) を導入 
?Facelets の導入により、コンポーネントの再利用やデザ イナとの分業が容易に 
?Apache Tiles のようなテンプレート機能の追加 
?Bean Validation (JSR-303) との統合 
(コンポーネント毎のエラー表示が可能) 
?CDI (JSR-299) との統合 
?暗黙的なナビゲーションの導入 
(ナビゲーション定義用のXML ファイルが不要に) 
?Ajax 対応(JavaScript の知識は不必要) 
JSF2.0 
33
JavaEE再入門 
?CDI (Contexts and Dependency Injection)は、コ ンテキスト(スコープ) を持った依存性注入の仕様 
?バラバラだったDIの方法を全てのレイヤで統一 
?スコープの種類は、Application, Session, Conversation, Request, Dependent 
?型に基づくタイプセーフなインジェクションが可能 
?@Qualifier アノテーションで静的な型解決が可能 
?@Produces アノテーションで動的な型解決が可能 
?JavaEE 6 のCDI 1.0 ではbeans.xml は必須 
?参照実装は、JBoss のWeld 
CDI 
34
JavaEE再入門 
JAX-RS + CDI の実装例 
35 
importjavax.ejb.Stateless; 
importjavax.inject.Inject; 
importjavax.ws.rs.GET; 
importjavax.ws.rs.Path; 
importjavax.ws.rs.PathParam; 
importjavax.ws.rs.Produces; 
importjavax.ws.rs.core.MediaType; 
@Stateless 
@Path(value="/cdi") 
publicclassSampleResource { 
@Inject 
privateSampleService service= null; 
@GET 
@Path("/find/{id}") 
@Produces(MediaType.TEXT_PLAIN) 
publicString update(@PathParam("id")longid) { 
service.find(id); 
return"Find! ["+ id + "]"; 
} 
}
JavaEE再入門 
?Interceptors は、CDI でAOP (Aspect Oriented Programming) を実現するための仕様 
?ビジネスロジックなどのBean の呼び出しをインター セプトし、横断的な関心事を分離 
?ログ出力や独自の認証チェックなどに使用可能 
?アノテーションとInterceptor クラスを作成し、対象 のBean にアノテートすることでAOP が可能 
?beans.xml にInterceptor を定義して有効化 
?複数のInterceptor をリスト定義した場合は、リスト の上から順に適用される 
Interceptors 
36
JavaEE再入門 
Interceptors の実装例 
37 
@Interceptor 
@Logable 
publicclassLoggingInterceptor implementsSerializable { 
@AroundInvoke 
publicObject invoke(InvocationContext ic) throwsException { 
Logger logger= Logger.getLogger(ic.getTarget().getClass().getSuperclass().getName()); 
logger.info(ic.getMethod().getName() + " start."); 
try{ 
returnic.proceed(); 
} finally{ 
logger.info(ic.getMethod().getName() + " end."); 
} 
} 
} 
@Logable 
@RequestScoped 
publicclassSampleServiceImpl implementsSampleService { 
} 
@Inherited 
@InterceptorBinding 
@Retention(RetentionPolicy.RUNTIME) 
@Target({ElementType.TYPE, ElementType.METHOD}) 
public@interfaceLogable{ 
}
JavaEE再入門 
?Bean Validationは、JavaBeans の値の妥当性を チェックするための仕様 
?検証のためのメタデータをアノテーションで指定 
?Spring MVC やJSF, JAX-RS, JPA などで使用可能 
?標準でnull、最小、最大、サイズ、正規表現、真偽値 などのチェックが可能 
?エラーメッセージは、properties ファイルやアノテー ションのmessage 属性で変更可能 
?独自に作成したアノテーションによる検証も可能 
?参照実装は、Hibernate Validator 
Bean Validation 
38
JavaEE再入門 
Bean Validation の実装例 
39 
publicclassSampleBean { 
@NotNull 
privateString notNull; 
// Min?Max 
@Min(-10) 
intintMin; 
@Max(10) 
intintMax; 
// Decimal Min?Max 
@DecimalMin("-10.5") 
@DecimalMax("10.5") 
String stringMinMax; 
// Size 
@NotNull 
@Size(max = 10, message = "{max} 文字以内である必要があります。") 
String stringSize; 
@Size(min = 0, max = 10) 
List<Integer> listSize; 
// Pattern 
@Pattern(regexp = "[0-9]+") 
privateString stringPattern; 
// getter/setter 
}
JavaEE再入門 
?アノテーションを利用したEoD 
(Servlet, InitParam, Filter, Listener, Security などのアノテー ションを提供しweb.xml は不要に) 
?Web-Fragment 機能によりweb.xml の分割が可能 
(jar 内のweb.xml をデプロイ時にマージ可能) 
?Web リソースのモジュール化 
(WEB-INF/lib に静的コンテンツやJSP を纏めたjar を配置可能) 
?非同期処理のサポート(アノテーションで簡単に実装可能) 
?認証用API (login, authenticate, logout) の追加 
?マルチパート対応(ファイルのアップロード処理が簡単に) 
?HttpOnlyCookie, JSESSIONIDの変更, URL Rewriting の無効化のサポート 
Java Servlet3.0 
40
JavaEE再入門 
Java EE 7 
(JSR 342) 
41
JavaEE再入門 
?2013年5月28日にリリース 
?主なテーマは、簡素化の強化とHTML5 サポート 
?30件のSpec(+3 Spec のオプション) 
?WebSocket とJSON のサポート 
?JAX-RS の仕様を拡張 
?JavaServer Faces (JSF) のHTML5 対応 
?Expression Language (EL) のメジャーアップデート 
?Batch フレームワークの提供 
?Concurrency Utilities(並行処理ユーティリティ)の提供 
?Java Message Service API (JMS) の改善 
Java EE 7 概要 
42
JavaEE再入門 
?Java API for WebSocket は、Java でWebSocket 通信するためのAPI 仕様 
?WebSocket は、RFC 6455 で定義されたTCP ベー スのプロトコルで、サーバー?クライアント間での双 方向通信が可能なプロトコル 
?WebSocket で通信することで、通信コスト削減、 サーバープッシュが容易などのメリットがある 
?WebSocket の利用には、モダンなブラウザとアプリ ケーションサーバーが必要 
?アノテーション?ベースのプログラミングをサポート 
?Java SE 環境でも利用可能 
Java API for WebSocket 
43
JavaEE再入門 
WebSocketのサーバ側の実装例 
44 
@ServerEndpoint("/websocket") 
publicclassSampleWebSocketEndpoint { 
privatestaticfinalLogger LOG= 
Logger.getLogger(SampleWebSocketEndpoint.class.getName()); 
@OnOpen 
publicvoidonOpen(finalSession session) { 
LOG.info("On open"); 
} 
@OnMessage 
publicvoidonMessage(finalString message, finalSession session) { 
LOG.info("On message ["+ message+ "]"); 
try{ 
session.getBasicRemote().sendObject("Received ["+ message+ "]"); 
} catch(IOException | EncodeException e) { 
LOG.severe(e.getMessage()); 
} 
} 
@OnClose 
publicvoidonClose(finalSession session) { 
LOG.info("On close"); 
} 
}
JavaEE再入門 
?JSON-P (Java API for JSON Processing) は、JSON をパース?生成?問い合わせするためのAPI 仕様 
?Streaming API とObject Model API の2種類のAPI が存在 
?Streaming API は低レベルなAPI で、イベントベー スのJsonParser とJsonGenerator を提供 
?Object Model API は、JSON データをメモリ上にツ リー構造で表現することにより、DOM のような操作 が可能だが、Streaming API よりも遅く、メモリを より多く消費する 
?Java オブジェクトとJSON のバインディング機能は、 仕様に含まれていない 
JSON-P 
45
JavaEE再入門 
?JAX-RS 1.1 の仕様を拡張 
?クライアントAPI を提供 
?リクエストとレスポンスに対するフィルターをサポート 
?Message Body の加工を目的とするインターセプター をサポート 
?CDI をサポート(EJB との併用が不要) 
?Bean Validation をサポート 
(アノテーションによるパラメーター検証が可能) 
?非同期処理をサポート 
JAX-RS 2.0 
46
JavaEE再入門 
?HTML5 サポート(HTML5 タグ?属性への対応) 
?パススルー機能の導入(未定義のタグ属性をスルー) 
?Faces フローの導入 
(画面フロー定義と対話スコープの提供) 
?Resource Library Contracts の導入 
(テンプレートやCSSを動的に切り替え可能に) 
?Stateless Views の導入 
(状態を保持しないことによるパフォーマンスの向上) 
?ファイルアップロード機能の提供 
?セキュリティトークン方式によるCSRF 対策 
JSF 2.2 
47
JavaEE再入門 
?JSP の仕様から切り離され、個別のJSR として独立 
?ラムダ式の使用が可能 
?コレクション操作のためのEL stream API を提供 
?Static なフィールドとメソッドに直接アクセス可能 
?スタンドアロンでの利用が可能になるELProcessor クラスを提供(JSP?JSF 以外からも利用が可能に) 
?セミコロンオペレータ「;」で複数処理の記述が可能 
?アサインメントオペレータ「=」で値の代入が可能 
?文字列連結オペレータ「+=」で文字連結が可能 
?独自の型コンバーターの利用が可能 
EL 3.0 
48
JavaEE再入門 
?Java バッチフレームワークの標準仕様 
?仕様のベースはSpring Batch 
?ジョブスケジューラー機能はスコープ外で、cron な どから起動される想定 
?ジョブやステップをXML で定義 
?チェックポイントによる分割コミットやエラーハンド リング(Skip?Retry?Restart) 機能を提供 
?アノテーション?ベースのプログラミングをサポート 
?Java SE 環境でも利用可能 
Batch Applications for the Java Platform 
49
JavaEE再入門 
Batch Application のイメージ 
50 
Java Platform, Enterprise Edition 
Batch Application 
Job Scheduler 
(cron, etc…) 
JAX-RS 
Database 
CDI 
JTA 
jBatch 
JPA 
Files 
JobRepository 
Job Operator 
Job 
Step
JavaEE再入門 
?JTA (Java Transaction API) は、分散トランザクション をサポートしたトランザクション管理のための仕様 
?コンテナ管理のトランザクション(CMT) と、Bean 管 理のトランザクション(BMT) の2種類の管理方法が存在 
?CMT では、トランザクション境界をコンテナが管理 
?BTM では、トランザクション境界をコードで管理 
?JTA 1.1 までは、EJB コンテナが必須 
?JTA 1.2 (Java EE 7) では、@Transactional アノテー ションを使うことでEJB コンテナが不要 
(CDI 管理のBean をCMT 可能) 
JTA1.2 
51
JavaEE再入門 
?ノンブロッキングのI/O のサポート 
(ReadListener, WriteListener インターフェースの提供) 
?プロトコルのアップグレード対応 
(upgrade API によるWebSocket 対応) 
?セキュリティ機能の強化 
(changeSessionId API によるログイン後のセッションID の変更や、deny-uncovered-http-methods によるアクセ スメソッドの制限など) 
Java Servlet3.1 
52
JavaEE再入門 
おまけ 
53
JavaEE再入門 
Web Service のトレンド 
54 
JAX-RS 
JAX-WS 
(SOAP 1.2) 
JAX-RPC 
(SOAP 1.1) 
SOAP 
(XML) 
REST 
(JSON) 
SOA 
(Service Oriented Architecture) 
Microservice 
JAXB 
(Java-XML) 
JSON-B 
(Java-JSON)
JavaEE再入門 
Application Server のJava EE サポート状況 
Application Server 名称 
サポート状況 
Oracle WebLogic Server 12c 
Java EE 6, Java EE 7 (一部のみ) 
IBM WebSphere Application Server V.8.5 
Java EE 6 
Red Hat JBoss EAP 6.3 
Java EE 6 
FUJITSU Interstage Application Server V11.0 
Java EE 6 
Hitachi uCosminexus Application Server V9 
Java EE 6 
NEC WebOTX Application Server V9.2 
Java EE 6 
Oracle GlassFish Server 3.1.2 
Java EE 6 
GlassFish 4.1 Open Source Edition 
Java EE 7 
WildFly 8 (旧JBoss Application Server) 
Java EE 7 
Apache TomEE 1.7.1 
Java EE 6 Web Profile 
55 
(2014年10月23日時点)
JavaEE再入門 
Java EE 7 全体イメージ 
56 
Java Platform, Enterprise Edition 
Web Services 
Enterprise Application 
Management and Security 
Web Application 
JAXM 
JAXR 
JAXM 
JAX-RPC 
JAX-WS 
JAX-RS 
JMX 
J2EE Management 
Deployment 
JACC 
JASPIC 
Debugging 
EJB 
JPA 
JTA 
Bean Validation 
Interceptors 
CDI/DI 
JSP/JSTL 
EL 
Java Servlet 
JSF 
JSON-P 
WebSocket 
Lite 
Full Profiles 
Web Profile
JavaEE再入門 
Matrix of the Java EE version and JSR 
(Web Services Technologies) 
Technology 
JSR 
EE 1.4 
EE 5 
EE 6 
EE 7 
Java API for XML Processing (JAXP) 
063 
1.2 
- 
- 
- 
206 
- 
1.3 (SE) 
1.4 (SE) 
1.4 (SE) 
Java APIs for XML Messaging (JAXM) 
067 
1.2 
1.3 
1.3 
1.3 
Java API for XML Registries (JAXR) 
093 
1.0 
1.0 
1.0 
1.0 (Op) 
Java API for XML-Based RPC (JAX-RPC) 
101 
1.1 
1.1 
1.1 
1.1 (Op) 
Implementing Enterprise Web Services 
109 
1.1 
1.2 
1.3 
1.3 
Streaming API for XML (StAX) 
173 
- 
1.0 
1.0 (SE) 
1.0 (SE) 
Web Services Metadata for the Java Platform 
181 
- 
2.0 
2.1 
2.1 
Java Architecture for XML Binding (JAXB) 
222 
- 
2.0 
2.2 
2.2 (SE) 
Java API for XML-Based Web Services (JAX-WS) 
224 
- 
2.0 
2.2 
2.2 
Java API for RESTful Web Services (JAX-RS) 
311 
- 
- 
1.1 
- 
339 
- 
- 
- 
2.0 
57 
(太字はWeb Profile対象)
JavaEE再入門 
Matrix of the Java EE version and JSR 
(Web Application Technologies) 
Technology 
JSR 
EE 1.4 
EE 5 
EE 6 
EE 7 
Standard Tag Library for JavaServer Pages(JSTL) 
052 
1.1 
1.2 
1.2 
1.2 
JavaServer Pages (JSP) 
152 
2.0 
- 
- 
- 
245 
- 
2.1 
2.2 
2.3 
Expression Language (EL) 
245 
- 
- 
2.2 
- 
341 
- 
- 
- 
3.0 
Java Servlet 
154 
2.4 
2.5 
- 
- 
315 
- 
- 
3.0 
- 
340 
- 
- 
- 
3.1 
JavaServer Faces (JSF) 
127 
1.1 
- 
- 
- 
252 
- 
1.2 
- 
- 
314 
- 
- 
2.0 
- 
344 
- 
- 
- 
2.2 
Java API for JSON Processing (JSON-P) 
353 
- 
- 
- 
1.0 
Java API for WebSocket 
356 
- 
- 
- 
1.0 
58 
(太字はWeb Profile対象)
JavaEE再入門 
Matrix of the Java EE version and JSR 
(Enterprise Application Technologies) 
Technology 
JSR 
EE 1.4 
EE 5 
EE 6 
EE 7 
Managed Beans 
316 
- 
- 
1.0 
- 
342 
- 
- 
- 
1.0 
Concurrency Utilities for Java EE 
236 
- 
- 
- 
1.0 
Common Annotations for the Java Platform 
250 
- 
1.0 
1.1 
1.2 
Interceptors 
318 
- 
- 
1.1 
1.2 
Java EE Connector Architecture (JCA) 
112 
1.5 
1.5 
- 
- 
322 
- 
- 
1.6 
1.7 
Java Persistence API (JPA) 
220 
- 
1.0 
- 
- 
317 
- 
- 
2.0 
- 
338 
- 
- 
- 
2.1 
Java Message Service API (JMS) 
914 
1.1 
1.1 
1.1 
- 
343 
- 
- 
- 
2.0 
59 
(太字はWeb Profile対象)
JavaEE再入門 
Matrix of the Java EE version and JSR 
(Enterprise Application Technologies) 
Technology 
JSR 
EE 1.4 
EE 5 
EE 6 
EE 7 
Enterprise JavaBeans (EJB) 
153 
2.1 
- 
- 
- 
220 
- 
3.0 
- 
- 
318 
- 
- 
3.1 
- 
345 
- 
- 
- 
3.2 
Contexts and Dependency Injection for Java (CDI) 
299 
- 
- 
1.0 
- 
346 
- 
- 
- 
1.1 
Dependency Injection for Java (DI) 
330 
- 
- 
1.0 
1.0 
Bean Validation 
303 
- 
- 
1.0 
- 
349 
- 
- 
- 
1.1 
Batch Applications for the Java Platform 
352 
- 
- 
- 
1.0 
Java Transaction API (JTA) 
907 
1.0 
1.1 
1.1 
1.2 
JavaMail API 
919 
1.3 
1.4 
1.4 
1.5 
JavaBeans Activation Framework (JAF) 
925 
1.0 
1.1 
1.1 (SE) 
1.1 (SE) 
60 
(太字はWeb Profile対象)
JavaEE再入門 
Matrix of the Java EE version and JSR 
(Management and Security Technologies) 
Technology 
JSR 
EE 1.4 
EE 5 
EE 6 
EE 7 
Java Management Extensions (JMX) 
003 
1.2 
1.4 (SE) 
1.4 (SE) 
2.0 (SE) 
Debugging Support for Other Languages 
045 
1.0 
1.0 
1.0 
1.0 
J2EE Management 
077 
1.0 
1.1 
1.1 
1.1 
Java EE Application Deployment 
088 
1.1 
1.2 
1.2 
1.2 (Op) 
Java Authorization Contract for Containers (JACC) 
115 
1.0 
1.1 
1.4 
1.5 
Java Authentication Service Provider Interface for Containers (JASPIC) 
196 
- 
- 
1.0 
1.1 
61 
(太字はWeb Profile対象)
JavaEE再入門 
Java EE 関連のお勧め書籍 
62 
タイトル: Java EE 7 Essentials 
出版社: Oreilly & Associates Inc 
著者: Arun Gupta(著) 
発売日: 2013/9/6 
ページ数: 343ページ 
価格: 5,631円(税込) 
: 2,040円(税込) [Kindle 版] 
タイトル: Beginning Java EE 6 
出版社: 翔泳社 
著者: Antonio Goncalves (著) 
日本オラクル株式会社(監訳) 
発売日: 2012/03/08 
ページ数: 608ページ 
価格: 4,536円(税込)
JavaEE再入門 
Java EE8 
63 
JSR 366 として正式にスタートし、2016年Q3 に リリース予定。以下のような機能を提供予定。 
JSR 
仕様 
JSR 107 
JCACHE -Java Temporary Caching API 
キャッシュ機構を提供する標準API 
JSR 365 
Contexts and Dependency Injection for Java 2.0 
CDIのモジュール化(Java SE 上でのコンテナ起動など) 
JSR 367 
Java API for JSON Binding (JSON-B) 
Java オブジェクトとJSON のバインディング 
JSR 369 
Java Servlet 4.0 
HTTP/2 対応(Request/Response の多重化やServer Push) 
JSR 370 
Java API for RESTful Web Services (JAX-RS 2.1) 
Server-Sent Event (SSE) のサポート 
JSR 371 
Model-View-Controller (MVC 1.0) 
アクションベースのMVC フレームワーク(テンプレートは対象外)
JavaEE再入門 
まとめ 
64
JavaEE再入門 
?フルスタックな標準技術 
?IDE のサポートが比較的優秀 
?知識の差分アップデートが可能 
?アプリケーションサーバがライブラリを提供 してくれるため、デプロイ用アーカイブの ファイルサイズの肥大化が抑制でき、配備時 間や起動時間の短縮が可能 
?有償サポートによる脆弱性対応 
?プログラマの確保が比較的容易 
Java EE の良いところ 
65
JavaEE再入門 
?コードが冗長になりがち 
?OSS の後追いで進化のスピードが遅い 
?仕様が重厚長大で全体を把握するのが大変 
?サーバの起動に時間が掛かる(過去の話) 
?JavaEE準拠のサーバ間でもアプリケーショ ンの互換性を維持できない場合がある 
?日本語の書籍が少ない 
?若者のJava EE 離れが顕著 
Java EEの良くないところ 
66
JavaEE再入門 
世の中には多数のライブラリやフレーム ワークが存在しますが、システム特性や 開発規模、メンバー構成などにより最適 なアーキテクチャは異なります。 
Java EEは、規模が大きく、ライフサイ クルの長いアプリケーションの開発に適 していると言われており、現時点でも主 要な選択肢の一つです。 
67 
最後に
JavaEE再入門 
Modern Java 
is the best Java. 
68
JavaEE再入門 
おわり 
69

More Related Content

Java EE 再入門

  • 1. JavaEE 再入門 To Java EE 7 from J2EE 1.4 November 2014 @minazou67
  • 2. JavaEE再入門 はじめに 本スライドは、J2EE 1.4 からJava EE 7 の新機能について広く浅く解説し、 短時間でJava EE に関する知識を網羅 的に学習することを目的としています。 Java を学ぶきっかけになれば幸いです。 2 ?本スライドでは、Java の基本的な事項(変数、演算子、制御構文、クラスなど) については取り扱いません。 ?本スライドで紹介している機能が、Java EE の新機能の全てではありません。 ?本スライドに掲載されている会社名、製品名、サービス名、ロゴは、各社?各団体の商標または登録商標です。
  • 3. JavaEE再入門 Target ?Java の知識がJava EE 5 付近で止まっている人 ?Java 使ってるけど、実は よく知らないという人 ?Java EE 初心者な人 3
  • 4. JavaEE再入門 Goal Java EEの各バージョンの更新内容 を再確認することにより、既存の知 識を整理すると共に、最新バージョ ンのJava EE について学び、より モダンなプログラミングスタイルを 身に付けましょう。 4
  • 5. JavaEE再入門 Java に関する あれやこれや 5
  • 6. JavaEE再入門 J2EE 1.4 Java EE 5 2003年11月 JSR 151 Java EE 6 Java EE 7 2006年5月 JSR 244 2009年12月 JSR 316 2013年5月 JSR 342 Java EE Release History 2年6ヶ月 3年6ヶ月 3年5ヶ月 6
  • 7. JavaEE再入門 JCP JSR Java 関連用語など JEP 7 「Java SE 再入門」に書いてます。 JRE JDK JVM Java Byte Code JNI JNDI Reference Implementation Java Platform IDE
  • 9. JavaEE再入門 ?2003年11月24日にリリース ?主なテーマは、Web サービス ?20件のSpec ?J2EE 1.3 と同様に、JCP のもとで仕様を考案 ?WS-I Basic Profile 1.0 に対応 ?Web サービス(SOAP) 機能を標準でサポート ?EJB の機能拡張(Web サービス対応) ?JavaServer Pages (JSP) のメジャーアップデート (Expression Language 式の導入など) J2EE 1.4 概要 9
  • 10. JavaEE再入門 ?WS-I (Web Services Interoperability Organization) は、 Web サービスの相互運用性を図ることを目的とし たオープンな団体 ?複数のプラットフォーム、開発言語、アプリケー ション上で、Web サービスの相互運用を容易にす るための利用法(プロファイル)を推進 ?Basic Profile は、SOAP, WSDL, UDDI の基本仕様 ?Attachments Profile は添付ファイルの仕様で、 Basic Profile 1.1 と組み合わせて利用 ?Basic Security Profileはセキュリティの仕様で、 Basic Profile の拡張プロファイル WS-I Basic Profile 10
  • 11. JavaEE再入門 ?JAX-RPC (Java API for XML-Based RPC) は、 XML ベースのRPC (Remote Procedure Call) の 標準仕様 ?分散型アプリケーションの構築が可能 ?JAX-RPC 1.1 は、WS-I Basic Profile 1.0 に準拠 し、SOAP 1.1 をサポート ?SOAP 1.1 over HTTP プロトコルで通信 ?XML とJava オブジェクトとをバインディング ?JAX-RPC 1.1 の実装として、Apache Axis が有名 JAX-RPC 11
  • 12. JavaEE再入門 ?EJB (Enterprise JavaBeans) は、分散オブジェクト 指向に基づいたサーバコンポーネントモデル仕様 ?分散トランザクション管理やセキュリティ制限、 ネーミングサービスなど、ビジネスロジックの実装 に有用な機能をまとめて提供 ?Java に特化したCORBA のサブセットのようなもの ?EJB コンテナの上で動作 ?EJB 2.0 から導入されたMDB (Message Driven Bean) は、非同期処理をサポート EJB 12
  • 13. JavaEE再入門 EJB の利用イメージ 13 Java Platform, Enterprise Edition Client Container EJB Container Web Container Web Browser Application Client Enterprise Bean Enterprise Bean JSP Servlet JSF Enterprise Bean Database
  • 14. JavaEE再入門 ?仕様が重厚長大で習得が困難 ?デプロイメント記述子(XML) の記述が冗長で複雑 ?インターフェースの実装が必要で密結合化 ?不要なコールバック?メソッドの実装が必要で面倒 ?データベースへのアクセスが面倒 ?開発生産性が低く、実行性能が悪い ?環境構築やデプロイ、テストが面倒 ?若者のEJB 離れ EJB 2.1 の問題点 14
  • 15. JavaEE再入門 ?重量コンテナ(EJB) の代替として、軽量コンテナと ORM (Object Relational Mapper) が台頭 ?軽量コンテナは、DI (Dependency Injection) コンテ ナとも呼ばれる ?POJO (Plain Old Java Object) ベースでの開発が可能 ?代表的な軽量コンテナとしては、Spring Framework やSeasar が有名 ?POJO とDI による疎結合化により、開発やテストが 容易に ?JavaEEの次期バージョンへ多大な影響を与えた 軽量コンテナとORM 15
  • 16. JavaEE再入門 Java EE 5 (JSR 244) 16
  • 17. JavaEE再入門 ?2006年5月11日にリリース ?主なテーマは、Ease of Development (EOD) ?23件のSpec ?名称がJ2SE からJava EE に変更され、バージョ ン番号から小数点以下が削除された ?アノテーションを使用したPOJO (Plain Old Java Object) ベースの開発が可能に ?Enterprise JavaBeans (EJB)を単純化 ?Java Persistence API (JPA) の導入 ?Web サービスの新しい仕様であるJAX-WS を導入 ?新しいWeb フレームワークとしてJSF を正式導入 Java EE 5 概要 17
  • 18. JavaEE再入門 ?POJO (Plain Old Java Object) ベースでの開発が可能 ?コールバック?インターフェイスの実装が不要 ?例外処理の簡素化 ?デフォルト値の設定によるコードの簡素化 ?JNDI アクセスのカプセル化 ?インターセプターの導入により、横断処理が可能 ?アノテーションの導入により、XMLファイルを削減 ?アノテーションとDI による疎結合化 ?Java Persistence API (JPA) の導入によるデータ ベースアクセスの簡素化 EJB 3.0 18
  • 19. JavaEE再入門 ?Hibernate やJDO (Java Data Objects) の影響を 受けた、Java EE 標準のORM仕様 ?POJO ベースのO/R マッピングが可能 ?EJB コンテナは不要で、Java SE 環境でも動作可能 ?SQL によく似たク工リ言語であるJPQL (Java Persistence Query Language) により、Entity に対 する問い合わせが可能 ?JPQL により永続化対象のデータベースに非依存 ?JavaEE 5 のJPA 1.0 はEJB 3.0 の仕様の一部 ?JavaEE 6 のJPA 2.0 でEJB 3.1 と分離 Java Persistence API (JPA) 19
  • 20. JavaEE再入門 JPA のArchitecture イメージ 20 Application JNDI Database JDBC JTA EntityManager EntityManagerFactory Persistence Context Entity Entity Entity Entity <ライフサイクル管理> persist merge remove flush Entity <データ操作> Find createQuery createNamedQuery createNativeQuery
  • 21. JavaEE再入門 ?JAX-WS(Java API for XML-Based Web Services) は、 JAX-RPC 1.1 の後継となるWeb サービスの仕様 ?RPC 指向(同期) からメッセージ指向(非同期) へと変化 ?JAX-RPC 1.1 と同様にSOAP 1.1 とWSDL 1.1 をサ ポート ?SOAP 1.2 とWS-I Basic Profile 1.1 もサポート ?アノテーションの使用が可能 ?XML とJava オブジェクトとのデータバインディング には、JAXB を採用 ?SOAP with Attachments (Sw/A) とMTOM の両方の 添付ファイル仕様をサポート JAX-WS 21
  • 22. JavaEE再入門 ?JSF(JavaServer Faces) は、Web アプリケーション 用のコンポーネントベースのフレームワーク ?MVC アーキテクチャー?パターンに準拠 ?イベント駆動型のプログラミングモデルを採用 ?JSF 独自のTag Library を利用し、JSP ページを作成 ?再利用可能な「UIコンポーネント」を組み合わせて Web ページを構築 ?カスタムコンポーネントを容易に作成可能 (PrimeFaces には100 以上のコンポーネントやスキンが存在) ?GUI ツールによる画面開発が可能 ?参照実装は、Mojarra JSF 22
  • 23. JavaEE再入門 ?統合式言語(Unified EL) の導入 (JSF のEL 式とJSP のEL 式を統合) ?JSF で用いられていた遅延評価用のEL式が使用可能 ?trimDirectiveWhitespaces 属性が追加され、生成する HTML コードから余分なホワイトスペースを除去可能 ?アノテーションによるResource Injection をサポート ?J2SE 5.0 で追加された列挙型(enum) をサポート ?カスタムELResolver の作成が可能 (Spring, EJB, JNDI などの標準ではサポートされていないオブ ジェクトの取り扱いが可能) JSP2.1 23
  • 24. JavaEE再入門 ?J2SE 5.0 が必須 ?アノテーションのサポート(リソースの注入が可能) ?filter-mapping が複数サーブレット名指定、ワイルド カードに対応 ?servlet-mapping が複数URL パターンの指定に対応 ?http-method にHTTP/1.1 の全メソッド名を使用可能 ?getContextPathAPI の追加 ?web.xml のルート要素にmetadata-complete 属性を 追加し、アノテーション処理の実施を制御可能に ?エラーハンドリング後のステータスコードの変更が可能 Java Servlet2.5 24
  • 25. JavaEE再入門 Java EE 6 (JSR 316) 25
  • 26. JavaEE再入門 ?2009年12月10日にリリース ?主なテーマは、柔軟性?拡張性の向上と軽量化 ?28件のSpec ?Web Profile 形式での提供をサポート ?プルーニングの導入 ?EJBの機能拡張とEJB Lite の導入 ?RESTful Web Services のサポート(JAX-RS) ?JSF のメジャーアップデート ?CDI, Interceptors, Bean Validation の導入 ?web.xml のオプション化 Java EE 6 概要 26
  • 27. JavaEE再入門 Full Profile JAXP JAXM JAXR JAX-RPC JAXB JAX-WS JAX-RS JCA JMS EJB JavaMail Management JACC JASPIC Web Profile 27 Web Profile は、Web アプリケーションに必要な API のみを集めた、Full Profile のサブセットです。 サブセット形式での提供により、アプリケーション サーバの軽量化が可能になりました。 Web Profile JSTL/JSP/EL Servlet JSF Managed Beans Common Annotations Interceptors JPA EJB Lite CDI/DI Bean Validation JTA
  • 28. JavaEE再入門 ?古くなった仕様を削減し、プラットフォームを軽量化 するために導入した仕組み ?仕様がプルーニングされると、次のPlatform リリー スでは必須コンポーネントではなくなり、オプション 扱いになる可能性がある ?JavaEE6では、以下の仕様をプルーニング プルーニング 28 JSR Technology JSR 093 JAXR (Java API for XML Registries) JSR 088 Java EE Application Deployment JSR 101 JAX-RPC (Java API for XML-Based RPC) JSR 153 EJB Entity Bean
  • 29. JavaEE再入門 ?パッケージングの簡略化(war に直接梱包可能に) ?Singleton Session Beans が追加 (スレッドセーフな唯一のBean を簡単に実装可能に) ?タイマーサービスの仕様が大幅に強化 (アノテーションでカレンダー形式のスケジューリングが可能) ?アノテーションで非同期処理を簡単に実装可能 ?ローカルビジネスインタフェースの実装を省略可能 ?JNDI 名を標準化し、移植性を向上 ?組み込み可能なEJB コンテナが提供され、Java SE 環境での単体テストを容易に実施可能 EJB 3.1 29
  • 30. JavaEE再入門 apl.war WEB-INF/classes apl.ear EJB 3.0 EJB パッケージの簡略化 30 apl.war EJB 3.1 ejb.jar ejbA.class ejbB.class ?クラスパス上に配置すればEJB として認識される ?EJB クラス群をjar 化してWEB-INF/lib に配置することも可能
  • 31. JavaEE再入門 ?EJB のサブセット仕様 ?Full Profile とWeb Profile の両形式のアプリケー ションサーバで実行可能 ?セキュリティが確保された、トランザクション対応の ビジネスロジックを手軽に実装可能 ?タイマーサービスやMDB (Message-Driven Bean)、 非同期メソッド呼び出しは、使用できない ?インターセプターは使用可能 EJB Lite 31
  • 32. JavaEE再入門 ?JAX-RS (Java API for RESTful Web Services) は、REST スタイルのWeb サービスを提供するための仕様 ?JAX-WS に代わる新しいWeb サービスの仕様 ?アノテーションベースで宣言的に実装可能 ?リソースの要求をURI のパスで定義 ?参照実装は、Jersey JAX-RS 32 importjavax.ws.rs.GET; importjavax.ws.rs.Path; importjavax.ws.rs.Produces; importjavax.ws.rs.core.MediaType; @Path(value="/welcome") publicclassWelcomeResource { @GET @Produces(MediaType.TEXT_PLAIN) publicString welcome() { return"welcome"; } }
  • 33. JavaEE再入門 ?新たなテンプレート言語であるFacelets(xhtml) を導入 ?Facelets の導入により、コンポーネントの再利用やデザ イナとの分業が容易に ?Apache Tiles のようなテンプレート機能の追加 ?Bean Validation (JSR-303) との統合 (コンポーネント毎のエラー表示が可能) ?CDI (JSR-299) との統合 ?暗黙的なナビゲーションの導入 (ナビゲーション定義用のXML ファイルが不要に) ?Ajax 対応(JavaScript の知識は不必要) JSF2.0 33
  • 34. JavaEE再入門 ?CDI (Contexts and Dependency Injection)は、コ ンテキスト(スコープ) を持った依存性注入の仕様 ?バラバラだったDIの方法を全てのレイヤで統一 ?スコープの種類は、Application, Session, Conversation, Request, Dependent ?型に基づくタイプセーフなインジェクションが可能 ?@Qualifier アノテーションで静的な型解決が可能 ?@Produces アノテーションで動的な型解決が可能 ?JavaEE 6 のCDI 1.0 ではbeans.xml は必須 ?参照実装は、JBoss のWeld CDI 34
  • 35. JavaEE再入門 JAX-RS + CDI の実装例 35 importjavax.ejb.Stateless; importjavax.inject.Inject; importjavax.ws.rs.GET; importjavax.ws.rs.Path; importjavax.ws.rs.PathParam; importjavax.ws.rs.Produces; importjavax.ws.rs.core.MediaType; @Stateless @Path(value="/cdi") publicclassSampleResource { @Inject privateSampleService service= null; @GET @Path("/find/{id}") @Produces(MediaType.TEXT_PLAIN) publicString update(@PathParam("id")longid) { service.find(id); return"Find! ["+ id + "]"; } }
  • 36. JavaEE再入門 ?Interceptors は、CDI でAOP (Aspect Oriented Programming) を実現するための仕様 ?ビジネスロジックなどのBean の呼び出しをインター セプトし、横断的な関心事を分離 ?ログ出力や独自の認証チェックなどに使用可能 ?アノテーションとInterceptor クラスを作成し、対象 のBean にアノテートすることでAOP が可能 ?beans.xml にInterceptor を定義して有効化 ?複数のInterceptor をリスト定義した場合は、リスト の上から順に適用される Interceptors 36
  • 37. JavaEE再入門 Interceptors の実装例 37 @Interceptor @Logable publicclassLoggingInterceptor implementsSerializable { @AroundInvoke publicObject invoke(InvocationContext ic) throwsException { Logger logger= Logger.getLogger(ic.getTarget().getClass().getSuperclass().getName()); logger.info(ic.getMethod().getName() + " start."); try{ returnic.proceed(); } finally{ logger.info(ic.getMethod().getName() + " end."); } } } @Logable @RequestScoped publicclassSampleServiceImpl implementsSampleService { } @Inherited @InterceptorBinding @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.TYPE, ElementType.METHOD}) public@interfaceLogable{ }
  • 38. JavaEE再入門 ?Bean Validationは、JavaBeans の値の妥当性を チェックするための仕様 ?検証のためのメタデータをアノテーションで指定 ?Spring MVC やJSF, JAX-RS, JPA などで使用可能 ?標準でnull、最小、最大、サイズ、正規表現、真偽値 などのチェックが可能 ?エラーメッセージは、properties ファイルやアノテー ションのmessage 属性で変更可能 ?独自に作成したアノテーションによる検証も可能 ?参照実装は、Hibernate Validator Bean Validation 38
  • 39. JavaEE再入門 Bean Validation の実装例 39 publicclassSampleBean { @NotNull privateString notNull; // Min?Max @Min(-10) intintMin; @Max(10) intintMax; // Decimal Min?Max @DecimalMin("-10.5") @DecimalMax("10.5") String stringMinMax; // Size @NotNull @Size(max = 10, message = "{max} 文字以内である必要があります。") String stringSize; @Size(min = 0, max = 10) List<Integer> listSize; // Pattern @Pattern(regexp = "[0-9]+") privateString stringPattern; // getter/setter }
  • 40. JavaEE再入門 ?アノテーションを利用したEoD (Servlet, InitParam, Filter, Listener, Security などのアノテー ションを提供しweb.xml は不要に) ?Web-Fragment 機能によりweb.xml の分割が可能 (jar 内のweb.xml をデプロイ時にマージ可能) ?Web リソースのモジュール化 (WEB-INF/lib に静的コンテンツやJSP を纏めたjar を配置可能) ?非同期処理のサポート(アノテーションで簡単に実装可能) ?認証用API (login, authenticate, logout) の追加 ?マルチパート対応(ファイルのアップロード処理が簡単に) ?HttpOnlyCookie, JSESSIONIDの変更, URL Rewriting の無効化のサポート Java Servlet3.0 40
  • 41. JavaEE再入門 Java EE 7 (JSR 342) 41
  • 42. JavaEE再入門 ?2013年5月28日にリリース ?主なテーマは、簡素化の強化とHTML5 サポート ?30件のSpec(+3 Spec のオプション) ?WebSocket とJSON のサポート ?JAX-RS の仕様を拡張 ?JavaServer Faces (JSF) のHTML5 対応 ?Expression Language (EL) のメジャーアップデート ?Batch フレームワークの提供 ?Concurrency Utilities(並行処理ユーティリティ)の提供 ?Java Message Service API (JMS) の改善 Java EE 7 概要 42
  • 43. JavaEE再入門 ?Java API for WebSocket は、Java でWebSocket 通信するためのAPI 仕様 ?WebSocket は、RFC 6455 で定義されたTCP ベー スのプロトコルで、サーバー?クライアント間での双 方向通信が可能なプロトコル ?WebSocket で通信することで、通信コスト削減、 サーバープッシュが容易などのメリットがある ?WebSocket の利用には、モダンなブラウザとアプリ ケーションサーバーが必要 ?アノテーション?ベースのプログラミングをサポート ?Java SE 環境でも利用可能 Java API for WebSocket 43
  • 44. JavaEE再入門 WebSocketのサーバ側の実装例 44 @ServerEndpoint("/websocket") publicclassSampleWebSocketEndpoint { privatestaticfinalLogger LOG= Logger.getLogger(SampleWebSocketEndpoint.class.getName()); @OnOpen publicvoidonOpen(finalSession session) { LOG.info("On open"); } @OnMessage publicvoidonMessage(finalString message, finalSession session) { LOG.info("On message ["+ message+ "]"); try{ session.getBasicRemote().sendObject("Received ["+ message+ "]"); } catch(IOException | EncodeException e) { LOG.severe(e.getMessage()); } } @OnClose publicvoidonClose(finalSession session) { LOG.info("On close"); } }
  • 45. JavaEE再入門 ?JSON-P (Java API for JSON Processing) は、JSON をパース?生成?問い合わせするためのAPI 仕様 ?Streaming API とObject Model API の2種類のAPI が存在 ?Streaming API は低レベルなAPI で、イベントベー スのJsonParser とJsonGenerator を提供 ?Object Model API は、JSON データをメモリ上にツ リー構造で表現することにより、DOM のような操作 が可能だが、Streaming API よりも遅く、メモリを より多く消費する ?Java オブジェクトとJSON のバインディング機能は、 仕様に含まれていない JSON-P 45
  • 46. JavaEE再入門 ?JAX-RS 1.1 の仕様を拡張 ?クライアントAPI を提供 ?リクエストとレスポンスに対するフィルターをサポート ?Message Body の加工を目的とするインターセプター をサポート ?CDI をサポート(EJB との併用が不要) ?Bean Validation をサポート (アノテーションによるパラメーター検証が可能) ?非同期処理をサポート JAX-RS 2.0 46
  • 47. JavaEE再入門 ?HTML5 サポート(HTML5 タグ?属性への対応) ?パススルー機能の導入(未定義のタグ属性をスルー) ?Faces フローの導入 (画面フロー定義と対話スコープの提供) ?Resource Library Contracts の導入 (テンプレートやCSSを動的に切り替え可能に) ?Stateless Views の導入 (状態を保持しないことによるパフォーマンスの向上) ?ファイルアップロード機能の提供 ?セキュリティトークン方式によるCSRF 対策 JSF 2.2 47
  • 48. JavaEE再入門 ?JSP の仕様から切り離され、個別のJSR として独立 ?ラムダ式の使用が可能 ?コレクション操作のためのEL stream API を提供 ?Static なフィールドとメソッドに直接アクセス可能 ?スタンドアロンでの利用が可能になるELProcessor クラスを提供(JSP?JSF 以外からも利用が可能に) ?セミコロンオペレータ「;」で複数処理の記述が可能 ?アサインメントオペレータ「=」で値の代入が可能 ?文字列連結オペレータ「+=」で文字連結が可能 ?独自の型コンバーターの利用が可能 EL 3.0 48
  • 49. JavaEE再入門 ?Java バッチフレームワークの標準仕様 ?仕様のベースはSpring Batch ?ジョブスケジューラー機能はスコープ外で、cron な どから起動される想定 ?ジョブやステップをXML で定義 ?チェックポイントによる分割コミットやエラーハンド リング(Skip?Retry?Restart) 機能を提供 ?アノテーション?ベースのプログラミングをサポート ?Java SE 環境でも利用可能 Batch Applications for the Java Platform 49
  • 50. JavaEE再入門 Batch Application のイメージ 50 Java Platform, Enterprise Edition Batch Application Job Scheduler (cron, etc…) JAX-RS Database CDI JTA jBatch JPA Files JobRepository Job Operator Job Step
  • 51. JavaEE再入門 ?JTA (Java Transaction API) は、分散トランザクション をサポートしたトランザクション管理のための仕様 ?コンテナ管理のトランザクション(CMT) と、Bean 管 理のトランザクション(BMT) の2種類の管理方法が存在 ?CMT では、トランザクション境界をコンテナが管理 ?BTM では、トランザクション境界をコードで管理 ?JTA 1.1 までは、EJB コンテナが必須 ?JTA 1.2 (Java EE 7) では、@Transactional アノテー ションを使うことでEJB コンテナが不要 (CDI 管理のBean をCMT 可能) JTA1.2 51
  • 52. JavaEE再入門 ?ノンブロッキングのI/O のサポート (ReadListener, WriteListener インターフェースの提供) ?プロトコルのアップグレード対応 (upgrade API によるWebSocket 対応) ?セキュリティ機能の強化 (changeSessionId API によるログイン後のセッションID の変更や、deny-uncovered-http-methods によるアクセ スメソッドの制限など) Java Servlet3.1 52
  • 54. JavaEE再入門 Web Service のトレンド 54 JAX-RS JAX-WS (SOAP 1.2) JAX-RPC (SOAP 1.1) SOAP (XML) REST (JSON) SOA (Service Oriented Architecture) Microservice JAXB (Java-XML) JSON-B (Java-JSON)
  • 55. JavaEE再入門 Application Server のJava EE サポート状況 Application Server 名称 サポート状況 Oracle WebLogic Server 12c Java EE 6, Java EE 7 (一部のみ) IBM WebSphere Application Server V.8.5 Java EE 6 Red Hat JBoss EAP 6.3 Java EE 6 FUJITSU Interstage Application Server V11.0 Java EE 6 Hitachi uCosminexus Application Server V9 Java EE 6 NEC WebOTX Application Server V9.2 Java EE 6 Oracle GlassFish Server 3.1.2 Java EE 6 GlassFish 4.1 Open Source Edition Java EE 7 WildFly 8 (旧JBoss Application Server) Java EE 7 Apache TomEE 1.7.1 Java EE 6 Web Profile 55 (2014年10月23日時点)
  • 56. JavaEE再入門 Java EE 7 全体イメージ 56 Java Platform, Enterprise Edition Web Services Enterprise Application Management and Security Web Application JAXM JAXR JAXM JAX-RPC JAX-WS JAX-RS JMX J2EE Management Deployment JACC JASPIC Debugging EJB JPA JTA Bean Validation Interceptors CDI/DI JSP/JSTL EL Java Servlet JSF JSON-P WebSocket Lite Full Profiles Web Profile
  • 57. JavaEE再入門 Matrix of the Java EE version and JSR (Web Services Technologies) Technology JSR EE 1.4 EE 5 EE 6 EE 7 Java API for XML Processing (JAXP) 063 1.2 - - - 206 - 1.3 (SE) 1.4 (SE) 1.4 (SE) Java APIs for XML Messaging (JAXM) 067 1.2 1.3 1.3 1.3 Java API for XML Registries (JAXR) 093 1.0 1.0 1.0 1.0 (Op) Java API for XML-Based RPC (JAX-RPC) 101 1.1 1.1 1.1 1.1 (Op) Implementing Enterprise Web Services 109 1.1 1.2 1.3 1.3 Streaming API for XML (StAX) 173 - 1.0 1.0 (SE) 1.0 (SE) Web Services Metadata for the Java Platform 181 - 2.0 2.1 2.1 Java Architecture for XML Binding (JAXB) 222 - 2.0 2.2 2.2 (SE) Java API for XML-Based Web Services (JAX-WS) 224 - 2.0 2.2 2.2 Java API for RESTful Web Services (JAX-RS) 311 - - 1.1 - 339 - - - 2.0 57 (太字はWeb Profile対象)
  • 58. JavaEE再入門 Matrix of the Java EE version and JSR (Web Application Technologies) Technology JSR EE 1.4 EE 5 EE 6 EE 7 Standard Tag Library for JavaServer Pages(JSTL) 052 1.1 1.2 1.2 1.2 JavaServer Pages (JSP) 152 2.0 - - - 245 - 2.1 2.2 2.3 Expression Language (EL) 245 - - 2.2 - 341 - - - 3.0 Java Servlet 154 2.4 2.5 - - 315 - - 3.0 - 340 - - - 3.1 JavaServer Faces (JSF) 127 1.1 - - - 252 - 1.2 - - 314 - - 2.0 - 344 - - - 2.2 Java API for JSON Processing (JSON-P) 353 - - - 1.0 Java API for WebSocket 356 - - - 1.0 58 (太字はWeb Profile対象)
  • 59. JavaEE再入門 Matrix of the Java EE version and JSR (Enterprise Application Technologies) Technology JSR EE 1.4 EE 5 EE 6 EE 7 Managed Beans 316 - - 1.0 - 342 - - - 1.0 Concurrency Utilities for Java EE 236 - - - 1.0 Common Annotations for the Java Platform 250 - 1.0 1.1 1.2 Interceptors 318 - - 1.1 1.2 Java EE Connector Architecture (JCA) 112 1.5 1.5 - - 322 - - 1.6 1.7 Java Persistence API (JPA) 220 - 1.0 - - 317 - - 2.0 - 338 - - - 2.1 Java Message Service API (JMS) 914 1.1 1.1 1.1 - 343 - - - 2.0 59 (太字はWeb Profile対象)
  • 60. JavaEE再入門 Matrix of the Java EE version and JSR (Enterprise Application Technologies) Technology JSR EE 1.4 EE 5 EE 6 EE 7 Enterprise JavaBeans (EJB) 153 2.1 - - - 220 - 3.0 - - 318 - - 3.1 - 345 - - - 3.2 Contexts and Dependency Injection for Java (CDI) 299 - - 1.0 - 346 - - - 1.1 Dependency Injection for Java (DI) 330 - - 1.0 1.0 Bean Validation 303 - - 1.0 - 349 - - - 1.1 Batch Applications for the Java Platform 352 - - - 1.0 Java Transaction API (JTA) 907 1.0 1.1 1.1 1.2 JavaMail API 919 1.3 1.4 1.4 1.5 JavaBeans Activation Framework (JAF) 925 1.0 1.1 1.1 (SE) 1.1 (SE) 60 (太字はWeb Profile対象)
  • 61. JavaEE再入門 Matrix of the Java EE version and JSR (Management and Security Technologies) Technology JSR EE 1.4 EE 5 EE 6 EE 7 Java Management Extensions (JMX) 003 1.2 1.4 (SE) 1.4 (SE) 2.0 (SE) Debugging Support for Other Languages 045 1.0 1.0 1.0 1.0 J2EE Management 077 1.0 1.1 1.1 1.1 Java EE Application Deployment 088 1.1 1.2 1.2 1.2 (Op) Java Authorization Contract for Containers (JACC) 115 1.0 1.1 1.4 1.5 Java Authentication Service Provider Interface for Containers (JASPIC) 196 - - 1.0 1.1 61 (太字はWeb Profile対象)
  • 62. JavaEE再入門 Java EE 関連のお勧め書籍 62 タイトル: Java EE 7 Essentials 出版社: Oreilly & Associates Inc 著者: Arun Gupta(著) 発売日: 2013/9/6 ページ数: 343ページ 価格: 5,631円(税込) : 2,040円(税込) [Kindle 版] タイトル: Beginning Java EE 6 出版社: 翔泳社 著者: Antonio Goncalves (著) 日本オラクル株式会社(監訳) 発売日: 2012/03/08 ページ数: 608ページ 価格: 4,536円(税込)
  • 63. JavaEE再入門 Java EE8 63 JSR 366 として正式にスタートし、2016年Q3 に リリース予定。以下のような機能を提供予定。 JSR 仕様 JSR 107 JCACHE -Java Temporary Caching API キャッシュ機構を提供する標準API JSR 365 Contexts and Dependency Injection for Java 2.0 CDIのモジュール化(Java SE 上でのコンテナ起動など) JSR 367 Java API for JSON Binding (JSON-B) Java オブジェクトとJSON のバインディング JSR 369 Java Servlet 4.0 HTTP/2 対応(Request/Response の多重化やServer Push) JSR 370 Java API for RESTful Web Services (JAX-RS 2.1) Server-Sent Event (SSE) のサポート JSR 371 Model-View-Controller (MVC 1.0) アクションベースのMVC フレームワーク(テンプレートは対象外)
  • 65. JavaEE再入門 ?フルスタックな標準技術 ?IDE のサポートが比較的優秀 ?知識の差分アップデートが可能 ?アプリケーションサーバがライブラリを提供 してくれるため、デプロイ用アーカイブの ファイルサイズの肥大化が抑制でき、配備時 間や起動時間の短縮が可能 ?有償サポートによる脆弱性対応 ?プログラマの確保が比較的容易 Java EE の良いところ 65
  • 66. JavaEE再入門 ?コードが冗長になりがち ?OSS の後追いで進化のスピードが遅い ?仕様が重厚長大で全体を把握するのが大変 ?サーバの起動に時間が掛かる(過去の話) ?JavaEE準拠のサーバ間でもアプリケーショ ンの互換性を維持できない場合がある ?日本語の書籍が少ない ?若者のJava EE 離れが顕著 Java EEの良くないところ 66
  • 67. JavaEE再入門 世の中には多数のライブラリやフレーム ワークが存在しますが、システム特性や 開発規模、メンバー構成などにより最適 なアーキテクチャは異なります。 Java EEは、規模が大きく、ライフサイ クルの長いアプリケーションの開発に適 していると言われており、現時点でも主 要な選択肢の一つです。 67 最後に
  • 68. JavaEE再入門 Modern Java is the best Java. 68