java ee8 report

41
Java EE 8 Report JavaOne2014 ササササササササ サササ Tokyo 2014/10/18 ササ ササ

Upload: norito-agetsuma

Post on 29-Nov-2014

2.944 views

Category:

Software


4 download

DESCRIPTION

JavaOne 2014 サンフランシスコ報告会 Tokyo のJava EEアップデートのセッション資料です。 #j1jp #jjug

TRANSCRIPT

Page 1: Java EE8 Report

Java EE 8 ReportJavaOne2014 サンフランシスコ 報告会 Tokyo

2014/10/18 上妻 宜人

Page 2: Java EE8 Report

• JavaOne 3 回生

• Java/AP サーバサポート , トラブル対応

• Software Design 2014 年 10 月号

上妻 宜人あげつま のりと

2012 2013 2014

Page 3: Java EE8 Report

Java EE 8SpecLead Linda DeMichiel

Page 4: Java EE8 Report

コミュニティアンケート結果JSONB, セキュリティ機能簡易化 , JCache, MVC …

Page 5: Java EE8 Report

Java EE 8 テーマコミュニティ要望・最新技術動向に応じた 3 つのテーマ

• HTML5 / Web 層の拡張• HTTP2, SSE, JSON Binding, JSON Patch ..

• かんたん開発• JSF @Inject FacesContext, CDI セキュリティインターセプ

• クラウド上でのインフラ• REST API 運用監視 , デプロイ etc

Page 6: Java EE8 Report

まだアイディア段階のため、以降の内容は変更の可能性あり

Page 7: Java EE8 Report

Servlet 4.0JSR369 https://www.jcp.org/en/jsr/detail?id=369

Page 8: Java EE8 Report

Servlet 4.0HTTP/2 対応• HTTP/2

• Google の SPDY プロトコルが原型• バイナリフレーム / ヘッダ圧縮 / 多重化• ヘッダの意味合い (GET/POST/200 OK など ) は基本的に踏

襲 client serverclient server

.html

.js, .png, .css

client server

ブラウザ実装によっては同時接続数『 6 』 1TCP 接続で多重化

Page 9: Java EE8 Report

Servlet 4.0HTTP/2 ストリームによる多重化

Connection : 1 つの TCP コネクション

Stream : コネクションに含まれるチャネル

Stream #1

Stream #2 .. #n

http://chimera.labs.oreilly.com/books/1230000000545/ch12.html#HTTP2_STREAMS_MESSAGES_FRAMES

Request Message

:method: GET:path: /index.html:version: HTTP/2.0

Frame : HTTP2.0 通信の最小単位

:status:200:version: HTTP/2.0

Server: nginx/..

HEADERS frame

responsepayload

DATA frameResponse Message

Page 10: Java EE8 Report

Servlet 4.0Servlet API 追加のアイディア

• StreamID へのアクセス• HttpServletRequest / HttpServletReponse が対象• int getStreamId()

Page 11: Java EE8 Report

Servlet 4.0HTTP/2 サーバプッシュ

client server

.html

.js

.png

.css

• WebSocket を置き換えるものではない

• 関連リソースをサーバプッシュ• 例えば html の要求がきたら• 関連の js, png, css もプッシュす

従来の 1 リクエスト = 1 レスポンス型では対応できないので要検討

public void doGet(HttpServletRequest req, HttpServletResponse res) ...

Page 12: Java EE8 Report

Java SE 9 でも HTTP/2HTTP 1.1 / 2 を対象に API を追加予定 (JEP110)

HttpRequestGroup group = HttpRequestGroup.create();HttpRequest res = group.createRequest() .setRequestMethod(“POST”) .setRequestURI(new URI(“http//www.foo.com/a/b”)) .setRequestBody(“Param1=1,Param2=2”) .onResponseHeader (“X-Foo”, (request, name, value) -> System.out.printf(“received an X-Foo header”); }) .sendRequest() .waitForCompletion();

Page 13: Java EE8 Report

MVC 1.0JSR371 https://jcp.org/en/jsr/detail?id=371

Page 14: Java EE8 Report

MVC 1.0アクションベース MVC の導入

• SpringMVC, JerseyMVC, Struts, VRaptor ...

• そもそも必要? JAX-RS に入れる?の議論があった

が、 結果的に独立した仕様として検討がスタートQ. Java EE は JSF に加えて新たな MVC をサポートすべきですか?

https://java.net/downloads/javaee-spec/JavaEE8_Community_Survey_Results.pdf

Page 15: Java EE8 Report

MVC 1.0MVC 1.0 テーマ

• 新たなテンプレートの”標準化”は対象外• Java EE 標準としては既に JSP と Facelets がある• 標準化はせずに、 OSS 実装と連携するアプローチ

• 既存仕様との連携• CDI, Bean Validation

Page 16: Java EE8 Report

MVC 1.0JavaOne の BOF でのラフアイディア• 初期 HTML 画面ページ

<form action=”/rough-example/form1a.jsp”><input id="input1" value="#{roughExampleBean.value}"/> <input id="submit" type="submit" value="Submit"/></form>

Page 17: Java EE8 Report

MVC 1.0JavaOne の BOF でのラフアイディア• CDI - Managed Bean

@Named("roughExampleBean”)@RequestScopedpublic class RoughExampleBean implements Serializable {

private String value;

@Path(value = "/form1a.jsp”) public String form1(@Inject HttpServletRequest request) { String input1 = request.getParameter("inputText1"); setValue("We set input1 manually to - " + input1); return "/form1b.jsp”; } … omitted getter/setter methods …}

Page 18: Java EE8 Report

MVC 1.0JavaOne の BOF でのラフアイディア

• 遷移先の HTML ページ

<body> result is: #{roughExampleBean.value}</body>

Page 19: Java EE8 Report

JSF 2.3JSR372 https://www.jcp.org/en/jsr/detail?id=372

Page 20: Java EE8 Report

JSF 2.3重複仕様の整理 / 小さな機能改善• CDI 連携の強化

• @Inject FacesContext

• Validator や Converter 実装クラスに @Inject できるようにする

• @javax.faces.bean.ManagedBean の扱い見直し• 非推奨ではなく、 @javax.inject.Named と同様として扱う

• EL 式のキャッシュによる性能向上

• マルチコンポーネントのバリデーション

Page 21: Java EE8 Report

JAX-RS 2.1JSR370 https://www.jcp.org/en/jsr/detail?id=370

Page 22: Java EE8 Report

JAX-RS 2.1パフォーマンス / SSE サポート• パフォーマンス向上

• Non-Blocking I/O API のサポート ( 主にサーバサイド )

• Reactive プログラミングモデル ( 主にクライアントサイド )

• SSE - Server Sent Event のサポート

• Java EE 内連携の強化• JSON-B : Java API for JSON Binding との連携• MVC1.0 との連携?

Page 23: Java EE8 Report

JSON-B 1.0JSR367 https://jcp.org/en/jsr/detail?id=367

Page 24: Java EE8 Report

JSON-B 1.0JSON と Java オブジェクトのマッピング

• JAXB (XML Binding) と同様に相互変換• 既存実装として Jackson data binding など

public class Customer { private String name; private String mailAddr; private String phoneNumber; ...}

{ “name”:“Norito Agetsuma”, “mailAddr”:“[email protected]”, “phoneNumber”:“xxx-xxxx-xxxx”}

Page 25: Java EE8 Report

JSON-B 1.0コード例 : マーシャライズ (Java -> JSON)

JsonContext context = new JsonContext.newInstance();

// プロパティ設定 , 見やすい JSON 生成 PrettyPrinting はオプションMarshaller marshaller = context.createMarshaller() .setProperty(Marshaller.Property); .setPrettyPrinting(true);

// JSON 文字列変換String string = marshaller.marshall(myObject);

// ファイルへmarshaller.marshall(myObject, new FileWriter(“file.json”));

Page 26: Java EE8 Report

JSON-B 1.0コード例 : マッピングアノテーション

• プロパティ名変更

• Enum マッピング

@JsonProperty(“longDesc”)String longDescription;

{ “longDesc”:”some params..”}

@JsonEnumpublic enum Option { @JsonEnumValue(“1”) OPTION_1, @JsonEnumValue(“2”) OPTION_2, @JsonEnumValue(“3”) OPTION_3}

{ “Option”:1}

Page 27: Java EE8 Report

JSON-P 1.1JSR TBD : JSON Patch など

Page 28: Java EE8 Report

JSON-P 1.1JSON Processing - Java EE 7 導入の JSON 処理 API

{ “name”:”Norito Agetsuma”, “mailAddr”:”[email protected]”, “phone”:”xxx-xxxx-xxxx”}

JsonObject customer = Json.createObjectBuilder() .add(“name”, “ Norito Agetsuma”) .add(“mailAddr”, “[email protected]”) .add(“phone”, “xxx-xxxx-xxxx”) .build();

StringWriter json = new StringWriter();try (JsonWriter writer = Json.createWriter(json)) { writer.writeObject(customer);}json.toString();

Page 29: Java EE8 Report

JSON-P 1.1Java EE 8 - JSON Patch

• JSON データの一部を置き換える仕組み – RFC6902

• HTTP “PATCH” と組み合わせて差分更新に使う• “PUT” は対象 URL のリソース全体を置き換えることを示

す• “POST” はリソースの新規作成に用途を絞るhttp://xxx/user/1

{ “name”:”n-agetsuma” “state”:”chiba tokyo” “phone”:”xxx-xxxx-xxxx”}

一部を変更したい

新規項目を追加したい

Page 30: Java EE8 Report

JSON-P 1.1HTTP “PATCH” メソッドで差分適用

{ “name”:”Norito Agetsuma” “state”:”Chiba tokyo” “ phone”:”xxx-xxxx-xxxx” ...}

PATCH /user/1 HTTP1.1Content-Type: application/json-patch[ {“op”:”replace”, “path”:”/state”, “value”:”tokyo”}, {“op”:”add”, “path”:”/phone”, “value”:”xxx-xxxx-xxxx”}]

Page 31: Java EE8 Report

JSON-P 1.1JSON Patch - API のアイディア// パッチ対象とパッチの生成JsonObject target = Json.createObjectBuilder().add(..).build();JsonArray patch = Json.createArrayBuilder() …build();

// パッチから JsonPatch の生成JsonPatch jsonpatch = Json.createPatch(patch);

// パッチの適用と結果取得JsonArray result = jsonpatch.apply(target);

Page 32: Java EE8 Report

CDI 2.0JSR365 https://jcp.org/en/jsr/detail?id=365

Page 33: Java EE8 Report

CDI 2.0非同期イベント機能の導入

@InjectEvent<NotifyAlarm> event;

public void fire() { // 各@Observesメソッドの終了を待たずに応答が返る event.fire(new NotifyAlarm(“server hang”));}

public void consumeA( @Observes(asynchronous=true) NotifyAlarm n) { n.getDetails(); ...}public void consumeB( @Observes(asynchronous=true) NotifyAlarm n) {..}

通知

通知する側

通知される側

通知される側

Page 34: Java EE8 Report

CDI 2.0モジュール化 , Java SE CDI起動 API

• 仕様のモジュール分割• CDI 仕様が肥大化してきて、 Weld 以外の安定実装が少な

い• 3 つに分割して、 3rd パーティ実装による機能提案を加速

• CDI Light : DI のみ。イベント , コンテキスト , AOP なし

• Events : CDI による Observer パターン実現 @Observes

等• Full CDI : 全ての仕様

• Java SE 上での CDI コンテナ起動 API の標準化

Page 35: Java EE8 Report

Java EE Management API 2.0JSR TBD : REST管理 API の標準化

Page 36: Java EE8 Report

Java EE Management API 2.0REST API による監視・デプロイの標準化• J2EE Management 1.1 - JSR77 の更新

• RESTT API による管理• 既に JSR77 で定義されている Java EE管理モデルに準拠• SSE - Server Sent Event による通知モデルの定義• MEJB API - リモート EJB によるアクセス仕様のオプショ

ン化

• REST API によるアプリケーションのデプロイ

Page 37: Java EE8 Report

Java EE Management API 2.0J2EE管理対象オブジェクトのモデル抜粋

http://download.oracle.com/otn-pub/jcp/j2ee_management-1_1-mrel-eval-oth-JSpec/j2ee_management-1.1-mrel-spec.pdf

Page 38: Java EE8 Report

Java EE Security1.0JSR TBD : セキュリティ関連機能の再構

Page 39: Java EE8 Report

Java EE Security 1.0詳細についてはこれから検討が始まる予定 

• 検討スコープを整理中• ユーザ管理• ロールマッピング• REST の認証・認可 ...

• CDI インターセプタによる認可制御

Page 40: Java EE8 Report

Java EE 8 ScheduleFinal 仕様リリースは 2016 年予定

• Early Draft 2015/Q1 アイディアが出始める

• Public Review 2015/Q3大分内容が固まってくる

• Proposed Final Draft 2015/Q4仕様によっては Final Draft で複数回の修正あり

• Final Release 2016/Q3

Page 41: Java EE8 Report

GlassFish 5Java EE 8 も RI は GlassFish

GlassFish5 に乞うご期待