SlideShare ist ein Scribd-Unternehmen logo
1 von 41
Java EE 8 Report 
JavaOne2014 サンフランシスコ報告会Tokyo 
2014/10/18 上妻宜人
上妻宜人 
あげつまのりと 
• JavaOne 3回生 
2012 2013 2014 
• Java/APサーバサポート, トラブル対応 
• Software Design 2014年10月号
Java EE 8 
SpecLead Linda DeMichiel
コミュニティアンケート結果 
JSONB, セキュリティ機能簡易化, JCache, MVC …
Java EE 8 テーマ 
コミュニティ要望・最新技術動向に応じた3つのテーマ 
• HTML5 / Web層の拡張 
• HTTP2, SSE, JSON Binding, JSON Patch .. 
• かんたん開発 
• JSF @Inject FacesContext, CDIセキュリティインターセプタ 
• クラウド上でのインフラ 
• REST API 運用監視, デプロイetc
まだアイディア段階のため、 
以降の内容は変更の可能性あり
Servlet 4.0 
JSR369 https://www.jcp.org/en/jsr/detail?id=369
Servlet 4.0 
HTTP/2 対応 
• HTTP/2 
• GoogleのSPDYプロトコルが原型 
• バイナリフレーム/ ヘッダ圧縮/ 多重化 
• ヘッダの意味合い(GET/POST/200 OK など) は基本的に踏襲 
client server client server 
.html 
.js, .png, .css 
client server 
ブラウザ実装によっては 
同時接続数『6』1TCP接続で多重化
Servlet 4.0 
HTTP/2 ストリームによる多重化 
Connection : 1つのTCPコネクション 
Stream #1 
Stream : コネクションに含まれるチャネル 
Response Message 
HEADERS frame 
:status:200 
:version: HTTP/2.0 
Server: nginx/.. 
Stream #2 .. #n 
Request Message 
Frame : HTTP2.0通信の最小単位 
:method: GET 
:path: /index.html 
:version: HTTP/2.0 
DATA frame 
response 
payload 
http://chimera.labs.oreilly.com/books/1230000000545/ch12.html#HTTP2_STREAMS_MESSAGES_FRAMES
Servlet 4.0 
Servlet API追加のアイディア 
• StreamIDへのアクセス 
• HttpServletRequest / HttpServletReponse が対象 
• int getStreamId()
Servlet 4.0 
HTTP/2 サーバプッシュ 
client server 
.html 
.js 
.png 
.css 
• WebSocketを置き換えるものではない 
• 関連リソースをサーバプッシュ 
• 例えばhtmlの要求がきたら 
• 関連のjs, png, css もプッシュする 
従来の1リクエスト= 1レスポンス型では対応できないので要検討 
public void doGet(HttpServletRequest req, HttpServletResponse res) ...
Java SE 9でもHTTP/2 
HTTP 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();
MVC 1.0 
JSR371 https://jcp.org/en/jsr/detail?id=371
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
MVC 1.0 
MVC 1.0 テーマ 
• 新たなテンプレートの”標準化”は対象外 
• Java EE標準としては既にJSPとFaceletsがある 
• 標準化はせずに、OSS実装と連携するアプローチ 
• 既存仕様との連携 
• CDI, Bean Validation
MVC 1.0 
JavaOneのBOFでのラフアイディア 
• 初期HTML画面ページ 
<form action=”/rough-example/form1a.jsp”> 
<input id="input1" value="#{roughExampleBean.value}"/> 
<input id="submit" type="submit" value="Submit"/> 
</form>
MVC 1.0 
JavaOneのBOFでのラフアイディア 
• CDI - Managed Bean 
@Named("roughExampleBean”) 
@RequestScoped 
public 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 … 
}
MVC 1.0 
JavaOneのBOFでのラフアイディア 
• 遷移先のHTMLページ 
<body> 
result is: #{roughExampleBean.value} 
</body>
JSF 2.3 
JSR372 https://www.jcp.org/en/jsr/detail?id=372
JSF 2.3 
重複仕様の整理/ 小さな機能改善 
• CDI 連携の強化 
• @Inject FacesContext 
• ValidatorやConverter実装クラスに@Injectできるようにする 
• @javax.faces.bean.ManagedBeanの扱い見直し 
• 非推奨ではなく、@javax.inject.Namedと同様として扱う 
• EL式のキャッシュによる性能向上 
• マルチコンポーネントのバリデーション
JAX-RS 2.1 
JSR370 https://www.jcp.org/en/jsr/detail?id=370
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 との連携?
JSON-B 1.0 
JSR367 https://jcp.org/en/jsr/detail?id=367
JSON-B 1.0 
JSONとJavaオブジェクトのマッピング 
• JAXB (XML Binding) と同様に相互変換 
• 既存実装としてJackson data binding など 
public class Customer { 
private String name; 
private String mailAddr; 
private String phoneNumber; 
... 
} 
{ 
“name”:“Norito Agetsuma”, 
“mailAddr”:“test@gmail.com”, 
“phoneNumber”:“xxx-xxxx-xxxx” 
}
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”));
JSON-B 1.0 
コード例: マッピングアノテーション 
• プロパティ名変更 
@JsonProperty(“longDesc”) 
String longDescription; 
• Enumマッピング 
{ 
“longDesc”:”some params..” 
} 
@JsonEnum 
public enum Option { 
@JsonEnumValue(“1”) OPTION_1, 
@JsonEnumValue(“2”) OPTION_2, 
@JsonEnumValue(“3”) OPTION_3 
} 
{ 
“Option”:1 
}
JSON-P 1.1 
JSR TBD : JSON Patch など
JSON-P 1.1 
JSON Processing - Java EE 7 導入のJSON処理API 
JsonObject customer = Json.createObjectBuilder() 
.add(“name”, “ Norito Agetsuma”) 
.add(“mailAddr”, “test@gmail.com”) 
.add(“phone”, “xxx-xxxx-xxxx”) 
.build(); 
StringWriter json = new StringWriter(); 
try (JsonWriter writer = Json.createWriter(json)) { 
writer.writeObject(customer); 
} 
json.toString(); 
{ 
“name”:”Norito Agetsuma”, 
“mailAddr”:”test@gmail.com”, 
“phone”:”xxx-xxxx-xxxx” 
}
JSON-P 1.1 
Java 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” 
} 
一部を変更したい 
新規項目を追加したい
JSON-P 1.1 
HTTP “PATCH” メソッドで差分適用 
PATCH /user/1 HTTP1.1 
Content-Type: application/json-patch 
[ 
{“op”:”replace”, “path”:”/state”, “value”:”tokyo”}, 
{“op”:”add”, “path”:”/phone”, “value”:”xxx-xxxx-xxxx”} 
] 
{ 
“name”:”Norito Agetsuma” 
“state”:”Chiba tokyo” 
“ phone”:”xxx-xxxx-xxxx” 
... 
}
JSON-P 1.1 
JSON Patch - APIのアイディア 
// パッチ対象とパッチの生成 
JsonObject target = Json.createObjectBuilder().add(..).build(); 
JsonArray patch = Json.createArrayBuilder() …build(); 
// パッチからJsonPatch の生成 
JsonPatch jsonpatch = Json.createPatch(patch); 
// パッチの適用と結果取得 
JsonArray result = jsonpatch.apply(target);
CDI 2.0 
JSR365 https://jcp.org/en/jsr/detail?id=365
CDI 2.0 
非同期イベント機能の導入 
@Inject 
Event<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) {..} 
通知 
通知する側 
通知される側 
通知される側
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の標準化
Java EE Management API 2.0 
JSR TBD : REST管理APIの標準化
Java EE Management API 2.0 
REST APIによる監視・デプロイの標準化 
• J2EE Management 1.1 - JSR77 の更新 
• RESTT API による管理 
• 既にJSR77で定義されているJava EE管理モデルに準拠 
• SSE - Server Sent Event による通知モデルの定義 
• MEJB API - リモートEJB によるアクセス仕様のオプション化 
• REST APIによるアプリケーションのデプロイ
Java EE Management API 2.0 
J2EE管理対象オブジェクトのモデル抜粋 
http://download.oracle.com/otn-pub/jcp/j2ee_management-1_1-mrel-eval-oth-JSpec/j2ee_management-1.1-mrel-spec.pdf
Java EE Security1.0 
JSR TBD : セキュリティ関連機能の再構築
Java EE Security 1.0 
詳細についてはこれから検討が始まる予定 
• 検討スコープを整理中 
• ユーザ管理 
• ロールマッピング 
• RESTの認証・認可... 
• CDIインターセプタによる認可制御
Java EE 8 Schedule 
Final仕様リリースは2016年予定 
• Early Draft 2015/Q1 
アイディアが出始める 
• Public Review 2015/Q3 
大分内容が固まってくる 
• Proposed Final Draft 2015/Q4 
仕様によってはFinal Draftで複数回の修正あり 
• Final Release 2016/Q3
GlassFish 5 
Java EE 8もRIはGlassFish 
GlassFish5に乞うご期待

Weitere ähnliche Inhalte

Was ist angesagt?

Struts2を始めよう!
Struts2を始めよう!Struts2を始めよう!
Struts2を始めよう!
Shinpei Ohtani
 

Was ist angesagt? (20)

はじめてのJPA
はじめてのJPAはじめてのJPA
はじめてのJPA
 
Advanced database monitoring in modern java
Advanced database monitoring in modern javaAdvanced database monitoring in modern java
Advanced database monitoring in modern java
 
Java Batch 仕様 (Public Review時点)
Java Batch 仕様 (Public Review時点) Java Batch 仕様 (Public Review時点)
Java Batch 仕様 (Public Review時点)
 
Java EEハンズオン資料 JJUG CCC 2015 Fall
Java EEハンズオン資料 JJUG CCC 2015 FallJava EEハンズオン資料 JJUG CCC 2015 Fall
Java EEハンズオン資料 JJUG CCC 2015 Fall
 
Heap statsfx analyzer
Heap statsfx analyzerHeap statsfx analyzer
Heap statsfx analyzer
 
JavaOne 2015 JDK Update (Jigsaw) #j1jp
JavaOne 2015 JDK Update (Jigsaw) #j1jpJavaOne 2015 JDK Update (Jigsaw) #j1jp
JavaOne 2015 JDK Update (Jigsaw) #j1jp
 
20160521 大規模映像配信サービスの Java8による全面リニューアルの裏側
20160521 大規模映像配信サービスの Java8による全面リニューアルの裏側20160521 大規模映像配信サービスの Java8による全面リニューアルの裏側
20160521 大規模映像配信サービスの Java8による全面リニューアルの裏側
 
Spring3.1概要x di
Spring3.1概要x diSpring3.1概要x di
Spring3.1概要x di
 
Introduction to JShell: the Java REPL Tool #jjug_ccc #ccc_ab4
Introduction to JShell: the Java REPL Tool #jjug_ccc #ccc_ab4Introduction to JShell: the Java REPL Tool #jjug_ccc #ccc_ab4
Introduction to JShell: the Java REPL Tool #jjug_ccc #ccc_ab4
 
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
 
Nashorn in the future (Japanese)
Nashorn in the future (Japanese)Nashorn in the future (Japanese)
Nashorn in the future (Japanese)
 
はまる!JPA(初学者向けライト版)
はまる!JPA(初学者向けライト版)はまる!JPA(初学者向けライト版)
はまる!JPA(初学者向けライト版)
 
10のJava9で変わるJava8の嫌なとこ!
10のJava9で変わるJava8の嫌なとこ!10のJava9で変わるJava8の嫌なとこ!
10のJava9で変わるJava8の嫌なとこ!
 
Javaはどのように動くのか~スライドでわかるJVMの仕組み
Javaはどのように動くのか~スライドでわかるJVMの仕組みJavaはどのように動くのか~スライドでわかるJVMの仕組み
Javaはどのように動くのか~スライドでわかるJVMの仕組み
 
Java EEを補完する仕様 MicroProfile
Java EEを補完する仕様 MicroProfileJava EEを補完する仕様 MicroProfile
Java EEを補完する仕様 MicroProfile
 
Jbatch実践入門 #jdt2015
Jbatch実践入門 #jdt2015Jbatch実践入門 #jdt2015
Jbatch実践入門 #jdt2015
 
Java9新機能概要
Java9新機能概要Java9新機能概要
Java9新機能概要
 
Struts2を始めよう!
Struts2を始めよう!Struts2を始めよう!
Struts2を始めよう!
 
マイクロフレームワークEnkan(とKotowari)ではじめるREPL駆動開発
マイクロフレームワークEnkan(とKotowari)ではじめるREPL駆動開発マイクロフレームワークEnkan(とKotowari)ではじめるREPL駆動開発
マイクロフレームワークEnkan(とKotowari)ではじめるREPL駆動開発
 
Prepare for Java 9 #jjug
Prepare for Java 9 #jjugPrepare for Java 9 #jjug
Prepare for Java 9 #jjug
 

Andere mochten auch

アプリ開発・端末毎の解像度の違いを吸収する方法 Android Bazaar and Conference 2011 Summer
アプリ開発・端末毎の解像度の違いを吸収する方法 Android Bazaar and Conference 2011 Summer アプリ開発・端末毎の解像度の違いを吸収する方法 Android Bazaar and Conference 2011 Summer
アプリ開発・端末毎の解像度の違いを吸収する方法 Android Bazaar and Conference 2011 Summer
Kunimasa Noda
 
社内Java8勉強会 ラムダ式とストリームAPI
社内Java8勉強会 ラムダ式とストリームAPI社内Java8勉強会 ラムダ式とストリームAPI
社内Java8勉強会 ラムダ式とストリームAPI
Akihiro Ikezoe
 
大規模化するピグライフを支えるインフラ ~MongoDBとChefについて~ (後編)
大規模化するピグライフを支えるインフラ ~MongoDBとChefについて~ (後編)大規模化するピグライフを支えるインフラ ~MongoDBとChefについて~ (後編)
大規模化するピグライフを支えるインフラ ~MongoDBとChefについて~ (後編)
Yuuki Namikawa
 
これからはじめるインフラエンジニア
これからはじめるインフラエンジニアこれからはじめるインフラエンジニア
これからはじめるインフラエンジニア
外道 父
 

Andere mochten auch (20)

JavaOne2014 報告会:Java Embedded 関連のアップデート
JavaOne2014 報告会:Java Embedded 関連のアップデートJavaOne2014 報告会:Java Embedded 関連のアップデート
JavaOne2014 報告会:Java Embedded 関連のアップデート
 
Tomcatの実装から学ぶクラスローダリーク #渋谷Java
Tomcatの実装から学ぶクラスローダリーク #渋谷JavaTomcatの実装から学ぶクラスローダリーク #渋谷Java
Tomcatの実装から学ぶクラスローダリーク #渋谷Java
 
JavaOne2014_LT
JavaOne2014_LTJavaOne2014_LT
JavaOne2014_LT
 
JavaOne2014参加報告LT
JavaOne2014参加報告LTJavaOne2014参加報告LT
JavaOne2014参加報告LT
 
HeapStatsの出展と発表を通して見えた JavaOne2014
HeapStatsの出展と発表を通して見えた JavaOne2014HeapStatsの出展と発表を通して見えた JavaOne2014
HeapStatsの出展と発表を通して見えた JavaOne2014
 
JJUG 2014 meetup - devoxx4kids 20141018
JJUG 2014 meetup  - devoxx4kids 20141018JJUG 2014 meetup  - devoxx4kids 20141018
JJUG 2014 meetup - devoxx4kids 20141018
 
Introduction to Wildfly 8 - Marchioni
Introduction to Wildfly 8 -  MarchioniIntroduction to Wildfly 8 -  Marchioni
Introduction to Wildfly 8 - Marchioni
 
Android端末のroot化について
Android端末のroot化についてAndroid端末のroot化について
Android端末のroot化について
 
アプリ開発・端末毎の解像度の違いを吸収する方法 Android Bazaar and Conference 2011 Summer
アプリ開発・端末毎の解像度の違いを吸収する方法 Android Bazaar and Conference 2011 Summer アプリ開発・端末毎の解像度の違いを吸収する方法 Android Bazaar and Conference 2011 Summer
アプリ開発・端末毎の解像度の違いを吸収する方法 Android Bazaar and Conference 2011 Summer
 
桐島、Rubyやめるってよ
桐島、Rubyやめるってよ桐島、Rubyやめるってよ
桐島、Rubyやめるってよ
 
Scala dreaded underscore
Scala dreaded underscoreScala dreaded underscore
Scala dreaded underscore
 
JSR 352 “Batch Applications for the Java Platform”
JSR 352 “Batch Applications for the Java Platform”JSR 352 “Batch Applications for the Java Platform”
JSR 352 “Batch Applications for the Java Platform”
 
Unixカーネルの設計 7 プロセスの制御
Unixカーネルの設計 7 プロセスの制御Unixカーネルの設計 7 プロセスの制御
Unixカーネルの設計 7 プロセスの制御
 
Javaトラブルに備えよう #jjug_ccc #ccc_h2
Javaトラブルに備えよう #jjug_ccc #ccc_h2Javaトラブルに備えよう #jjug_ccc #ccc_h2
Javaトラブルに備えよう #jjug_ccc #ccc_h2
 
Rubyからscalaに変えるべき15の理由
Rubyからscalaに変えるべき15の理由Rubyからscalaに変えるべき15の理由
Rubyからscalaに変えるべき15の理由
 
Git flowの活用事例
Git flowの活用事例Git flowの活用事例
Git flowの活用事例
 
社内Java8勉強会 ラムダ式とストリームAPI
社内Java8勉強会 ラムダ式とストリームAPI社内Java8勉強会 ラムダ式とストリームAPI
社内Java8勉強会 ラムダ式とストリームAPI
 
Sakura IoT Platform
Sakura IoT PlatformSakura IoT Platform
Sakura IoT Platform
 
大規模化するピグライフを支えるインフラ ~MongoDBとChefについて~ (後編)
大規模化するピグライフを支えるインフラ ~MongoDBとChefについて~ (後編)大規模化するピグライフを支えるインフラ ~MongoDBとChefについて~ (後編)
大規模化するピグライフを支えるインフラ ~MongoDBとChefについて~ (後編)
 
これからはじめるインフラエンジニア
これからはじめるインフラエンジニアこれからはじめるインフラエンジニア
これからはじめるインフラエンジニア
 

Ähnlich wie Java EE8 Report

明日から使える Java SE 7
明日から使える Java SE 7明日から使える Java SE 7
明日から使える Java SE 7
Yuichi Sakuraba
 
Ibm worklight デモ環境とサンプルコード
Ibm worklight デモ環境とサンプルコードIbm worklight デモ環境とサンプルコード
Ibm worklight デモ環境とサンプルコード
K Kimura
 
Pro aspnetmvc3framework chap19
Pro aspnetmvc3framework chap19Pro aspnetmvc3framework chap19
Pro aspnetmvc3framework chap19
Hideki Hashizume
 
Streaming API で実現する クラウド ⇔ イントラ連携
Streaming API で実現する クラウド ⇔ イントラ連携Streaming API で実現する クラウド ⇔ イントラ連携
Streaming API で実現する クラウド ⇔ イントラ連携
Shinichi Tomita
 
勉強会force#4 Chatter Integration
勉強会force#4 Chatter Integration勉強会force#4 Chatter Integration
勉強会force#4 Chatter Integration
Kazuki Nakajima
 
実践 Reactive Extensions
実践 Reactive Extensions実践 Reactive Extensions
実践 Reactive Extensions
Shin Ise
 
Azure サポート エンジニア直伝 ~ PowerShell 実践活用術 ~
Azure サポート エンジニア直伝 ~ PowerShell 実践活用術 ~Azure サポート エンジニア直伝 ~ PowerShell 実践活用術 ~
Azure サポート エンジニア直伝 ~ PowerShell 実践活用術 ~
ShuheiUda
 

Ähnlich wie Java EE8 Report (20)

Apache Torqueについて
Apache TorqueについてApache Torqueについて
Apache Torqueについて
 
明日から使える Java SE 7
明日から使える Java SE 7明日から使える Java SE 7
明日から使える Java SE 7
 
Ibm worklight デモ環境とサンプルコード
Ibm worklight デモ環境とサンプルコードIbm worklight デモ環境とサンプルコード
Ibm worklight デモ環境とサンプルコード
 
Pro aspnetmvc3framework chap19
Pro aspnetmvc3framework chap19Pro aspnetmvc3framework chap19
Pro aspnetmvc3framework chap19
 
Unit testing JavaScript with JUnit/JavaFX
Unit testing JavaScript with JUnit/JavaFXUnit testing JavaScript with JUnit/JavaFX
Unit testing JavaScript with JUnit/JavaFX
 
Seasarプロジェクト徹底攻略
Seasarプロジェクト徹底攻略Seasarプロジェクト徹底攻略
Seasarプロジェクト徹底攻略
 
jjugccc2018 app review postmortem
jjugccc2018 app review postmortemjjugccc2018 app review postmortem
jjugccc2018 app review postmortem
 
Ajax 応用
Ajax 応用Ajax 応用
Ajax 応用
 
Streaming API で実現する クラウド ⇔ イントラ連携
Streaming API で実現する クラウド ⇔ イントラ連携Streaming API で実現する クラウド ⇔ イントラ連携
Streaming API で実現する クラウド ⇔ イントラ連携
 
イマドキの現場で使えるJavaライブラリ事情
イマドキの現場で使えるJavaライブラリ事情イマドキの現場で使えるJavaライブラリ事情
イマドキの現場で使えるJavaライブラリ事情
 
基礎から見直す ASP.NET MVC の単体テスト自動化方法 ~ Windows Azure 関連もあるかも~
基礎から見直す ASP.NET MVC の単体テスト自動化方法 ~ Windows Azure 関連もあるかも~基礎から見直す ASP.NET MVC の単体テスト自動化方法 ~ Windows Azure 関連もあるかも~
基礎から見直す ASP.NET MVC の単体テスト自動化方法 ~ Windows Azure 関連もあるかも~
 
Clrh 110716 wcfwf
Clrh 110716 wcfwfClrh 110716 wcfwf
Clrh 110716 wcfwf
 
勉強会force#4 Chatter Integration
勉強会force#4 Chatter Integration勉強会force#4 Chatter Integration
勉強会force#4 Chatter Integration
 
何が変わった JavaFX 2.0
何が変わった JavaFX 2.0何が変わった JavaFX 2.0
何が変わった JavaFX 2.0
 
実践 Reactive Extensions
実践 Reactive Extensions実践 Reactive Extensions
実践 Reactive Extensions
 
From Swing to JavaFX - SwingからJavaFXへのマイグレーションガイド
From Swing to JavaFX  - SwingからJavaFXへのマイグレーションガイドFrom Swing to JavaFX  - SwingからJavaFXへのマイグレーションガイド
From Swing to JavaFX - SwingからJavaFXへのマイグレーションガイド
 
【改訂版あり】クラウド・ネイティブ時代に最適なJavaベースのマイクロサービス・フレームワーク ~ Helidonの実力を見極めろ!
【改訂版あり】クラウド・ネイティブ時代に最適なJavaベースのマイクロサービス・フレームワーク ~ Helidonの実力を見極めろ!【改訂版あり】クラウド・ネイティブ時代に最適なJavaベースのマイクロサービス・フレームワーク ~ Helidonの実力を見極めろ!
【改訂版あり】クラウド・ネイティブ時代に最適なJavaベースのマイクロサービス・フレームワーク ~ Helidonの実力を見極めろ!
 
Azure サポート エンジニア直伝 ~ PowerShell 実践活用術 ~
Azure サポート エンジニア直伝 ~ PowerShell 実践活用術 ~Azure サポート エンジニア直伝 ~ PowerShell 実践活用術 ~
Azure サポート エンジニア直伝 ~ PowerShell 実践活用術 ~
 
Gwt1
Gwt1Gwt1
Gwt1
 
Das 2015
Das 2015Das 2015
Das 2015
 

Java EE8 Report

  • 1. Java EE 8 Report JavaOne2014 サンフランシスコ報告会Tokyo 2014/10/18 上妻宜人
  • 2. 上妻宜人 あげつまのりと • JavaOne 3回生 2012 2013 2014 • Java/APサーバサポート, トラブル対応 • Software Design 2014年10月号
  • 3. Java EE 8 SpecLead Linda DeMichiel
  • 5. Java EE 8 テーマ コミュニティ要望・最新技術動向に応じた3つのテーマ • HTML5 / Web層の拡張 • HTTP2, SSE, JSON Binding, JSON Patch .. • かんたん開発 • JSF @Inject FacesContext, CDIセキュリティインターセプタ • クラウド上でのインフラ • REST API 運用監視, デプロイetc
  • 7. Servlet 4.0 JSR369 https://www.jcp.org/en/jsr/detail?id=369
  • 8. Servlet 4.0 HTTP/2 対応 • HTTP/2 • GoogleのSPDYプロトコルが原型 • バイナリフレーム/ ヘッダ圧縮/ 多重化 • ヘッダの意味合い(GET/POST/200 OK など) は基本的に踏襲 client server client server .html .js, .png, .css client server ブラウザ実装によっては 同時接続数『6』1TCP接続で多重化
  • 9. Servlet 4.0 HTTP/2 ストリームによる多重化 Connection : 1つのTCPコネクション Stream #1 Stream : コネクションに含まれるチャネル Response Message HEADERS frame :status:200 :version: HTTP/2.0 Server: nginx/.. Stream #2 .. #n Request Message Frame : HTTP2.0通信の最小単位 :method: GET :path: /index.html :version: HTTP/2.0 DATA frame response payload http://chimera.labs.oreilly.com/books/1230000000545/ch12.html#HTTP2_STREAMS_MESSAGES_FRAMES
  • 10. Servlet 4.0 Servlet API追加のアイディア • StreamIDへのアクセス • HttpServletRequest / HttpServletReponse が対象 • int getStreamId()
  • 11. Servlet 4.0 HTTP/2 サーバプッシュ client server .html .js .png .css • WebSocketを置き換えるものではない • 関連リソースをサーバプッシュ • 例えばhtmlの要求がきたら • 関連のjs, png, css もプッシュする 従来の1リクエスト= 1レスポンス型では対応できないので要検討 public void doGet(HttpServletRequest req, HttpServletResponse res) ...
  • 12. Java SE 9でもHTTP/2 HTTP 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();
  • 13. MVC 1.0 JSR371 https://jcp.org/en/jsr/detail?id=371
  • 14. 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
  • 15. MVC 1.0 MVC 1.0 テーマ • 新たなテンプレートの”標準化”は対象外 • Java EE標準としては既にJSPとFaceletsがある • 標準化はせずに、OSS実装と連携するアプローチ • 既存仕様との連携 • CDI, Bean Validation
  • 16. MVC 1.0 JavaOneのBOFでのラフアイディア • 初期HTML画面ページ <form action=”/rough-example/form1a.jsp”> <input id="input1" value="#{roughExampleBean.value}"/> <input id="submit" type="submit" value="Submit"/> </form>
  • 17. MVC 1.0 JavaOneのBOFでのラフアイディア • CDI - Managed Bean @Named("roughExampleBean”) @RequestScoped public 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 … }
  • 18. MVC 1.0 JavaOneのBOFでのラフアイディア • 遷移先のHTMLページ <body> result is: #{roughExampleBean.value} </body>
  • 19. JSF 2.3 JSR372 https://www.jcp.org/en/jsr/detail?id=372
  • 20. JSF 2.3 重複仕様の整理/ 小さな機能改善 • CDI 連携の強化 • @Inject FacesContext • ValidatorやConverter実装クラスに@Injectできるようにする • @javax.faces.bean.ManagedBeanの扱い見直し • 非推奨ではなく、@javax.inject.Namedと同様として扱う • EL式のキャッシュによる性能向上 • マルチコンポーネントのバリデーション
  • 21. JAX-RS 2.1 JSR370 https://www.jcp.org/en/jsr/detail?id=370
  • 22. 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 との連携?
  • 23. JSON-B 1.0 JSR367 https://jcp.org/en/jsr/detail?id=367
  • 24. JSON-B 1.0 JSONとJavaオブジェクトのマッピング • JAXB (XML Binding) と同様に相互変換 • 既存実装としてJackson data binding など public class Customer { private String name; private String mailAddr; private String phoneNumber; ... } { “name”:“Norito Agetsuma”, “mailAddr”:“test@gmail.com”, “phoneNumber”:“xxx-xxxx-xxxx” }
  • 25. 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”));
  • 26. JSON-B 1.0 コード例: マッピングアノテーション • プロパティ名変更 @JsonProperty(“longDesc”) String longDescription; • Enumマッピング { “longDesc”:”some params..” } @JsonEnum public enum Option { @JsonEnumValue(“1”) OPTION_1, @JsonEnumValue(“2”) OPTION_2, @JsonEnumValue(“3”) OPTION_3 } { “Option”:1 }
  • 27. JSON-P 1.1 JSR TBD : JSON Patch など
  • 28. JSON-P 1.1 JSON Processing - Java EE 7 導入のJSON処理API JsonObject customer = Json.createObjectBuilder() .add(“name”, “ Norito Agetsuma”) .add(“mailAddr”, “test@gmail.com”) .add(“phone”, “xxx-xxxx-xxxx”) .build(); StringWriter json = new StringWriter(); try (JsonWriter writer = Json.createWriter(json)) { writer.writeObject(customer); } json.toString(); { “name”:”Norito Agetsuma”, “mailAddr”:”test@gmail.com”, “phone”:”xxx-xxxx-xxxx” }
  • 29. JSON-P 1.1 Java 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” } 一部を変更したい 新規項目を追加したい
  • 30. JSON-P 1.1 HTTP “PATCH” メソッドで差分適用 PATCH /user/1 HTTP1.1 Content-Type: application/json-patch [ {“op”:”replace”, “path”:”/state”, “value”:”tokyo”}, {“op”:”add”, “path”:”/phone”, “value”:”xxx-xxxx-xxxx”} ] { “name”:”Norito Agetsuma” “state”:”Chiba tokyo” “ phone”:”xxx-xxxx-xxxx” ... }
  • 31. JSON-P 1.1 JSON Patch - APIのアイディア // パッチ対象とパッチの生成 JsonObject target = Json.createObjectBuilder().add(..).build(); JsonArray patch = Json.createArrayBuilder() …build(); // パッチからJsonPatch の生成 JsonPatch jsonpatch = Json.createPatch(patch); // パッチの適用と結果取得 JsonArray result = jsonpatch.apply(target);
  • 32. CDI 2.0 JSR365 https://jcp.org/en/jsr/detail?id=365
  • 33. CDI 2.0 非同期イベント機能の導入 @Inject Event<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) {..} 通知 通知する側 通知される側 通知される側
  • 34. 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の標準化
  • 35. Java EE Management API 2.0 JSR TBD : REST管理APIの標準化
  • 36. Java EE Management API 2.0 REST APIによる監視・デプロイの標準化 • J2EE Management 1.1 - JSR77 の更新 • RESTT API による管理 • 既にJSR77で定義されているJava EE管理モデルに準拠 • SSE - Server Sent Event による通知モデルの定義 • MEJB API - リモートEJB によるアクセス仕様のオプション化 • REST APIによるアプリケーションのデプロイ
  • 37. Java EE Management API 2.0 J2EE管理対象オブジェクトのモデル抜粋 http://download.oracle.com/otn-pub/jcp/j2ee_management-1_1-mrel-eval-oth-JSpec/j2ee_management-1.1-mrel-spec.pdf
  • 38. Java EE Security1.0 JSR TBD : セキュリティ関連機能の再構築
  • 39. Java EE Security 1.0 詳細についてはこれから検討が始まる予定 • 検討スコープを整理中 • ユーザ管理 • ロールマッピング • RESTの認証・認可... • CDIインターセプタによる認可制御
  • 40. Java EE 8 Schedule Final仕様リリースは2016年予定 • Early Draft 2015/Q1 アイディアが出始める • Public Review 2015/Q3 大分内容が固まってくる • Proposed Final Draft 2015/Q4 仕様によってはFinal Draftで複数回の修正あり • Final Release 2016/Q3
  • 41. GlassFish 5 Java EE 8もRIはGlassFish GlassFish5に乞うご期待