Mais conteúdo relacionado
Semelhante a Nashorn : JavaScript Running on Java VM (Japanese) (20)
Nashorn : JavaScript Running on Java VM (Japanese)
- 1. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.1
JavaScript Running On
JavaVM: Nashorn
NISHIKAWA, Akihiro
Oracle Corporation Japan
- 2. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.2
以下の事項は、弊社の一般的な製品の方向性に関する概要を説明するも
のです。また、情報提供を唯一の目的とするものであり、いかなる契約に
も組み込むことはできません。以下の事項は、マテリアルやコード、機能を
提供することをコミットメント(確約)するものではないため、購買決定を行う
際の判断材料になさらないで下さい。オラクル製品に関して記載されてい
る機能の開発、リリースおよび時期については、弊社の裁量により決定さ
れます。
OracleとJavaは、Oracle Corporation 及びその子会社、関連会社の米国及びその他の国における登録商標です。文中の
社名、商品名等は各社の商標または登録商標である場合があります。
- 3. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.3 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
Agenda Nashorn
Server Side JavaScript
Nashornの今後
- 5. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.5
Nashorn
Compact1 Profileでも使えるJavaScript Engine
- 6. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.6
Nashorn
Compact1 Profileでも使えるJavaScript Engine
- 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. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.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 codeJava code
Other runtime
Other APIs jjs
- 10. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.10
$JAVA_HOME/bin/jjs
$JAVA_HOME/jre/lib/ext/nashorn.jar
- 11. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.11
ECMAScript-262 Edition 5.1に100%対応
- 12. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.12
未実装・未サポート
ECMAScript 6 (Harmony)
– Generators
– 分割代入(Destructuring assignment)
– const, let, ...
DOM/CSSおよびDOM/CSS関連ライブラリ
– jQuery, Prototype, Dojo, …
ブラウザAPIやブラウザエミュレータ
– HTML5 canvas, HTML5 audio, WebGL, WebWorkers...
- 14. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.14
JavaからNashorn
ScriptEngineManager manager
= new ScriptEngineManager();
ScriptEngine engine
= manager.getEngineByName("nashorn");
engine.eval("print('hello world')");
engine.eval(new FileReader("hello.js"));
- 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=
inv.invokeFunction("hello","Taro");
- 16. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.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();
th.join();
- 17. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.17
NashornからJava
print(java.lang.System.currentTimeMillis());
jjs -fx ...
- 18. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.18
Nashorn for Scripting
Scripting用途で使えるように機能追加
-scriptingオプション
Here document
Back quote
String Interpolation
...
- 19. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.19
Nashorn Extensions
- 20. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.20
Nashorn Extensions
今日ご紹介するのは
Java typeの参照を取得
Javaオブジェクトのプロパティアクセス
Lambda、SAM、Script関数の関係
スコープおよびコンテキスト
- 22. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.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. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.24
Java.type
Class or Package?
java.util.ArrayList
java.util.Arraylist
- 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. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.26
Java配列
Nashornでの表記
var intArray=new(Java.type("int[]"))(5);
var intArrayType=Java.type("int[]");
var intArray=new intArrayType(5);
- 27. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.27
プロパティへのアクセス
- 28. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.28
getter/setter
var HashMap=Java.type('java.util.HashMap');
var map=new HashMap();
map.put('size', 2);
print(map.get('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. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.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,
and Script function
- 32. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.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);
timer.cancel();
- 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
obj(9); // 81 Script functionっぽく
- 34. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.34
Scope and Context
- 35. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.35
Scope and Context
load と loadWithNewGlobal
load
– 同じグローバル・スコープにScriptをロード
– ロードしたScriptにロード元のScriptと同じ名称の変数が存
在する場合、変数が衝突する可能性がある
loadWithNewGlobal
– グローバル・スコープを新規作成し、そのスコープに
JavaScriptをロード
– ロード元に同じ名前の変数があっても衝突しない
- 36. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.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");
engine.eval("print(x)", ctx);
- 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. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.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
Server Side JavaScript
- 40. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.40
Java EE for Next Generation Applications
HTML5に対応した、動的かつスケーラブルなアプリケーション提供のために
WebSockets
Avatar
- 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
ConnectivityBrowser
- 42. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.42
Webアプリケーションアーキテクチャの進化
Ajax (JavaScript) の利用
Java EE/JVM
Connectivity
(REST, SSE)
Presentation
(Servlet/JSP, JSF)
Business
Logic
Backend
ConnectivityBrowser
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
ConnectivityBrowser
View
Controller
JavaScript
- 44. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.44
How about Node.js?
- 45. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.45
既存サービスのモバイル対応例
Node.js
JavaScript
REST
SSE
WebSocket
Browser
View
Controller
JavaScript
- 46. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.46
How about
Node.js on JVM?
- 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
JavaScriptBrowser
View
Controller
JavaScript
- 49. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.49
Avatar.js
Node.jsで利用できるモジュールをほぼそのまま利用可能
– Express、async、socket.ioなど
– npmで取り込んだモジュールを認識
利点
– Nodeプログラミングモデルの利用
– 既存資産、ナレッジ、ツールの活用
- 50. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.50
Avatar.js = Node + Java
Threadも含めたJavaテクノロジーを活用
JavaJavaScript
com.myorg.myObj
java.util.SortedSet
java.lang.Thread
require('async')
postEvent
Node App
- 52. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.52
Avatar
サーバーサイドJavaScriptサービスフレームワーク
REST、WebSocket、Server Sent Event (SSE) での
データ送受信に特化
Node.jsのイベント駆動プログラミングモデルや
プログラミングモジュールを活用
エンタープライズ機能(Java EE)との統合
- 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. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.54
HTTP
REST/WebSocket/SSE
Avatar Compiler
Application
Views
*.html
*.js
*.css
Application
Services
Avatar Modules
Node Modules
Avatar.js
Avatar Runtime
Server Runtime (Java EE)
JDK 8 / Nashorn
アーキテクチャ(Server)
変更通知
データ
- 55. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.55
Avatar Service
Java
JavaScript
HTTP Load Balancer
Services
Shared State
Services Services
変更通知
データ
- 56. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.56
Avatar Runtime
Server Runtime (Java EE)
Avatar Modules
Node Modules
Avatar.js
*.html
*.js
*.css
Application
Services
JDK 8 / Nashorn
アーキテクチャ(Client)
変更通知
データ
HTTP
REST/WebSocket/SSE
Application
Views
Avatar Compiler
- 57. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.57
Avatar and Avatar.js
progress steadily.
- 58. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.58
Nashornの今後
- 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
その他
- 61. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.61
まとめ
Nashorn
– Javaと緊密に統合
– Rhinoからの移行にあたっては表記方法が変わっている箇
所があるので注意
– 今後も性能向上、機能追加、新しい仕様に対応
Server Side JavaScript
– Avatar.js、Avatarは鋭意開発中
– ぜひFeedbackを!
- 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) に基づきランタイムで呼び出し先をバインド
Dynalink 最適なメソッドを検索(言語間で動作)
- 64. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.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
nashorn-dev@openjdk.java.net
Blogs
– Nashorn - JavaScript for the JVM
http://blogs.oracle.com/nashorn/
– Nashorn Japan
https://blogs.oracle.com/nashorn_ja/
- 66. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.66
Avatar.js
Project Page
https://avatar-js.java.net/
Mailing List
users@avatar-js.java.net
- 67. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.67
Avatar
Project Page
https://avatar.java.net/
Mailing List
users@avatar.java.net