Java 8 Nashorn ve Avatar.js 
Rahman Usta 
rahmanusta@kodcu.com
Nashorn Nedir? 
• Java 8 için geliştirilen bir JS motorudur. 
• JVM ortamında, Javascript dilini kullanmaya 
olanak tanır. 
• ECMAScript 5.1’i destekler.
Nashorn Nedir? 
• Dünyanın en popüler 2 dilini birlikte 
kullanmaya olanak tanır. 
• 2 dilin sahip olduğu geniş değer ırmağını 
birleştirir. (Bilgi, tecrübe, framework, tools)
Nashorn neyi hedefler? 
• ECMAScript-262 sürüm 5.1’i desteklemeli. 
– Uyumluluk testi sürecinde 
• JSR 223 «javax.script» API’lerini desteklemeli. 
• Java2JS ve JS2Java desteği olmalı. 
• Bir shell aracı olmalı (JJS) 
• Performans ve bellek tüketimi büyük ölçüde daha iyi 
olmalı (Rhino’a göre)
Nashorn neyi hedeflemez? 
• Henüz ECMAScript 6 özelliklerini desteklemez. 
• Standart olmayan özellikleri desteklemez. 
• Nashorn bir browser ortamı değildir. 
– DOM,CSS, Jquery, Dojo desteklemez.
Neden Nashorn? 
• Rhino diğer JS motorlarına göre düşük 
performans sunuyordu. 
• Nashorn bu amaçla sıfırdan yazıldı. 
• Rhino JS motoruna göre, 5x performans 
sunuyor.
JJS aracı
JSR 223 "javax.script" paketi 
• Java ortamından Script dillerine erişmek ve 
kullanmak için özel bileşenler sunar.
Java API – Evaluate Script 
ScriptEngineManager em= new ScriptEngineManager(); 
ScriptEngine engine = em.getEngineByName("Nashorn"); 
engine.eval(" var a=5; var b=6; "); 
engine.eval(" var c=7; print("Toplam:"+(a+b+c))");
Java API – Object Binding 
• Java ortamındanki nesnelerin, JS ortamına 
eriştirilmesini sağlar. 
ScriptEngine engine = 
engineManager.getEngineByName("Nashorn"); 
engine.put("name","Emin"); 
engine.put("age" ,28);
Java API – Compilable Arayüzü 
• Derlenen bir Script’in tekrar tekrar kullanımına 
olanak tanır. 
Compilable compilable = (Compilable) engine; 
CompiledScript compiled = compilable.compile(""); 
compiled.eval();
Java API – Invocable Arayüzü 
• Java tarafından, Script fonksiyonlarını 
koşturmak için bulunan opsiyonel bir 
arayüzdür. 
Invocable inv = (Invocable) engine; 
inv.invokeFunction("funcName",5,4); 
inv.invokeMethod(context,"funcName",5,4);
Java API – Harici Script 
ScriptEngineManager em= new ScriptEngineManager(); 
ScriptEngine engine = em.getEngineByName("js"); 
engine.eval(new FileReader("..."));
JJS – Harici Script 
//merhaba.js 
print("Merhaba Dünya");
Java Tiplerini Kullanmak 
print(Object); //function Object() { [native code] } 
print(new Object()); // [object Object] 
var Object = java.lang.Object; 
print(Object); // [JavaClass java.lang.Object] 
print(new Object()); // java.lang.Object@... 
var JavaObject = Java.type("java.lang.Object"); 
print(JavaObject); // [JavaClass java.lang.Object] 
print(new JavaObject()); // java.lang.Object@...
Java Tiplerini Kullanmak 
var IntArray = Java.type("int[]"); 
print(IntArray); // [JavaClass [I] 
var intArray = new IntArray(3); 
print(intArray); // [I@78b1cc93 
intArray[0]=1; 
intArray[1]=2; 
intArray[2]=3;
Java Tiplerini Kullanmak 
var StrArray = Java.type("java.lang.String[]"); 
print(StrArray); // [JavaClass [Ljava.lang.String;] 
var strArray = new StrArray(3); 
print(strArray); // [Ljava.lang.String;@1da51a35 
strArray[0]="Ali"; 
strArray[1]="Veli"; 
strArray[2]="Selami";
Dizi Tip Dönüşümü (Java.to) 
var jsArray = []; 
jsArray[0] = "Ali"; 
jsArray.push(10); 
print(jsArray); // Ali,10 
var javaArray= Java.to(jsArray,"java.lang.String[]"); 
print(javaArray); // [Ljava.lang.String;@1786f9d5 
print(javaArray[0]); // Ali 
print(javaArray.length); // 2
Dizi Tip Dönüşümü (Java.from) 
var DoubleArray = Java.type("double[]"); 
var javaArray = new DoubleArray(3); 
print(DoubleArray); // [JavaClass [D] 
print(javaArray); // [D@a74868d 
var jsArray = Java.from(javaArray); 
jsArray.push(7.9); 
print(jsArray); // 0,0,0,7.9
Dizi Tip Dönüşümü (Java.from) 
var List = java.util.LinkedList; 
var liste = new List(); 
liste.add("Ali"); 
liste.add(5); 
print(List); // [JavaClass java.util.LinkedList] 
print(liste); // [Ali, 5] 
var array = Java.from(liste); 
array.push("Veli"); 
print(array); // Ali,5,Veli
Java Paketlerinin Yüklenmesi 
• Nashorn Java paket ve sınıflarının 
yüklenmesine doğrudan destek vermez. Onun 
yerine bir rhino modülünü kullanır. 
load("nashorn:mozilla_compat.js"); 
importPackage("java.util"); 
importClass(java.util.Timer); 
var list = new ArrayList();
POJO alanlarına erişmek 
var geo= new com.kodcu.Geo(); 
geo.en = 5; 
geo.boy = 10;
Avatar.js 
• Node.js programlama modelini ve ortamını 
JVM ekosistemine katar. 
• Node.js = Google v8 + Javascript 
• Avatar.js = Nashorn + Java + Javascript
Node Asenkron Modeli
Node’un avantajları 
• Hafif 
• Cross-platform 
• Client ve Sunucuda aynı dil 
• Npm (Node Package Manager) 
• Asenkron G/Ç 
– epool, kqueue, /dev/pool, select, IOCP 
• Ölçeklenebilir 
• Düşük bellek tüketimi 
• C10K Problemine çözüm sunması
Avatar.js avantajları 
• Node uygulamalarını JVM’de koşturur. 
• Java ve Javascript birlikte kullanılabilir. 
– JDBC, Concurrency, Java EE 
• MultiThreaded uygulamalar geliştirilebilir. 
– Yüksek CPU kullanım deneyimi
Avatar.js vs Node.js 
• http://octane-benchmark.googlecode.com/svn/latest/index.html 
• https://developers.google.com/octane/benchmark 
• http://v8.googlecode.com/svn/data/benchmarks/v7/run.html 
• https://github.com/hakobera/node-v8-benchmark-suite 
npm install benchmark 
npm install benchmark-octane
???

Java 8 Nashorn ve Avatar.js

  • 1.
    Java 8 Nashornve Avatar.js Rahman Usta rahmanusta@kodcu.com
  • 2.
    Nashorn Nedir? •Java 8 için geliştirilen bir JS motorudur. • JVM ortamında, Javascript dilini kullanmaya olanak tanır. • ECMAScript 5.1’i destekler.
  • 3.
    Nashorn Nedir? •Dünyanın en popüler 2 dilini birlikte kullanmaya olanak tanır. • 2 dilin sahip olduğu geniş değer ırmağını birleştirir. (Bilgi, tecrübe, framework, tools)
  • 4.
    Nashorn neyi hedefler? • ECMAScript-262 sürüm 5.1’i desteklemeli. – Uyumluluk testi sürecinde • JSR 223 «javax.script» API’lerini desteklemeli. • Java2JS ve JS2Java desteği olmalı. • Bir shell aracı olmalı (JJS) • Performans ve bellek tüketimi büyük ölçüde daha iyi olmalı (Rhino’a göre)
  • 5.
    Nashorn neyi hedeflemez? • Henüz ECMAScript 6 özelliklerini desteklemez. • Standart olmayan özellikleri desteklemez. • Nashorn bir browser ortamı değildir. – DOM,CSS, Jquery, Dojo desteklemez.
  • 6.
    Neden Nashorn? •Rhino diğer JS motorlarına göre düşük performans sunuyordu. • Nashorn bu amaçla sıfırdan yazıldı. • Rhino JS motoruna göre, 5x performans sunuyor.
  • 7.
  • 8.
    JSR 223 "javax.script"paketi • Java ortamından Script dillerine erişmek ve kullanmak için özel bileşenler sunar.
  • 9.
    Java API –Evaluate Script ScriptEngineManager em= new ScriptEngineManager(); ScriptEngine engine = em.getEngineByName("Nashorn"); engine.eval(" var a=5; var b=6; "); engine.eval(" var c=7; print("Toplam:"+(a+b+c))");
  • 10.
    Java API –Object Binding • Java ortamındanki nesnelerin, JS ortamına eriştirilmesini sağlar. ScriptEngine engine = engineManager.getEngineByName("Nashorn"); engine.put("name","Emin"); engine.put("age" ,28);
  • 11.
    Java API –Compilable Arayüzü • Derlenen bir Script’in tekrar tekrar kullanımına olanak tanır. Compilable compilable = (Compilable) engine; CompiledScript compiled = compilable.compile(""); compiled.eval();
  • 12.
    Java API –Invocable Arayüzü • Java tarafından, Script fonksiyonlarını koşturmak için bulunan opsiyonel bir arayüzdür. Invocable inv = (Invocable) engine; inv.invokeFunction("funcName",5,4); inv.invokeMethod(context,"funcName",5,4);
  • 13.
    Java API –Harici Script ScriptEngineManager em= new ScriptEngineManager(); ScriptEngine engine = em.getEngineByName("js"); engine.eval(new FileReader("..."));
  • 14.
    JJS – HariciScript //merhaba.js print("Merhaba Dünya");
  • 15.
    Java Tiplerini Kullanmak print(Object); //function Object() { [native code] } print(new Object()); // [object Object] var Object = java.lang.Object; print(Object); // [JavaClass java.lang.Object] print(new Object()); // java.lang.Object@... var JavaObject = Java.type("java.lang.Object"); print(JavaObject); // [JavaClass java.lang.Object] print(new JavaObject()); // java.lang.Object@...
  • 16.
    Java Tiplerini Kullanmak var IntArray = Java.type("int[]"); print(IntArray); // [JavaClass [I] var intArray = new IntArray(3); print(intArray); // [I@78b1cc93 intArray[0]=1; intArray[1]=2; intArray[2]=3;
  • 17.
    Java Tiplerini Kullanmak var StrArray = Java.type("java.lang.String[]"); print(StrArray); // [JavaClass [Ljava.lang.String;] var strArray = new StrArray(3); print(strArray); // [Ljava.lang.String;@1da51a35 strArray[0]="Ali"; strArray[1]="Veli"; strArray[2]="Selami";
  • 18.
    Dizi Tip Dönüşümü(Java.to) var jsArray = []; jsArray[0] = "Ali"; jsArray.push(10); print(jsArray); // Ali,10 var javaArray= Java.to(jsArray,"java.lang.String[]"); print(javaArray); // [Ljava.lang.String;@1786f9d5 print(javaArray[0]); // Ali print(javaArray.length); // 2
  • 19.
    Dizi Tip Dönüşümü(Java.from) var DoubleArray = Java.type("double[]"); var javaArray = new DoubleArray(3); print(DoubleArray); // [JavaClass [D] print(javaArray); // [D@a74868d var jsArray = Java.from(javaArray); jsArray.push(7.9); print(jsArray); // 0,0,0,7.9
  • 20.
    Dizi Tip Dönüşümü(Java.from) var List = java.util.LinkedList; var liste = new List(); liste.add("Ali"); liste.add(5); print(List); // [JavaClass java.util.LinkedList] print(liste); // [Ali, 5] var array = Java.from(liste); array.push("Veli"); print(array); // Ali,5,Veli
  • 21.
    Java Paketlerinin Yüklenmesi • Nashorn Java paket ve sınıflarının yüklenmesine doğrudan destek vermez. Onun yerine bir rhino modülünü kullanır. load("nashorn:mozilla_compat.js"); importPackage("java.util"); importClass(java.util.Timer); var list = new ArrayList();
  • 22.
    POJO alanlarına erişmek var geo= new com.kodcu.Geo(); geo.en = 5; geo.boy = 10;
  • 23.
    Avatar.js • Node.jsprogramlama modelini ve ortamını JVM ekosistemine katar. • Node.js = Google v8 + Javascript • Avatar.js = Nashorn + Java + Javascript
  • 24.
  • 25.
    Node’un avantajları •Hafif • Cross-platform • Client ve Sunucuda aynı dil • Npm (Node Package Manager) • Asenkron G/Ç – epool, kqueue, /dev/pool, select, IOCP • Ölçeklenebilir • Düşük bellek tüketimi • C10K Problemine çözüm sunması
  • 26.
    Avatar.js avantajları •Node uygulamalarını JVM’de koşturur. • Java ve Javascript birlikte kullanılabilir. – JDBC, Concurrency, Java EE • MultiThreaded uygulamalar geliştirilebilir. – Yüksek CPU kullanım deneyimi
  • 27.
    Avatar.js vs Node.js • http://octane-benchmark.googlecode.com/svn/latest/index.html • https://developers.google.com/octane/benchmark • http://v8.googlecode.com/svn/data/benchmarks/v7/run.html • https://github.com/hakobera/node-v8-benchmark-suite npm install benchmark npm install benchmark-octane
  • 28.