• 検索結果がありません。

PowerPoint プレゼンテーション

N/A
N/A
Protected

Academic year: 2021

シェア "PowerPoint プレゼンテーション"

Copied!
69
0
0

読み込み中.... (全文を見る)

全文

(1)

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

(2)

JavaScript Running On

JavaVM: Nashorn

NISHIKAWA, Akihiro

Oracle Corporation Japan

♯jdt2014_D1

(3)

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

以下の事項は、弊社の一般的な製品の方向性に関する概要を説明するも

のです。また、情報提供を唯一の目的とするものであり、いかなる契約に

も組み込むことはできません。以下の事項は、マテリアルやコード、機能を

提供することをコミットメント(確約)するものではないため、購買決定を行う

際の判断材料になさらないで下さい。オラクル製品に関して記載されてい

る機能の開発、リリースおよび時期については、弊社の裁量により決定さ

れます。

OracleとJavaは、Oracle Corporation 及びその子会社、関連会社の米国及びその他の国における登録商標です。文中の

社名、商品名等は各社の商標または登録商標である場合があります。

(4)

Agenda

Nashorn

Server Side JavaScript

Nashornの今後

(5)

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

(6)

Nashorn

(7)

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

登場の背景

Rhinoの置き換え

セキュリティ

パフォーマンス

InvokeDynamic (JSR-292) のProof of Concept

アトウッドの法則

Any application that can be written in JavaScript will

eventually be written in JavaScript.

(8)

Project Nashornの主なスコープ

JEP 174

ECMAScript-262 Edition 5.1

javax.script (JSR 223) API

JavaとJavaScript間での相互呼び出し

新しいコマンドラインツール(

jjs)の導入

(9)

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

Java VM

Scripting Engine

(Nashorn)

Scripting API

(JSR-223)

JavaScript code

Java code

Other runtime

Other APIs

jjs

(10)

$JAVA_HOME/bin/jjs

(11)

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

(12)

未実装・未サポート

ECMAScript 6 (Harmony)

Generators

分割代入

(Destructuring assignment)

const, let, ...

DOM/CSSおよびDOM/CSS関連ライブラリ

jQuery, Prototype, Dojo, …

(13)

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

(14)

JavaからNashorn

ScriptEngineManager manager

= new ScriptEngineManager();

ScriptEngine engine

= manager.getEngineByName("nashorn");

engine.eval("print('hello world')");

(15)

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

JavaからNashorn

JavaからScript functionを呼び出す

engine.eval("function hello(name) {

print('Hello, ' + name); }");

Invocable inv=

(Invocable)

engine;

Object obj=

(16)

JavaからNashorn

Script functionでInterfaceを実装する

engine.eval("function run(){

print('run() called');

}");

Invocable inv =

(Invocable)

engine;

Runnable r=

inv.getInterface(Runnable.class);

Thread th=new Threads(r);

th.start();

(17)

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

NashornからJava

print(java.lang.System.currentTimeMillis());

jjs -fx ...

(18)

Nashorn for Scripting

Scripting用途で使えるように機能追加

-scriptingオプション

Here document

Back quote

String Interpolation

...

(19)

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

(20)

Nashorn Extensions

今日ご紹介するのは

Java typeの参照を取得

Javaオブジェクトのプロパティアクセス

Lamda、SAM、Script関数の関係

スコープおよびコンテキスト

(21)

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

(22)

Java.type

Rhinoでの表記(Nashornでも利用可)

var hashmap=new java.util.HashMap();

または

var HashMap=java.util.HashMap;

var hashmap=new HashMap();

(23)

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

Java.type

Nashornで推奨する表記

var HashMap=

Java.type

('java.util.HashMap');

var hashmap=new HashMap();

(24)

Java.type

Class or Package?

java.util.ArrayList

java.util.Array

l

ist

(25)

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

Java配列

Rhinoでの表記

var intArray=

java.lang.reflect.Array.newInstance(

java.lang.Integer.TYPE, 5);

var Array=java.lang.reflect.Array;

var intClass=java.lang.Integer.TYPE;

var array=Array.newInstance(intClass, 5);

(26)

Java配列

Nashornでの表記

var intArray=new(

Java.type

("int[]"))(5);

var intArrayType=

Java.type

("int[]");

(27)

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

(28)

getter/setter

var HashMap=Java.type('java.util.HashMap');

var map=new HashMap();

map.put('size', 2);

(29)

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

プロパティ

var HashMap=Java.type('java.util.HashMap');

var map=new HashMap();

map.size

=3;

print(

map.size

); // 3

print(map.size()); // 1

(30)

連想配列

var HashMap=Java.type('java.util.HashMap');

var map=new HashMap();

map['size']

=4;

print(

map['size']

); // 4

print(map['size']()); // 1

(31)

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

Lambda, SAM,

(32)

Lambda, SAM, and Script function

Script functionをLambdaオブジェクトやSAMインターフェースを実装するオブ

ジェクトに自動変換

var timer=new java.util.Timer();

timer.schedule(

function() { print('Tick') }

, 0, 1000);

java.lang.Thread.sleep(5000);

(33)

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

Lambda, SAM, and Script function

Lambda typeのインスタンスであるオブジェクトを

Script functionのように取り扱う

var JFunction=

Java.type('java.util.function.Function');

var obj=new JFunction() {

// x->print(x*x)

apply: function(x) { print(x*x) }

}

print(typeof obj); //function

(34)
(35)

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

Scope and Context

load と loadWithNewGlobal

load

同じグローバル・スコープに

Scriptをロード

ロードした

Scriptにロード元のScriptと同じ名称の変数が存

在する場合、変数が衝突する可能性がある

loadWithNewGlobal

グローバル・スコープを新規作成し、そのスコープに

JavaScriptをロード

ロード元に同じ名前の変数があっても衝突しない

(36)

Scope and Context

ScriptContextはBindingに紐付いた複数のスコープをサポート

ScriptContext ctx=new SimpleScriptContext();

ctx.setBindings(engine.createBindings(),

ScriptContext.ENGINE_SCOPE);

Bindings engineScope=

ctx.getBindings(ScriptContext.ENGINE_SCOPE);

engineScope.put("x", "world");

(37)

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

Scope and Context

スコープを区切るために

JavaImporterをwithと共に利用

with(new JavaImporter(java.util, java.io))

{

var map=new HashMap(); //java.util.HashMap

map.put("js", "javascript");

map.put("java", "java");

print(map);

....

}

(38)

その他の

Nashorn Extensions

Java配列とJavaScript配列の変換

Java.from

Java.to

Javaクラスの拡張、スーパークラス・オブジェクトの取得

Java.extend

Java.super

(39)

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

(40)

Java EE for Next Generation Applications

HTML5に対応した、動的かつスケーラブルなアプリケーション提供のために

W

ebS

oc

ke

ts

Av

at

ar

(41)

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

Webアプリケーションアーキテクチャの進化

Request-Response and Multi-page application

Java EE/JVM

Presentation

(Servlet/JSP)

Business

Logic

Backend

Connectivity

Browser

(42)

Webアプリケーションアーキテクチャの進化

Ajax (JavaScript) の利用

Java EE/JVM

Connectivity

(REST, SSE)

Presentation

(Servlet/JSP, JSF)

Business

Logic

Backend

Connectivity

Browser

JavaScript

(43)

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

今風の

Webアプリケーションアーキテクチャ

Presentationよりはむしろ接続性

Java EE/JVM

Connectivity

(WebSocket,

REST, SSE)

Presentation

(Servlet/JSP, JSF)

Business

Logic

Backend

Connectivity

Browser

View

Controller

JavaScript

(44)

How about

(45)

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

既存サービスのモバイル対応例

Node.js

JavaScript

REST

SSE

WebSocket

Browser

View

Controller

JavaScript

(46)

Java EEと並べてJava

VM上で

(47)

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

既存サービスのモバイル対応例

NodeをJava VMで動作させてみる…

Java EE/JVM

Node

Server

Business

Logic

Backend

Connectivity

Client

JavaScript

Browser

View

Controller

JavaScript

(48)
(49)

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

Avatar.js

Node.jsで利用できるモジュールをほぼそのまま利用可能

Express、async、socket.ioなど

npmで取り込んだモジュールを認識

利点

Nodeプログラミングモデルの利用

既存資産、ナレッジ、ツールの活用

(50)

Avatar.js = Node + Java

Threadも含めたJavaテクノロジーを活用

Java

JavaScript

com.myorg.myObj

java.util.SortedSet

require(‘async’)

postEvent

Node App

(51)

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

(52)

Avatar

サーバーサイド

JavaScriptサービスフレームワーク

REST、WebSocket、Server Sent Event (SSE) での

データ送受信に特化

Node.jsのイベント駆動プログラミングモデルや

プログラミングモジュールを活用

(53)

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

*.html

*.js

*.css

HTTP

Application

Services

Avatar Modules

Node Modules

Avatar.js

Avatar Runtime

Avatar Compiler

Server Runtime (Java EE)

JDK 8 / Nashorn

Application

Views

REST/WebSocket/SSE

Avatar (Avatar EE)

変更通知

データ

(54)

HTTP

REST/WebSocket/SSE

Avatar Compiler

Application

Views

*.html

*.js

*.css

Application

Services

Avatar Modules

Node Modules

Avatar.js

Avatar Runtime

アーキテクチャ

(Server)

変更通知

データ

(55)

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

Avatar Service

Java

Ja

va

Scr

ipt

HTTP Load Balancer

Services

Shared State

Services

Services

変更通知

データ

(56)

Avatar Runtime

Avatar Modules

Node Modules

Avatar.js

*.html

*.js

*.css

Application

Services

アーキテクチャ

(Client)

変更通知

データ

HTTP

REST/WebSocket/SSE

Application

Views

Avatar Compiler

(57)

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

(58)
(59)

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

Nashornの今後

Bytecode Persistence (JEP 194)

http://openjdk.java.net/jeps/194

Optimistic Typing

(60)
(61)

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

まとめ

Nashorn

Javaと緊密に統合

Rhinoからの移行にあたっては表記方法が変わっている箇

所があるので注意

今後も性能向上、機能追加、新しい仕様に対応

Server Side JavaScript

Avatar.js、Avatarは鋭意開発中

ぜひ

Feedbackを!

(62)
(63)

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

ソースコード

Shell

主として

jjsで利用

Compiler

ソースからバイトコード

(class) を生成

Scanner

ソースからトークンを作成

Parser

トークンから

AST/IRを作成

IR

スクリプトの要素

Codegen

AST/IRからscript classのバイトコードを生成

Objects

ランタイム要素

(Object、String、Number、Date、RegExp)

Scripts

スクリプト用のコードを含む

class

Runtime

ランタイムタスク処理

Linker

JSR-292 (InvokeDynamic) に基づきランタイムで呼び出し先をバインド

(64)

Nashorn Documents

http://wiki.openjdk.java.net/display/Nashorn/Nashorn+Documentation

Java Platform, Standard Edition Nashorn User's Guide

http://docs.oracle.com/javase/8/docs/technotes/guides/scripting/nash

orn/

Scripting for the Java Platform

http://docs.oracle.com/javase/8/docs/technotes/guides/scripting/

Oracle Java Platform, Standard Edition Java Scripting Programmer's

Guide

http://docs.oracle.com/javase/8/docs/technotes/guides/scripting/prog_

guide/

(65)

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

Nashorn

http://openjdk.java.net/projects/nashorn/

OpenJDK wiki – Nashorn

https://wiki.openjdk.java.net/display/Nashorn/Main

Mailing List

[email protected]

Blogs

Nashorn - JavaScript for the JVM

http://blogs.oracle.com/nashorn/

Nashorn Japan

(66)

Avatar.js

Project Page

https://avatar-js.java.net/

Mailing List

(67)

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

Avatar

Project Page

https://avatar.java.net/

Mailing List

[email protected]

(68)
(69)

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

参照

関連したドキュメント

●Gartner Magic QuadrantにてクラウドHCM Suiteにおけるリーダーの評価.. Copyright © 2022 Nomura System Corporation Co, Ltd. All Rights Reserved.. Copyright © 2022 Nomura

支援要請入力詳細 13ページ 患者受入入力詳細 14ページ 支援可能スタッフ3.

and Kristjan Vassil (2010) Internet voting in Estonia : a comparative analysis of four elections since 2005 : report for the Council of Europe”Report for the Council of Europe.

2021年1月15日にHa Tay Pharmaceutical Joint Stock Company(

がん化学療法に十分な知識・経験を持つ医師のもとで、本剤の投与が適切と判断さ

日医かかりつけ医機能研修制度 令和 年度応用研修会 「メタボリックシンドロームからフレイルまで」 飯島勝矢 Tamakoshi A ら. Obesity

(Immuno Checkpoint Inhibitor Proper use Support team

剣道部 柔道部 硬式野球部 卓球部 水泳部 ラグビー部 ソフトテニス部 テニス部 ハンドボール部 サッカー部 バドミントン部