Java EE for Beginners

Preview:

DESCRIPTION

 

Citation preview

これを聞けば分かる、 エンタープライズ Java の今 そして未来

Yoshio Terada Java Evangelist Fusion Middleware Org Aug 28, 2014

Copyright  ©  2014,  Oracle  and/or  its  affiliates.  All  rights  reserved.    |   Oracle  Confiden@al  –  Internal/Restricted/Highly  Restricted  

Copyright  ©  2014,  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

以下の事項は、弊社の一般的な製品の方向性に関する概要を説明するものです。また、情報提供を唯一の目的とするものであり、いかなる契約にも組み込むことはできません。以下の事項は、マテリアルやコード、機能を提供することをコミットメント(確約)するものではないため、購買決定を行う際の判断材料になさらないで下さい。オラクル製品に関して記載されている機能の開発、リリースおよび時期については、弊社の裁量により決定されます。

Oracleは、米国オラクルコーポレーション及びその子会社、関連会社の米国及びその他の国における登録商標です。文中の社名、商品名等は各社の商標または登録商標である場合があります。

Copyright  ©  2014,  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

Java EE 7 The standard in community-driven enterprise software

2013 年 6 月リリース

Copyright  ©  2014,  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

Java EE 7 へ含まれる JSR 一覧

Connector 1.6 JPA 2.1 JTA 1.2 JMS 2.0

Managed Bean 1.0 EJB 3.2

Common Annotations 1.1 Interceptors 1.1 CDI 1.1

Portable Extensions

Servlet 3.1

JSP 2.2 JSF 2.2 JAX-RS 2.0 EL 3.0

Bean Validation 1.1

Concurrency Utilities (JSR-236) Batch

Application (JSR-352)

Java API for JSON

(JSR-353)

Java API for WebSocket (JSR-356)

新規追加 大幅な更新 通常の更新

Copyright  ©  2014,  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

全体アーキテクチャ 個別テクノロジー

どこから考える Java EE 開発

Copyright  ©  2014,  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

全体アーキテクチャ 個別テクノロジー

どこから考える Java EE 開発

Copyright  ©  2014,  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

各バージョンにおける実装アーキテクチャ

• ビュー • ビジネスロジック • データ・アクセス

ビュー関連処理 ビジネス・ロジック

ロジック

データ・アクセス

DB

Queue

Batch

Copyright  ©  2014,  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

各バージョンにおける実装アーキテクチャ

• Java EE 6 • Java EE 7

2009年12月

Java EE 6 Pruning 拡張性 かんたん開発 CDI/JAX-RS

2013年6月

Java EE 7 開発生産性向上 HTML 5 エンタープライズ・ニーズへの対応 jBatch Concurrency Utilities

Web Profile JAX-RS, JSON-P, WebSocket

Web Profile Servlet, EJB Lite

Copyright  ©  2014,  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

3パターン

Copyright  ©  2014,  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

パターン1:従来型の開発

• Java EE 6 • Java EE 7

ビュー関連処理 ビジネス・ロジック データ・アクセス

JSF (Facelets)

Expression Language

CDI

CDI

EJB JPA

Copyright  ©  2014,  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

パターン2: HTML 5 & RESTful 開発

• Java EE 6 • Java EE 7

ビュー関連処理 ビジネス・ロジック データ・アクセス

CDI

EJB

HTML5 (JavaScript)

JavaFX

JAX-RS

JPA

Copyright  ©  2014,  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

パターン3:双方向リアルタイム - WebSocket

• Java EE 6 • Java EE 7

ビュー関連処理 ビジネス・ロジック データ・アクセス

CDI

EJB

HTML5 (JavaScript)

WebSocket Client

WebSocket Server

JPA

Copyright  ©  2014,  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

全体アーキテクチャ 個別テクノロジー

どこから考える Java EE 開発

Copyright  ©  2014,  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

個別のテクノロジーはどこから学ぶ?

• ビュー • ビジネスロジック • データ・アクセス

ビュー関連処理 ビジネス・ロジック

ロジック

データ・アクセス

DB

Copyright  ©  2014,  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

変化するView関連技術に柔軟に対応 メンテナンス性の高いシステム構築

Copyright  ©  2014,  Oracle  and/or  its  affiliates.  All  rights  reserved.    |   Oracle  Confiden@al  –  Internal/Restricted/Highly  Restricted   17  

@Stateless  @SessionScope  @Path(“persons”)  @Entity  @Named(value=“personmgr”)  @WebService  public  class  PersonManager  {    

     @Id        private  String  id;    

   @GET                @Path("{id}")                  public  Response  getName(  @PathParam(”id")  String  id  )  {        }

EJB CDI

JAX-RS JPA

JAX-WS

Copyright  ©  2014,  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

ビュー実装に依存しない柔軟性の高いシステム構築

• ビュー • ビジネスロジック • データ・アクセス

ビジネス・ロジック

ロジック

データ・アクセス ビュー関連処理

DB

Copyright  ©  2014,  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

データ・アクセス

• ビュー • ビジネスロジック • データ・アクセス

–  JPA –  JMS – Batch

データ・アクセス ビュー関連処理

CDI

EJB

ビジネス・ロジック

JPA

Copyright  ©  2014,  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

データ永続化 - JPA

@Entity! public class Customer implements Serializable {! @Id! private Long id;! private String address1;! private long age;! private String name;! private String telephone;! //セッタ・ゲッタ }!!

DBのテーブル

Entity クラス

データベース・テーブルと Java のクラスをマッピング

DB

Copyright  ©  2014,  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

JPA エンティティ・クラス @En$ty  public  class  Person  implements  Serializable  {  

         @Id  

         private  String  id;  

         @Size(max  =  255)  

       @NotNull  

       private  String  name;  

       @Size(max  =  255)  

       private  String  emailaddress;  

}  

Copyright  ©  2014,  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

JPA エンティティ・クラス @En$ty  @Table(name  =  "PERSON")  

@XmlRootElement  

@NamedQueries({  

       @NamedQuery(name  =  "Person.findAll",  query  =  "SELECT  p  FROM  Person  p”)  })  

public  class  Person  implements  Serializable  {  

         @Id  

         private  String  id;  

}  

Copyright  ©  2014,  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

データ永続化 ‒ JPA クエリ

• SQLに類似したクエリ言語 • Entity を使用したクエリ表現 • select, update, delete などの機能を提供 • データベースに非依存 SELECT c FROM Customer c!SELECT c FROM Customer c!WHERE c.name = ’Taro' AND c.address = ’Tokyo'!

DELETE FROM Customer c WHERE c.age < 18!

UPDATE Customer c SET c.firstName = 'TOO YOUNG’ WHERE c.age < 18!

DB

Copyright  ©  2014,  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

JPA

ビジネス・ロジック

• ビュー • ビジネスロジック

– CDI – EJB

• データ・アクセス

データ・アクセス ビュー関連処理

CDI

EJB

ビジネス・ロジック

Copyright  ©  2014,  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

フレームワーク間の依存性を 極力排除し疎結合で結びつけ

拡張性・メンテナンス性を向上

Copyright  ©  2014,  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

ビジネス・ロジック ‒ CDI or EJB

CDI EJB DI/AOP @Inject @Inject, @EJB など EL式との連携 @Named N/A スコープ @RequestScope, @SessionScope 等 N/A トランザクション @Transactional (Java EE 7から追加) 利用可能(コンテナ or Bean Managed) 非同期実行 N/A (将来) @Asyncronous JMS 連携 N/A @MessageDriven リモート実行 N/A @Remote タイマー・サービス N/A (将来) @Schedule

起動時の初期化 N/A (将来) @Startup

Java EE 7 以降、CDIの利用範囲が向上(より重要に)

Copyright  ©  2014,  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

ビジネス・ロジック ‒ EJB (DB へクエリ実行) @Stateless public  class  ManagePersonLogic  {  

         @PersistenceContext(unitName  =  "JavaEE7-­‐SAMPLE-­‐PU")  

         En$tyManager  em;  

         public  List<Person>  getAllPersons()  {  

               Query<Person>  query  =  em.createNamedQuery("Person.findAll”,Person.class);  

               return  query.getResultList();  

       }  

}  

Copyright  ©  2014,  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

ビジネス・ロジック ‒ CDI (DB へクエリ実行) @Dependent  (@RequestScoped  等  CDI  が用意するスコープを指定) public  class  ManagePersonLogic  {  

         @PersistenceContext(unitName  =  "JavaEE7-­‐SAMPLE-­‐PU")  

         En$tyManager  em;  

         public  List<Person>  getAllPersons()  {  

               Query<Person>  query  =  em.createNamedQuery("Person.findAll”,Person.class);  

               return  query.getResultList();  

       }  

}  

Copyright  ©  2014,  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

ビジネス・ロジック ‒ EJB (DB へ永続化) @Stateless public  class  ManagePersonLogic  {  

         @PersistenceContext(unitName  =  "JavaEE7-­‐SAMPLE-­‐PU")  

         En$tyManager  em;  

 

         public  Person  createPerson(Person  person)  {  

               em.persist(person);  

               return  person;  

       }  

}  

Copyright  ©  2014,  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

ビジネス・ロジック - CDI (DB へ永続化) @Dependent  (@RequestScoped  等  CDI  が用意するスコープを指定) public  class  ManagePersonLogic  {  

         @PersistenceContext(unitName  =  "JavaEE7-­‐SAMPLE-­‐PU")  

         En$tyManager  em;  

         @Transac$onal  

         public  Person  createPerson(Person  person)  {  

               em.persist(person);  

               return  person;  

       }  

}  

Copyright  ©  2014,  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

JPA CDI

EJB

ビュー

• ビュー • ビジネスロジック • データ・アクセス

データ・アクセス ビュー関連処理 ビジネス・ロジック

Copyright  ©  2014,  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

HTML5/JavaScript に精通?

自らHTML 5 で実装 :JAX-RS フレームワークを利用:JSF

Copyright  ©  2014,  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

JAX-RS : REST サーバ・エンドポイント @Path("/manage/")  public  class  PersonManageREST  {  

       @Inject  (もしくは  @EJB  )  

       ManagePersonLogic  manageLogic;  

       @GET  

       @Produces({"applica$on/xml",  "applica$on/json"})  

       public  List<Person>  findAll()  {  

               return  manageLogic.getAllPersons();  

       }  

}  

Copyright  ©  2014,  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

JAX-RS : REST サーバ・エンドポイント @Path("/manage/")  public  class  PersonManageREST  {  

       @Inject  (もしくは  @EJB  )  

       ManagePersonLogic  manageLogic;  

       @POST  

       @Consumes({"applica$on/xml",  "applica$on/json"})  

       public  void  create(Person  en$ty)  {  

               manageLogic.createPerson(en$ty);  

       }  

}  

Copyright  ©  2014,  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

JSF : バッキング・ビーン @Named(value  =  "pmanage")  @RequestScoped  

public  class  PersonManagedBean  {  

       @Inject  (もしくは  @EJB  )  

       ManagePersonLogic  manageLogic;  

 

       List<Person>  persons;  

       public  List<Person>  getPersons(){  

               return  manageLogic.getAllPersons();  

       }  

}  

同じビジネスロジック を使用

Copyright  ©  2014,  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

JAX-RS : REST サーバ・エンドポイント <p:dataTable  var="person"  value="#{pmanage.persons}"    

                             paginator="true"  paginatorAlwaysVisible="false">  

         <p:column  headerText="ID">  

               <h:outputText  value="#{person.id}"  />  

         </p:column>  

         <p:column  headerText="名前(漢字)">  

                 <h:outputText  value="#{person.name}"  />  

         </p:column>  

       <p:column  headerText="メールアドレス">  

                 <h:outputText  value="#{person.emailaddress}"  />  

 </p:column></p:dataTable>  

Copyright  ©  2014,  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

パターン1~3のように どのように View 技術が変わっても

Copyright  ©  2014,  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

バックエンドをしっかり作る事で 柔軟なViewに対応可能

将来的にメンテナンス性が大幅向上

Copyright  ©  2014,  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

Copyright  ©  2014,  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

Java EE 8 のテーマ • HTML5 / Web 層の拡張

– HTTP 2.0 (SPDY) –  JSON バインディング – SSE (Server-Sent Events) – アクション・ベース MVC 1.0 –  JSF 2.3 ‒ Facelets, Ajax-CDI

• 開発生産性の向上 – CDI の適用範囲拡大 – Security インターセプタ –  JAX-RS 2.1 – WebSocket の改善

• Cloud Enablement – マルチテナント用設定 – セキュリティの拡張 – デプロイ/管理用の REST APIを提供

Copyright  ©  2014,  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

本日公開 • JSR-366 - Java EE 8 & Web Profile

–  JSR 107 - jCache –  JSR 365 - CDI 2.0 –  JSR 367 - JSON Binding –  JSR 368 - JMS 2.1 –  JSR 369 - Java Servlet 4.0 –  JSR 370 - JAX-RS 2.1 –  JSR 371 - MVC 1.0 –  JSR 372 - JSF 2.3

Copyright  ©  2014,  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

パターン4:サーバ・プッシュ- Server-Sents Events

• Java EE 6 • Java EE 7 • Java EE 8

ビュー関連処理 ビジネス・ロジック データ・アクセス

CDI

EJB

HTML5 (JavaScript)

ServerSent Events

JPA

Copyright  ©  2014,  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

パターン5:新しい Action MVC 実装モデル

• Java EE 6 • Java EE 7 • Java EE 8

ビュー関連処理 ビジネス・ロジック データ・アクセス

CDI

EJB

HTML5 (JavaScript)

MVC 1.0 (Facelets)

JAX-RS

JPA

Copyright  ©  2014,  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

Java EE 8 ロードマップ

アーリー・ドラフト レビュー 2015 Q1

パブリック レビュー 2015 Q3

Proposed ファイナル ドラフト 2015 Q4

正式リリース 2016 Q3

Java EE 8 参照実装 / SDK

2014 2015 2016 2017

JSR 登録 2014 Q2

2014 2015 2016 2017

Copyright  ©  2014,  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

Adopt-a-JSR for Java EE 8 • Java EE を改善するための草の根活動

http://adoptajsr.java.net

GET INVOLVED!

Copyright  ©  2014,  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

DOWNLOAD

oracle.com/javaee

GlassFish 4.0 Full Platform or Web Profile glassfish.org

Java EE 7 SDK

Copyright  ©  2014,  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

       

Oracle  Confiden@al  –  Internal/Restricted/Highly  Restricted   47  

Copyright  ©  2014,  Oracle  and/or  its  affiliates.  All  rights  reserved.    |   Oracle  Confiden@al  –  Internal/Restricted/Highly  Restricted   48