SlideShare a Scribd company logo
Scripting in Java
JavaLand 2014
25.03.2014, Lars Gregori
Scripting in Java
JavaLand 2014
25.03.2014, Lars Gregori
© 2014 Lars Gregori, msgGillardon AG | Scripting in Java | 25.03.2014
Lars Gregori
 msgGillardon AG
 CoC IT-Architekturen
 learn a new language every year
--- The Pragmatic Programmer
3
© 2014 Lars Gregori, msgGillardon AG | Scripting in Java | 25.03.2014 4
© 2014 Lars Gregori, msgGillardon AG | Scripting in Java | 25.03.2014 5
© 2014 Lars Gregori, msgGillardon AG | Scripting in Java | 25.03.2014
Was sind Scriptsprachen?
Wikipedia:
„Scriptsprachen sind Programmiersprachen, die vor allem für kleine,
überschaubare Programme gedacht sind. Sie verzichten oft auf
bestimmte Sprachelemente, deren Nutzen erst bei der Bearbeitung
größerer Projekte zum Tragen kommen. So wird etwa in
Skriptsprachen auf den Deklarationszwang von Variablen meist
verzichtet - vorteilhaft zur schnellen Erstellung von kleinen
Programmen (siehe auch Prototyping), bei großen hingegen von
Nachteil, etwa wegen der fehlenden Überprüfungsmöglichkeit von
Tippfehlern in Variablennamen.“
6
http://de.wikipedia.org/wiki/Skriptsprache
© 2014 Lars Gregori, msgGillardon AG | Scripting in Java | 25.03.2014
Was sind Scriptsprachen?
Wikipedia:
„Scriptsprachen sind Programmiersprachen, die vor allem für kleine,
überschaubare Programme gedacht sind. Sie verzichten oft auf
bestimmte Sprachelemente, deren Nutzen erst bei der Bearbeitung
größerer Projekte zum Tragen kommen. So wird etwa in
Skriptsprachen auf den Deklarationszwang von Variablen meist
verzichtet - vorteilhaft zur schnellen Erstellung von kleinen
Programmen (siehe auch Prototyping), bei großen hingegen von
Nachteil, etwa wegen der fehlenden Überprüfungsmöglichkeit von
Tippfehlern in Variablennamen.“
7
http://de.wikipedia.org/wiki/Skriptsprache
© 2014 Lars Gregori, msgGillardon AG | Scripting in Java | 25.03.2014
Static vs. Dynamic Typing
 Most scripting languages are dynamically typed
 explicit type declarations not required
 type information is attached to values, not to variables
 Java is static-typed
 require variable type (declaration time)
 only data of declared type
8
https://confluence.deri.ie:8443/display/romulus/Scripting+Languages+and+java
© 2014 Lars Gregori, msgGillardon AG | Scripting in Java | 25.03.2014
Weak vs. Strong Typing
 Java is a static, strongly typed language
 strongest possible constraint on the type of object at declaration time
 prevents mixing operations between mismatched types
 Many scripting languages are weakly typed
 allow operations on incompatible types
 implicit type conversion or ad-hoc polymorphism
9
https://confluence.deri.ie:8443/display/romulus/Scripting+Languages+and+java
© 2014 Lars Gregori, msgGillardon AG | Scripting in Java | 25.03.2014
Weak vs. Strong Typing
 Java is a static, strongly typed language
 strongest possible constraint on the type of object at declaration time
 prevents mixing operations between mismatched types
 Many scripting languages are weakly typed
 allow operations on incompatible types
 implicit type conversion or ad-hoc polymorphism
10
https://confluence.deri.ie:8443/display/romulus/Scripting+Languages+and+java
© 2014 Lars Gregori, msgGillardon AG | Scripting in Java | 25.03.2014
Quality and Performance
 Scripting languages are more compact and readable
 less lines of code
 weak typing not requiring the overhead of type declaration
 Fewer lines of code and less complexity means lower amounts of
bugs, thus reducing development and maintenance costs.
 The missing type information has some disadvantages.
 static, strongly typed languages ensure the robustness
 type errors will be detected at compile time
11
https://confluence.deri.ie:8443/display/romulus/Scripting+Languages+and+java
© 2014 Lars Gregori, msgGillardon AG | Scripting in Java | 25.03.2014
Quality and Performance
 runtime performance
 extra overhead of the interpreter and runtime checks
 not performed at compile time
12
http://attractivechaos.github.io/plb/
https://confluence.deri.ie:8443/display/romulus/Scripting+Languages+and+java
© 2014 Lars Gregori, msgGillardon AG | Scripting in Java | 25.03.2014
Quality and Performance
 runtime performance
 extra overhead of the interpreter and runtime checks
 not performed at compile time
13
http://attractivechaos.github.io/plb/
https://confluence.deri.ie:8443/display/romulus/Scripting+Languages+and+java
© 2014 Lars Gregori, msgGillardon AG | Scripting in Java | 25.03.2014 14
Motivation
© 2014 Lars Gregori, msgGillardon AG | Scripting in Java | 25.03.2014
Motivation
 cool
 mal etwas anderes
 macht Spass
 JATUMBA
15
© 2014 Lars Gregori, msgGillardon AG | Scripting in Java | 25.03.2014
Motivation
 elegant und einfach erweitern
 Konfigurationsdatei
 Datenbank
16
© 2014 Lars Gregori, msgGillardon AG | Scripting in Java | 25.03.2014
Motivation
 elegant und einfach erweitern
 Konfigurationsdatei
 Datenbank
17
© 2014 Lars Gregori, msgGillardon AG | Scripting in Java | 25.03.2014
 passender
 Inner DSL
(JRuby)
 String Manipulation
(Jython, Perl)
 map / reduce
(Lisp, Clojure)
 GroovySQL,
GroovyMarkup
 Templates
Motivation
18
© 2014 Lars Gregori, msgGillardon AG | Scripting in Java | 25.03.2014
 passender
 Inner DSL
(JRuby)
 String Manipulation
(Jython, Perl)
 map / reduce
(Lisp, Clojure)
 GroovySQL,
GroovyMarkup
 Templates
Motivation
19
© 2014 Lars Gregori, msgGillardon AG | Scripting in Java | 25.03.2014
Motivation
 selbe Technologie
Frontend und Backend
 Javascript Validierung
20
© 2014 Lars Gregori, msgGillardon AG | Scripting in Java | 25.03.2014
Motivation
 selbe Technologie
Frontend und Backend
 Javascript Validierung
21
© 2014 Lars Gregori, msgGillardon AG | Scripting in Java | 25.03.2014
Motivation
 langsamer als Java
 Entwickler muss
andere Sprache lernen
22
© 2014 Lars Gregori, msgGillardon AG | Scripting in Java | 25.03.2014
Motivation
 langsamer als Java
 Entwickler muss
andere Sprache lernen
23
© 2014 Lars Gregori, msgGillardon AG | Scripting in Java | 25.03.2014 24
© 2014 Lars Gregori, msgGillardon AG | Scripting in Java | 25.03.2014
Buch
25
http://www.scriptinginjava.net/
Scripting in Java:
Languages, Frameworks, and Patterns
by Dejan Bosanac
Publisher: Addison Wesley Professional
Pub Date: August 31, 2007 (est.)
Print ISBN-10: 0-321-32193-6
Print ISBN-13: 978-0-321-32193-0
eText ISBN-10: 0-321-50933-1
eText ISBN-13: 978-0-321-50933-8
Pages: 432
© 2014 Lars Gregori, msgGillardon AG | Scripting in Java | 25.03.2014
Scriptsprachen in Java einbinden
 kompilieren
 eigene Engine
 Bean Scripting Framework (BSF)
 JSR 223 – Scripting for the Java Platform
26
© 2014 Lars Gregori, msgGillardon AG | Scripting in Java | 25.03.2014
kompilieren – groovyc
27
package my.groovy.jartest
class Answer {
def answer() {
42
}
}
package my.groovy.jartest;
import groovy.lang.GroovyObject;
public class Answer implements GroovyObject
{
...
public Object answer()
{
CallSite[] arrayOfCallSite = $getCallSiteArray();
return Integer.valueOf(42);
return null;
}
}
import my.groovy.jartest;
...
Answer answer = new Answer();
int a = (Integer) answer.answer();
© 2014 Lars Gregori, msgGillardon AG | Scripting in Java | 25.03.2014
Script Engine
28
GroovyShell gs = new GroovyShell();
String script = "return 42";
int answer = (Integer) gs.evaluate(script);
Binding binding = new Binding();
binding.setVariable("foo", new Integer(2));
GroovyShell shell = new GroovyShell(binding);
Object value = shell.evaluate(
"println 'Hello World!'; x = 123; return foo * 10");
assert value.equals(new Integer(20));
assert binding.getVariable("x").equals(new Integer(123));
http://groovy.codehaus.org/Embedding+Groovy
© 2014 Lars Gregori, msgGillardon AG | Scripting in Java | 25.03.2014
Bean Scripting Framework (BSF)
 http://commons.apache.org/proper/commons-bsf/
 Bean Scripting Framework (BSF) is a set of Java classes which
provides scripting language support within Java applications, and
access to Java objects and methods from scripting languages.
29
© 2014 Lars Gregori, msgGillardon AG | Scripting in Java | 25.03.2014
Bean Scripting Framework (BSF) – Beispiel
30
BSFManager manager = new BSFManager();
manager.declareBean("a", 6, Integer.class);
manager.declareBean("b", 7, Integer.class);
String script = "var answer = a * b;" +
"bsf.registerBean("answer", answer)";
manager.eval("javascript", "blah", 0, 0, script);
Double answer = (Double) manager.lookupBean("answer");
assertEquals(42, answer.intValue());
© 2014 Lars Gregori, msgGillardon AG | Scripting in Java | 25.03.2014 31
© 2014 Lars Gregori, msgGillardon AG | Scripting in Java | 25.03.2014
JSR-223 – Scripting for the Java Platform
 The specification describe mechanisms allowing scripting language
programs to access information developed in the Java Platform …
https://jcp.org/en/jsr/detail?id=223
 Java 1.6+
 Rhino JavaScript for Java version 1.6R2
 javax.script.*
 jrunscript
 http://docs.oracle.com/javase/6/docs/technotes/tools/share/jrunscript.html
32
© 2014 Lars Gregori, msgGillardon AG | Scripting in Java | 25.03.2014
ServiceLoader
 Since: 1.6
 http://docs.oracle.com/javase/6/docs/api/java/util/ServiceLoader.html
 META-INF/services/javax.script.ScriptEngineFactory
 This file contains the single line:
de.torq.clojure.jsr223.ClojureScriptEngineFactory
 Clojure JSR 223 build.xml
 https://github.com/pmf/clojure-jsr223/blob/master/build.xml
33
<jar jarfile="${clojure_jsr223_bundle}" basedir="${build_osgi}">
<service type="javax.script.ScriptEngineFactory“
provider="de.torq.clojure.jsr223.ClojureScriptEngineFactory"/>
© 2014 Lars Gregori, msgGillardon AG | Scripting in Java | 25.03.2014
JSR-223 – script engines
34
© 2014 Lars Gregori, msgGillardon AG | Scripting in Java | 25.03.2014 35
© 2014 Lars Gregori, msgGillardon AG | Scripting in Java | 25.03.2014
Beispiele
 JRuby
 Groovy
 Clojure
36
© 2014 Lars Gregori, msgGillardon AG | Scripting in Java | 25.03.2014 37
© 2014 Lars Gregori, msgGillardon AG | Scripting in Java | 25.03.2014
JDK 8 – Was ist neu?
 Nashorn
 Lambda
 …
38
© 2014 Lars Gregori, msgGillardon AG | Scripting in Java | 25.03.2014 39
© 2014 Lars Gregori, msgGillardon AG | Scripting in Java | 25.03.2014
Nashorn
 JEP 174
 http://openjdk.java.net/jeps/174
 ECMAScript-262 Edition 5.1
 http://ecma-international.org/ecma-262/5.1/
 javax.script (JSR 223)
40
© 2014 Lars Gregori, msgGillardon AG | Scripting in Java | 25.03.2014
Nashorn
41
© 2014 Lars Gregori, msgGillardon AG | Scripting in Java | 25.03.2014 42
© 2014 Lars Gregori, msgGillardon AG | Scripting in Java | 25.03.2014
Lambda
 JSR 335
 Lambda Expressions for the Java Programming Language
 https://jcp.org/en/jsr/detail?id=335
 Final Specification
43
© 2014 Lars Gregori, msgGillardon AG | Scripting in Java | 25.03.2014 44
© 2014 Lars Gregori, msgGillardon AG | Scripting in Java | 25.03.2014 45
© 2014 Lars Gregori, msgGillardon AG | Scripting in Java | 25.03.2014
invokedynamic
 JavaScript
 4 + 2
 4 + “hallo”
  add(a, b)
46
© 2014 Lars Gregori, msgGillardon AG | Scripting in Java | 25.03.2014
 http://niklasschlimm.blogspot.de/2012/02/java-7-complete-
invokedynamic-example.html
47
© 2014 Lars Gregori, msgGillardon AG | Scripting in Java | 25.03.2014
 http://niklasschlimm.blogspot.de/2012/02/java-7-complete-
invokedynamic-example.html
48
© 2014 Lars Gregori, msgGillardon AG | Scripting in Java | 25.03.2014 49
© 2014 Lars Gregori, msgGillardon AG | Scripting in Java | 25.03.2014
Invokedynamic – Jetzt und Zukunft?
 JRuby
 Groovy
 groovy-indy
 Clojure?
50
© 2014 Lars Gregori, msgGillardon AG | Scripting in Java | 25.03.2014 51
© 2014 Lars Gregori, msgGillardon AG | Scripting in Java | 25.03.2014
Bytecode
 Bytecode Frameworks
 ASM : http://asm.ow2.org/
 Javassist : http://www.csg.ci.i.u-tokyo.ac.jp/~chiba/javassist/
 Jitescript : https://github.com/qmx/jitescript
 …
52
© 2014 Lars Gregori, msgGillardon AG | Scripting in Java | 25.03.2014 53
© 2014 Lars Gregori, msgGillardon AG | Scripting in Java | 25.03.2014 54
© 2014 Lars Gregori, msgGillardon AG | Scripting in Java | 25.03.2014
Da Vinci Machine
 a multi-language renaissance
for the Java Virtual Machine architecture
 http://openjdk.java.net/projects/mlvm/
 dynamic invocation
 continuations
 tail-calls
 interface injection
55
© 2014 Lars Gregori, msgGillardon AG | Scripting in Java | 25.03.2014 56
© 2014 Lars Gregori, msgGillardon AG | Scripting in Java | 25.03.2014
Credits & making of
 Fotos
 Anja Gregori
 Font
 Chopin Script by ClaudeP
 http://www.dafont.com/chopin-script.font
 Eclipse Plugin
 Bytecode Outline plugin for Eclipse
 http://andrei.gmxhome.de/bytecode/
57
© 2014 Lars Gregori, msgGillardon AG | Scripting in Java | 25.03.2014 58
Wir bedanken uns für Ihre Aufmerksamkeit!
msgGillardon AG
Robert-Bürkle-Str. 1
85737 Ismaning
> www.msg-gillardon.de
© 2014 Lars Gregori, msgGillardon AG | Scripting in Java | 25.03.2014 60
© 2014 Lars Gregori, msgGillardon AG | Scripting in Java | 25.03.2014
Range Kata
 http://codingdojo.org/cgi-bin/wiki.pl?KataRange
61
integer range contains
[2,6) contains {2,4}
[2,6) doesn't contain {-1,1,6,10}
getAllPoints?
[2,6) allPoints = {2,3,4,5}
ContainsRange?
[2,5) doesn't contain [7,10)
[2,5) doesn't contain [3,10)
[3,5) doesn't contain [2,10)
[2,10) contains [3,5]
[3,5] contains [3,5)
endPoints
[2,6) allPoints = {2,3,4,5}
[2,6] allPoints = {2,3,4,5,6}
(2,6) allPoints = {3,4,5}
(2,6] allPoints = {3,4,5,6}
overlapsRange
[2,5) doesn't overlap with [7,10)
[2,10) overlaps with [3,5)
[3,5) overlaps with [3,5)
[2,5) overlaps with [3,10)
[3,5) overlaps with [2,10)
Equals
[3,5) equals [3,5)
[2,10) neq [3,5)
[2,5) neq [3,10)
[3,5) neq [2,10)
© 2014 Lars Gregori, msgGillardon AG | Scripting in Java | 25.03.2014
List of freely available programming books
 http://stackoverflow.com/questions/194812/list-of-freely-available-
programming-books/392926#392926
62
© 2014 Lars Gregori, msgGillardon AG | Scripting in Java | 25.03.2014 63
© 2014 Lars Gregori, msgGillardon AG | Scripting in Java | 25.03.2014 64
© 2014 Lars Gregori, msgGillardon AG | Scripting in Java | 25.03.2014 65
© 2014 Lars Gregori, msgGillardon AG | Scripting in Java | 25.03.2014 66
© 2014 Lars Gregori, msgGillardon AG | Scripting in Java | 25.03.2014 67
© 2014 Lars Gregori, msgGillardon AG | Scripting in Java | 25.03.2014 68
JSR 223:
https://code.google.com/p/clojure-jsr223/
© 2014 Lars Gregori, msgGillardon AG | Scripting in Java | 25.03.2014 69
© 2014 Lars Gregori, msgGillardon AG | Scripting in Java | 25.03.2014 70
© 2014 Lars Gregori, msgGillardon AG | Scripting in Java | 25.03.2014 71
© 2014 Lars Gregori, msgGillardon AG | Scripting in Java | 25.03.2014 72
© 2014 Lars Gregori, msgGillardon AG | Scripting in Java | 25.03.2014 73

More Related Content

PDF
Venkat Subramaniam Blending Java With Dynamic Languages
PDF
Cucumber tutorial
PDF
Venkat Subramaniam Building DSLs In Groovy
PDF
App server4rpg - English
PDF
JSX - developing a statically-typed programming language for the Web
PDF
Ard gate - English
PDF
Html , php, mysql intro
PPTX
Java script
Venkat Subramaniam Blending Java With Dynamic Languages
Cucumber tutorial
Venkat Subramaniam Building DSLs In Groovy
App server4rpg - English
JSX - developing a statically-typed programming language for the Web
Ard gate - English
Html , php, mysql intro
Java script

Similar to Scripting In Java (20)

PDF
Java ScriptingJava Scripting: One VM, Many Languages
PDF
Scripting Yor Java Application with BSF3
 
PPTX
sl slides-unit-1.pptx
PDF
Step by Step Guide on Essay Format in APA For Beginners
PPT
Jug dynamic languages_in_jvm
DOCX
Notes of java first unit
PDF
TheFutureIsDynamic-BoxLang witch Luis Majano.pdf
PDF
complete_referenceoverview.pdf
PDF
JavaOne 2012 CON3978 Scripting Languages on the JVM
PPTX
Features of java unit 1
PDF
Real-world polyglot programming on the JVM - Ben Summers (ONEIS)
KEY
Plataforma java
PPTX
PPTX
Top Programming Languages of 2020
PPTX
Java session2
PDF
Lessons learned: Use of Modern JVM Languages besides Java - JavaOne 2012
PDF
Java Evolution-2.pdf
DOCX
java full 1 (Recovered).docx
PDF
Java: Rumours of my demise are greatly exaggerated
DOCX
java full 1.docx
Java ScriptingJava Scripting: One VM, Many Languages
Scripting Yor Java Application with BSF3
 
sl slides-unit-1.pptx
Step by Step Guide on Essay Format in APA For Beginners
Jug dynamic languages_in_jvm
Notes of java first unit
TheFutureIsDynamic-BoxLang witch Luis Majano.pdf
complete_referenceoverview.pdf
JavaOne 2012 CON3978 Scripting Languages on the JVM
Features of java unit 1
Real-world polyglot programming on the JVM - Ben Summers (ONEIS)
Plataforma java
Top Programming Languages of 2020
Java session2
Lessons learned: Use of Modern JVM Languages besides Java - JavaOne 2012
Java Evolution-2.pdf
java full 1 (Recovered).docx
Java: Rumours of my demise are greatly exaggerated
java full 1.docx
Ad

More from Lars Gregori (20)

PDF
BYOM - Bring Your Own Model
PDF
uTensor - embedded devices and machine learning models
PDF
SAP Leonardo Machine Learning
PDF
Minecraft and reinforcement learning
PDF
Machine Learning Models on Mobile Devices
PDF
Minecraft and Reinforcement Learning
PDF
IoT protocolls - smart washing machine
PDF
[DE] AI und Minecraft
PDF
Minecraft and Reinforcement Learning
PDF
[DE] IoT Protokolle
PDF
Using a trained model on your mobile device
PDF
Using a trained model on your mobile device
PDF
AI and Minecraft
PDF
[German] Boards für das IoT-Prototyping
PDF
IoT, APIs und Microservices - alles unter Node-RED
PDF
Web Bluetooth - Next Generation Bluetooth?
PDF
Embedded Rust – Rust on IoT devices
PDF
Embedded Rust on IoT devices
PDF
IoT mit Rust programmieren
PDF
Boards for the IoT-Prototyping
BYOM - Bring Your Own Model
uTensor - embedded devices and machine learning models
SAP Leonardo Machine Learning
Minecraft and reinforcement learning
Machine Learning Models on Mobile Devices
Minecraft and Reinforcement Learning
IoT protocolls - smart washing machine
[DE] AI und Minecraft
Minecraft and Reinforcement Learning
[DE] IoT Protokolle
Using a trained model on your mobile device
Using a trained model on your mobile device
AI and Minecraft
[German] Boards für das IoT-Prototyping
IoT, APIs und Microservices - alles unter Node-RED
Web Bluetooth - Next Generation Bluetooth?
Embedded Rust – Rust on IoT devices
Embedded Rust on IoT devices
IoT mit Rust programmieren
Boards for the IoT-Prototyping
Ad

Recently uploaded (20)

PPTX
ISO 45001 Occupational Health and Safety Management System
PDF
Why TechBuilder is the Future of Pickup and Delivery App Development (1).pdf
PDF
How to Choose the Right IT Partner for Your Business in Malaysia
PDF
A REACT POMODORO TIMER WEB APPLICATION.pdf
PDF
Which alternative to Crystal Reports is best for small or large businesses.pdf
PDF
2025 Textile ERP Trends: SAP, Odoo & Oracle
PDF
Flood Susceptibility Mapping Using Image-Based 2D-CNN Deep Learnin. Overview ...
PDF
Become an Agentblazer Champion Challenge Kickoff
PDF
IEEE-CS Tech Predictions, SWEBOK and Quantum Software: Towards Q-SWEBOK
PDF
How to Migrate SBCGlobal Email to Yahoo Easily
PDF
Softaken Excel to vCard Converter Software.pdf
PDF
Addressing The Cult of Project Management Tools-Why Disconnected Work is Hold...
PDF
PTS Company Brochure 2025 (1).pdf.......
PPTX
Mastering-Cybersecurity-The-Crucial-Role-of-Antivirus-Support-Services.pptx
PDF
T3DD25 TYPO3 Content Blocks - Deep Dive by André Kraus
PPTX
Transform Your Business with a Software ERP System
PDF
Digital Strategies for Manufacturing Companies
PDF
AI in Product Development-omnex systems
DOCX
The Five Best AI Cover Tools in 2025.docx
PDF
How to Confidently Manage Project Budgets
ISO 45001 Occupational Health and Safety Management System
Why TechBuilder is the Future of Pickup and Delivery App Development (1).pdf
How to Choose the Right IT Partner for Your Business in Malaysia
A REACT POMODORO TIMER WEB APPLICATION.pdf
Which alternative to Crystal Reports is best for small or large businesses.pdf
2025 Textile ERP Trends: SAP, Odoo & Oracle
Flood Susceptibility Mapping Using Image-Based 2D-CNN Deep Learnin. Overview ...
Become an Agentblazer Champion Challenge Kickoff
IEEE-CS Tech Predictions, SWEBOK and Quantum Software: Towards Q-SWEBOK
How to Migrate SBCGlobal Email to Yahoo Easily
Softaken Excel to vCard Converter Software.pdf
Addressing The Cult of Project Management Tools-Why Disconnected Work is Hold...
PTS Company Brochure 2025 (1).pdf.......
Mastering-Cybersecurity-The-Crucial-Role-of-Antivirus-Support-Services.pptx
T3DD25 TYPO3 Content Blocks - Deep Dive by André Kraus
Transform Your Business with a Software ERP System
Digital Strategies for Manufacturing Companies
AI in Product Development-omnex systems
The Five Best AI Cover Tools in 2025.docx
How to Confidently Manage Project Budgets

Scripting In Java

  • 1. Scripting in Java JavaLand 2014 25.03.2014, Lars Gregori
  • 2. Scripting in Java JavaLand 2014 25.03.2014, Lars Gregori
  • 3. © 2014 Lars Gregori, msgGillardon AG | Scripting in Java | 25.03.2014 Lars Gregori  msgGillardon AG  CoC IT-Architekturen  learn a new language every year --- The Pragmatic Programmer 3
  • 4. © 2014 Lars Gregori, msgGillardon AG | Scripting in Java | 25.03.2014 4
  • 5. © 2014 Lars Gregori, msgGillardon AG | Scripting in Java | 25.03.2014 5
  • 6. © 2014 Lars Gregori, msgGillardon AG | Scripting in Java | 25.03.2014 Was sind Scriptsprachen? Wikipedia: „Scriptsprachen sind Programmiersprachen, die vor allem für kleine, überschaubare Programme gedacht sind. Sie verzichten oft auf bestimmte Sprachelemente, deren Nutzen erst bei der Bearbeitung größerer Projekte zum Tragen kommen. So wird etwa in Skriptsprachen auf den Deklarationszwang von Variablen meist verzichtet - vorteilhaft zur schnellen Erstellung von kleinen Programmen (siehe auch Prototyping), bei großen hingegen von Nachteil, etwa wegen der fehlenden Überprüfungsmöglichkeit von Tippfehlern in Variablennamen.“ 6 http://de.wikipedia.org/wiki/Skriptsprache
  • 7. © 2014 Lars Gregori, msgGillardon AG | Scripting in Java | 25.03.2014 Was sind Scriptsprachen? Wikipedia: „Scriptsprachen sind Programmiersprachen, die vor allem für kleine, überschaubare Programme gedacht sind. Sie verzichten oft auf bestimmte Sprachelemente, deren Nutzen erst bei der Bearbeitung größerer Projekte zum Tragen kommen. So wird etwa in Skriptsprachen auf den Deklarationszwang von Variablen meist verzichtet - vorteilhaft zur schnellen Erstellung von kleinen Programmen (siehe auch Prototyping), bei großen hingegen von Nachteil, etwa wegen der fehlenden Überprüfungsmöglichkeit von Tippfehlern in Variablennamen.“ 7 http://de.wikipedia.org/wiki/Skriptsprache
  • 8. © 2014 Lars Gregori, msgGillardon AG | Scripting in Java | 25.03.2014 Static vs. Dynamic Typing  Most scripting languages are dynamically typed  explicit type declarations not required  type information is attached to values, not to variables  Java is static-typed  require variable type (declaration time)  only data of declared type 8 https://confluence.deri.ie:8443/display/romulus/Scripting+Languages+and+java
  • 9. © 2014 Lars Gregori, msgGillardon AG | Scripting in Java | 25.03.2014 Weak vs. Strong Typing  Java is a static, strongly typed language  strongest possible constraint on the type of object at declaration time  prevents mixing operations between mismatched types  Many scripting languages are weakly typed  allow operations on incompatible types  implicit type conversion or ad-hoc polymorphism 9 https://confluence.deri.ie:8443/display/romulus/Scripting+Languages+and+java
  • 10. © 2014 Lars Gregori, msgGillardon AG | Scripting in Java | 25.03.2014 Weak vs. Strong Typing  Java is a static, strongly typed language  strongest possible constraint on the type of object at declaration time  prevents mixing operations between mismatched types  Many scripting languages are weakly typed  allow operations on incompatible types  implicit type conversion or ad-hoc polymorphism 10 https://confluence.deri.ie:8443/display/romulus/Scripting+Languages+and+java
  • 11. © 2014 Lars Gregori, msgGillardon AG | Scripting in Java | 25.03.2014 Quality and Performance  Scripting languages are more compact and readable  less lines of code  weak typing not requiring the overhead of type declaration  Fewer lines of code and less complexity means lower amounts of bugs, thus reducing development and maintenance costs.  The missing type information has some disadvantages.  static, strongly typed languages ensure the robustness  type errors will be detected at compile time 11 https://confluence.deri.ie:8443/display/romulus/Scripting+Languages+and+java
  • 12. © 2014 Lars Gregori, msgGillardon AG | Scripting in Java | 25.03.2014 Quality and Performance  runtime performance  extra overhead of the interpreter and runtime checks  not performed at compile time 12 http://attractivechaos.github.io/plb/ https://confluence.deri.ie:8443/display/romulus/Scripting+Languages+and+java
  • 13. © 2014 Lars Gregori, msgGillardon AG | Scripting in Java | 25.03.2014 Quality and Performance  runtime performance  extra overhead of the interpreter and runtime checks  not performed at compile time 13 http://attractivechaos.github.io/plb/ https://confluence.deri.ie:8443/display/romulus/Scripting+Languages+and+java
  • 14. © 2014 Lars Gregori, msgGillardon AG | Scripting in Java | 25.03.2014 14 Motivation
  • 15. © 2014 Lars Gregori, msgGillardon AG | Scripting in Java | 25.03.2014 Motivation  cool  mal etwas anderes  macht Spass  JATUMBA 15
  • 16. © 2014 Lars Gregori, msgGillardon AG | Scripting in Java | 25.03.2014 Motivation  elegant und einfach erweitern  Konfigurationsdatei  Datenbank 16
  • 17. © 2014 Lars Gregori, msgGillardon AG | Scripting in Java | 25.03.2014 Motivation  elegant und einfach erweitern  Konfigurationsdatei  Datenbank 17
  • 18. © 2014 Lars Gregori, msgGillardon AG | Scripting in Java | 25.03.2014  passender  Inner DSL (JRuby)  String Manipulation (Jython, Perl)  map / reduce (Lisp, Clojure)  GroovySQL, GroovyMarkup  Templates Motivation 18
  • 19. © 2014 Lars Gregori, msgGillardon AG | Scripting in Java | 25.03.2014  passender  Inner DSL (JRuby)  String Manipulation (Jython, Perl)  map / reduce (Lisp, Clojure)  GroovySQL, GroovyMarkup  Templates Motivation 19
  • 20. © 2014 Lars Gregori, msgGillardon AG | Scripting in Java | 25.03.2014 Motivation  selbe Technologie Frontend und Backend  Javascript Validierung 20
  • 21. © 2014 Lars Gregori, msgGillardon AG | Scripting in Java | 25.03.2014 Motivation  selbe Technologie Frontend und Backend  Javascript Validierung 21
  • 22. © 2014 Lars Gregori, msgGillardon AG | Scripting in Java | 25.03.2014 Motivation  langsamer als Java  Entwickler muss andere Sprache lernen 22
  • 23. © 2014 Lars Gregori, msgGillardon AG | Scripting in Java | 25.03.2014 Motivation  langsamer als Java  Entwickler muss andere Sprache lernen 23
  • 24. © 2014 Lars Gregori, msgGillardon AG | Scripting in Java | 25.03.2014 24
  • 25. © 2014 Lars Gregori, msgGillardon AG | Scripting in Java | 25.03.2014 Buch 25 http://www.scriptinginjava.net/ Scripting in Java: Languages, Frameworks, and Patterns by Dejan Bosanac Publisher: Addison Wesley Professional Pub Date: August 31, 2007 (est.) Print ISBN-10: 0-321-32193-6 Print ISBN-13: 978-0-321-32193-0 eText ISBN-10: 0-321-50933-1 eText ISBN-13: 978-0-321-50933-8 Pages: 432
  • 26. © 2014 Lars Gregori, msgGillardon AG | Scripting in Java | 25.03.2014 Scriptsprachen in Java einbinden  kompilieren  eigene Engine  Bean Scripting Framework (BSF)  JSR 223 – Scripting for the Java Platform 26
  • 27. © 2014 Lars Gregori, msgGillardon AG | Scripting in Java | 25.03.2014 kompilieren – groovyc 27 package my.groovy.jartest class Answer { def answer() { 42 } } package my.groovy.jartest; import groovy.lang.GroovyObject; public class Answer implements GroovyObject { ... public Object answer() { CallSite[] arrayOfCallSite = $getCallSiteArray(); return Integer.valueOf(42); return null; } } import my.groovy.jartest; ... Answer answer = new Answer(); int a = (Integer) answer.answer();
  • 28. © 2014 Lars Gregori, msgGillardon AG | Scripting in Java | 25.03.2014 Script Engine 28 GroovyShell gs = new GroovyShell(); String script = "return 42"; int answer = (Integer) gs.evaluate(script); Binding binding = new Binding(); binding.setVariable("foo", new Integer(2)); GroovyShell shell = new GroovyShell(binding); Object value = shell.evaluate( "println 'Hello World!'; x = 123; return foo * 10"); assert value.equals(new Integer(20)); assert binding.getVariable("x").equals(new Integer(123)); http://groovy.codehaus.org/Embedding+Groovy
  • 29. © 2014 Lars Gregori, msgGillardon AG | Scripting in Java | 25.03.2014 Bean Scripting Framework (BSF)  http://commons.apache.org/proper/commons-bsf/  Bean Scripting Framework (BSF) is a set of Java classes which provides scripting language support within Java applications, and access to Java objects and methods from scripting languages. 29
  • 30. © 2014 Lars Gregori, msgGillardon AG | Scripting in Java | 25.03.2014 Bean Scripting Framework (BSF) – Beispiel 30 BSFManager manager = new BSFManager(); manager.declareBean("a", 6, Integer.class); manager.declareBean("b", 7, Integer.class); String script = "var answer = a * b;" + "bsf.registerBean("answer", answer)"; manager.eval("javascript", "blah", 0, 0, script); Double answer = (Double) manager.lookupBean("answer"); assertEquals(42, answer.intValue());
  • 31. © 2014 Lars Gregori, msgGillardon AG | Scripting in Java | 25.03.2014 31
  • 32. © 2014 Lars Gregori, msgGillardon AG | Scripting in Java | 25.03.2014 JSR-223 – Scripting for the Java Platform  The specification describe mechanisms allowing scripting language programs to access information developed in the Java Platform … https://jcp.org/en/jsr/detail?id=223  Java 1.6+  Rhino JavaScript for Java version 1.6R2  javax.script.*  jrunscript  http://docs.oracle.com/javase/6/docs/technotes/tools/share/jrunscript.html 32
  • 33. © 2014 Lars Gregori, msgGillardon AG | Scripting in Java | 25.03.2014 ServiceLoader  Since: 1.6  http://docs.oracle.com/javase/6/docs/api/java/util/ServiceLoader.html  META-INF/services/javax.script.ScriptEngineFactory  This file contains the single line: de.torq.clojure.jsr223.ClojureScriptEngineFactory  Clojure JSR 223 build.xml  https://github.com/pmf/clojure-jsr223/blob/master/build.xml 33 <jar jarfile="${clojure_jsr223_bundle}" basedir="${build_osgi}"> <service type="javax.script.ScriptEngineFactory“ provider="de.torq.clojure.jsr223.ClojureScriptEngineFactory"/>
  • 34. © 2014 Lars Gregori, msgGillardon AG | Scripting in Java | 25.03.2014 JSR-223 – script engines 34
  • 35. © 2014 Lars Gregori, msgGillardon AG | Scripting in Java | 25.03.2014 35
  • 36. © 2014 Lars Gregori, msgGillardon AG | Scripting in Java | 25.03.2014 Beispiele  JRuby  Groovy  Clojure 36
  • 37. © 2014 Lars Gregori, msgGillardon AG | Scripting in Java | 25.03.2014 37
  • 38. © 2014 Lars Gregori, msgGillardon AG | Scripting in Java | 25.03.2014 JDK 8 – Was ist neu?  Nashorn  Lambda  … 38
  • 39. © 2014 Lars Gregori, msgGillardon AG | Scripting in Java | 25.03.2014 39
  • 40. © 2014 Lars Gregori, msgGillardon AG | Scripting in Java | 25.03.2014 Nashorn  JEP 174  http://openjdk.java.net/jeps/174  ECMAScript-262 Edition 5.1  http://ecma-international.org/ecma-262/5.1/  javax.script (JSR 223) 40
  • 41. © 2014 Lars Gregori, msgGillardon AG | Scripting in Java | 25.03.2014 Nashorn 41
  • 42. © 2014 Lars Gregori, msgGillardon AG | Scripting in Java | 25.03.2014 42
  • 43. © 2014 Lars Gregori, msgGillardon AG | Scripting in Java | 25.03.2014 Lambda  JSR 335  Lambda Expressions for the Java Programming Language  https://jcp.org/en/jsr/detail?id=335  Final Specification 43
  • 44. © 2014 Lars Gregori, msgGillardon AG | Scripting in Java | 25.03.2014 44
  • 45. © 2014 Lars Gregori, msgGillardon AG | Scripting in Java | 25.03.2014 45
  • 46. © 2014 Lars Gregori, msgGillardon AG | Scripting in Java | 25.03.2014 invokedynamic  JavaScript  4 + 2  4 + “hallo”   add(a, b) 46
  • 47. © 2014 Lars Gregori, msgGillardon AG | Scripting in Java | 25.03.2014  http://niklasschlimm.blogspot.de/2012/02/java-7-complete- invokedynamic-example.html 47
  • 48. © 2014 Lars Gregori, msgGillardon AG | Scripting in Java | 25.03.2014  http://niklasschlimm.blogspot.de/2012/02/java-7-complete- invokedynamic-example.html 48
  • 49. © 2014 Lars Gregori, msgGillardon AG | Scripting in Java | 25.03.2014 49
  • 50. © 2014 Lars Gregori, msgGillardon AG | Scripting in Java | 25.03.2014 Invokedynamic – Jetzt und Zukunft?  JRuby  Groovy  groovy-indy  Clojure? 50
  • 51. © 2014 Lars Gregori, msgGillardon AG | Scripting in Java | 25.03.2014 51
  • 52. © 2014 Lars Gregori, msgGillardon AG | Scripting in Java | 25.03.2014 Bytecode  Bytecode Frameworks  ASM : http://asm.ow2.org/  Javassist : http://www.csg.ci.i.u-tokyo.ac.jp/~chiba/javassist/  Jitescript : https://github.com/qmx/jitescript  … 52
  • 53. © 2014 Lars Gregori, msgGillardon AG | Scripting in Java | 25.03.2014 53
  • 54. © 2014 Lars Gregori, msgGillardon AG | Scripting in Java | 25.03.2014 54
  • 55. © 2014 Lars Gregori, msgGillardon AG | Scripting in Java | 25.03.2014 Da Vinci Machine  a multi-language renaissance for the Java Virtual Machine architecture  http://openjdk.java.net/projects/mlvm/  dynamic invocation  continuations  tail-calls  interface injection 55
  • 56. © 2014 Lars Gregori, msgGillardon AG | Scripting in Java | 25.03.2014 56
  • 57. © 2014 Lars Gregori, msgGillardon AG | Scripting in Java | 25.03.2014 Credits & making of  Fotos  Anja Gregori  Font  Chopin Script by ClaudeP  http://www.dafont.com/chopin-script.font  Eclipse Plugin  Bytecode Outline plugin for Eclipse  http://andrei.gmxhome.de/bytecode/ 57
  • 58. © 2014 Lars Gregori, msgGillardon AG | Scripting in Java | 25.03.2014 58
  • 59. Wir bedanken uns für Ihre Aufmerksamkeit! msgGillardon AG Robert-Bürkle-Str. 1 85737 Ismaning > www.msg-gillardon.de
  • 60. © 2014 Lars Gregori, msgGillardon AG | Scripting in Java | 25.03.2014 60
  • 61. © 2014 Lars Gregori, msgGillardon AG | Scripting in Java | 25.03.2014 Range Kata  http://codingdojo.org/cgi-bin/wiki.pl?KataRange 61 integer range contains [2,6) contains {2,4} [2,6) doesn't contain {-1,1,6,10} getAllPoints? [2,6) allPoints = {2,3,4,5} ContainsRange? [2,5) doesn't contain [7,10) [2,5) doesn't contain [3,10) [3,5) doesn't contain [2,10) [2,10) contains [3,5] [3,5] contains [3,5) endPoints [2,6) allPoints = {2,3,4,5} [2,6] allPoints = {2,3,4,5,6} (2,6) allPoints = {3,4,5} (2,6] allPoints = {3,4,5,6} overlapsRange [2,5) doesn't overlap with [7,10) [2,10) overlaps with [3,5) [3,5) overlaps with [3,5) [2,5) overlaps with [3,10) [3,5) overlaps with [2,10) Equals [3,5) equals [3,5) [2,10) neq [3,5) [2,5) neq [3,10) [3,5) neq [2,10)
  • 62. © 2014 Lars Gregori, msgGillardon AG | Scripting in Java | 25.03.2014 List of freely available programming books  http://stackoverflow.com/questions/194812/list-of-freely-available- programming-books/392926#392926 62
  • 63. © 2014 Lars Gregori, msgGillardon AG | Scripting in Java | 25.03.2014 63
  • 64. © 2014 Lars Gregori, msgGillardon AG | Scripting in Java | 25.03.2014 64
  • 65. © 2014 Lars Gregori, msgGillardon AG | Scripting in Java | 25.03.2014 65
  • 66. © 2014 Lars Gregori, msgGillardon AG | Scripting in Java | 25.03.2014 66
  • 67. © 2014 Lars Gregori, msgGillardon AG | Scripting in Java | 25.03.2014 67
  • 68. © 2014 Lars Gregori, msgGillardon AG | Scripting in Java | 25.03.2014 68 JSR 223: https://code.google.com/p/clojure-jsr223/
  • 69. © 2014 Lars Gregori, msgGillardon AG | Scripting in Java | 25.03.2014 69
  • 70. © 2014 Lars Gregori, msgGillardon AG | Scripting in Java | 25.03.2014 70
  • 71. © 2014 Lars Gregori, msgGillardon AG | Scripting in Java | 25.03.2014 71
  • 72. © 2014 Lars Gregori, msgGillardon AG | Scripting in Java | 25.03.2014 72
  • 73. © 2014 Lars Gregori, msgGillardon AG | Scripting in Java | 25.03.2014 73