Java EE 8 Planning 2014
-
Upload
oracle-fusion-middleware -
Category
Technology
-
view
19.158 -
download
4
Transcript of 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
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
以下の事項は、弊社の一般的な製品の方向性に関する概要を説明するものです。また、情報提供を唯一の目的とするものであり、いかなる契約にも組み込むことはできません。以下の事項は、マテリアルやコード、機能を提供することをコミットメント(確約)するものではないため、購買決定を行う際の判断材料になさらないで下さい。オラクル製品に関して記載されている機能の開発、リリースおよび時期については、弊社の裁量により決定されます。
OracleとJavaは、Oracle Corporation 及びその子会社、関連会社の米国及びその他の国における登録商標です。文中の社名、商品名等は各社の商標または登録商標である場合があります。
SAFE HARBOR STATEMENT
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
Java EE の新たな旅立ち Java EE 8 へ向かって
Linda DeMichiel Java EE Spec Lead
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
Clou
d
業界トレンドを注意深く観察
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
Q & A
Java EE コミュニティ・アンケート
Java EE Spec Leads JavaOne 2014 San Francisco
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
開発者の要望に沿った新標準技術の選定
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
Java EE 8 のテーマと新機能
HTML 5 かんたん開発 クラウド対応
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
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
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
• JSONとJavaオブジェクトの相互変換
Java Object JSON
Java API for JSON Binding (JSON-B)
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)
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
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;}
実行時の初期化
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 へ変換)
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 へ変換)
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); }
ユーティリティ・クラスを使用した簡易変換
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
※ JsonAdapter インタフェースを実装し、Date,Calendar,Date&Time API 等の日時変換も可能 ※ @JsonEnum アノテーションを指定し Enum も利用可能 ※ @JsonNillable(true) アノテーションを指定し JSON の値として null を扱う事も可能
デフォルト・マッピング・ルール
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”
}
デフォルトのマッピング
カスタム・マッピング
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
マッピング・ルールのカスタマイズ2
public String longDescription;
@JsonTransient
public String longDescription;
{ “longDescription” :
“This is long description”
}
{ }
デフォルトのマッピング
カスタム・マッピング フィールド無効化
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”
}
デフォルトのマッピング
カスタム・マッピング 順序変更
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
• 継承・ポリモーフィズム対応 • ライフ・サイクル・イベント
– JsonPreMarshal, JsonPreUnMarshal – JsonPostMarshal, JsonPostUnMarshal
• など
Java Object JSON
JSON-B (その他)
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
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
JSON-Processing 1.1
JSON-‐Pointer JSON-‐Patch
JSON クエリに対する Lambda & Stream API 対応
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
JSON-Processing 1.1
JSON-‐Pointer JSON-‐Patch
JSON クエリに対する Lambda & Stream API 対応
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
• JSON-Pointer ‒ IETF RFC 6901 • 特定の値を参照するための構文
JSON-Pointer
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"
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 の使用例
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
• getValue – 指定した位置の値を取得
• add – 指定した位置に値を追加/挿入
• replace – 指定した位置の値を変換
• remove – 指定した位置の値を削除
31
JsonPointer クラスで利用可能なメソッド
※ オリジナルの JSON は変更しない 変更後のオブジェクトを生成のみ ※ オリジナルの JSON の変更は JsonPatch で実施
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
JSON-Processing 1.1
JSON-‐Pointer JSON-‐Patch
JSON クエリに対する Lambda & Stream API 対応
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
• JSON-Pointer ‒ IETF RFC 6902 • パッチも JSON ドキュメント
– op, path フィールドが必須
• JSON オブジェクト、配列の操作 – 追加、変更、削除、移動、コピーなど
JSON-Patch
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"
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"} } ]
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);
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
JSON-Processing 1.1
JSON-‐Pointer JSON-‐Patch
JSON クエリに対する Lambda & Stream API 対応
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
Java SE 8 : Lambda & Stream API 対応
JsonObject
JsonArray
Map
List
Stream API を利用して JSON のデータに対するバルク処理が可能
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 対応
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
• toJsonArray – JsonArray に結果の値を蓄積
• toJsonObject – JsonObject に結果の値を蓄積
• groupBy – 結果の値に対するグルーピング
40
JsonCollectors : JSON 用の Collectors
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 を生成
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 まで
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
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
Long-Polling 対 SSE 対 WebSocket Long Polling SSE WebSocket
• HTTP を利用 • 手動再接続 • 非標準
• HTTP を利用 • 再接続、再配送 • HTML 5 標準
• 新プロトコル利用 • 全二重通信 • HTML 5 標準
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 実装が有望
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
JAX-RS SSE 実装:イベント・フロー
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 側
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 側
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 側
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
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 のような既存技術?新技術?未定
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 実装例
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 実装例
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 による画面遷移実装例
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 実装例
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 実装例
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 による画面遷移実装例
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
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
• HTTP/2 100 % 準拠 : API の拡張検討箇所 Servlet 4.0 で HTTP/2 に対応
Request/response の多重化
Stream の優先順位付け
Server Push
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
Java EE 8 のテーマと新機能
CDI の適用範囲拡大
仕様の削減 (Pruning) CDI のセキュリティ・インタセプタ
かんたん開発
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
Java EE 8 のテーマと新機能
CDI の適用範囲拡大
仕様の削減 (Pruning) CDI のセキュリティ・インタセプタ
かんたん開発
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
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
CDI 2.0
Java SE 環境で利用可能
モジュール化
他機能との連携
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
CDI 2.0 : Java SE 環境で利用可能
Java SE 環境で CDI を利用できるようにするため
Bootstrap API を提供予定
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
CDI 2.0 : モジュール化
多くの機能が追加される事で CDI の肥大化を懸念
①CDI Light (DIだけ) ②CDI Event Contexts, AOP, SPI など
③ Full CDI
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
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
Java EE 8 のテーマと新機能
CDI の適用範囲拡大 CDI のセキュリティ・インタセプタ
仕様の削減 (Pruning)
かんたん開発
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 のインターセプターを利用した認可
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
Java EE 8 のテーマと新機能
CDI の適用範囲拡大
仕様の削減 (Pruning) CDI のセキュリティ・インタセプタ
かんたん開発
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 クライアント・ビュー
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
Java EE 8 のテーマと新機能
Java EE Management 2.0 Java Security 1.0
クラウド対応
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
Java EE 8 のテーマと新機能
Java EE Management 2.0 Java Security 1.0
クラウド対応
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
• JSR 77 : J2EE™ Management のアップデート Java EE Management 2.0
プログラミングで、アプリケーション・サーバの管理が可能 (サーバ実装に非依存)
• リソース • アプリケーション・ライフサイクル
REST インタフェースを追加
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
Java EE 8 のテーマと新機能
Java EE Management 2.0 Java Security 1.0
クラウド対応
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
移植性、柔軟性、かんたん Java EE Security 1.0
パスワード・エイリアス
ユーザ管理
ロール・マッピング
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 中に記載される生パスワードの記述を排除
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
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
• アプリーションで使用するユーザ情報を含むデータ・ソース – DataBase – LDAP – アプリケーション・サーバ – JSR 351 Identity – メモリ – 独自
DB, LDAP
UserInfo UserService UserSource
UserSourceDefinition
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
• ユーザ・グループに対する CRUD 操作:デフォルトで提供 – UserInfo の読み込み – ユーザ作成 – ユーザ削除 – ユーザ情報更新 – パスワード変更 – ユーザ有無確認 – グループ作成
DB, LDAP
UserInfo UserService UserSource
UserService
– グループへユーザ追加 – グループからユーザ削除 – グループ中のユーザ有無確認
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
• ユーザの属性管理 – ユーザ名 – パスワード – アカウントの有効期限 – アカウントのロック状態 – パスワードの有効期限 – 利用可能の確認 – 追加属性
DB, LDAP
UserInfo UserService UserSource
UserInfo
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(); } ... }
ユーザ管理プログラムの実装例
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
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
• プログラム、もしくは永続化先にロールを記述 – LdapRoleMapper – ServerRoleMapper – MemoryRoleMapper – DataSourceRoleMapper – CustomRoleMapper – GroupIsRoleMappe
App LDAP
RoleService RoleMapper
RoleMapper
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
• ロール管理用の機能を提供 – ユーザに権限を付加 – ユーザから権限を排除 – ユーザ権限の有無を確認 – 特定のロールを持つユーザ一覧取得 – グループに権限付加 – グループから権限を排除 – グループの権限の有無を確認 – など App
LDAP RoleService RoleMapper
RoleService
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); }
ロール・マッピング管理プログラムの実装例
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
Java EE 8 The standard in community-driven enterprise software
2016 年 リリース予定
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | 87
Java EE 8 (JSR 366) 満場一致の承認!
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 のロードマップ
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 一覧
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 で改善予定の機能候補一覧
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
h^p://javaee-‐spec.java.net/
JCP による透明性のある開発
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 に対する貢献・情報収集
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!
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
Q & A
Java EE 8 のリリース お楽しみにしてください !!
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |