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