java ee7, html5

50
Yoshio Terada Java Evangelist http://yoshio3.com , Twitter : @yoshioterada Java EE 7 HTML 5 WebSocket

Upload: oracle-fusion-middleware

Post on 12-Jun-2015

6.743 views

Category:

Technology


2 download

TRANSCRIPT

Page 1: Java EE7, html5

Copyright © 2012, Oracle and/or its affiliates. All rights reserved.1

Yoshio TeradaJava Evangelisthttp://yoshio3.com, Twitter : @yoshioterada

Java EE 7HTML 5WebSocket

Page 2: Java EE7, html5

Copyright © 2012, Oracle and/or its affiliates. All rights reserved.2

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

Oracle は、米国オラクルコーポレーション及びその子会社、関連会社の米国及びその他の国における登録商標です。文中の社名、商品名等は各社の商標または登録商標である場合があります。

Page 3: Java EE7, html5

Copyright © 2012, Oracle and/or its affiliates. All rights reserved.3

1998 年 5 月

エンタープライズアプリケーション

1999 年 12 月10 specs

堅牢スケーラブル

2001 年 9 月13 specs

Web サービス

2003 年 11 月20 specs

かんたん開発

2006 年 5 月23 specs

軽量化

2009 年 12 月28 specs

Project JPE

J2EE 1.3

CMP,ConnectorArchitecture

Java EE 5

Ease of Development,Annotations,EJB 3.0, JPA, JSF, UpdatedWeb Services

J2EE 1.4Web Services Mgmt, Deployment,AsyncConnector

Java EE 6

Pruning,ExtensibilityEase of Dev,CDI, JAX-RS

Web Profile

Servlet 3.0, EJB 3.1 Lite

J2EE 1.2Servlet, JSP,EJB, JMSRMI/IIOP

Java EE の歴史

Page 4: Java EE7, html5

Copyright © 2012, Oracle and/or its affiliates. All rights reserved.4

Java EE 7 : 2013 年 春頃提供開始予定

テーマ: HTML5 と開発生産性の向上

Java EE 7 SDK の提供開始

Page 5: Java EE7, html5

Copyright © 2012, Oracle and/or its affiliates. All rights reserved.5

Java EE 7 へ含まれる予定の JSR 一覧

Connector1.6

JPA 2.1 JTA 1.2 JMS 2.0

Managed Bean 1.0 EJB 3.2

Common Annotations

1.1

Interceptors 1.1

CDI 1.1

PortableExtensio

ns Servlet 3.1

JSP 2.2JSF 2.2

JAX-RS 2.0

EL 3.0

Bean

Valid

atio

n1

.1

Java CachingAPI (JSR-

107)Batch

Application(JSR-352)

Java API forJSON

(JSR-353)

Java API forWebSocket(JSR-356)

新規追加 大幅な更新 通常の更新

Page 6: Java EE7, html5

Copyright © 2012, Oracle and/or its affiliates. All rights reserved.6

今日ご紹介する内容

WebSocket ( 新 ) JSF 2.2

HTML5 化に関するテーマ

そして、研究・開発プロジェクト

Page 7: Java EE7, html5

Copyright © 2012, Oracle and/or its affiliates. All rights reserved.7

JSR 344 : JavaServer™ Faces 2.2

Page 8: Java EE7, html5

Copyright © 2012, Oracle and/or its affiliates. All rights reserved.8

JSF : コンポーネント・ベース開発

Page 9: Java EE7, html5

Copyright © 2012, Oracle and/or its affiliates. All rights reserved.9

JavaServer Faces

JSF フレームワークと開発の概要

DB

Webサービス

プレゼンテーション

• アプリケーションロジック

• コンバート ( 変換 )• バリデーション ( 検証 )• ナビゲーション ( 画面遷

移 )• イベント処理

ビジネスロジッククライアント Web アプリケーション

Web コンテナ

Page 10: Java EE7, html5

Copyright © 2012, Oracle and/or its affiliates. All rights reserved.10

デザイナーと開発者の共同作業が可能に (jsf:value=“”, jsf:action=“”)

デザイナーはテキスト&ブラウザで確認 プログラマーは JSP & Web コンテナで確

認 プログラム後のデザイン修正は困難

デザイナーはテキスト&ブラウザで確認

プログラマーは XHTML に要素を挿入 同一ファイルの為デザイン修正も容易

デザイナー(HTML)

プログラマー(JSP)

コード変換が必要

今までの開発スタイル

デザイナー プログラマー(XHTML)

同一ファイルを参照編集可能

JSF 2.0 の開発スタイル

Page 11: Java EE7, html5

Copyright © 2012, Oracle and/or its affiliates. All rights reserved.11

HTML 5 マークアップ・サポート

JSF 2.2 からは素の HTML コードに

JSF 属性を埋め込みましょう !!

Page 12: Java EE7, html5

Copyright © 2012, Oracle and/or its affiliates. All rights reserved.12

HTML 5 マークアップ・サポート

HTML 5 の表現力をそのままに !!

Page 13: Java EE7, html5

Copyright © 2012, Oracle and/or its affiliates. All rights reserved.13

JSR 356: JavaTM API for WebSocket

Page 14: Java EE7, html5

Copyright © 2012, Oracle and/or its affiliates. All rights reserved.14

WebSocket APIwww.w3.org/TR/websockets/

Page 15: Java EE7, html5

Copyright © 2012, Oracle and/or its affiliates. All rights reserved.15

Java API for WebSocket (JSR-356)

http://jcp.org/en/jsr/detail?id=356http://java.net/projects/websocket-spec

仕様

ステータス: Early Draft

Page 16: Java EE7, html5

Copyright © 2012, Oracle and/or its affiliates. All rights reserved.16

参照実装http://java.net/projects/tyrus

最新の GlassFish v4 開発ビルドにバンドル済

Page 17: Java EE7, html5

Copyright © 2012, Oracle and/or its affiliates. All rights reserved.17

Java の WebSocket標準実装はとてもかんたん

Page 18: Java EE7, html5

Copyright © 2012, Oracle and/or its affiliates. All rights reserved.18

アノテーション レベル 内容

@WebSocketEndpoint クラス WebSocket のエンドポイントを示す

@WebSocketOpen メソッド 接続確立時に呼び出すメソッドを指定

@WebSocketClose メソッド 接続切断時に呼び出すメソッドを指定

@WebSocketMessage メソッド メッセージを受信した時に呼び出すメソッドを指定

@WebSocketPathParam メソッドパラメータ

エンドポイントの URI 引数に指定されたパラメータを取得する際に仕様

@WebSocketError メソッド エラー発生時に呼び出すメソッドを指定

WebSocket アノテーション

Page 19: Java EE7, html5

Copyright © 2012, Oracle and/or its affiliates. All rights reserved.19

WebSocket アプリケーション・ライフサイクル

@WebSocketEndpoint("/hello")var wsUri = "ws://HOST/foo/hello";var websocket = new WebSocket(wsUri);

@WebSocketOpenwebsocket.onopen = function(evt) { onOpen(evt) };

websocket.onmessage = function(evt) { onMessage(evt) };

@WebSocketMessage

websocket.onerror = function(evt) { onError(evt) };

@WebSocketError

websocket.onclose = function(evt) { onClose (evt) };

@WebSocketClose

JavaScript WebSocket API

Page 20: Java EE7, html5

Copyright © 2012, Oracle and/or its affiliates. All rights reserved.20

import javax.net.websocket.annotations.*;

@WebSocketEndpoint("/hello")public class HelloBean {

@WebSocketMessage public void sayHello(Session session, String msg) { session.getRemote().sendString(“Hello” + msg); }}

HelloWorld アプリケーション (1対1 )

Page 21: Java EE7, html5

Copyright © 2012, Oracle and/or its affiliates. All rights reserved.21

デモ

Page 22: Java EE7, html5

Copyright © 2012, Oracle and/or its affiliates. All rights reserved.22

Twitter

監視

サンプル・アプリケーションの構成 (多対1 )

Remote Endpoint

RE

RE

RE

Session

Session

Session

WebSocketEndpoint

Twitter4J

Page 23: Java EE7, html5

Copyright © 2012, Oracle and/or its affiliates. All rights reserved.23

@WebSocketEndpoint(value= "/twitter")public class TwitterWebSocket { @WebSocketOpen public void initOpen(Session session) { TwitterClientSingleton.peers.add(session); } @WebSocketClose public void closeWebSocket(Session session){ TwitterClientSingleton.peers.remove(session); }}

Twitter Streaming アプリ

Page 24: Java EE7, html5

Copyright © 2012, Oracle and/or its affiliates. All rights reserved.24

@Startup  @Singletonpublic class TwitterClientSingleton extends StatusAdapter { public static Set<Session> peers = null;  static { peers = Collections.synchronizedSet(new HashSet()); } ...続く

Twitter Streaming アプリ

Session Session Session Session

クライアントの参照情報を保持

RE RE RE RE・・・・・・

Page 25: Java EE7, html5

Copyright © 2012, Oracle and/or its affiliates. All rights reserved.25

public void onStatus(Status status) { User user = status.getUser(); String resStr = "@" +user.getScreenName() + " : " + status.getText() ; try { for (Session peer : peers) { peer.getRemote().sendString(resStr); } } catch (IOException ioe) { ioe.printStackTrace(); } }

データ送信コード ( ブロッキング )シーケンシャルに配信を実施 ( 大量のデータで待ち )

全ピア (RE) に対して配信

Session Session Session Session

RE RE RE RE

Page 26: Java EE7, html5

Copyright © 2012, Oracle and/or its affiliates. All rights reserved.26

データ送信コード ( ノン・ブロッキング )

for (Session peer : peers) { Future<SendResult> futureSend = peer.getRemote().sendStringByFuture(resStr); while (!futureSend.isDone()) { // wait here ? } SendResult status = futureSendResult.get(); if (status.isOK()) { // ok } else { // whoops, send failed. }}

Page 27: Java EE7, html5

Copyright © 2012, Oracle and/or its affiliates. All rights reserved.27

subprotocol の指定も可能 (iana.org)

http://www.iana.org/assignments/websocket/websocket.xml

Page 28: Java EE7, html5

Copyright © 2012, Oracle and/or its affiliates. All rights reserved.28

@WebSocketEndpoint("/bookings/{guest-id}")public class BookingServer { @WebSocketMessage public void processBookingRequest( @WebSocketPathParam("guest-id") String guestID, String message, Session session) { // guest-id に紐づく処理を実装 }}

URI のテンプレートマッチ@WebSocketPathParam について

1段目のみ可能

Page 29: Java EE7, html5

Copyright © 2012, Oracle and/or its affiliates. All rights reserved.29

エンコード、デコード

@WebSocketEndpoint( value="/hello", encoders={MyMessage.class}, decoders={MyMessage.class})

Page 30: Java EE7, html5

Copyright © 2012, Oracle and/or its affiliates. All rights reserved.30

JSON から文字列へのエンコード

public class MyMessage implements Encoder.Text<MyMessage> { private JsonObject jsonObject;

public String encode(MyMessage myMessage) { return myMessage.jsonObject.toString(); }}

Page 31: Java EE7, html5

Copyright © 2012, Oracle and/or its affiliates. All rights reserved.31

受信データの JSON へのデコード

public class MyMessage implements Decoder.Text<MyMessage> { private JsonObject jsonObject;

public MyMessage decode(String s) { jsonObject = new JsonReader(new StringReader(s)).readObject(); return this;"} public boolean willDecode(String string) { return true; // デコード可能か否かを返す}}

Page 32: Java EE7, html5

Copyright © 2012, Oracle and/or its affiliates. All rights reserved.32

OracleResearch Project !!

Page 33: Java EE7, html5

Copyright © 2012, Oracle and/or its affiliates. All rights reserved.33

Project Avatar

Page 34: Java EE7, html5

Copyright © 2012, Oracle and/or its affiliates. All rights reserved.34

先進的な HTML 5 アプリ構築フレームワーク– WebSocket, Server-Sent Event, RESTful に対応

モジュール化対応 JavaScript フレームワーク 軽量なサーバ・アーキテクチャ (Thin-Server Architecture)

コンセプト

Project Avatar とは

Avatar のメリット– サーバ・サイド JavaScript と Java EE アプリの融合– Java VM 上で稼働する JavaScrip のスケーラビリテイ・信頼性・運用保守性

Page 35: Java EE7, html5

Copyright © 2012, Oracle and/or its affiliates. All rights reserved.35

Thin-Server アーキテクチャ (TSA)

今まで アプリView

Modelサーバ側でマー

HTTP/JS

TSAView

Service

アプリ

クライアント側でマージ

HTTP/JS

JSON

View

Model

Page 36: Java EE7, html5

Copyright © 2012, Oracle and/or its affiliates. All rights reserved.36

Avatar の概念  ( クライアント側 )

ブラウザ (JavaScript/DOM)

View (UI Node) Avatar(Controller)

Web コンポーネントと同様<a:page><a:form><a:input><a:textarea> …

• データ・    バインディング

• ナビゲーション• ローカル・   

ストレージ

アクセス方法を提供• ローカル• RESTful• SSE• WebSocket

Model

Page 37: Java EE7, html5

Copyright © 2012, Oracle and/or its affiliates. All rights reserved.37

Avatar の概念  ( サーバ側 )

Nashorn (JavaVM で稼働する JavaScript エンジン )

Service Avatar

アクセス方法を提供• RESTful• SSE• WebSocket

ルーティングJSON のシリアライズ

利用可能なデータソース• ファイル• DB(JPA)• インメモリ

Coherence

Data プロバイダ

Page 38: Java EE7, html5

Copyright © 2012, Oracle and/or its affiliates. All rights reserved.38

Avatar のアーキテクチャ

UI

Avatar アプリ(HTML 5/JS/CSS)

Avatar 実行環境

HTML 5 DOM

ローカルストレージ

Avatar アプリ( XML/JavaScript )

Avatar コンパイラ

Nashorn (JavaScript エンジン )

ブラウザ App サーバ

Java EE アプリ

Viewサービス

Dataサービス

Java EEサービス

HTTP

HTTP/WebSocket

HTTP/WebSocket

Page 39: Java EE7, html5

Copyright © 2012, Oracle and/or its affiliates. All rights reserved.39

Avatar のアーキテクチャ

UI

Avatar アプリ(HTML 5/JS/CSS)

Avatar 実行環境

HTML 5 DOM

ローカルストレージ

Avatar アプリ( XML/JavaScript )

Avatar コンパイラ

Nashorn (JavaScript エンジン )

ブラウザ App サーバ

Java EE アプリ

Viewサービス

Dataサービス

Java EEサービス

HTTP

HTTP/WebSocket

HTTP/WebSocket

① Avatar アプリの作成

Page 40: Java EE7, html5

Copyright © 2012, Oracle and/or its affiliates. All rights reserved.40

Avatar のアーキテクチャ

UI

Avatar アプリ(HTML 5/JS/CSS)

Avatar 実行環境

HTML 5 DOM

ローカルストレージ

Avatar アプリ( XML/JavaScript )

Avatar コンパイラ

Nashorn (JavaScript エンジン )

ブラウザ App サーバ

Java EE アプリ

Viewサービス

Dataサービス

Java EEサービス

HTTP

HTTP/WebSocket

HTTP/WebSocket

② Avatar コンパイラで   View サービス   Data サービス  を生成

Page 41: Java EE7, html5

Copyright © 2012, Oracle and/or its affiliates. All rights reserved.41

Avatar のアーキテクチャ

UI

Avatar アプリ(HTML 5/JS/CSS)

Avatar 実行環境

HTML 5 DOM

ローカルストレージ

Avatar アプリ( XML/JavaScript )

Avatar コンパイラ

Nashorn (JavaScript エンジン )

ブラウザ App サーバ

Java EE アプリ

Viewサービス

Dataサービス

Java EEサービス

HTTP

HTTP/WebSocket

HTTP/WebSocket

③ View サービスの  「複数ページの一括」  ダウンロード (※プラグインは不要)

Page 42: Java EE7, html5

Copyright © 2012, Oracle and/or its affiliates. All rights reserved.42

Avatar のアーキテクチャ

UI

Avatar アプリ(HTML 5/JS/CSS)

Avatar 実行環境

HTML 5 DOM

ローカルストレージ

Avatar アプリ( XML/JavaScript )

Avatar コンパイラ

Nashorn (JavaScript エンジン )

ブラウザ App サーバ

Java EE アプリ

Viewサービス

Dataサービス

Java EEサービス

HTTP

HTTP/WebSocket

HTTP/WebSocket

④ WebSocket/Server-Sent Event/ RESTful で Data サービスを利用

Page 43: Java EE7, html5

Copyright © 2012, Oracle and/or its affiliates. All rights reserved.43

Avatar のアーキテクチャ

UI

Avatar アプリ(HTML 5/JS/CSS)

Avatar 実行環境

HTML 5 DOM

ローカルストレージ

Avatar アプリ( XML/JavaScript )

Avatar コンパイラ

Nashorn (JavaScript エンジン )

ブラウザ App サーバ

Java EE アプリ

Viewサービス

Dataサービス

Java EEサービス

HTTP

HTTP/WebSocket

HTTP/WebSocket

⑤ サーバ側は Java EE  のサービスも利用可能

Page 44: Java EE7, html5

Copyright © 2012, Oracle and/or its affiliates. All rights reserved.44

Avatar のアーキテクチャ

UI

Avatar アプリ(HTML 5/JS/CSS)

Avatar 実行環境

HTML 5 DOM

ローカルストレージ

Avatar アプリ( XML/JavaScript )

Avatar コンパイラ

Nashorn (JavaScript エンジン )

ブラウザ App サーバ

Java EE アプリ

Viewサービス

Dataサービス

Java EEサービス

HTTP

HTTP/WebSocket

HTTP/WebSocket

⑥ クライアント側は   HTML 5, DOM,   ローカルストレージ  等を利用可能

Page 45: Java EE7, html5

Copyright © 2012, Oracle and/or its affiliates. All rights reserved.45

アプリ View

Model

クライアントで動作するアプリ(Hello World)<a:viewModule …> <a:localModel> var NameModel = function(){ this.first = "Planet"; this.last = "Earth"; this.clear = function(){ this.first = this.last = ""; }; }; <a:/localModel>

<a:page> <a:model id="name" idref="NameModel"/> <a:form> <a:input label="First Name" value="#{name.first}"/> <a:input label="Last Name" value="#{name.last}"/> <a:output value="Hello #{name.first} #{name.last}"/> <a:button label="Clear" action="#{name.clear()}"/><a:/form><a:/page><a:/viewModule>ローカルのモデルを定義

Page 46: Java EE7, html5

Copyright © 2012, Oracle and/or its affiliates. All rights reserved.46

WebSocket で動作するアプリ( Model の実装例 )

<a:socketModel> var ChatModel = function(){ this.message = ""; this.user = ""; var superSend = this.$send; this.$send = function(){ this.process(this.message); superSend.call(this); }; …. };<a:/socketModel>

ServiceJSON

Model

Model 用に用意されているプロトタイプ関数を上書き実装

• this.$onMessage• this.$send• etc.

Page 47: Java EE7, html5

Copyright © 2012, Oracle and/or its affiliates. All rights reserved.47

WebSocket で動作するアプリ( Service の実装例 )

<a:socketService url="websocket/chat"> var SocketService = function(){  this.$onMessage = function(peer,message){  this.process(message);  peer.getContext().sendAll(message); };};<a:/socketService>

ServiceJSON

Model

Service 用に用意されているプロトタイプ関数を上書き実装

• this.$onMessage• this.$onTimeOut• etc.

Page 48: Java EE7, html5

Copyright © 2012, Oracle and/or its affiliates. All rights reserved.48

New Announcement2013 年 春頃Java イベント開催予定

Page 49: Java EE7, html5

Copyright © 2012, Oracle and/or its affiliates. All rights reserved.49

Page 50: Java EE7, html5

Copyright © 2012, Oracle and/or its affiliates. All rights reserved.50