java ee 8 planning 2014

97

Upload: oracle-fusion-middleware

Post on 26-Jun-2015

19.159 views

Category:

Technology


4 download

TRANSCRIPT

Page 1: Java EE 8 Planning 2014
Page 2: Java EE 8 Planning 2014
Page 3: Java EE 8 Planning 2014

Copyright  ©  2014,  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

Java EE の新たな旅立ち : Java EE 8 へ向かって

Yoshio  Terada  Java  Evangelist    Oracle  

Page 4: Java EE 8 Planning 2014

Copyright  ©  2014,  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

以下の事項は、弊社の一般的な製品の方向性に関する概要を説明するものです。また、情報提供を唯一の目的とするものであり、いかなる契約にも組み込むことはできません。以下の事項は、マテリアルやコード、機能を提供することをコミットメント(確約)するものではないため、購買決定を行う際の判断材料になさらないで下さい。オラクル製品に関して記載されている機能の開発、リリースおよび時期については、弊社の裁量により決定されます。

OracleとJavaは、Oracle Corporation 及びその子会社、関連会社の米国及びその他の国における登録商標です。文中の社名、商品名等は各社の商標または登録商標である場合があります。

SAFE  HARBOR  STATEMENT  

Page 5: Java EE 8 Planning 2014

Copyright  ©  2014,  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

Java EE の新たな旅立ち Java EE 8 へ向かって

Linda  DeMichiel  Java  EE  Spec  Lead

Page 6: Java EE 8 Planning 2014

Copyright  ©  2014,  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

Clou

d  

業界トレンドを注意深く観察

Page 7: Java EE 8 Planning 2014

Copyright  ©  2014,  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

Q  &  A  

Java EE コミュニティ・アンケート

Java  EE  Spec  Leads  JavaOne  2014  San  Francisco

Page 8: Java EE 8 Planning 2014

Copyright  ©  2014,  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

Page 9: Java EE 8 Planning 2014

Copyright  ©  2014,  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

開発者の要望に沿った新標準技術の選定

Page 10: Java EE 8 Planning 2014

Copyright  ©  2014,  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

Java EE 8 のテーマと新機能

HTML 5 かんたん開発 クラウド対応

Page 11: Java EE 8 Planning 2014

Copyright  ©  2014,  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

Java EE 8 のテーマと新機能

 JSON-­‐Binding  JSON-­‐Processing  の拡張

 Server-­‐sent  events

 AcNon  ベース  MVC  

 HTTP/2  のサポート HTML 5

Page 12: Java EE 8 Planning 2014

Copyright  ©  2014,  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

Java EE 8 のテーマと新機能

 JSON-­‐Binding  JSON-­‐Processing  の拡張

 Server-­‐sent  events

 AcNon  ベース  MVC  

 HTTP/2  のサポート HTML 5

Page 13: Java EE 8 Planning 2014

Copyright  ©  2014,  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

•  JSONとJavaオブジェクトの相互変換

Java Object JSON

Java API for JSON Binding (JSON-B)

Page 14: Java EE 8 Planning 2014

Copyright  ©  2014,  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

• 一貫性 (JAX-B, JPA, etc) • デフォルト・マッピング・ルール • アノテーションでカスタマイズ • JSON-P との連携

Java Object JSON

Java API for JSON Binding (JSON-B)

Page 15: Java EE 8 Planning 2014

Copyright  ©  2014,  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

 Employee  e  =  new  Employee();    e.id  =  1111;  

 e.firstName  =  “Yoshio”;  

 e.lastName  =    “Terada”;  

 e.Email  =  “[email protected]

 {      “id”  :  1111,  

   “firstName”  :  “Yoshio”  

   “lastName”    :  “Terada”  

   “email”:“[email protected]”  

 }  

JSON へのバインディング - Default

Java Object JSON Marshal

UnMarshal

Page 16: Java EE 8 Planning 2014

Copyright  ©  2014,  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

 import  javax.json.bind.*;    public  void  init()  {        JsonContext  context  =  JsonContext.newInstance();   //Java -> JSON への変換用オブジェクト生成      Marshaller  marshaller  =  context.createMarshaller();   //JSON -> Java への変換用オブジェクト生成      Unmarshaller  unmarshaller  =                                                          context.createUnmarshaller;}  

実行時の初期化

Page 17: Java EE 8 Planning 2014

Copyright  ©  2014,  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

 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”));    }  

Marshal (Java → JSON へ変換)

Page 18: Java EE 8 Planning 2014

Copyright  ©  2014,  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

 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"));  

 }  

Unmarshal (JSON → Java へ変換)

Page 19: Java EE 8 Planning 2014

Copyright  ©  2014,  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

 public  void  convertJSON2Java()  {          //Java  -­‐>  JSON          String  myString  =  Jsonb.marshal(myObject);            //JSON  -­‐>  Java          MyObject  object  =  Jsonb.unmarshal(someJsonString,                                                                                          MyObject.class);     }  

ユーティリティ・クラスを使用した簡易変換

Page 20: Java EE 8 Planning 2014

Copyright  ©  2014,  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

※ JsonAdapter インタフェースを実装し、Date,Calendar,Date&Time API 等の日時変換も可能 ※ @JsonEnum アノテーションを指定し Enum も利用可能 ※ @JsonNillable(true) アノテーションを指定し JSON の値として null を扱う事も可能

デフォルト・マッピング・ルール

Page 21: Java EE 8 Planning 2014

Copyright  ©  2014,  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

マッピング・ルールのカスタマイズ1

 public  String  longDescription;  

   @JsonProperty(“lDesc”)  

 public  String  longDescription;  

 

 {          “longDescription”  :    

       “This  is  long  description”  

 }  

 {          “lDesc”  :    

       “This  is  long  description”  

 }  

デフォルトのマッピング

カスタム・マッピング

Page 22: Java EE 8 Planning 2014

Copyright  ©  2014,  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

マッピング・ルールのカスタマイズ2

 public  String  longDescription;  

   @JsonTransient  

 public  String  longDescription;  

 

 {          “longDescription”  :    

       “This  is  long  description”  

 }  

 {   }  

デフォルトのマッピング

カスタム・マッピング フィールド無効化

Page 23: Java EE 8 Planning 2014

Copyright  ©  2014,  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

マッピング・ルールのカスタマイズ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”  

}  

デフォルトのマッピング

カスタム・マッピング 順序変更

Page 24: Java EE 8 Planning 2014

Copyright  ©  2014,  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

• 継承・ポリモーフィズム対応 • ライフ・サイクル・イベント

– JsonPreMarshal, JsonPreUnMarshal – JsonPostMarshal, JsonPostUnMarshal

• など

Java Object JSON

JSON-B (その他)

Page 25: Java EE 8 Planning 2014

Copyright  ©  2014,  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

Java EE 8 のテーマと新機能

 JSON-­‐Binding  JSON-­‐Processing  の拡張

 Server-­‐sent  events

 AcNon  ベース  MVC  

 HTTP/2  のサポート HTML 5

Page 26: Java EE 8 Planning 2014

Copyright  ©  2014,  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

JSON-Processing 1.1

 JSON-­‐Pointer  JSON-­‐Patch

 JSON  クエリに対する  Lambda  &  Stream  API  対応

Page 27: Java EE 8 Planning 2014

Copyright  ©  2014,  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

JSON-Processing 1.1

 JSON-­‐Pointer  JSON-­‐Patch

 JSON  クエリに対する  Lambda  &  Stream  API  対応

Page 28: Java EE 8 Planning 2014

Copyright  ©  2014,  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

•  JSON-Pointer ‒ IETF RFC 6901 • 特定の値を参照するための構文

JSON-Pointer

Page 29: Java EE 8 Planning 2014

Copyright  ©  2014,  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

   [      {          "name":"Duke",          "gender":"M",          "phones":{                "home":"650-­‐123-­‐4567",                "mobile":"650-­‐234-­‐5678"}},      {          "name":"Jane",          "gender":"F",          "phones":{                "mobile":"707-­‐555-­‐9999"}}    ]    

     

JSON-Pointer

"/0/phones/mobile"

Page 30: Java EE 8 Planning 2014

Copyright  ©  2014,  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

 JsonArray  contacts  =  Json.createArrayBuilder().add(…).build();     //  JsonPointer  オブジェクトの取得    JsonPointer  p  =  Json.createPointer("/0/phones/mobile");      //  Json  オブジェクト(Array)中の指定したポインタの値を取得    JsonValue  v  =  p.getValue(contacts);      //  指定したポインタの値を変更し変更後の Json  オブジェクト(Array)を返すJsonArray  result  =  p.replace(contacts,  "123-­‐4567");  

JSON-Pointer の使用例

Page 31: Java EE 8 Planning 2014

Copyright  ©  2014,  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

• getValue  – 指定した位置の値を取得  

• add  – 指定した位置に値を追加/挿入  

• replace  – 指定した位置の値を変換  

• remove  – 指定した位置の値を削除  

31  

JsonPointer クラスで利用可能なメソッド

※ オリジナルの JSON は変更しない   変更後のオブジェクトを生成のみ ※ オリジナルの JSON の変更は    JsonPatch で実施

Page 32: Java EE 8 Planning 2014

Copyright  ©  2014,  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

JSON-Processing 1.1

 JSON-­‐Pointer  JSON-­‐Patch

 JSON  クエリに対する  Lambda  &  Stream  API  対応

Page 33: Java EE 8 Planning 2014

Copyright  ©  2014,  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

•  JSON-Pointer ‒ IETF RFC 6902 • パッチも JSON ドキュメント

– op, path フィールドが必須

•  JSON オブジェクト、配列の操作 – 追加、変更、削除、移動、コピーなど

JSON-Patch

Page 34: Java EE 8 Planning 2014

Copyright  ©  2014,  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

[  

 {  

   "op":"replace",  

   "path":"/0/phones/mobile",  

   "value":"650-­‐111-­‐2222"},  

]  

JSON-Patch を使用した特定値の変更 [    {      "name":"Duke",      "gender":"M",      "phones":{          "home":"650-­‐123-­‐4567",          "mobile":"650-­‐234-­‐5678"}    }  ]           JSON Patch ドキュメント 操作対象の JSON ドキュメント

"650-­‐111-­‐2222"

Page 35: Java EE 8 Planning 2014

Copyright  ©  2014,  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

[    {      "op":"remove”,      "path":"/0"    }  ]  

JSON-Patch を使用した特定値の削除

[  ]          

JSON Patch ドキュメント 操作対象の JSON ドキュメント

 配列の  1 番目の要素を全削除

[    {      "name":"Duke",      "gender":"M",      "phones":{          "home":"650-­‐123-­‐4567",          "mobile":"650-­‐234-­‐5678"}    }  ]          

Page 36: Java EE 8 Planning 2014

Copyright  ©  2014,  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

JSON-Patch の使用例  //  変更対象の 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);  

Page 37: Java EE 8 Planning 2014

Copyright  ©  2014,  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

JSON-Processing 1.1

 JSON-­‐Pointer  JSON-­‐Patch

 JSON  クエリに対する  Lambda  &  Stream  API  対応

Page 38: Java EE 8 Planning 2014

Copyright  ©  2014,  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

Java SE 8 : Lambda & Stream API 対応

JsonObject

JsonArray

Map

List

Stream API を利用して JSON のデータに対するバルク処理が可能

Page 39: Java EE 8 Planning 2014

Copyright  ©  2014,  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

 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());        

Java SE 8 : Lambda & Stream API 対応

Page 40: Java EE 8 Planning 2014

Copyright  ©  2014,  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

• toJsonArray  – JsonArray  に結果の値を蓄積  

• toJsonObject  – JsonObject  に結果の値を蓄積  

• groupBy  – 結果の値に対するグルーピング  

40  

JsonCollectors : JSON 用の Collectors

Page 41: Java EE 8 Planning 2014

Copyright  ©  2014,  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

 JsonArray  contacts  =  ...;    JsonArray  femaleNames  =        contacts.getValuesAs(JsonObject.class).stream()                  .filter(x-­‐>"F".equals(x.getString("gender")))                  .map(x-­‐>(x.getString("name"))                  .collect(JsonCollectors.toJsonArray());        

JsonCollectors の利用例

Stream の操作結果から JsonArray を生成

Page 42: Java EE 8 Planning 2014

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);  

Lambda 式のクエリから Patch まで

Page 43: Java EE 8 Planning 2014

Copyright  ©  2014,  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

Java EE 8 のテーマと新機能

 JSON-­‐Binding  JSON-­‐Processing  の拡張

 Server-­‐sent  events

 AcNon  ベース  MVC  

 HTTP/2  のサポート HTML 5

Page 44: Java EE 8 Planning 2014

Copyright  ©  2014,  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

Long-Polling 対 SSE 対 WebSocket Long Polling SSE WebSocket

•  HTTP を利用 •  手動再接続 •  非標準

•  HTTP を利用 •  再接続、再配送 •  HTML 5 標準

•  新プロトコル利用 •  全二重通信 •  HTML 5 標準

Page 45: Java EE 8 Planning 2014

Copyright  ©  2014,  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

Server-sent events の実装検討中

Servlet

JAX-RS

WebSocket

h^ps://java.net/downloads/javaee-­‐spec/SSE-­‐in-­‐EE8.pdf  

JAX-RS 実装が有望

Page 46: Java EE 8 Planning 2014

Copyright  ©  2014,  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

JAX-RS SSE 実装:イベント・フロー

Page 47: Java EE 8 Planning 2014

Copyright  ©  2014,  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

 @Path("tickers")    public  class  StockTicker  {        @Get          @Produces("text/event-­‐stream")        public  EventOutput  getQuotes()  {                EventOutput  eo  =  new  EventOutput();                new  StockThread(eo).start()                return  eo;        }    }  

JAX-RS SSE 実装:Server 側

Page 48: Java EE 8 Planning 2014

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)  {  

           //  ...  

       }  

     }  

   }}  

 

JAX-RS SSE 実装 : Server 側

Page 49: Java EE 8 Planning 2014

Copyright  ©  2014,  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

 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();  

 

JAX-RS SSE 実装 : Client 側

Page 50: Java EE 8 Planning 2014

Copyright  ©  2014,  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

Java EE 8 のテーマと新機能

 JSON-­‐Binding  JSON-­‐Processing  の拡張

 Server-­‐sent  events

 AcNon  ベース  MVC  

 HTTP/2  のサポート HTML 5

Page 51: Java EE 8 Planning 2014

Copyright  ©  2014,  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

• 既存 Java EE 技術の接着剤 Action Base MVC 1.0 : 現在詳細を検討中

Model

View

Controller

CDI , JPA, Bean Validation

Facelets, JSP,

JAX-RS のような既存技術?新技術?未定

Page 52: Java EE 8 Planning 2014

Copyright  ©  2014,  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

<!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>                  <form  acNon=”/rough-­‐example/form1a.jsp”>                          <input  id=“input1”  value=“#{roughExampleBean.value}”/>                          <input  id=“submit”  type=“submit”  value=“実行"/>                  </form>          </body>  </html>  

52  

JSP による View 実装例

Page 53: Java EE 8 Planning 2014

Copyright  ©  2014,  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

@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);                  return  "/form1b.jsp”;          }          …  ge^er/se^er  メソッド  …  }  

 53  

JSP による Model/Controller 実装例

Page 54: Java EE 8 Planning 2014

Copyright  ©  2014,  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

<!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  ベースの URL  に  POST  を実行、実行結果 :  #{roughExampleBean.value}          </body>  </html>  

 

54  

JSP による画面遷移実装例

Page 55: Java EE 8 Planning 2014

Copyright  ©  2014,  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

<!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>                  <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 実装例

Page 56: Java EE 8 Planning 2014

Copyright  ©  2014,  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

@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);                  return  "/form1b.xhtml”;          }          …  omi^ed  ge^er/se^er  methods  …  }  

 56  

Facelets による Model/Controller 実装例

Page 57: Java EE 8 Planning 2014

Copyright  ©  2014,  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

<!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  ベースの  URL  に  POST  を実行、実行結果 :    #{roughExampleBean.value}          </body>  </html>  

 

57  

Facelets による画面遷移実装例

Page 58: Java EE 8 Planning 2014

Copyright  ©  2014,  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

Java EE 8 のテーマと新機能

 JSON-­‐Binding  JSON-­‐Processing  の拡張

 Server-­‐sent  events

 AcNon  ベース  MVC  

 HTTP/2  のサポート HTML 5

Page 59: Java EE 8 Planning 2014

Copyright  ©  2014,  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

• HTTP/2 100 % 準拠 : API の拡張検討箇所 Servlet 4.0 で HTTP/2 に対応

Request/response の多重化

Stream の優先順位付け

Server Push

Page 60: Java EE 8 Planning 2014

Copyright  ©  2014,  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

Java EE 8 のテーマと新機能

 CDI  の適用範囲拡大

 仕様の削減 (Pruning) CDI のセキュリティ・インタセプタ

かんたん開発

Page 61: Java EE 8 Planning 2014

Copyright  ©  2014,  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

Java EE 8 のテーマと新機能

 CDI  の適用範囲拡大

 仕様の削減 (Pruning) CDI のセキュリティ・インタセプタ

かんたん開発

Page 62: Java EE 8 Planning 2014

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

Page 63: Java EE 8 Planning 2014

Copyright  ©  2014,  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

CDI 2.0

Java SE 環境で利用可能

モジュール化

他機能との連携

Page 64: Java EE 8 Planning 2014

Copyright  ©  2014,  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

CDI 2.0 : Java SE 環境で利用可能

Java SE 環境で CDI を利用できるようにするため

Bootstrap API を提供予定

Page 65: Java EE 8 Planning 2014

Copyright  ©  2014,  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

CDI 2.0 : モジュール化

多くの機能が追加される事で CDI の肥大化を懸念

①CDI  Light          (DIだけ) ②CDI  Event Contexts,  AOP,  SPI  など

③  Full  CDI

Page 66: Java EE 8 Planning 2014

Copyright  ©  2014,  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

 @RequestScoped    public  class  MyListenerBean  {        @JMSListener(destinationLookup="jms/myQueue")        @Transactional        public  void  myCallback(Message  message)  {                ...        }    }  

MDB の実装不要: EJB コンテナ外でメッセージ監視が可能 CDI 2.0 : 他機能との連携強化 ‒ JMS 2.1

Page 67: Java EE 8 Planning 2014

Copyright  ©  2014,  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

Java EE 8 のテーマと新機能

 CDI  の適用範囲拡大 CDI のセキュリティ・インタセプタ

 仕様の削減 (Pruning)

かんたん開発

Page 68: Java EE 8 Planning 2014

Copyright  ©  2014,  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

 @IsAuthorized("hasRoles('Manager')  &&  schedule.officeHrs")    void  transferFunds();    

 @IsAuthorized("hasRoles('Manager')  &&                                      hasAttribute('directReports',  employee.id)")    double  getSalary(long  employeeId);    

 @IsAuthorized(ruleSourceName="java:app/payrollAuthRules",                                                                                                rule="report")    void  displayReport();  

CDI のインターセプターを利用した認可

Page 69: Java EE 8 Planning 2014

Copyright  ©  2014,  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

Java EE 8 のテーマと新機能

 CDI  の適用範囲拡大

 仕様の削減 (Pruning) CDI のセキュリティ・インタセプタ

かんたん開発

Page 70: Java EE 8 Planning 2014

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);        ...  }    

   

仕様の削減: EJB 2.x クライアント・ビュー

Page 71: Java EE 8 Planning 2014

Copyright  ©  2014,  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

Java EE 8 のテーマと新機能

 Java  EE  Management  2.0  Java  Security  1.0

クラウド対応

Page 72: Java EE 8 Planning 2014

Copyright  ©  2014,  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

Java EE 8 のテーマと新機能

 Java  EE  Management  2.0  Java  Security  1.0

クラウド対応

Page 73: Java EE 8 Planning 2014

Copyright  ©  2014,  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

• JSR 77 : J2EE™ Management のアップデート Java EE Management 2.0

プログラミングで、アプリケーション・サーバの管理が可能 (サーバ実装に非依存)

•  リソース •  アプリケーション・ライフサイクル

REST インタフェースを追加

Page 74: Java EE 8 Planning 2014

Copyright  ©  2014,  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

Java EE 8 のテーマと新機能

 Java  EE  Management  2.0  Java  Security  1.0

クラウド対応

Page 75: Java EE 8 Planning 2014

Copyright  ©  2014,  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

移植性、柔軟性、かんたん Java EE Security 1.0

パスワード・エイリアス

ユーザ管理

ロール・マッピング

Page 76: Java EE 8 Planning 2014

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 中に記載される生パスワードの記述を排除

Page 77: Java EE 8 Planning 2014

Copyright  ©  2014,  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

ユーザ管理 h^ps://java.net/jira/browse/JAVAEE_SPEC-­‐9

106 ページ

• ベンダー依存のユーザ・グループ管理を排除

• デフォルトでユーザ管理用の API を容易

Java EE 7 までユーザ管理の実装は ベンダー依存で面倒

参考:h^p://www.slideshare.net/OracleMiddleJP/java-­‐ee-­‐detail-­‐of-­‐jdbcrealm

Page 78: Java EE 8 Planning 2014

Copyright  ©  2014,  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

• アプリーションで使用するユーザ情報を含むデータ・ソース – DataBase – LDAP – アプリケーション・サーバ – JSR 351 Identity – メモリ – 独自

DB,  LDAP  

UserInfo   UserService   UserSource  

UserSourceDefinition

Page 79: Java EE 8 Planning 2014

Copyright  ©  2014,  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

• ユーザ・グループに対する CRUD 操作:デフォルトで提供 – UserInfo の読み込み – ユーザ作成 – ユーザ削除 – ユーザ情報更新 – パスワード変更 – ユーザ有無確認 – グループ作成

DB,  LDAP  

UserInfo   UserService   UserSource  

UserService

– グループへユーザ追加 – グループからユーザ削除 – グループ中のユーザ有無確認

Page 80: Java EE 8 Planning 2014

Copyright  ©  2014,  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

• ユーザの属性管理 – ユーザ名 – パスワード – アカウントの有効期限 – アカウントのロック状態 – パスワードの有効期限 – 利用可能の確認 – 追加属性

DB,  LDAP  

UserInfo   UserService   UserSource  

UserInfo

Page 81: Java EE 8 Planning 2014

Copyright  ©  2014,  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

 @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();      }        ...    }  

ユーザ管理プログラムの実装例

Page 82: Java EE 8 Planning 2014

Copyright  ©  2014,  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

ロール・マッピング管理 h^ps://java.net/jira/browse/JAVAEE_SPEC-­‐9

106 ページ

• ロール管理の標準化

Java EE 7 までロール管理の実装は ベンダー依存で面倒

参考:h^p://www.slideshare.net/OracleMiddleJP/java-­‐ee-­‐detail-­‐of-­‐jdbcrealm

Page 83: Java EE 8 Planning 2014

Copyright  ©  2014,  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

• プログラム、もしくは永続化先にロールを記述 – LdapRoleMapper  – ServerRoleMapper  – MemoryRoleMapper  – DataSourceRoleMapper  – CustomRoleMapper  – GroupIsRoleMappe  

App  LDAP  

RoleService   RoleMapper  

RoleMapper

Page 84: Java EE 8 Planning 2014

Copyright  ©  2014,  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

• ロール管理用の機能を提供 – ユーザに権限を付加 – ユーザから権限を排除 – ユーザ権限の有無を確認 – 特定のロールを持つユーザ一覧取得 – グループに権限付加 – グループから権限を排除 – グループの権限の有無を確認 – など App  

LDAP  RoleService   RoleMapper  

RoleService

Page 85: Java EE 8 Planning 2014

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);   }  

ロール・マッピング管理プログラムの実装例

Page 86: Java EE 8 Planning 2014

Copyright  ©  2014,  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

Java EE 8 The standard in community-driven enterprise software

2016 年 リリース予定

Page 87: Java EE 8 Planning 2014

Copyright  ©  2014,  Oracle  and/or  its  affiliates.  All  rights  reserved.    |   87  

Java EE 8 (JSR 366) 満場一致の承認!

Page 88: Java EE 8 Planning 2014

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  

2015 2013 2014 2017

88  

GlassFish  5  •  Java  EE  8  RI  •  Java  EE  8  SDK  

2016

Java EE のロードマップ

Page 89: Java EE 8 Planning 2014

Copyright  ©  2014,  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

• 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

登録済み JSR 一覧

Page 90: Java EE 8 Planning 2014

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  • …    

Java EE 8 で改善予定の機能候補一覧

Page 91: Java EE 8 Planning 2014

Copyright  ©  2014,  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

h^p://javaee-­‐spec.java.net/

JCP による透明性のある開発

Page 92: Java EE 8 Planning 2014

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    

Java EE 8 に対する貢献・情報収集

Page 93: Java EE 8 Planning 2014

Copyright  ©  2014,  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

Adopt-a-JSR for Java EE 8 • Java EE を改善するための草の根活動

http://adoptajsr.java.net

GET INVOLVED!

Page 94: Java EE 8 Planning 2014

Copyright  ©  2014,  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

Q  &  A  

Java EE 8 のリリース お楽しみにしてください !!

Page 95: Java EE 8 Planning 2014

Copyright  ©  2014,  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

Page 96: Java EE 8 Planning 2014
Page 97: Java EE 8 Planning 2014