Java EE for Beginners

50

description

 

Transcript of Java EE for Beginners

Page 1: Java EE for Beginners
Page 2: Java EE for Beginners

これを聞けば分かる、 エンタープライズ 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  

Page 3: Java EE for Beginners

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

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

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

Page 4: Java EE for Beginners

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

Java EE 7 The standard in community-driven enterprise software

2013 年 6 月リリース

Page 5: Java EE for Beginners

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)

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

Page 6: Java EE for Beginners

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

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

どこから考える Java EE 開発

Page 7: Java EE for Beginners

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

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

どこから考える Java EE 開発

Page 8: Java EE for Beginners

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

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

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

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

ロジック

データ・アクセス

DB

Queue

Batch

Page 9: Java EE for Beginners

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

Page 10: Java EE for Beginners

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

3パターン

Page 11: Java EE for Beginners

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

Page 12: Java EE for Beginners

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

Page 13: Java EE for Beginners

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

Page 14: Java EE for Beginners

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

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

どこから考える Java EE 開発

Page 15: Java EE for Beginners

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

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

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

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

ロジック

データ・アクセス

DB

Page 16: Java EE for Beginners

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

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

Page 17: Java EE for Beginners

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

Page 18: Java EE for Beginners

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

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

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

ビジネス・ロジック

ロジック

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

DB

Page 19: Java EE for Beginners

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

データ・アクセス

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

–  JPA –  JMS – Batch

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

CDI

EJB

ビジネス・ロジック

JPA

Page 20: Java EE for Beginners

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

Page 21: Java EE for Beginners

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;  

}  

Page 22: Java EE for Beginners

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;  

}  

Page 23: Java EE for Beginners

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

Page 24: Java EE for Beginners

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

JPA

ビジネス・ロジック

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

– CDI – EJB

• データ・アクセス

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

CDI

EJB

ビジネス・ロジック

Page 25: Java EE for Beginners

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

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

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

Page 26: Java EE for Beginners

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の利用範囲が向上(より重要に)

Page 27: Java EE for Beginners

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();  

       }  

}  

Page 28: Java EE for Beginners

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();  

       }  

}  

Page 29: Java EE for Beginners

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;  

       }  

}  

Page 30: Java EE for Beginners

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;  

       }  

}  

Page 31: Java EE for Beginners

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

JPA CDI

EJB

ビュー

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

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

Page 32: Java EE for Beginners

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

HTML5/JavaScript に精通?

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

Page 33: Java EE for Beginners

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();  

       }  

}  

Page 34: Java EE for Beginners

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);  

       }  

}  

Page 35: Java EE for Beginners

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();  

       }  

}  

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

Page 36: Java EE for Beginners

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>  

Page 37: Java EE for Beginners

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

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

Page 38: Java EE for Beginners

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

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

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

Page 39: Java EE for Beginners

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

Page 40: Java EE for Beginners

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を提供

Page 41: Java EE for Beginners

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

Page 42: Java EE for Beginners

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

Page 43: Java EE for Beginners

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

Page 44: Java EE for Beginners

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

Page 45: Java EE for Beginners

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!

Page 46: Java EE for Beginners

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

Page 47: Java EE for Beginners

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

       

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

Page 48: Java EE for Beginners

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

Page 49: Java EE for Beginners
Page 50: Java EE for Beginners