Einbindung dynamischer Sprachen in Java



Ähnliche Dokumente
Einbindung dynamischer Sprachen in Java

Grundlagen von Python

Pragmatik von Programmiersprachen

Programmieren in Java

Prinzipien Objektorientierter Programmierung

Struts 2 Das Imperium schlägt zurück?

Daniel Warneke Ein Vortrag im Rahmen des Proseminars Software Pioneers

Java Einführung Abstrakte Klassen und Interfaces

Scala & Lift. Ferenc Lajko

Es sollte die MS-DOS Eingabeaufforderung starten. Geben Sie nun den Befehl javac ein.

Algorithmen mit Python

Verhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {...

Die Programmiersprache Java. Dr. Wolfgang Süß Thorsten Schlachter

Einführung in Java. PING e.v. Weiterbildung Andreas Rossbacher 24. März 2005

Last- und Stresstest mit the Grinder 3

Software Engineering. Zur Architektur der Applikation Data Repository. Franz-Josef Elmer, Universität Basel, HS 2015

Objektorientierte Programmierung für Anfänger am Beispiel PHP

Objektorientierte Programmierung. Kapitel 12: Interfaces

Klassenentwurf. Wie schreiben wir Klassen, die leicht zu verstehen, wartbar und wiederverwendbar sind? Objektorientierte Programmierung mit Java

Übung 1 mit C# 6.0 MATTHIAS RONCORONI

Objektorientiertes JavaScript

Ein Blick voraus. des Autors von C++: Bjarne Stroustrup Conrad Kobsch

Einführung in PHP. (mit Aufgaben)

Java Einführung Programmcode

Albert HAYR Linux, IT and Open Source Expert and Solution Architect. Open Source professionell einsetzen

Abacus Formula Compiler (AFC)

Java: Vererbung. Teil 3: super()

Design Patterns 2. Model-View-Controller in der Praxis

Skriptsprachen im Vormarsch: Einsatz in Enterprise-Applikationen. W3L AG

Code wiederverwenden: Objektorientierte Programmierung (OOP) sinnvoll nutzen Roland Wagner Automatisierungstreff IT & Automation 2015

Diplomarbeit. Konzeption und Implementierung einer automatisierten Testumgebung. Thomas Wehrspann. 10. Dezember 2008

Algorithmen und Programmieren II Einführung in Python

Einführung in Eclipse und Java

Prof. Dr. Uwe Schmidt. 21. August Aufgaben zur Klausur Objektorientierte Programmierung im SS 2007 (IA 252)

Große Übung Praktische Informatik 1

Session Beans & Servlet Integration. Ralf Gitzel ralf_gitzel@hotmail.de

Testen mit JUnit. Motivation

Übung: Verwendung von Java-Threads

Eclipse Equinox als Basis für Smart Client Anwendungen. Christian Campo, compeople AG, Java Forum Stuttgart 2007

Applets I. Grundlagen der g Applet-Programmierung

Objektorientierte Programmierung OOP

C# im Vergleich zu Java

Software Engineering Klassendiagramme Assoziationen

Python SVN-Revision 12

Vorkurs Informatik WiSe 15/16

Einführung in Javadoc

Javadoc. Programmiermethodik. Eva Zangerle Universität Innsbruck

Vererbung & Schnittstellen in C#

Dieses Tutorial gibt eine Übersicht der Form Klassen von Struts, welche Besonderheiten und Unterschiede diese aufweisen.

Objektorientierte Programmierung

Dynamisches SQL. Folien zum Datenbankpraktikum Wintersemester 2009/10 LMU München

Microsoft SharePoint 2013 Designer

Robot Karol für Delphi

Software-Engineering und Optimierungsanwendungen in der Thermodynamik

Einführung in die Programmierung

Workshop 6. Einführung in die objektorientierte Programmierung. Teil: Java mit BlueJ

Factory Method (Virtual Constructor)

Java Einführung Collections

Der lokale und verteilte Fall

Der Cloud Point of Purchase. EuroCloud Conference, 18. Mai 2011 (Christoph Streit, CTO & Co-Founder ScaleUp)"

SEP 114. Design by Contract

Programmentwicklung ohne BlueJ

Java Script für die Nutzung unseres Online-Bestellsystems

Innere Klassen in Java

JavaScript in Drupal

Lua. June 9, Marcus Brenscheidt Marcin Golkowski ( Dynamische Programmiersprachen Lua )

Applet Firewall und Freigabe der Objekte

.NET Code schützen. Projekt.NET. Version 1.0

Web-basierte Benutzerschnittstellen für Embedded Systeme: Eine Benutzerschnittstelle drei Sichtweisen

Java Einführung Packages


THEMA: "SAS STORED PROCESSES - SCHNELL GEZAUBERT" HELENE SCHMITZ

Vorkurs C++ Programmierung

arlanis Software AG SOA Architektonische und technische Grundlagen Andreas Holubek

SMART Newsletter Education Solutions April 2015

HMS. Statistiken mit SAS ins Internet. HMS Analytical Software GmbH - Johannes Lang

Java Web Services Metadata JSR-181

Installation der SAS Foundation Software auf Windows

Starthilfe für C# Inhaltsverzeichnis. Medien- und Kommunikationsinformatik (B.Sc.) Alexander Paharukov. Informatik 3 Praktikum

Kurzeinführung Excel2App. Version 1.0.0

Virtuelle Realität und Simulation - Übung 1

Gebundene Typparameter

Issue Tracker & Wiki

Kap. 35 Swing: Grundlagen Kap Swing: Hauptfenster

Java Kurs für Anfänger Einheit 4 Klassen und Objekte

Spring Dynamic Modules for OSGi Service Platforms

Task: Nmap Skripte ausführen

Kapitel 6. Vererbung

Access und die andern (Office) Programme. Armin Hess

WebService in Java SE und EE

How To: Wie entwickle ich mit SharpDevelop Anwendungen für die PocketPC-Platform

Selbstbestimmtes Lernen. Proinformatik III Objektorientierte Programmierung. Format. Inhalt. Buzzwords

Java Reflection. Meta-Programmierung mit der java.lang.reflection API. Prof. Dr. Nikolaus Wulff

Java Kurs für Anfänger LMU SS09 Einheit 1 Javaumgebung

Log xmllog textlog Log() start(filename) add(message) end() instance() Abbildung 7-10: Die Protokollierungs-API mit einer einfachen Fassade

ROOT Tutorial für D. Liko

Komponententest. Testen von Software Systemen. Übung 02 SS 2009 Version:

WEBAPPLIKATIONEN MIT PHP. Wo gibt es Hilfe? Wie fang ich an?

Kapitel 4. Einführung in den Scannergenerator Flex. Einführung in den Scannergenerator Flex Wintersemester 2008/09 1 / 9

Transkript:

Einbindung dynamischer Sprachen in Java The Beast in Me? Orientation in Objects GmbH Weinheimer Str. 68 68309 Mannheim Steffen Schluff Papick Garcia Taboada Version: 1.0 www.oio.de info@oio.de Gliederung Einleitung Skriptsprachen in a Nutshell Technische Anbindung in Java Einsatzszenarien Zusammenfassung 2

Gliederung Einleitung Skriptsprachen in a Nutshell Technische Anbindung in Java Einsatzszenarien Zusammenfassung 3 Kennen Sie Java? [..] there are four completely different things that go by the name Java Language Enormous class library Virtual machine Security model (Jamie Zawinski, java sucks., 2000) 4

JVM Sprachen (Auszug) Java Script Groovy Jython Bean Shell JRuby Scala JavaFX Script Clojure 1998 2000 2002 2004 2006 5 Klappe, die erste! JVM Sprachen werden häufig als Skriptsprachen bezeichnet Beispiel: JSR 223 - Scripting for the Java Platform Skript ermöglicht Steuerung und Kontrolle eines Programms Häufig interpretiert oder mit vernachlässigbarem Kompilierschritt Begriffe Skript und Programm heute schwer unterscheidbar Eigene Benutzer sagen nicht Skriptsprache Skriptsprachen werden mit bestimmten Eigenschaften assoziiert Vor allem Speicherverwaltung und dynamische Typisierung 6

Du bist einfach nicht mein Typ... Statisch typisierte Sprachen Überprüfung von Typinformationen bereits zur Compilezeit Ermöglicht frühes Finden von Fehlern im Typsystem Dynamisch typisierte Sprachen Überprüfung von Typinformationen nur zur Laufzeit Ermöglicht größere Flexibilität Beide Varianten haben Vor- und Nachteile Gegenstand zahlreicher, teils akademischer, Diskussionen 7 Dynamic Typing!= Weak Typing (1) Stichwort Weak Typing vs. Strong Typing Dynamisch typisiert heißt nicht Typinformation zu ignorieren []... usage [...] is so various as to render them almost useless. Benjamin Pierce, Autor Types and Programming Languages ~ $python [...] >>> i = 5 >>> s = "Hello" >>> i + s Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: unsupported operand type(s) for +: 'int' and 'str' 8

Dynamic Typing!= Weak Typing (2) Strong Ruby / Groovy Java / C# Dynamic Static JavaScript / Perl C / C++ Weak (Quelle: V.Subramaniam, "Programming Groovy ) 9 Ente gut, alles gut Ducktyping und dynamische Typisierung If it walks like a duck and quacks like a duck, I would call it a duck. Semantik eines Objekts durch Methoden und nicht durch Typ Dynamische Sprachen Besitzen Laufzeitfähigkeiten, die sonst typisch für Compilezeit sind Ändern von Objekten zur Laufzeit, Evaluierung von Quellcode,... Vorsicht, Falle! Dynamic languages and dynamic typing are not identical concepts... Vorgestellte Begriffe ungenau in Bedeutung oder Verwendung 10

We got both kinds. We got Country and Western. Viele dynamisch typisierte Sprachen sind älter als Java...... und die JVM Portierungen sind auch nicht neu Renaissance durch Web Frameworks als Killer Apps Ruby on Rails, Grails, Django,... Wiederentdecken für andere isolierte Zwecke Shell Skripte, Buildmanagement, Testen,... Einbindung in bestehende Java Anwendungen Neues Steinchen im Java Architektur Baukasten Zum Steuern und Kontrollieren, d.h. Scripting 11 Wo tut sich was? Proprietäre Mechanismen der einzelnen Sprachen Apache Bean Scripting Framework (BSF) Scripting Support in Spring Java Community Process Scripting JSRs JSR 223 - Scripting for the Java Platform JSR 241 - Groovy Programming Language JSR 274 - BeanShell Scripting Language JSR 292 - Dynamically Typed Language Support Hauptentwickler von Jython und JRuby arbeiten bei Sun Gleiches gilt für IronPython und Microsoft 12

Gliederung Einleitung Skriptsprachen in a Nutshell Technische Anbindung in Java Einsatzszenarien Zusammenfassung 13 Kurzer Rundflug Keine Einführung Jede Sprache ein bisschen anders Hier nur ein Paar Highlights 14 in Java

Javascript Sprachkern als ECMAScript (ECMA 262) standardisiert Dank Einsatz in Browsern sehr weit verbreitet Zugriff auf DOM und Eigenschaften des Browsers Wie Java ist auch JavaScript in der Syntax C -Ähnlich Objektorientierung nicht mit Klassen sondern mit Prototypen realisiert var object1={a:1,b:2}; function child(){ this.c=3; this.d=4 }; child.prototype=object1; var object2=new child(); alert(object2.a); // zeigt den Wert 1 an alert(object2.c); // zeigt den Wert 3 an Wikipedia: http://de.wikipedia.org/wiki/javascript 15 in Java Groovy Dynamische Programmiersprache für die JVM Java-Syntax und Ruby-Konzepte Mashup Features: Closures, native Syntax für Maps, Listen und Reguläre Ausdrücke, einfaches Templatesystem HTML und SQL-Code Generierung XQuery-ähnliche Syntax zum Ablaufen von Objektbäumen, Operatorüberladung native Darstellung für BigDecimal und BigInteger. Wikipedia: http://de.wikipedia.org/wiki/groovy 16 in Java

Groovy... class Greet { def name Greet(who) { name = who[0].touppercase() + who[1..-1] } def salute() { println "Hello $name!" } } g = new Greet('world') // create object g.salute() // Output "Hello World!" import static org.apache.commons.lang.wordutils.* class Greeter extends Greet { Greeter(who) { name = capitalize(who) } } new Greeter('world').salute() 17 in Java Groovy RegExp... // lets do some replacement def cheese = ("cheesecheese" =~ /cheese/).replacefirst("nice") assert cheese == "nicecheese" 18 in Java

Java und keine Closures package example.math; public class MyMath { public static int square(int numbertosquare){ return numbertosquare * numbertosquare; } } import example.math.mymath; int x, y; x = 2; y = MyMath.square(x); // y will equal 4. 19 in Java Groovy Closures import example.math.mymath; int x, y; x = 2; y = MyMathdef x = 2 // define closure and assign it to variable 'c' def c = { numbertosquare -> numbertosquare * numbertosquare } // using 'c' as the identifer for the closure, // make a call on that closure def y = c(x) // shorthand form for applying closure, // y will equal 4 20 in Java

Jython The language formerly known as JPython ;-) Python Implementierung Paradigmenschlacht: Objektorientiert, Aspektorientiert und Funktional Strukturierung durch Einrücken def fakultaet(x): if x > 1: return x * fakultaet(x - 1) else: return 1 Große Bibliothek Auf Internetanwendungen zugeschnitten Wikipedia: http://de.wikipedia.org/wiki/jython 21 in Java Jython und Listen... zahlen = [1, 2, 3, 4, 5] zweierpotenzen = [2 ** n for n in zahlen] Wikipedia: http://de.wikipedia.org/wiki/jython 22 in Java

Was mögen wir bei Python http://wiki.python.de/python es macht Spaß, damit zu programmieren - weil es so einfach und direkt ist klare, lesbare Syntax sehr umfangreiche Standard-Bibliothek hohe Produktivität: wenig Code notwendig durch die Mächtigkeit der Sprache/Bibliothek man kann sich auf das Problem konzentrieren, statt sich mit Eigenheiten/Defiziten der Sprache rumzuschlagen 23 in Java Von dict erben... -*- coding: utf-8 -*- class MeinDict(dict): def init (self, *args, **kwargs): """ Die ursprüngliche Methode kann man über super() ansprechen. Allerdings hat das den Nachteil, dass man den verwendeten Klassennamen einfügen muss. Wenn man die Klasse umbenennt muss man alle super()-aufrufe abändern. """ print "init..." super(meindict, self). init (*args, **kwargs) def setitem (self, key, value): """ Ohne super() kann man die geerbte Method über das 'dict'-objekt ansprechen. """ print "Neuer Eintrag %s = %s" % (key, value) dict. setitem (self, key, value) 24 in Java

JRuby Ruby implementierung für die JVM Sehr bekannt geworden durch Ruby on Rails JRuby on Rails Flexibel Sichtbarkeit var, @var, $var Objektorientiert 5.times { print "Wir *lieben* Ruby -- es ist ungeheuerlich!" } Wikipedia: http://de.wikipedia.org/wiki/jruby 25 in Java Gliederung Einleitung Skriptsprachen in a Nutshell Technische Anbindung in Java Einsatzszenarien Zusammenfassung 26

Proprietäre Ansätze Jede Implementierung einer Programmiersprache bietet unterschiedliche Arten der Nutzung z. Bsp. Einbindung über API z. Bsp. Einbindung über Compiler Ansätze sind Proprietär -> Sprachengines nicht einfach austauschbar 27 in Java Spring und Dynamic Languages Dynamic Language Support Seit Version 2.0 Es werden wenige Sprachen unterstützt Jruby Groovy BeanShell Eine Anbindung über das neue JSR ist nicht vorhanden Keine Nachfrage? 28 in Java

<lang:language /> Bean-Implementierung...... liegt in eigene Datei Refreshable Bean support... wird inline in der Bean-Definition eingebettet Bean-Definition deklarativ in XML Namespace für dynamic language support <lang:jruby/> (JRuby) <lang:groovy/> (Groovy) <lang:bsh/> (BeanShell) Achtung: Fehler in Quelltext führen zu Laufzeitfehler... 29 in Java Spring DynaLang Support (1/5) Definiere das Interface in Java package org.springframework.scripting; public interface Messenger { } String getmessage(); 30 in Java

Spring DynaLang Support (2/5) Andere Beans nutzen das Interface package org.springframework.scripting; public class DefaultBookingService implements BookingService { private Messenger messenger; public void setmessenger(messenger messenger) { this.messenger = messenger; } } public void processbooking() { // use the injected Messenger object... } 31 in Java Spring DynaLang Support (3/5) Do the dynamic language magic package org.springframework.scripting class GroovyMessenger implements Messenger { private String message = "Bingo" public String getmessage() { // change the implementation to surround the message in quotes return "'" + this.message + "'" } } public void setmessage(string message) { this.message = message } 32 in Java

Spring DynaLang Support (4/5) Do the XML stuff <beans> <!-- this bean is now 'refreshable' due to the presence of the 'refresh-check-delay' attribute --> <lang:groovy id="messenger" refresh-check-delay="5000" <!-- switches refreshing on with 5 seconds between checks --> script-source="classpath:messenger.groovy"> <lang:property name="message" value="i Can Do The Frug" /> </lang:groovy> <bean id="bookingservice" class="x.y.defaultbookingservice"> <property name="messenger" ref="messenger" /> </bean> </beans> 33 in Java Spring DynaLang Support (5/5) There is no 5 34 in Java

Inline DynaLang Bean <lang:groovy id="messenger"> <lang:inline-script> package org.springframework.scripting.groovy; import org.springframework.scripting.messenger class GroovyMessenger implements Messenger { } String message </lang:inline-script> <lang:property name="message" value="i Can Do The Frug" /> </lang:groovy> 35 in Java Java Scripting API Java Scripting API erlaubt Java Einbindung von Skriptsprachen Framework zur Script Engine Anbindung von Drittanbietern Einbindendes Programm muss konkrete Sprache nicht kennen Basiert auf JSR-223 Scripting for the Java Platform [...] background to bridge the scripting and the Java community. Seit Java 6 fester JDK Bestandteil Java 6 beinhaltet Mozilla Rhino JavaScript Implementierung für Java (Rhino 1.6R2) Weitere Sprachen per scripting project (http://scripting.dev.java.net) 36

Java Scripting API Bestandteile Überschaubare API 6 Interfaces, 5 Klassen, 1 Exception Enthalten in Package javax.script Weitere Tools und Beispiele im JDK (jrunscript, jconsole-plugin,...) Zwei grobe Aufgabenbereiche Scripting Funktionalität für die jeweiligen Sprachen Kontext in dem ein Script ausgeführt wird 37 Motoren, Fabriken und Manager (1) Interface ScriptEngine Übersetzung und Evaluierung (Ausführung) von Skripten Überladene Methode eval() für verschiedene Quellen (String, Reader) Interface ScriptEngineFactory Erzeugt ScriptEngine Instanzen Enthält ScriptEngine Metadaten (Name, Version, File Extension,...) Enthält Methoden zur Skripterzeugung in der jeweiligen Sprache Klasse ScriptEngineManager Sucht vorhandene ScriptEngineFactory Implementierungen Verwendet Service Provider Mechanismus aus Jar Spezifikation Konkrete Klasse als programmatischer Einstiegspunkt 38

Motoren, Fabriken und Manager (2) ScriptEngine Factory ScriptEngine (Jython) spam.py ScriptEngine Manager Service Provider Mechanismus Jython ScriptEngine Factory ScriptEngine (Jython) ScriptEngine (JavaScript) foo.py rhino.js JavaScript ScriptEngine (JavaScript) bar.js 39 Hello World in JavaScript ScriptEngineManager mgr = new ScriptEngineManager(); ScriptEngine engine = mgr.getenginebyname("javascript"); String sayhello = "println('hello World')"; // Throws ScriptException engine.eval(sayhello); 40

Gebunden im Kontext (1) Interface ScriptContext Verbindet ScriptEngine und ausführende Applikation Hat Reader und Writer für ScriptEngine Ein-/Ausgabe Hat ein oder mehrere Bindings Interface Bindings Subtyp von Map<String, Object> Für Werteaustausch von ScriptEngine und Applikation Scope ordnet die Bindings eines ScriptContext Global Scope - Sichtbar in allen Engines Engine Scope - Sichtbar in einer bestimmten Engine Instanz Suche nach Werten vom kleinsten Scope aufwärts 41 Gebunden im Kontext (2) ScriptEngine Manager Bindings Global Scope ScriptEngine ScriptContext Bindings Global Scope Bindings Engine Scope Script KEY hello VALUE world foo 42...... 42

Kann man machen, muss man aber nicht Manche Features von ScriptEngine sind optional Wenn vorhanden, implementiert ScriptEngine zusätzliche Interfaces Interface Compilable Skripte sind mehrfach ausführbar ohne Neucompilierung Verwendung eines Abstract Syntax Tree (AST) oder Java Byte Code ScriptEngine Instanz wird umgewandelt in CompiledScript Objekt Interface Invocable Einzelne Methoden eines Skripts sind gezielt ausführbar Methoden eines Skript können Java Interfaces implementieren 43 jrunscipt - command line script shell (1) Skriptsprachen unabhängige Kommandozeilen Shell Sprachanbindung entspricht Java Scripting API Experimenteller Bestandteil des JDK siehe %JAVADOC%\technotes\tools\share\jrunscript.html Unterstützt interactive und batch Verwendung Ausführung von one liner Skripten möglich Defaultsprache JavaScript hat praktische eingebaute Funktionen siehe %JAVADOC%\technotes\tools\share\jsdocs\index.html 44

jrunscipt - command line script shell (2) ~ $jrunscript -q Language ECMAScript 1.6 implemention "Mozilla Rhino" 1.6 release 2 Language python 2.2.1 implemention "jython" 2.2.1 Language groovy 1.5.1 implemention "groovy" 1.5.4 ~ $jrunscript -e "which('javac.exe')" c:\java\jdk1.6.0_10\bin\javac.exe ~ $jrunscript -e "ip('localhost')" localhost/127.0.0.1 ~ $jrunscript -l groovy -e "println 'hello groovy'" hello groovy ~ $jrunscript js> 23 + 19 42.0 js> exit() 45 Demo Demo Technische Anbindung in Java 46

Gliederung Einleitung Skriptsprachen in a Nutshell Technische Anbindung in Java Einsatzszenarien Zusammenfassung 47 Die üblichen Verdächtigen Kommandozeilen Shell in Anwendungen Graphische Konfiguration ist Standard Administratoren bevorzugen häufig Kommandozeile Anpassung und Erweiterung von Anwendungen Auslagern von Geschäftslogik und dynamische Konfiguration Benutzermakros und Reporting Rapid Prototyping Vermeidung des edit-compile-deploy Zyklus Ermöglicht schnelles Benutzer-Feedbacks 48

Kommandozeilen Shell in JConsole Seit Java 5 Monitoring and Manageability Unterstützung Java Management Extensions API (JMX) JVM Management Interface (java.lang.management) Platform MBeans für Classloading, Memory, Threads,... Swing basiertes Tool JConsole JMX Oberfläche mit Zugriff auf eigene und Platform MBeans Eigene JConsole Erweiterungen möglich Seit Java 6 Standard JDK Demo für Scripting Admin Console siehe %JAVA_HOME%\demo\scripting\jconsole-plugin 49 Wachs in meinen Händen Komplexe Anwendungen sollen häufig customizable sein Geschäftslogik, Reporting, Benutzermakros Benutzerschnittstelle von Computerspielen Keiner ist wirklich geeignet Entwickler ist zu teuer und hat kein fachliches Verständnis Anwender kann nicht (genug) programmieren Auslagern von bestimmten Anwendungsteilen Zugriff durch kundengerechte Abstraktion Skriptsprachen oder Domain Specific Language (DSL) JDK Demo Scriptpad %JAVA_HOME%\sample\scripting\scriptpad 50

Rapid Prototyping Experimentierkasten um Ideen auszuprobieren Ziel ist das schnelle Evaluieren und Bewerten von Ideen Lösung hat keinen Anspruch auf technische Perfektion Gewisse Opfer werden gemacht (Architektur, Typisierung,...) Dynamische Sprachen können unterstützen Buildprozess schrumpft von edit-compile-run auf edit-run Dynamische Sprachen sind oft einfach und mächtig Sprache ist aber nur Teil der Lösung (Infrastruktur, Frameworks,...) Prototypen können gefährlich sein Kunden können Prototyp und Produkt oft nicht unterscheiden Nicht jedes dynamische Framework ist ein Prototyp-Framework 51 in Java Demo Demo Einsatzszenarien 52

Gliederung Einleitung Skriptsprachen in a Nutshell Technische Anbindung in Java Einsatzszenarien Zusammenfassung 53 If you remember one thing Every sufficiently large Java program, anything beyond medium-sized, needs a scripting engine, whether the authors realize it or not. (Steve Yegge, Stevey s Blog Rants: The Universal Design Pattern, 2008) 54

Links Java Scripting Programmer s Guide http://java.sun.com/javase/6/docs/technotes/guides/ scripting/programmer_guide/index.html The scripting project http://scripting.dev.java.net Scripting for the Java Platform http://java.sun.com/developer/technicalarticles/ J2SE/Desktop/scripting/ The Mustang Meets the Rhino: Scripting in Java 6 http://www.onjava.com/pub/a/onjava/2006/04/26/mustang-meetsrhino-java-se-6-scripting.html 55 Vielen Dank für Ihre Aufmerksamkeit! Orientation in Objects GmbH Weinheimer Str. 68 68309 Mannheim Version: 1.0 www.oio.de info@oio.de

Papick Garcia Taboada Software Architekt Technologie-Scout Beratung Projekte Training 57 Steffen Schluff Im a pogramar Iam a programer I'm a programor I write code Beratung Projekte Training 58

??? Orientation in Objects GmbH Weinheimer Str. 68 68309 Mannheim? Fragen?? Version: 1.0 www.oio.de info@oio.de Orientierung in Objekten ) Akademie ) ) Beratung ) ) Projekte ) Schulungen, Coaching, Weiterbildungsberatung, Train & Solve-Programme Methoden, Standards und Tools für die Entwicklung von offenen, unternehmensweiten Systemen Schlüsselfertige Realisierung von Software Unterstützung laufender Projekte Pilot- und Migrationsprojekte 60