Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Java EE 8 Planning 2014

41,680 views

Published on

Published in: Technology
  • Be the first to comment

Java EE 8 Planning 2014

  1. 1. Java EE の新たな旅立ち : Java EE 8 へ向かって Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | Yoshio Terada Java Evangelist Oracle
  2. 2. SAFE HARBOR STATEMENT 以下の事項は、弊社の一般的な製品の方向性に関する概要を説明するものです。また、 情報提供を唯一の目的とするものであり、いかなる契約にも組み込むことはできません 。以下の事項は、マテリアルやコード、機能を提供することをコミットメント(確約) するものではないため、購買決定を行う際の判断材料になさらないで下さい。オラクル 製品に関して記載されている機能の開発、リリースおよび時期については、弊社の裁量 により決定されます。 OracleとJavaは、Oracle Corporation 及びその子会社、関連会社の米国及びその他の国における登録商標です。文中の 社名、商品名等は各社の商標または登録商標である場合があります。 Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
  3. 3. Java EE の新たな旅立ち Java EE 8 へ向かって Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | Linda DeMichiel Java EE Spec Lead
  4. 4. 業界トレンドを注意深く観察 Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | Cloud
  5. 5. Java EE コミュニティ・アンケート Q & A Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | Java EE Spec Leads JavaOne 2014 San Francisco
  6. 6. Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
  7. 7. 開発者の要望に沿った新標準技術の選定 Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
  8. 8. Java EE 8 のテーマと新機能 HTML 5 かんたん開発 クラウド対応 Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
  9. 9. Java EE 8 のテーマと新機能  JSON-­‐Binding  JSON-­‐Processing の拡張  Server-­‐sent events  AcNon ベース MVC HTML 5  HTTP/2 のサポート Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
  10. 10. Java EE 8 のテーマと新機能  JSON-­‐Binding  JSON-­‐Processing の拡張  Server-­‐sent events  AcNon ベース MVC HTML 5  HTTP/2 のサポート Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
  11. 11. Java API for JSON Binding (JSON-B) • JSONとJavaオブジェクトの相互 変換 Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | Java Object JSON
  12. 12. Java API for JSON Binding (JSON-B) • 一貫性 (JAX-B, JPA, etc) • デフォルト・マッピング・ルール • アノテーションでカスタマイズ • JSON-P との連携 Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | Java Object JSON
  13. 13. JSON へのバインディング - Default Employee e = new Employee(); e.id = 1111; e.firstName = “Yoshio”; e.lastName = “Terada”; e.Email = “Y.Terada@oracle.com” { “id” : 1111, “firstName” : “Yoshio” “lastName” : “Terada” “email”:“Y.Terada@oracle.com” } Marshal Java Object JSON UnMarshal Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
  14. 14. import javax.json.bind.*; public void init() { JsonContext context = JsonContext.newInstance(); //Java -> JSON への変換用オブジェクト生成 Marshaller marshaller = context.createMarshaller(); //JSON -> Java への変換用オブジェクト生成 Unmarshaller unmarshaller = context.createUnmarshaller;} Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | 実行時の初期化
  15. 15. Marshal (Java → JSON へ変換) public void convertJava2JSON(MyObject myObject) { JsonContext context = JsonContext.newInstance(); Marshaller marshaller = context.createMarshaller(); //String に変換 String string = marshaller.marshal(myObject); //Writer に出力 marshaller.marshal(myObject, new FileWriter(“file.json”)); Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | }
  16. 16. Unmarshal (JSON → Java へ変換) public void convertJSON2Java(MyObject myObject) { JsonContext context = JsonContext.newInstance(); Unmarshaller unmarshaller = jsonContext.createUnmarshaller(); String s = "{"field":"Value"}"; //String から Java オブジェクトへ MyClass myInstance1 = (MyClass)unmarshaller.unmarshal(s); MyClass myInstance2 = unmarshaller.unmarshal(s, MyClass.class); //Reader から Java オブジェクトへ unmarshaller.unmarshal(new FileReader("file.json")); } Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
  17. 17. ユーティリティ・クラスを使用した簡易変換 public void convertJSON2Java() { //Java -­‐> JSON String myString = Jsonb.marshal(myObject); //JSON -­‐> Java MyObject object = Jsonb.unmarshal(someJsonString, MyObject.class);    Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | }
  18. 18. デフォルト・マッピング・ルール ※ JsonAdapter インタフェースを実装し、Date,Calendar,Date&Time API 等の日時変換も可能 ※ @JsonEnum アノテーションを指定し Enum も利用可能 ※ @JsonNillable(true) アノテーションを指定し JSON の値として null を扱う事も可能 Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
  19. 19. マッピング・ルールのカスタマイズ1 public String longDescription; @JsonProperty(“lDesc”) public String longDescription; { “longDescription” : “This is long description” } { “lDesc” : “This is long description” } Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | デフォルトのマッピング カスタム・マッピング
  20. 20. マッピング・ルールのカスタマイズ2 public String longDescription; @JsonTransient public String longDescription; { “longDescription” : “This is long description” } {  } Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | デフォルトのマッピング カスタム・マッピング フィールド無効化
  21. 21. マッピング・ルールのカスタマイズ3 public class Employee {   public String author;   public String title; } @JsonPropertyOrder(“title”, “author”) public class Employee {    public String author;    public String title; } { “author” : “Joshua Bloch” “title” : “Effective Java”, } {  “title” : “Effective Java”, “author” : “Joshua Bloch” } Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | デフォルトのマッピング カスタム・マッピング 順序変更
  22. 22. JSON-B (その他) • 継承・ポリモーフィズム対応 • ライフ・サイクル・イベント – JsonPreMarshal, JsonPreUnMarshal – JsonPostMarshal, JsonPostUnMarshal • など Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | Java Object JSON
  23. 23. Java EE 8 のテーマと新機能  JSON-­‐Binding  JSON-­‐Processing の拡張  Server-­‐sent events  AcNon ベース MVC HTML 5  HTTP/2 のサポート Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
  24. 24. JSON-Processing 1.1  JSON-­‐Pointer  JSON-­‐Patch  JSON クエリに対する Lambda & Stream API Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | 対応
  25. 25. JSON-Processing 1.1  JSON-­‐Pointer  JSON-­‐Patch  JSON クエリに対する Lambda & Stream API Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | 対応
  26. 26. • JSON-Pointer ‒ IETF RFC 6901 • 特定の値を参照するための構文 Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | JSON-Pointer
  27. 27. Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | JSON-Pointer [ { "name":"Duke", "gender":"M", "phones":{ "home":"650-­‐123-­‐4567", "mobile":"650-­‐234-­‐5678"}}, { "name":"Jane", "gender":"F", "phones":{ "mobile":"707-­‐555-­‐9999"}} ] "/0/phones/mobile"
  28. 28. JSON-Pointer の使用例  JsonArray contacts = Json.createArrayBuilder().add(…).build(); Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |  // JsonPointer オブジェクトの取得 JsonPointer p = Json.createPointer("/0/phones/mobile"); // Json オブジェクト(Array)中の指定したポインタの値を取得 JsonValue v = p.getValue(contacts); // 指定したポインタの値を変更し変更後の Json オブジェクト(Array)を返す JsonArray result = p.replace(contacts, "123-­‐4567");
  29. 29. Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | • getValue – 指定した位置の値を取得 • add – 指定した位置に値を追加/挿入 • replace – 指定した位置の値を変換 • remove – 指定した位置の値を削除 31 JsonPointer クラスで利用可能なメソッド ※ オリジナルの JSON は変更しない   変更後のオブジェクトを生成のみ ※ オリジナルの JSON の変更は    JsonPatch で実施
  30. 30. JSON-Processing 1.1  JSON-­‐Pointer  JSON-­‐Patch  JSON クエリに対する Lambda & Stream API Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | 対応
  31. 31. • JSON-Pointer ‒ IETF RFC 6902 • パッチも JSON ドキュメント – op, path フィールドが必須 • JSON オブジェクト、配列の操作 – 追加、変更、削除、移動、コピーなど Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | JSON-Patch
  32. 32. JSON-Patch を使用した特定値の変更 [ { "name":"Duke", "gender":"M", "phones":{ [ { "op":"replace", "path":"/0/phones/mobile", "value":"650-­‐111-­‐2222"}, ] Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | "home":"650-­‐123-­‐4567", "mobile":"650-­‐234-­‐5678"} } ] "650-­‐111-­‐2222" 操 作 対象の JSON ドキュメント JSON Patch ドキュメント
  33. 33. JSON-Patch を使用した特定値の削除 [ { "op":"remove”, "path":"/0" } ] [  配列の ] 操作対象の JSON ドキュメント JSON Patch ドキュメント Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | 1 番目の要素を全削除 [ { "name":"Duke", "gender":"M", "phones":{ "home":"650-­‐123-­‐4567", "mobile":"650-­‐234-­‐5678"} } ]
  34. 34. JSON-Patch の使用例  // Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | 変更対象の JSON 配列と、パッチを記載したJSON 配列を生成  JsonArray target = Json.createArrayBuilder().add(…).build();  JsonArray patch = Json.createArrayBuilder()… .build();  // patch オブジェクトから JsonPatch オブジェクトを生成  JsonPatch jsonpatch = Json.createPatch(patch);  // 変更対象に対してパッチを適用し、結果を取得  JsonArray result = jsonpatch.apply(target);
  35. 35. JSON-Processing 1.1  JSON-­‐Pointer  JSON-­‐Patch  JSON クエリに対する Lambda & Stream API Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | 対応
  36. 36. Java SE 8 : Lambda & Stream API 対応 JsonObject JsonArray Map List Stream API を利用して JSON のデータに対するバルク処理が可能 Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
  37. 37. Java SE 8 : Lambda & Stream API 対応 JsonArray contacts = ...; List<String> femaleNames = contacts.getValuesAs(JsonObject.class).stream() .filter(x-­‐>"F".equals(x.getString("gender"))) .map(x-­‐>(x.getString("name")) .collect(Collectors.toList()); Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
  38. 38. Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | • toJsonArray – JsonArray に結果の値を蓄積 • toJsonObject – JsonObject に結果の値を蓄積 • groupBy – 結果の値に対するグルーピング 40 JsonCollectors : JSON 用の Collectors
  39. 39. JsonCollectors の利用例 JsonArray contacts = ...; JsonArray femaleNames = contacts.getValuesAs(JsonObject.class).stream() .filter(x-­‐>"F".equals(x.getString("gender"))) .map(x-­‐>(x.getString("name")) .collect(JsonCollectors.toJsonArray()); Stream の操作結果から JsonArray を生成 Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
  40. 40. Lambda 式のクエリから Patch まで Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | • 電話番号の地域番号を変更 “415” → “650” 42 static int index = -­‐1; JsonArray patch = contacts.getValuesAs(JsonObject.class).stream() .peek(x-­‐>index++) .filter(x-­‐>x.getObject("phone").getString("areacode").equals("415")) .map(Json.createObjectBuilder() .add("op", "replace") .add("path", "/"+index+"/phone/areacode") .add("value", “650”) .build()) .collect(JsonCollectors.toJsonArray()); JsonArray result = Json.createPatch(patch).apply(contacts);
  41. 41. Java EE 8 のテーマと新機能  JSON-­‐Binding  JSON-­‐Processing の拡張  Server-­‐sent events  AcNon ベース MVC HTML 5  HTTP/2 のサポート Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
  42. 42. Long-Polling 対 SSE 対 WebSocket Long Polling SSE WebSocket Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | • HTTP を利用 • 手動再接続 • 非標準 • HTTP を利用 • 再接続、再配送 • HTML 5 標準 • 新プロトコル利用 • 全二重通信 • HTML 5 標準
  43. 43. Server-sent events の実装検討中 Servlet WebSocket JAX-RS 実装が有望 JAX-RS h^ps://java.net/downloads/javaee-­‐spec/SSE-­‐in-­‐EE8.pdf Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
  44. 44. JAX-RS SSE 実装:イベント・フロー Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
  45. 45. JAX-RS SSE 実装:Server 側 @Path("tickers") public class StockTicker { @Get @Produces("text/event-­‐stream") public EventOutput getQuotes() { EventOutput eo = new EventOutput(); new StockThread(eo).start() return eo; Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | } }
  46. 46. JAX-RS SSE 実装 : Server 側 Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | class StockThread extends Thread { private EventOutput eo; private AtomicBoolean ab = new AtomicBoolean(true); public StockThread(EventOutput eo) { this.eo = eo; } public void terminate() { ab.set(false); } @Override public void run() { while (ab.get()) { try { // ... eo.send(new StockQuote("...")); } catch (IOException e) { // ... } } }}
  47. 47. JAX-RS SSE 実装 : Client 側 WebTarget target = client.target("http://example.com/tickers"); EventSource eventSource = new EventSource(target) { @Override public void onEvent(InboundEvent inboundEvent) { StockQuote sq = inboundEvent.readData(StockQuote.class); // ... } }; eventSource.open(); Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
  48. 48. Java EE 8 のテーマと新機能  JSON-­‐Binding  JSON-­‐Processing の拡張  Server-­‐sent events  AcNon ベース MVC HTML 5  HTTP/2 のサポート Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
  49. 49. Action Base MVC 1.0 : 現在詳細を検討中 Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | • 既存 Java EE 技術の接着剤 Model View Controller CDI , JPA, Bean Validation Facelets, JSP, JAX-RS のような既存技術?新技術?未定
  50. 50. <!DOCTYPE html PUBLIC "-­‐//W3C//DTD XHTML 1.0 TransiNonal//EN" "h^p://www.w3.org/TR/xhtml1/DTD/xhtml1-­‐transiNonal.dtd"> Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | <html> <head> <Ntle>かんたんなサンプル・ページ</Ntle> </head> <body> <form acNon=”/rough-­‐example/form1a.jsp”> <input id=“input1” value=“#{roughExampleBean.value}”/> <input id=“submit” type=“submit” value=“実行"/> </form> </body> </html> 52 JSP による View 実装例
  51. 51. @Named(“roughExampleBean”) @RequestScoped public class RoughExampleBean implements Serializable { private String value; @Path(value = “/form1a.jsp”) public String form1(@Inject H^pServletRequest request) { String input1 = request.getParameter(“input1”); setValue(“手動で input1 に値設定 -­‐ " + input1); Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | return "/form1b.jsp”; } … ge^er/se^er メソッド … } 53 JSP による Model/Controller 実装例
  52. 52. <!DOCTYPE html PUBLIC "-­‐//W3C//DTD XHTML 1.0 TransiNonal//EN” "h^p://www.w3.org/TR/xhtml1/DTD/xhtml1-­‐transiNonal.dtd"> <html> <head> <Ntle>かんたんな結果ページのサンプル</Ntle> </head> <body> AcNon Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | ベースの URL に POST を実行、実行結果 : #{roughExampleBean.value} </body> </html> 54 JSP による画面遷移実装例
  53. 53. <!DOCTYPE html PUBLIC "-­‐//W3C//DTD XHTML 1.0 TransiNonal//EN" "h^p://www.w3.org/TR/xhtml1/DTD/xhtml1-­‐transiNonal.dtd"> Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | <html> <head> <Ntle>かんたんなサンプル・ページ</Ntle> </head> <body> <form acNon=”/rough-­‐example/form1a.xhtml”> <input id="input1" jsf:value="#{roughExampleBean.value}"/> <input id="submit" type="submit" value="Submit"/> </form> </body> </html> 55 Facelets による View 実装例
  54. 54. @Named(“roughExampleBean”) @RequestScoped public class RoughExampleBean implements Serializable { private String value; @Path(value = “/form1a.xhtml”) public String form1(@Inject H^pServletRequest request) { String input1 = request.getParameter(“input1”); setValue(“手動で input1 に値設定 -­‐ " + input1); Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | return "/form1b.xhtml”; } … omi^ed ge^er/se^er methods … } 56 Facelets による Model/Controller 実装例
  55. 55. <!DOCTYPE html PUBLIC "-­‐//W3C//DTD XHTML 1.0 TransiNonal//EN” "h^p://www.w3.org/TR/xhtml1/DTD/xhtml1-­‐transiNonal.dtd"> <html> <head> <Ntle>かんたんな結果ページのサンプル</Ntle> </head> <body> AcNon Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | ベースの URL に POST を実行、実行結果 : #{roughExampleBean.value} </body> </html> 57 Facelets による画面遷移実装例
  56. 56. Java EE 8 のテーマと新機能  JSON-­‐Binding  JSON-­‐Processing の拡張  Server-­‐sent events  AcNon ベース MVC HTML 5  HTTP/2 のサポート Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
  57. 57. Servlet 4.0 で HTTP/2 に対応 • HTTP/2 100 % 準拠 : API の拡張検討箇所 Request/response の多重化 Stream の優先順位付け Server Push Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
  58. 58. Java EE 8 のテーマと新機能 CDI のセキュリティ・インタセプタ Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |  CDI の適用範囲拡大  仕様の削減 (Pruning) かんたん開発
  59. 59. Java EE 8 のテーマと新機能 CDI のセキュリティ・インタセプタ Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |  CDI の適用範囲拡大  仕様の削減 (Pruning) かんたん開発
  60. 60. Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | JSR 299 JSR 365 Contexts and Dependency Injection for the Java™ EE platform Contexts and Dependency Injection for Java™ 2.0
  61. 61. Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | CDI 2.0 Java SE 環境で利用可能 モジュール化 他機能との連携
  62. 62. CDI 2.0 : Java SE 環境で利用可能 Java SE 環境で CDI を利用できるようにするため Bootstrap API を提供予定 Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
  63. 63. CDI 2.0 : モジュール化 多くの機能が追加される事で CDI の肥大化を懸念 Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | ①CDI Light (DIだけ) ②CDI Event Contexts, AOP, SPI など ③ Full CDI
  64. 64. CDI 2.0 : 他機能との連携強化 ‒ JMS 2.1 MDB の実装不要: EJB コンテナ外でメッセージ監視が可能 @RequestScoped public class MyListenerBean { @JMSListener(destinationLookup="jms/myQueue") @Transactional public void myCallback(Message message) { Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | ... } }
  65. 65. Java EE 8 のテーマと新機能 Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |  CDI の適用範囲拡大 CDI のセキュリティ・インタセプタ  仕様の削減 (Pruning) かんたん開発
  66. 66. CDI のインターセプターを利用した認可 @IsAuthorized("hasRoles('Manager') && schedule.officeHrs") void transferFunds(); @IsAuthorized("hasRoles('Manager') && hasAttribute('directReports', employee.id)") double getSalary(long employeeId); @IsAuthorized(ruleSourceName="java:app/payrollAuthRules", Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | rule="report") void displayReport();
  67. 67. Java EE 8 のテーマと新機能 CDI のセキュリティ・インタセプタ Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |  CDI の適用範囲拡大  仕様の削減 (Pruning) かんたん開発
  68. 68. 仕様の削減: EJB 2.x クライアント・ビュー Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | public interface PayrollHome extends javax.ejb.EJBLocalHome { public Payroll create() throws CreateException; ... } public interface Payroll extends javax.ejb.EJBLocalObject { public double getSalary(int empId); ... } public interface Payroll { public double getSalary(int EmpId); ... }
  69. 69. Java EE 8 のテーマと新機能  Java EE Management 2.0  Java Security 1.0 Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | クラウド対応
  70. 70. Java EE 8 のテーマと新機能  Java EE Management 2.0  Java Security 1.0 Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | クラウド対応
  71. 71. Java EE Management 2.0 • JSR 77 : J2EE™ Management のアップデート プログラミングで、アプリケーション・ サーバの管理が可能 (サーバ実装に非依存) • リソース • アプリケーション・ライフサイクル REST インタフェースを追加 Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
  72. 72. Java EE 8 のテーマと新機能  Java EE Management 2.0  Java Security 1.0 Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | クラウド対応
  73. 73. Java EE Security 1.0 Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | 移植性、柔軟性、かんたん パスワード・エイリアス ユーザ管理 ロール・マッピング
  74. 74. パスワード・エイリアス Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | @DataSourceDefinition(  name="java:app/MyDataSource", className="com.example.MyDataSource", ... user="duke", password="${ALIAS=dukePassword}”) ソースコードや XML 中に記載される生パスワードの記述を排除
  75. 75. ユーザ管理 h^ps://java.net/jira/browse/JAVAEE_SPEC-­‐9 Java EE 7 までユーザ管理の実装は ベンダー依存で面倒 Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | 106 ページ • ベンダー依存のユーザ・グループ管理を排除 • デフォルトでユーザ管理用の API を容易 参考:h^p://www.slideshare.net/OracleMiddleJP/java-­‐ee-­‐detail-­‐of-­‐jdbcrealm
  76. 76. UserSourceDefinition • アプリーションで使用するユーザ情報を含むデータ・ソース – DataBase – LDAP – アプリケーション・サーバ – JSR 351 Identity – メモリ – 独自 Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | DB, LDAP UserInfo UserService UserSource
  77. 77. • ユーザ・グループに対する CRUD 操作:デフォルトで提供 – UserInfo の読み込み – ユーザ作成 – ユーザ削除 – ユーザ情報更新 – パスワード変更 – ユーザ有無確認 – グループ作成 Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | DB, LDAP UserInfo UserService UserSource UserService – グループへユーザ追加 – グループからユーザ削除 – グループ中のユーザ有無確認
  78. 78. Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | • ユーザの属性管理 – ユーザ名 – パスワード – アカウントの有効期限 – アカウントのロック状態 – パスワードの有効期限 – 利用可能の確認 – 追加属性 DB, LDAP UserInfo UserService UserSource UserInfo
  79. 79. ユーザ管理プログラムの実装例 @LdapUserSourceDefinition( name=“java:app/ldapUserSource”, ldapUrl="ldap://someURL", ldapUser=“ElDap”, ldapPassword="${ALIAS=LdapPW}”) public class MyAuthenticator { @Resource(lookup="java:app/ldapUserSource") private UserService userService; private boolean isAccountEnabled(String username) { return userService.loadUserByUsername(username).isEnabled(); Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | } ... }
  80. 80. ロール・マッピング管理 h^ps://java.net/jira/browse/JAVAEE_SPEC-­‐9 Java EE 7 までロール管理の実装は ベンダー依存で面倒 Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | 106 ページ • ロール管理の標準化 参考:h^p://www.slideshare.net/OracleMiddleJP/java-­‐ee-­‐detail-­‐of-­‐jdbcrealm
  81. 81. • プログラム、もしくは永続化先にロールを記述 – LdapRoleMapper – ServerRoleMapper – MemoryRoleMapper – DataSourceRoleMapper – CustomRoleMapper – GroupIsRoleMappe Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | App LDAP RoleService RoleMapper RoleMapper
  82. 82. • ロール管理用の機能を提供 – ユーザに権限を付加 – ユーザから権限を排除 – ユーザ権限の有無を確認 – 特定のロールを持つユーザ一覧取得 – グループに権限付加 – グループから権限を排除 – グループの権限の有無を確認 – など App Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | LDAP RoleService RoleMapper RoleService
  83. 83. ロール・マッピング管理プログラムの実装例 Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | @MemoryRoleMapperDefinition( name=“java:app/devRoleMapper”,             users={                @RoleMap(user=“foo”,roles=“admin”),                @RoleMap(group=“admin”,roles={“admin”,”staff”})             } ) @Resource(lookup="java:app/devRoleMapper")  RoleService roleService;  List<String> getRoles(String username) { return roleService.getRolesForUser(username);  }
  84. 84. Java EE 8 2016 年 リリース予定 The standard in community-driven enterprise software Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
  85. 85. Java EE 8 (JSR 366) 満場一致の承認! Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | 87
  86. 86. 2013 2014 2015 2017 Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | Java EE 7 • HTML 5, WebSocket, JSON-­‐ P,REST, Servlet NIO • ProducNvity More annotated POJOs, less boillerplate code, cohesive plaxorm • Meet Enterprise Demand, Batch, Concurrency Java EE 8 JSR 366 開始 • Approved unanimously • HTML 5 and web enhancements • Ease of development and CDI alignment • Running in the cloud Java EE 8 GA • JSON Binding, JAX-­‐RS 2.1 • JMS 2.1, Servlet 4.0 • Model-­‐View-­‐Controller 1.0 • Java EE Security 1.0, Java EE Management 2.0, JSON-­‐P 1.1 Java EE 8 Community Survey • Three part survey • PrioriNzed features • 4500+ response • Shared results 88 GlassFish 5 • Java EE 8 RI • Java EE 8 SDK 2016 Java EE のロードマップ
  87. 87. • 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. | 登録済み JSR 一覧
  88. 88. Java EE 8 で改善予定の機能候補一覧 Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | • EL • Concurrency UNliNes • Connector Architecture • WebSocket • Interceptors • JPA • EJB • JTA • JCache • Bean ValidaNon • Batch • JavaMail • …
  89. 89. JCP による透明性のある開発 h^p://javaee-­‐spec.java.net/ Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
  90. 90. Java EE 8 に対する貢献・情報収集 Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | • Adopt a JSR – h^p://glassfish.org/adoptajsr • エキスパート・グループへの参加 – h^p://javaee-­‐spec.java.net • Aquarium のブログ – h^p://blogs.oracle.com/theaquarium • GlassFish : Java EE 8 の参照実装 – h^p://glassfish.org
  91. 91. Adopt-a-JSR for Java EE 8 • Java EE を改善するための草の根活動 Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | http://adoptajsr.java.net GET INVOLVED!
  92. 92. Java EE 8 のリリース お楽しみにしてください !! Q & A Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
  93. 93. Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |

×