Switch to mobile
Java EE8 Report
Upcoming SlideShare
Loading in...5
×
 
Like this presentation? Why not share!
Replay

Java EE8 Report

on

  • 444 views

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

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

Statistics

Views

Total Views
444
Views on SlideShare
197
Embed Views
247

Actions

Likes
1
Downloads
1
Comments
0

3 Embeds 247

http://kikutaro777.hatenablog.com 210
https://twitter.com 36
http://feedly.com 3

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Java EE8 Report Presentation Transcript

  • 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
  • 4. コミュニティアンケート結果 JSONB, セキュリティ機能簡易化, JCache, MVC …
  • 5. Java EE 8 テーマ コミュニティ要望・最新技術動向に応じた3つのテーマ • HTML5 / Web層の拡張 • HTTP2, SSE, JSON Binding, JSON Patch .. • かんたん開発 • JSF @Inject FacesContext, CDIセキュリティインターセプタ • クラウド上でのインフラ • REST API 運用監視, デプロイetc
  • 6. まだアイディア段階のため、 以降の内容は変更の可能性あり
  • 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に乞うご期待