SlideShare a Scribd company logo
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.1
JavaScript Running On
JavaVM: Nashorn
NISHIKAWA, Akihiro
Oracle Corporation Japan
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.2
以下の事項は、弊社の一般的な製品の方向性に関する概要を説明するも
のです。また、情報提供を唯一の目的とするものであり、いかなる契約に
も組み込むことはできません。以下の事項は、マテリアルやコード、機能を
提供することをコミットメント(確約)するものではないため、購買決定を行う
際の判断材料になさらないで下さい。オラクル製品に関して記載されてい
る機能の開発、リリースおよび時期については、弊社の裁量により決定さ
れます。
OracleとJavaは、Oracle Corporation 及びその子会社、関連会社の米国及びその他の国における登録商標です。文中の
社名、商品名等は各社の商標または登録商標である場合があります。
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の今後
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.4
Nashorn
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.5
Nashorn
Compact1 Profileでも使えるJavaScript Engine
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.6
Nashorn
Compact1 Profileでも使えるJavaScript Engine
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.
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)の導入
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
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.10
$JAVA_HOME/bin/jjs
$JAVA_HOME/jre/lib/ext/nashorn.jar
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.11
ECMAScript-262 Edition 5.1に100%対応
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...
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.13
実行例
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"));
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");
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();
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.17
NashornからJava
print(java.lang.System.currentTimeMillis());
jjs -fx ...
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.18
Nashorn for Scripting
Scripting用途で使えるように機能追加
 -scriptingオプション
 Here document
 Back quote
 String Interpolation
...
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.19
Nashorn Extensions
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.20
Nashorn Extensions
今日ご紹介するのは
 Java typeの参照を取得
 Javaオブジェクトのプロパティアクセス
 Lambda、SAM、Script関数の関係
 スコープおよびコンテキスト
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.21
Java type
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();
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();
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.24
Java.type
Class or Package?
java.util.ArrayList
java.util.Arraylist
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);
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);
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.27
プロパティへのアクセス
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
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
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
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.31
Lambda, SAM,
and Script function
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();
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っぽく
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.34
Scope and Context
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.35
Scope and Context
load と loadWithNewGlobal
 load
– 同じグローバル・スコープにScriptをロード
– ロードしたScriptにロード元のScriptと同じ名称の変数が存
在する場合、変数が衝突する可能性がある
 loadWithNewGlobal
– グローバル・スコープを新規作成し、そのスコープに
JavaScriptをロード
– ロード元に同じ名前の変数があっても衝突しない
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);
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);
....
}
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.38
その他のNashorn Extensions
 Java配列とJavaScript配列の変換
– Java.from
– Java.to
 Javaクラスの拡張、スーパークラス・オブジェクトの取得
– Java.extend
– Java.super
など
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.39
Server Side JavaScript
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.40
Java EE for Next Generation Applications
HTML5に対応した、動的かつスケーラブルなアプリケーション提供のために
WebSockets
Avatar
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
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
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
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.44
How about Node.js?
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.45
既存サービスのモバイル対応例
Node.js
JavaScript
REST
SSE
WebSocket
Browser
View
Controller
JavaScript
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.46
How about
Node.js on JVM?
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
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.48
Avatar.js
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.49
Avatar.js
 Node.jsで利用できるモジュールをほぼそのまま利用可能
– Express、async、socket.ioなど
– npmで取り込んだモジュールを認識
 利点
– Nodeプログラミングモデルの利用
– 既存資産、ナレッジ、ツールの活用
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
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.51
Avatar
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.52
Avatar
サーバーサイドJavaScriptサービスフレームワーク
 REST、WebSocket、Server Sent Event (SSE) での
データ送受信に特化
 Node.jsのイベント駆動プログラミングモデルや
プログラミングモジュールを活用
 エンタープライズ機能(Java EE)との統合
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)
変更通知
データ
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)
変更通知
データ
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.55
Avatar Service
Java
JavaScript
HTTP Load Balancer
Services
Shared State
Services Services
変更通知
データ
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
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.57
Avatar and Avatar.js
progress steadily.
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.58
Nashornの今後
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.59
Nashornの今後
 Bytecode Persistence (JEP 194)
http://openjdk.java.net/jeps/194
 Optimistic Typing
 その他
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.60
まとめ
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.61
まとめ
 Nashorn
– Javaと緊密に統合
– Rhinoからの移行にあたっては表記方法が変わっている箇
所があるので注意
– 今後も性能向上、機能追加、新しい仕様に対応
 Server Side JavaScript
– Avatar.js、Avatarは鋭意開発中
– ぜひFeedbackを!
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.62
Appendix
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 最適なメソッドを検索(言語間で動作)
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/
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/
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
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.67
Avatar
 Project Page
https://avatar.java.net/
 Mailing List
users@avatar.java.net
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.68
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.69

More Related Content

PDF
Nashorn: JavaScript Running on Java VM (English)
PDF
Java EE 7 et ensuite pourquoi pas JavaScript sur le serveur!
PDF
Nashorn in the future (English)
PPTX
JavaOne 2014 - Scalable JavaScript Applications with Project Nashorn [CON6423]
PDF
Java: Create The Future Keynote
PDF
Oracle Keynote from JMagghreb 2014
PDF
Nashorn - JavaScript on the JVM - Akhil Arora
PDF
Tweet4Beer (atualizada): Torneira de Chopp Controlada por Java, JavaFX, IoT ...
Nashorn: JavaScript Running on Java VM (English)
Java EE 7 et ensuite pourquoi pas JavaScript sur le serveur!
Nashorn in the future (English)
JavaOne 2014 - Scalable JavaScript Applications with Project Nashorn [CON6423]
Java: Create The Future Keynote
Oracle Keynote from JMagghreb 2014
Nashorn - JavaScript on the JVM - Akhil Arora
Tweet4Beer (atualizada): Torneira de Chopp Controlada por Java, JavaFX, IoT ...

What's hot (20)

PDF
Troubleshooting Native Memory Leaks in Java Applications
PPTX
Modularization With Project Jigsaw in JDK 9
PDF
Monitoring and Troubleshooting Tools in Java 9
PPTX
HotSpotコトハジメ
PDF
Troubleshooting Tools In JDK
PDF
JSR107 State of the Union JavaOne 2013
PDF
Intro To OSGi
PPTX
Configuration for Java EE and the Cloud
PPTX
Java EE for the Cloud
PPTX
55 New Features in JDK 9
PPTX
Configuration for Java EE: Config JSR and Tamaya
PDF
JavaCro'15 - Everything a Java EE Developer needs to know about the JavaScrip...
PDF
Java EE, What's Next? by Anil Gaur
PPT
Apache Aries: A blueprint for developing with OSGi and JEE
PPTX
What's new in the Java API for JSON Binding
PDF
Apache Karaf - Building OSGi applications on Apache Karaf - T Frank & A Grzesik
PPTX
What's New in Java 9
PDF
JVMs in Containers - Best Practices
PDF
Configuration with Apache Tamaya
PDF
CompletableFuture уже здесь
Troubleshooting Native Memory Leaks in Java Applications
Modularization With Project Jigsaw in JDK 9
Monitoring and Troubleshooting Tools in Java 9
HotSpotコトハジメ
Troubleshooting Tools In JDK
JSR107 State of the Union JavaOne 2013
Intro To OSGi
Configuration for Java EE and the Cloud
Java EE for the Cloud
55 New Features in JDK 9
Configuration for Java EE: Config JSR and Tamaya
JavaCro'15 - Everything a Java EE Developer needs to know about the JavaScrip...
Java EE, What's Next? by Anil Gaur
Apache Aries: A blueprint for developing with OSGi and JEE
What's new in the Java API for JSON Binding
Apache Karaf - Building OSGi applications on Apache Karaf - T Frank & A Grzesik
What's New in Java 9
JVMs in Containers - Best Practices
Configuration with Apache Tamaya
CompletableFuture уже здесь
Ad

Viewers also liked (20)

PDF
FunScript:F#からJavaScriptへのコンパイラー
PDF
大規模JavaScript開発
PDF
FirefoxOSで学ぶJavaScript作法
PDF
スクレイピングとPython
PPTX
Zapier ppap-share
PDF
Pythonを取り巻く開発環境 #pyconjp
PDF
2017冬の開発合宿vrオンラインゲーム
PDF
【Topotal輪読会】JavaScript で学ぶ関数型プログラミング 2 章
PDF
power-assert in JavaScript
PDF
(エンジニアから見た)
最近のスマートウォッチ事情
PDF
クライアントサイドjavascript簡単紹介
PDF
Drupal 8 における TypeScript を使用する JavaScript 開発の現状
PPTX
HTML5/JavaScriptで作るAndroidアプリ開発seminar
PDF
次世代言語 Python による PyPy を使った次世代の処理系開発
PDF
PHPとJavaScriptの噺
PDF
JavaScriptユーティリティライブラリの紹介
PDF
JavaScript基礎勉強会
PDF
Python & PyConJP 2014 Report
PDF
"Continuous Publication" with Python: Another Approach
PPTX
デザイナーに知っておいてほしい事
FunScript:F#からJavaScriptへのコンパイラー
大規模JavaScript開発
FirefoxOSで学ぶJavaScript作法
スクレイピングとPython
Zapier ppap-share
Pythonを取り巻く開発環境 #pyconjp
2017冬の開発合宿vrオンラインゲーム
【Topotal輪読会】JavaScript で学ぶ関数型プログラミング 2 章
power-assert in JavaScript
(エンジニアから見た)
最近のスマートウォッチ事情
クライアントサイドjavascript簡単紹介
Drupal 8 における TypeScript を使用する JavaScript 開発の現状
HTML5/JavaScriptで作るAndroidアプリ開発seminar
次世代言語 Python による PyPy を使った次世代の処理系開発
PHPとJavaScriptの噺
JavaScriptユーティリティライブラリの紹介
JavaScript基礎勉強会
Python & PyConJP 2014 Report
"Continuous Publication" with Python: Another Approach
デザイナーに知っておいてほしい事
Ad

Similar to Nashorn : JavaScript Running on Java VM (Japanese) (20)

PDF
Java 8
PDF
What's new in Java 8
PDF
Java API for JSON Binding - Introduction and update
PDF
Jaroslav Tulach: GraalVM - z vývoje nejrychlejšího virtuálního stroje na světě
PDF
PDF
Japanese Introduction to Oracle JET
PDF
Project Avatar (Lyon JUG & Alpes JUG - March 2014)
PDF
Server Side JavaScript on the Java Platform - David Delabassee
PDF
Java EE Next
PDF
Graal and Truffle: Modularity and Separation of Concerns as Cornerstones for ...
PDF
General Capabilities of GraalVM by Oleg Selajev @shelajev
PPTX
O Mundo Oracle e o Que Há de Novo no Java
PDF
Nashorn: Novo Motor Javascript no Java SE 8
PDF
Server Side JavaScript on the JVM - Project Avatar - QCon London March 2014
PDF
2015 Java update and roadmap, JUG sevilla
PDF
MySQL Clusters
PDF
MySQL HA
PDF
Keynote (Nandini Ramani) - The Role of Java in Heterogeneous Computing & How ...
PPTX
Java EE7
PPTX
What's new for JavaFX in JDK8 - Weaver
Java 8
What's new in Java 8
Java API for JSON Binding - Introduction and update
Jaroslav Tulach: GraalVM - z vývoje nejrychlejšího virtuálního stroje na světě
Japanese Introduction to Oracle JET
Project Avatar (Lyon JUG & Alpes JUG - March 2014)
Server Side JavaScript on the Java Platform - David Delabassee
Java EE Next
Graal and Truffle: Modularity and Separation of Concerns as Cornerstones for ...
General Capabilities of GraalVM by Oleg Selajev @shelajev
O Mundo Oracle e o Que Há de Novo no Java
Nashorn: Novo Motor Javascript no Java SE 8
Server Side JavaScript on the JVM - Project Avatar - QCon London March 2014
2015 Java update and roadmap, JUG sevilla
MySQL Clusters
MySQL HA
Keynote (Nandini Ramani) - The Role of Java in Heterogeneous Computing & How ...
Java EE7
What's new for JavaFX in JDK8 - Weaver

More from Logico (14)

PDF
Welcome, Java 15! (Japanese)
PDF
Look into Project Valhalla from CLR viewpoint
PDF
Jvmls 2019 feedback valhalla update
PDF
Project Helidon Overview (Japanese)
PDF
Oracle Code One 2018 Feedback (Server Side / Japanese)
PDF
ADBA (Asynchronous Database Access)
PDF
Java EE 8 Overview (Japanese)
PDF
Another compilation method in java - AOT (Ahead of Time) compilation
PDF
Polyglot on the JVM with Graal (English)
PDF
CDI 2.0 (JSR 365) - Java Day Tokyo 2017 (English)
PDF
Polyglot on the JVM with Graal (Japanese)
PDF
Nashorn in the future (Japanese)
PDF
これからのNashorn
PDF
Nashorn in the future (English)
Welcome, Java 15! (Japanese)
Look into Project Valhalla from CLR viewpoint
Jvmls 2019 feedback valhalla update
Project Helidon Overview (Japanese)
Oracle Code One 2018 Feedback (Server Side / Japanese)
ADBA (Asynchronous Database Access)
Java EE 8 Overview (Japanese)
Another compilation method in java - AOT (Ahead of Time) compilation
Polyglot on the JVM with Graal (English)
CDI 2.0 (JSR 365) - Java Day Tokyo 2017 (English)
Polyglot on the JVM with Graal (Japanese)
Nashorn in the future (Japanese)
これからのNashorn
Nashorn in the future (English)

Recently uploaded (20)

PDF
Review of recent advances in non-invasive hemoglobin estimation
PDF
Unlocking AI with Model Context Protocol (MCP)
PDF
Dropbox Q2 2025 Financial Results & Investor Presentation
PDF
Encapsulation_ Review paper, used for researhc scholars
PPTX
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
PPTX
PA Analog/Digital System: The Backbone of Modern Surveillance and Communication
PPTX
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
PDF
Reach Out and Touch Someone: Haptics and Empathic Computing
PPT
“AI and Expert System Decision Support & Business Intelligence Systems”
PPT
Teaching material agriculture food technology
PDF
Diabetes mellitus diagnosis method based random forest with bat algorithm
PDF
NewMind AI Weekly Chronicles - August'25 Week I
PPTX
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
PPTX
Understanding_Digital_Forensics_Presentation.pptx
PDF
Advanced methodologies resolving dimensionality complications for autism neur...
PPTX
Digital-Transformation-Roadmap-for-Companies.pptx
PDF
Modernizing your data center with Dell and AMD
PDF
Bridging biosciences and deep learning for revolutionary discoveries: a compr...
PDF
Network Security Unit 5.pdf for BCA BBA.
PDF
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
Review of recent advances in non-invasive hemoglobin estimation
Unlocking AI with Model Context Protocol (MCP)
Dropbox Q2 2025 Financial Results & Investor Presentation
Encapsulation_ Review paper, used for researhc scholars
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
PA Analog/Digital System: The Backbone of Modern Surveillance and Communication
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
Reach Out and Touch Someone: Haptics and Empathic Computing
“AI and Expert System Decision Support & Business Intelligence Systems”
Teaching material agriculture food technology
Diabetes mellitus diagnosis method based random forest with bat algorithm
NewMind AI Weekly Chronicles - August'25 Week I
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
Understanding_Digital_Forensics_Presentation.pptx
Advanced methodologies resolving dimensionality complications for autism neur...
Digital-Transformation-Roadmap-for-Companies.pptx
Modernizing your data center with Dell and AMD
Bridging biosciences and deep learning for revolutionary discoveries: a compr...
Network Security Unit 5.pdf for BCA BBA.
Build a system with the filesystem maintained by OSTree @ COSCUP 2025

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の今後
  • 4. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.4 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...
  • 13. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.13 実行例
  • 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関数の関係  スコープおよびコンテキスト
  • 21. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.21 Java type
  • 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
  • 48. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.48 Avatar.js
  • 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
  • 51. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.51 Avatar
  • 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  その他
  • 60. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.60 まとめ
  • 61. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.61 まとめ  Nashorn – Javaと緊密に統合 – Rhinoからの移行にあたっては表記方法が変わっている箇 所があるので注意 – 今後も性能向上、機能追加、新しい仕様に対応  Server Side JavaScript – Avatar.js、Avatarは鋭意開発中 – ぜひFeedbackを!
  • 62. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.62 Appendix
  • 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 [email protected]  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 [email protected]
  • 67. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.67 Avatar  Project Page https://avatar.java.net/  Mailing List [email protected]
  • 68. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.68
  • 69. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.69