SlideShare a Scribd company logo
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に乞うご期待

More Related Content

PPTX
Java EE パフォーマンスTips #glassfish_jp
PDF
JavaOne 2015 報告会 @ 東京 「About MVC 1.0 & JSON-P」
PPTX
JavaOne2015報告会 Java EE アップデート #j1jp
PDF
CDI2.0アップデート&クックブック #JavaDayTokyo #jdt2016_4c
PDF
Lt agetsuma 拡大するcdi
PDF
Javaアプリケーションサーバ 構築・運用の勘所
PDF
WildFly Swarmではじめる「パーツとしてのJavaEE」
PPTX
はじめてのJPA
Java EE パフォーマンスTips #glassfish_jp
JavaOne 2015 報告会 @ 東京 「About MVC 1.0 & JSON-P」
JavaOne2015報告会 Java EE アップデート #j1jp
CDI2.0アップデート&クックブック #JavaDayTokyo #jdt2016_4c
Lt agetsuma 拡大するcdi
Javaアプリケーションサーバ 構築・運用の勘所
WildFly Swarmではじめる「パーツとしてのJavaEE」
はじめてのJPA

What's hot (17)

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

Viewers also liked (20)

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

Similar to Java EE8 Report (20)

PDF
JavaOne2015報告またはこれからのJava
PDF
Scala EE 7 Essentials
PDF
SpringOne 2GX 2014 参加報告 & Spring 4.1について #jsug
PDF
Jjug springセッション
PDF
Javaで1から10まで書いた話(sanitized)
PDF
Spring Framework ふりかえりと4.3新機能
PDF
R5 3 type annotation
KEY
関ジャバ JavaOne Tokyo 2012報告会
PDF
MVC 1.0 JSR-371を通してAdopt a JSRに知ろう #jjug_ccc #ccc_r57
PDF
Spring Frameworkの今 (2013年版) #jjug_ccc #ccc_r17 #springframework
ODP
Spring2概論@第1回JSUG勉強会
PDF
Seasarプロジェクト徹底攻略
PPT
Spring mvc
PDF
Java EE 再入門
PPT
PDF
Using Ext Direct with SenchaTouch2
PPTX
Beginning Java EE 6 勉強会(1) #bje_study
PPTX
JavaOne 2016 Report for Java EE
PPTX
Spring I/O 2015 報告
PPTX
福井イベント
JavaOne2015報告またはこれからのJava
Scala EE 7 Essentials
SpringOne 2GX 2014 参加報告 & Spring 4.1について #jsug
Jjug springセッション
Javaで1から10まで書いた話(sanitized)
Spring Framework ふりかえりと4.3新機能
R5 3 type annotation
関ジャバ JavaOne Tokyo 2012報告会
MVC 1.0 JSR-371を通してAdopt a JSRに知ろう #jjug_ccc #ccc_r57
Spring Frameworkの今 (2013年版) #jjug_ccc #ccc_r17 #springframework
Spring2概論@第1回JSUG勉強会
Seasarプロジェクト徹底攻略
Spring mvc
Java EE 再入門
Using Ext Direct with SenchaTouch2
Beginning Java EE 6 勉強会(1) #bje_study
JavaOne 2016 Report for Java EE
Spring I/O 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に乞うご期待