writing your own jsr-compliant, domain- specific scripting ... · writing your own jsr-compliant,...
TRANSCRIPT
![Page 1: Writing Your Own JSR-Compliant, Domain- Specific Scripting ... · Writing Your Own JSR-Compliant, Domain-Specific Scripting Language David Smith, Software Engineer John Colosi, Software](https://reader034.vdocument.in/reader034/viewer/2022042222/5ec80a05fe46c315f91a2b2c/html5/thumbnails/1.jpg)
Writing Your Own JSR-Compliant, Domain-Specific Scripting Language
David Smith, Software EngineerJohn Colosi, Software Engineer
TS-5693
![Page 2: Writing Your Own JSR-Compliant, Domain- Specific Scripting ... · Writing Your Own JSR-Compliant, Domain-Specific Scripting Language David Smith, Software Engineer John Colosi, Software](https://reader034.vdocument.in/reader034/viewer/2022042222/5ec80a05fe46c315f91a2b2c/html5/thumbnails/2.jpg)
2008 JavaOneSM Conference | java.sun.com/javaone | 2
Prove the power of Domain Specific Languages to simplify work, communicate ideas, and manipulate space-time
![Page 3: Writing Your Own JSR-Compliant, Domain- Specific Scripting ... · Writing Your Own JSR-Compliant, Domain-Specific Scripting Language David Smith, Software Engineer John Colosi, Software](https://reader034.vdocument.in/reader034/viewer/2022042222/5ec80a05fe46c315f91a2b2c/html5/thumbnails/3.jpg)
2008 JavaOneSM Conference | java.sun.com/javaone | 3
Demonstrate by example some techniques for using Java™ Specification Request (JSR)-223 to build your own simple, portable Domain Specific Language
![Page 4: Writing Your Own JSR-Compliant, Domain- Specific Scripting ... · Writing Your Own JSR-Compliant, Domain-Specific Scripting Language David Smith, Software Engineer John Colosi, Software](https://reader034.vdocument.in/reader034/viewer/2022042222/5ec80a05fe46c315f91a2b2c/html5/thumbnails/4.jpg)
2008 JavaOneSM Conference | java.sun.com/javaone | 4
Agenda
Background on JSR-223, scripting, and DSLsDomain Specific Languages in detailWalk-through of JSR-223Writing your own DSLDSL Case StudiesJumpstart your development
![Page 5: Writing Your Own JSR-Compliant, Domain- Specific Scripting ... · Writing Your Own JSR-Compliant, Domain-Specific Scripting Language David Smith, Software Engineer John Colosi, Software](https://reader034.vdocument.in/reader034/viewer/2022042222/5ec80a05fe46c315f91a2b2c/html5/thumbnails/5.jpg)
2008 JavaOneSM Conference | java.sun.com/javaone | 5
Agenda
Background on JSR-223, scripting, and DSLsDomain Specific Languages in detailWalk-through of JSR-223Writing your own DSLDSL Case StudiesJumpstart your development
![Page 6: Writing Your Own JSR-Compliant, Domain- Specific Scripting ... · Writing Your Own JSR-Compliant, Domain-Specific Scripting Language David Smith, Software Engineer John Colosi, Software](https://reader034.vdocument.in/reader034/viewer/2022042222/5ec80a05fe46c315f91a2b2c/html5/thumbnails/6.jpg)
2008 JavaOneSM Conference | java.sun.com/javaone | 6
What is JSR-223?
JSR-223 defines certain contracts between the Java Virtual Machine (JVM™) and a scripting languageIt covers:• Motivations behind its creation• How the JVM tool will discover available scripting languages at
runtime• The classes and interfaces that define relationships between a
script engine and the JVM toolScripting support was introduced with Java 6 platformAt scripting.dev.java.net you can find a list of JSR-conforming scripting-language implementations
![Page 7: Writing Your Own JSR-Compliant, Domain- Specific Scripting ... · Writing Your Own JSR-Compliant, Domain-Specific Scripting Language David Smith, Software Engineer John Colosi, Software](https://reader034.vdocument.in/reader034/viewer/2022042222/5ec80a05fe46c315f91a2b2c/html5/thumbnails/7.jpg)
2008 JavaOneSM Conference | java.sun.com/javaone | 7
What is a scripting language?
A language whose programs control applications rather than exist as applications on their ownScripts ordinarily contain sequences of commands intended for the target applicationUsually interpretedDefinition has become muddled
![Page 8: Writing Your Own JSR-Compliant, Domain- Specific Scripting ... · Writing Your Own JSR-Compliant, Domain-Specific Scripting Language David Smith, Software Engineer John Colosi, Software](https://reader034.vdocument.in/reader034/viewer/2022042222/5ec80a05fe46c315f91a2b2c/html5/thumbnails/8.jpg)
2008 JavaOneSM Conference | java.sun.com/javaone | 8
What is a DSL?
Full of terms and jargon particular to the domainNot necessarily a computer language, even though that’s how engineers might think about themOften impenetrable to outsidersThe same way design patterns can be referred to by name and connote lots of information to those knowledgeable
![Page 9: Writing Your Own JSR-Compliant, Domain- Specific Scripting ... · Writing Your Own JSR-Compliant, Domain-Specific Scripting Language David Smith, Software Engineer John Colosi, Software](https://reader034.vdocument.in/reader034/viewer/2022042222/5ec80a05fe46c315f91a2b2c/html5/thumbnails/9.jpg)
2008 JavaOneSM Conference | java.sun.com/javaone | 9
Shared context
When there are things we all understand, we can factor them out of the communicationDSLs assume a shared context between language user and language interpreterThe “domain” in DSL signifies that context
![Page 10: Writing Your Own JSR-Compliant, Domain- Specific Scripting ... · Writing Your Own JSR-Compliant, Domain-Specific Scripting Language David Smith, Software Engineer John Colosi, Software](https://reader034.vdocument.in/reader034/viewer/2022042222/5ec80a05fe46c315f91a2b2c/html5/thumbnails/10.jpg)
2008 JavaOneSM Conference | java.sun.com/javaone | 10
What is Domain Specific Language?
Spoken languages are imperfect• Rich• Not concise
![Page 11: Writing Your Own JSR-Compliant, Domain- Specific Scripting ... · Writing Your Own JSR-Compliant, Domain-Specific Scripting Language David Smith, Software Engineer John Colosi, Software](https://reader034.vdocument.in/reader034/viewer/2022042222/5ec80a05fe46c315f91a2b2c/html5/thumbnails/11.jpg)
2008 JavaOneSM Conference | java.sun.com/javaone | 11
What is Domain Specific Language?
“The way an object in front of a light source appears darker than it really is”• Silhouette
![Page 12: Writing Your Own JSR-Compliant, Domain- Specific Scripting ... · Writing Your Own JSR-Compliant, Domain-Specific Scripting Language David Smith, Software Engineer John Colosi, Software](https://reader034.vdocument.in/reader034/viewer/2022042222/5ec80a05fe46c315f91a2b2c/html5/thumbnails/12.jpg)
2008 JavaOneSM Conference | java.sun.com/javaone | 12
What is Domain Specific Language?
“The strange effect of perspective when a large viewing angle is forced into a smaller viewing angle”• Fisheye
![Page 13: Writing Your Own JSR-Compliant, Domain- Specific Scripting ... · Writing Your Own JSR-Compliant, Domain-Specific Scripting Language David Smith, Software Engineer John Colosi, Software](https://reader034.vdocument.in/reader034/viewer/2022042222/5ec80a05fe46c315f91a2b2c/html5/thumbnails/13.jpg)
2008 JavaOneSM Conference | java.sun.com/javaone | 13
Diamonds in the Rough
When my wife says:• “What happened to the last batter?”
![Page 14: Writing Your Own JSR-Compliant, Domain- Specific Scripting ... · Writing Your Own JSR-Compliant, Domain-Specific Scripting Language David Smith, Software Engineer John Colosi, Software](https://reader034.vdocument.in/reader034/viewer/2022042222/5ec80a05fe46c315f91a2b2c/html5/thumbnails/14.jpg)
2008 JavaOneSM Conference | java.sun.com/javaone | 14
Diamonds in the Rough
There were runners at First…
![Page 15: Writing Your Own JSR-Compliant, Domain- Specific Scripting ... · Writing Your Own JSR-Compliant, Domain-Specific Scripting Language David Smith, Software Engineer John Colosi, Software](https://reader034.vdocument.in/reader034/viewer/2022042222/5ec80a05fe46c315f91a2b2c/html5/thumbnails/15.jpg)
2008 JavaOneSM Conference | java.sun.com/javaone | 15
Diamonds in the Rough
… and Second base…
![Page 16: Writing Your Own JSR-Compliant, Domain- Specific Scripting ... · Writing Your Own JSR-Compliant, Domain-Specific Scripting Language David Smith, Software Engineer John Colosi, Software](https://reader034.vdocument.in/reader034/viewer/2022042222/5ec80a05fe46c315f91a2b2c/html5/thumbnails/16.jpg)
2008 JavaOneSM Conference | java.sun.com/javaone | 16
Diamonds in the Rough
… with 1 out…
![Page 17: Writing Your Own JSR-Compliant, Domain- Specific Scripting ... · Writing Your Own JSR-Compliant, Domain-Specific Scripting Language David Smith, Software Engineer John Colosi, Software](https://reader034.vdocument.in/reader034/viewer/2022042222/5ec80a05fe46c315f91a2b2c/html5/thumbnails/17.jpg)
2008 JavaOneSM Conference | java.sun.com/javaone | 17
Diamonds in the Rough
… when the batter…
![Page 18: Writing Your Own JSR-Compliant, Domain- Specific Scripting ... · Writing Your Own JSR-Compliant, Domain-Specific Scripting Language David Smith, Software Engineer John Colosi, Software](https://reader034.vdocument.in/reader034/viewer/2022042222/5ec80a05fe46c315f91a2b2c/html5/thumbnails/18.jpg)
2008 JavaOneSM Conference | java.sun.com/javaone | 18
Diamonds in the Rough
… hit a pop fly in the infield…
![Page 19: Writing Your Own JSR-Compliant, Domain- Specific Scripting ... · Writing Your Own JSR-Compliant, Domain-Specific Scripting Language David Smith, Software Engineer John Colosi, Software](https://reader034.vdocument.in/reader034/viewer/2022042222/5ec80a05fe46c315f91a2b2c/html5/thumbnails/19.jpg)
2008 JavaOneSM Conference | java.sun.com/javaone | 19
Diamonds in the Rough
… The defense could just drop the ball…
![Page 20: Writing Your Own JSR-Compliant, Domain- Specific Scripting ... · Writing Your Own JSR-Compliant, Domain-Specific Scripting Language David Smith, Software Engineer John Colosi, Software](https://reader034.vdocument.in/reader034/viewer/2022042222/5ec80a05fe46c315f91a2b2c/html5/thumbnails/20.jpg)
2008 JavaOneSM Conference | java.sun.com/javaone | 20
Diamonds in the Rough
… and turn a double play…
![Page 21: Writing Your Own JSR-Compliant, Domain- Specific Scripting ... · Writing Your Own JSR-Compliant, Domain-Specific Scripting Language David Smith, Software Engineer John Colosi, Software](https://reader034.vdocument.in/reader034/viewer/2022042222/5ec80a05fe46c315f91a2b2c/html5/thumbnails/21.jpg)
2008 JavaOneSM Conference | java.sun.com/javaone | 21
Diamonds in the Rough
… to avoid this, the batter was called out…
![Page 22: Writing Your Own JSR-Compliant, Domain- Specific Scripting ... · Writing Your Own JSR-Compliant, Domain-Specific Scripting Language David Smith, Software Engineer John Colosi, Software](https://reader034.vdocument.in/reader034/viewer/2022042222/5ec80a05fe46c315f91a2b2c/html5/thumbnails/22.jpg)
2008 JavaOneSM Conference | java.sun.com/javaone | 22
Diamonds in the Rough
… and the runners…
![Page 23: Writing Your Own JSR-Compliant, Domain- Specific Scripting ... · Writing Your Own JSR-Compliant, Domain-Specific Scripting Language David Smith, Software Engineer John Colosi, Software](https://reader034.vdocument.in/reader034/viewer/2022042222/5ec80a05fe46c315f91a2b2c/html5/thumbnails/23.jpg)
2008 JavaOneSM Conference | java.sun.com/javaone | 23
Diamonds in the Rough
… hold their positions
![Page 24: Writing Your Own JSR-Compliant, Domain- Specific Scripting ... · Writing Your Own JSR-Compliant, Domain-Specific Scripting Language David Smith, Software Engineer John Colosi, Software](https://reader034.vdocument.in/reader034/viewer/2022042222/5ec80a05fe46c315f91a2b2c/html5/thumbnails/24.jpg)
2008 JavaOneSM Conference | java.sun.com/javaone | 24
Diamonds in the Rough
That’s a mouthful
![Page 25: Writing Your Own JSR-Compliant, Domain- Specific Scripting ... · Writing Your Own JSR-Compliant, Domain-Specific Scripting Language David Smith, Software Engineer John Colosi, Software](https://reader034.vdocument.in/reader034/viewer/2022042222/5ec80a05fe46c315f91a2b2c/html5/thumbnails/25.jpg)
2008 JavaOneSM Conference | java.sun.com/javaone | 25
Diamonds in the Rough
If David asked the same question…
![Page 26: Writing Your Own JSR-Compliant, Domain- Specific Scripting ... · Writing Your Own JSR-Compliant, Domain-Specific Scripting Language David Smith, Software Engineer John Colosi, Software](https://reader034.vdocument.in/reader034/viewer/2022042222/5ec80a05fe46c315f91a2b2c/html5/thumbnails/26.jpg)
2008 JavaOneSM Conference | java.sun.com/javaone | 26
Diamonds in the Rough
Infield Fly Rule
![Page 27: Writing Your Own JSR-Compliant, Domain- Specific Scripting ... · Writing Your Own JSR-Compliant, Domain-Specific Scripting Language David Smith, Software Engineer John Colosi, Software](https://reader034.vdocument.in/reader034/viewer/2022042222/5ec80a05fe46c315f91a2b2c/html5/thumbnails/27.jpg)
2008 JavaOneSM Conference | java.sun.com/javaone | 27
Agenda
Background on JSR-223, scripting, and DSLsDomain Specific Languages in detailWalk-through of JSR-223Writing your own DSLDSL Case StudiesJumpstart your development
![Page 28: Writing Your Own JSR-Compliant, Domain- Specific Scripting ... · Writing Your Own JSR-Compliant, Domain-Specific Scripting Language David Smith, Software Engineer John Colosi, Software](https://reader034.vdocument.in/reader034/viewer/2022042222/5ec80a05fe46c315f91a2b2c/html5/thumbnails/28.jpg)
2008 JavaOneSM Conference | java.sun.com/javaone | 28
Relationship of computer languages
Rich languages (e.g., Java)
Domain-specific languagesScripting languages (e.g., Groovy)
![Page 29: Writing Your Own JSR-Compliant, Domain- Specific Scripting ... · Writing Your Own JSR-Compliant, Domain-Specific Scripting Language David Smith, Software Engineer John Colosi, Software](https://reader034.vdocument.in/reader034/viewer/2022042222/5ec80a05fe46c315f91a2b2c/html5/thumbnails/29.jpg)
2008 JavaOneSM Conference | java.sun.com/javaone | 29
DSLs vs. rich computer languages
Rich languages start by not knowing what you’re talking about• The Java platform doesn’t know what a bank account is
Rich languages must allow for all possibilities of application• You can use C to navigate a space shuttle, C++ to run a backend
financial system, and a Java platform to make Duke show up in an applet
![Page 30: Writing Your Own JSR-Compliant, Domain- Specific Scripting ... · Writing Your Own JSR-Compliant, Domain-Specific Scripting Language David Smith, Software Engineer John Colosi, Software](https://reader034.vdocument.in/reader034/viewer/2022042222/5ec80a05fe46c315f91a2b2c/html5/thumbnails/30.jpg)
2008 JavaOneSM Conference | java.sun.com/javaone | 30
Duke
![Page 31: Writing Your Own JSR-Compliant, Domain- Specific Scripting ... · Writing Your Own JSR-Compliant, Domain-Specific Scripting Language David Smith, Software Engineer John Colosi, Software](https://reader034.vdocument.in/reader034/viewer/2022042222/5ec80a05fe46c315f91a2b2c/html5/thumbnails/31.jpg)
2008 JavaOneSM Conference | java.sun.com/javaone | 31
Why use a DSL?
Deep Blue is a chess playing computer
![Page 32: Writing Your Own JSR-Compliant, Domain- Specific Scripting ... · Writing Your Own JSR-Compliant, Domain-Specific Scripting Language David Smith, Software Engineer John Colosi, Software](https://reader034.vdocument.in/reader034/viewer/2022042222/5ec80a05fe46c315f91a2b2c/html5/thumbnails/32.jpg)
2008 JavaOneSM Conference | java.sun.com/javaone | 32
Why use a DSL?
In 1997, it won a match……against Gary Kasparov, reigning world champion
![Page 33: Writing Your Own JSR-Compliant, Domain- Specific Scripting ... · Writing Your Own JSR-Compliant, Domain-Specific Scripting Language David Smith, Software Engineer John Colosi, Software](https://reader034.vdocument.in/reader034/viewer/2022042222/5ec80a05fe46c315f91a2b2c/html5/thumbnails/33.jpg)
2008 JavaOneSM Conference | java.sun.com/javaone | 33
Why use a DSL?
But Deep Blue doesn’t know the rules of chess…It just has a good memory
![Page 34: Writing Your Own JSR-Compliant, Domain- Specific Scripting ... · Writing Your Own JSR-Compliant, Domain-Specific Scripting Language David Smith, Software Engineer John Colosi, Software](https://reader034.vdocument.in/reader034/viewer/2022042222/5ec80a05fe46c315f91a2b2c/html5/thumbnails/34.jpg)
2008 JavaOneSM Conference | java.sun.com/javaone | 34
Why use a DSL?
Deep Blue needs something better than the SQL, the “Standard” Query LanguageCQL is the “Chess” Query Language
![Page 35: Writing Your Own JSR-Compliant, Domain- Specific Scripting ... · Writing Your Own JSR-Compliant, Domain-Specific Scripting Language David Smith, Software Engineer John Colosi, Software](https://reader034.vdocument.in/reader034/viewer/2022042222/5ec80a05fe46c315f91a2b2c/html5/thumbnails/35.jpg)
2008 JavaOneSM Conference | java.sun.com/javaone | 35
What could this mean?
:relation (:missingpiececount A 1)
![Page 36: Writing Your Own JSR-Compliant, Domain- Specific Scripting ... · Writing Your Own JSR-Compliant, Domain-Specific Scripting Language David Smith, Software Engineer John Colosi, Software](https://reader034.vdocument.in/reader034/viewer/2022042222/5ec80a05fe46c315f91a2b2c/html5/thumbnails/36.jpg)
2008 JavaOneSM Conference | java.sun.com/javaone | 36
CQL
Syntax• K white king• N white knight• B white bishop• P white pawn• R white rook• Q white queen• A any white piece• . empty square
Keywords• :mate• :check• :wtm (white to move)• :terminal (final position)
CQL syntaxk black kingn black knightb black bishopp black pawnr black rookq black queena any black pieceU any piece
Keywords:pattern:relation
![Page 37: Writing Your Own JSR-Compliant, Domain- Specific Scripting ... · Writing Your Own JSR-Compliant, Domain-Specific Scripting Language David Smith, Software Engineer John Colosi, Software](https://reader034.vdocument.in/reader034/viewer/2022042222/5ec80a05fe46c315f91a2b2c/html5/thumbnails/37.jpg)
2008 JavaOneSM Conference | java.sun.com/javaone | 37
:relation (:missingpiececount A 1)
Find games where White sacrificed a piece to improve his position
![Page 38: Writing Your Own JSR-Compliant, Domain- Specific Scripting ... · Writing Your Own JSR-Compliant, Domain-Specific Scripting Language David Smith, Software Engineer John Colosi, Software](https://reader034.vdocument.in/reader034/viewer/2022042222/5ec80a05fe46c315f91a2b2c/html5/thumbnails/38.jpg)
2008 JavaOneSM Conference | java.sun.com/javaone | 38
CQL
CQL was developed by Gady Costeff and Lewis StillerIt is Copyright (c) 2003-2004 and is free
![Page 39: Writing Your Own JSR-Compliant, Domain- Specific Scripting ... · Writing Your Own JSR-Compliant, Domain-Specific Scripting Language David Smith, Software Engineer John Colosi, Software](https://reader034.vdocument.in/reader034/viewer/2022042222/5ec80a05fe46c315f91a2b2c/html5/thumbnails/39.jpg)
2008 JavaOneSM Conference | java.sun.com/javaone | 39
Other DSL examples
Wiki markup languageSQL• Imagine all the complexity behind this simple command
• SELECT /*+ PARALLEL(emp,4) */ COUNT(*) FROM emp ;
SPSS – stat *example*Solaris™ Flash technology actionscript – this is pretty rich thoughAI scripts
![Page 40: Writing Your Own JSR-Compliant, Domain- Specific Scripting ... · Writing Your Own JSR-Compliant, Domain-Specific Scripting Language David Smith, Software Engineer John Colosi, Software](https://reader034.vdocument.in/reader034/viewer/2022042222/5ec80a05fe46c315f91a2b2c/html5/thumbnails/40.jpg)
2008 JavaOneSM Conference | java.sun.com/javaone | 40
Agenda
Background on JSR-223, scripting, and DSLsDomain Specific Languages in detailWalk-through of JSR-223Writing your own DSLDSL Case StudiesJumpstart your development
![Page 41: Writing Your Own JSR-Compliant, Domain- Specific Scripting ... · Writing Your Own JSR-Compliant, Domain-Specific Scripting Language David Smith, Software Engineer John Colosi, Software](https://reader034.vdocument.in/reader034/viewer/2022042222/5ec80a05fe46c315f91a2b2c/html5/thumbnails/41.jpg)
2008 JavaOneSM Conference | java.sun.com/javaone | 41
Beginning the implementations
JSR-223 defines six classes and six interfacesAll can be found in the javax.script packageThese fall into the categories of:• the scripting engine for a language• the context in which a script is running
![Page 42: Writing Your Own JSR-Compliant, Domain- Specific Scripting ... · Writing Your Own JSR-Compliant, Domain-Specific Scripting Language David Smith, Software Engineer John Colosi, Software](https://reader034.vdocument.in/reader034/viewer/2022042222/5ec80a05fe46c315f91a2b2c/html5/thumbnails/42.jpg)
2008 JavaOneSM Conference | java.sun.com/javaone | 42
JSR-223 API: relations between manager and factories
ScriptEngineManager
ScriptEngineFactory
(language x)
Service locator
ScriptEngineFactory
(language y)
ScriptEngineFactory
(language z)language
xlanguage
ylanguage
z
![Page 43: Writing Your Own JSR-Compliant, Domain- Specific Scripting ... · Writing Your Own JSR-Compliant, Domain-Specific Scripting Language David Smith, Software Engineer John Colosi, Software](https://reader034.vdocument.in/reader034/viewer/2022042222/5ec80a05fe46c315f91a2b2c/html5/thumbnails/43.jpg)
2008 JavaOneSM Conference | java.sun.com/javaone | 43
JSR-223 API: the ScriptEngineManager
The ScriptEngineManager• Auto-discovers scripting lanugaues• Determines which engine factory to give you based on language
name, MIME-type, or extension that you supplyIt’s a factory of factories
![Page 44: Writing Your Own JSR-Compliant, Domain- Specific Scripting ... · Writing Your Own JSR-Compliant, Domain-Specific Scripting Language David Smith, Software Engineer John Colosi, Software](https://reader034.vdocument.in/reader034/viewer/2022042222/5ec80a05fe46c315f91a2b2c/html5/thumbnails/44.jpg)
2008 JavaOneSM Conference | java.sun.com/javaone | 44
scripts(language x)
JSR-223 API: relations between factories and engines
ScriptEngineManager
ScriptEngineFactory
(language x)
ScriptEngine(language x)
ScriptEngine(language x)
![Page 45: Writing Your Own JSR-Compliant, Domain- Specific Scripting ... · Writing Your Own JSR-Compliant, Domain-Specific Scripting Language David Smith, Software Engineer John Colosi, Software](https://reader034.vdocument.in/reader034/viewer/2022042222/5ec80a05fe46c315f91a2b2c/html5/thumbnails/45.jpg)
2008 JavaOneSM Conference | java.sun.com/javaone | 45
JSR-223 API: the script engine and its factory
ScriptEngineFactory• Produces instances of your engine• Maps MIMEs, extensions, and language names to itself• Provides syntax for method calls and output statements• Provides mechanism for building a script from statements
ScriptEngine• Interprets and runs (“evaluates”) your scripts• Requires you to implement overloaded eval() method for script
interpretation
![Page 46: Writing Your Own JSR-Compliant, Domain- Specific Scripting ... · Writing Your Own JSR-Compliant, Domain-Specific Scripting Language David Smith, Software Engineer John Colosi, Software](https://reader034.vdocument.in/reader034/viewer/2022042222/5ec80a05fe46c315f91a2b2c/html5/thumbnails/46.jpg)
2008 JavaOneSM Conference | java.sun.com/javaone | 46
Code example: hello world
// get Groovy engine from the SEMScriptEngineManager sem = new ScriptEngineManager();
ScriptEngine groovyEng = sem.getEngineByName( "groovy" );
// run a scriptgroovyEng.eval( "println 'hello world'" );
![Page 47: Writing Your Own JSR-Compliant, Domain- Specific Scripting ... · Writing Your Own JSR-Compliant, Domain-Specific Scripting Language David Smith, Software Engineer John Colosi, Software](https://reader034.vdocument.in/reader034/viewer/2022042222/5ec80a05fe46c315f91a2b2c/html5/thumbnails/47.jpg)
2008 JavaOneSM Conference | java.sun.com/javaone | 47
JSR-223 API: closer look at ScriptEngine classpublic Object eval ( ... ) throws ScriptException
The ( ... ) can be• String• Reader • String, ScriptContext• Reader, ScriptContext• String, Bindings• Reader, Bindings
![Page 48: Writing Your Own JSR-Compliant, Domain- Specific Scripting ... · Writing Your Own JSR-Compliant, Domain-Specific Scripting Language David Smith, Software Engineer John Colosi, Software](https://reader034.vdocument.in/reader034/viewer/2022042222/5ec80a05fe46c315f91a2b2c/html5/thumbnails/48.jpg)
2008 JavaOneSM Conference | java.sun.com/javaone | 48
Java application
ScriptContext
JSR-223 API: Interactions between a Java platform application and an engine
ScriptEngine
ScriptEngineManager
ScriptEngineFactoryBindings
Bindings
{ … Java code …}
![Page 49: Writing Your Own JSR-Compliant, Domain- Specific Scripting ... · Writing Your Own JSR-Compliant, Domain-Specific Scripting Language David Smith, Software Engineer John Colosi, Software](https://reader034.vdocument.in/reader034/viewer/2022042222/5ec80a05fe46c315f91a2b2c/html5/thumbnails/49.jpg)
2008 JavaOneSM Conference | java.sun.com/javaone | 49
JSR-223 API: the script’s runtime context
Bindings• Holds name-value pairs• Objects can be bound into, retrieved from, and removed from the
Bindings by both the script and the Java platform caller to the scriptScriptContext• Context in which scripts run• Provides access to scoped Bindings• Provides reader and two writers (standard, error) for script input
and output
![Page 50: Writing Your Own JSR-Compliant, Domain- Specific Scripting ... · Writing Your Own JSR-Compliant, Domain-Specific Scripting Language David Smith, Software Engineer John Colosi, Software](https://reader034.vdocument.in/reader034/viewer/2022042222/5ec80a05fe46c315f91a2b2c/html5/thumbnails/50.jpg)
2008 JavaOneSM Conference | java.sun.com/javaone | 50
JSR-223 API: Bindings hierarchy
Bindings have scopes• Global scope – can be set in the ScriptEngineManager or the
ScriptEngine before script evaluation• Engine scope – can be set in the ScriptEngine before script
evaluation• “Local” scope – can be passed in at script-evaluation time and
used for that evaluation onlyThe ScriptEngine will look for a specific binding (property in a Bindings) by going from local to engine to global scope
![Page 51: Writing Your Own JSR-Compliant, Domain- Specific Scripting ... · Writing Your Own JSR-Compliant, Domain-Specific Scripting Language David Smith, Software Engineer John Colosi, Software](https://reader034.vdocument.in/reader034/viewer/2022042222/5ec80a05fe46c315f91a2b2c/html5/thumbnails/51.jpg)
2008 JavaOneSM Conference | java.sun.com/javaone | 51
Code example: round trip with “local” bindings// get the Groovy engine from the SEMScriptEngineManager sem = new ScriptEngineManager();ScriptEngine groovyEng = sem.getEngineByName( "groovy" );
// create some bindings for our script runBindings runBindings = groovyEng.createBindings();runBindings.put( "greeting", "hello from script" );
// run the script and supply those bindingsgroovyEng.eval( "println greeting", runBindings );
![Page 52: Writing Your Own JSR-Compliant, Domain- Specific Scripting ... · Writing Your Own JSR-Compliant, Domain-Specific Scripting Language David Smith, Software Engineer John Colosi, Software](https://reader034.vdocument.in/reader034/viewer/2022042222/5ec80a05fe46c315f91a2b2c/html5/thumbnails/52.jpg)
2008 JavaOneSM Conference | java.sun.com/javaone | 52
JSR-223 API: helper classes
SimpleBindingsSimpleScriptContexAbstractScriptEngine
![Page 53: Writing Your Own JSR-Compliant, Domain- Specific Scripting ... · Writing Your Own JSR-Compliant, Domain-Specific Scripting Language David Smith, Software Engineer John Colosi, Software](https://reader034.vdocument.in/reader034/viewer/2022042222/5ec80a05fe46c315f91a2b2c/html5/thumbnails/53.jpg)
2008 JavaOneSM Conference | java.sun.com/javaone | 53
JSR-223 API: optional engine facilities
CompilableInvocable
![Page 54: Writing Your Own JSR-Compliant, Domain- Specific Scripting ... · Writing Your Own JSR-Compliant, Domain-Specific Scripting Language David Smith, Software Engineer John Colosi, Software](https://reader034.vdocument.in/reader034/viewer/2022042222/5ec80a05fe46c315f91a2b2c/html5/thumbnails/54.jpg)
2008 JavaOneSM Conference | java.sun.com/javaone | 54
Agenda
Background on JSR-223, scripting, and DSLsDomain Specific Languages in detailWalk-through of JSR-223Writing your own DSLDSL Case StudiesJumpstart your development
![Page 55: Writing Your Own JSR-Compliant, Domain- Specific Scripting ... · Writing Your Own JSR-Compliant, Domain-Specific Scripting Language David Smith, Software Engineer John Colosi, Software](https://reader034.vdocument.in/reader034/viewer/2022042222/5ec80a05fe46c315f91a2b2c/html5/thumbnails/55.jpg)
2008 JavaOneSM Conference | java.sun.com/javaone | 55
Writing your own language: how and where to start?
Sometimes the biggest hurdle is getting startedJSR-223 is a friendly, welcoming specificationDSLs are only and exactly as difficult to write as you decide they will be
![Page 56: Writing Your Own JSR-Compliant, Domain- Specific Scripting ... · Writing Your Own JSR-Compliant, Domain-Specific Scripting Language David Smith, Software Engineer John Colosi, Software](https://reader034.vdocument.in/reader034/viewer/2022042222/5ec80a05fe46c315f91a2b2c/html5/thumbnails/56.jpg)
2008 JavaOneSM Conference | java.sun.com/javaone | 56
Start at the end
What should the eventual script look like?• Syntax• Semantics
What features do you want to support?• What are the nouns that will be important?• What verbs – what actions?
![Page 57: Writing Your Own JSR-Compliant, Domain- Specific Scripting ... · Writing Your Own JSR-Compliant, Domain-Specific Scripting Language David Smith, Software Engineer John Colosi, Software](https://reader034.vdocument.in/reader034/viewer/2022042222/5ec80a05fe46c315f91a2b2c/html5/thumbnails/57.jpg)
2008 JavaOneSM Conference | java.sun.com/javaone | 57
An example script
showMap zipcode=22207setZoomLevel 15showIcons schoolsshowIcons librariesplotRoute mySavedRoute
![Page 58: Writing Your Own JSR-Compliant, Domain- Specific Scripting ... · Writing Your Own JSR-Compliant, Domain-Specific Scripting Language David Smith, Software Engineer John Colosi, Software](https://reader034.vdocument.in/reader034/viewer/2022042222/5ec80a05fe46c315f91a2b2c/html5/thumbnails/58.jpg)
2008 JavaOneSM Conference | java.sun.com/javaone | 58
Begin implementation with AbstractScriptEngine
Have createBindings() return a new SimpleBindingsConsolidate the two remaining eval() methods• private Object eval(final Reader reader, final Bindings bindings, final ScriptContext context) throws ScriptException
Implement the new eval() method• Start with “Hello World”• Write a test that calls all of the different public eval() methods
![Page 59: Writing Your Own JSR-Compliant, Domain- Specific Scripting ... · Writing Your Own JSR-Compliant, Domain-Specific Scripting Language David Smith, Software Engineer John Colosi, Software](https://reader034.vdocument.in/reader034/viewer/2022042222/5ec80a05fe46c315f91a2b2c/html5/thumbnails/59.jpg)
2008 JavaOneSM Conference | java.sun.com/javaone | 59
Write your ScriptEngineFactory
None of its methods require any computation!Two of its methods deal with your script’s syntax• getMethodCallSyntax(…) requires some thought, but not much• getProgram(…) requires even less thought
Write a test to grab the engine from the factory and execute a script
![Page 60: Writing Your Own JSR-Compliant, Domain- Specific Scripting ... · Writing Your Own JSR-Compliant, Domain-Specific Scripting Language David Smith, Software Engineer John Colosi, Software](https://reader034.vdocument.in/reader034/viewer/2022042222/5ec80a05fe46c315f91a2b2c/html5/thumbnails/60.jpg)
2008 JavaOneSM Conference | java.sun.com/javaone | 60
Package it properly
Use the service-provider convention for auto discovery• META-INF
• /services• /javax.script.ScriptEngineFactory
• com.my.script.MyScriptEngineFactory
Write a test to get your ScriptEngineFactory via the ScriptEngineManager
![Page 61: Writing Your Own JSR-Compliant, Domain- Specific Scripting ... · Writing Your Own JSR-Compliant, Domain-Specific Scripting Language David Smith, Software Engineer John Colosi, Software](https://reader034.vdocument.in/reader034/viewer/2022042222/5ec80a05fe46c315f91a2b2c/html5/thumbnails/61.jpg)
2008 JavaOneSM Conference | java.sun.com/javaone | 61
Ummm… you’re now JSR-compliant!
You’re almost done!You now have to change your new ScriptEngine’s private eval() method to do more than “Hello World”• Unless your intention was to have a HelloWorldScriptEngine• There’s nothing wrong with that, by the way
![Page 62: Writing Your Own JSR-Compliant, Domain- Specific Scripting ... · Writing Your Own JSR-Compliant, Domain-Specific Scripting Language David Smith, Software Engineer John Colosi, Software](https://reader034.vdocument.in/reader034/viewer/2022042222/5ec80a05fe46c315f91a2b2c/html5/thumbnails/62.jpg)
2008 JavaOneSM Conference | java.sun.com/javaone | 62
Advanced parsing
If your language is complex, separate/encapsulate the parse and the execute concerns• Try ANTLR for parsing• Consider implementing Invocable and Compilable if you have a
compilation step separate from the execution
However, a complicated language means fewer users
![Page 63: Writing Your Own JSR-Compliant, Domain- Specific Scripting ... · Writing Your Own JSR-Compliant, Domain-Specific Scripting Language David Smith, Software Engineer John Colosi, Software](https://reader034.vdocument.in/reader034/viewer/2022042222/5ec80a05fe46c315f91a2b2c/html5/thumbnails/63.jpg)
2008 JavaOneSM Conference | java.sun.com/javaone | 63
Extending your interpreter
Want to get fancy?• Support variables• Allow output redirection• Allow input redirection• Provide extensive error messages (ScriptException supports line-
number support)• …what else…?
What implicit procedures and variables will you expose to all scripts?• Unique ID generator?• Logging?
![Page 64: Writing Your Own JSR-Compliant, Domain- Specific Scripting ... · Writing Your Own JSR-Compliant, Domain-Specific Scripting Language David Smith, Software Engineer John Colosi, Software](https://reader034.vdocument.in/reader034/viewer/2022042222/5ec80a05fe46c315f91a2b2c/html5/thumbnails/64.jpg)
2008 JavaOneSM Conference | java.sun.com/javaone | 64
Agenda
Background on JSR-223, scripting, and DSLsDomain Specific Languages in detailWalk-through of JSR-223Writing your own DSLDSL Case StudiesJumpstart your development
![Page 65: Writing Your Own JSR-Compliant, Domain- Specific Scripting ... · Writing Your Own JSR-Compliant, Domain-Specific Scripting Language David Smith, Software Engineer John Colosi, Software](https://reader034.vdocument.in/reader034/viewer/2022042222/5ec80a05fe46c315f91a2b2c/html5/thumbnails/65.jpg)
2008 JavaOneSM Conference | java.sun.com/javaone | 65
Case studies
John & David are Java platform programmersJohn’s into video gamesDavid’s into musicThey understand the basics of the JSR
![Page 66: Writing Your Own JSR-Compliant, Domain- Specific Scripting ... · Writing Your Own JSR-Compliant, Domain-Specific Scripting Language David Smith, Software Engineer John Colosi, Software](https://reader034.vdocument.in/reader034/viewer/2022042222/5ec80a05fe46c315f91a2b2c/html5/thumbnails/66.jpg)
2008 JavaOneSM Conference | java.sun.com/javaone | 66
David’s MP3 player
filter band=Wolfhoundsshuffle onrepeat onplay
![Page 67: Writing Your Own JSR-Compliant, Domain- Specific Scripting ... · Writing Your Own JSR-Compliant, Domain-Specific Scripting Language David Smith, Software Engineer John Colosi, Software](https://reader034.vdocument.in/reader034/viewer/2022042222/5ec80a05fe46c315f91a2b2c/html5/thumbnails/67.jpg)
2008 JavaOneSM Conference | java.sun.com/javaone | 67
The Gaming Revolution
The Next Big Thing
![Page 68: Writing Your Own JSR-Compliant, Domain- Specific Scripting ... · Writing Your Own JSR-Compliant, Domain-Specific Scripting Language David Smith, Software Engineer John Colosi, Software](https://reader034.vdocument.in/reader034/viewer/2022042222/5ec80a05fe46c315f91a2b2c/html5/thumbnails/68.jpg)
2008 JavaOneSM Conference | java.sun.com/javaone | 68
The Old School
![Page 69: Writing Your Own JSR-Compliant, Domain- Specific Scripting ... · Writing Your Own JSR-Compliant, Domain-Specific Scripting Language David Smith, Software Engineer John Colosi, Software](https://reader034.vdocument.in/reader034/viewer/2022042222/5ec80a05fe46c315f91a2b2c/html5/thumbnails/69.jpg)
2008 JavaOneSM Conference | java.sun.com/javaone | 69
The New School
![Page 70: Writing Your Own JSR-Compliant, Domain- Specific Scripting ... · Writing Your Own JSR-Compliant, Domain-Specific Scripting Language David Smith, Software Engineer John Colosi, Software](https://reader034.vdocument.in/reader034/viewer/2022042222/5ec80a05fe46c315f91a2b2c/html5/thumbnails/70.jpg)
2008 JavaOneSM Conference | java.sun.com/javaone | 70
The Gaming Revolution
I want to make a language that asserts the basic principles of game playI wish I could cheat and write something like this:• Jump once• If I’m near the top of my jump, then assert that I can jump again• If I’m not, then assert that I can’t jump
Can’t we all just get alongIf I need a test case for my test case, it’s too complicated
![Page 71: Writing Your Own JSR-Compliant, Domain- Specific Scripting ... · Writing Your Own JSR-Compliant, Domain-Specific Scripting Language David Smith, Software Engineer John Colosi, Software](https://reader034.vdocument.in/reader034/viewer/2022042222/5ec80a05fe46c315f91a2b2c/html5/thumbnails/71.jpg)
2008 JavaOneSM Conference | java.sun.com/javaone | 71
Enter Gameplan:The Gameplay Description Language
Do• Simple commands like “JUMP”• Assignments like Health=25
Wait – {}• Simple commands like “{Standing}”• Assignments like {Height<300}• Comparisons like {ShotsInTheAir=0}• Sleep like {2000}
Assert – []• Simple commands like “[JUMPING]”• Assignments like [Ammo = 100]• Comparisons like [Lives > 0]
![Page 72: Writing Your Own JSR-Compliant, Domain- Specific Scripting ... · Writing Your Own JSR-Compliant, Domain-Specific Scripting Language David Smith, Software Engineer John Colosi, Software](https://reader034.vdocument.in/reader034/viewer/2022042222/5ec80a05fe46c315f91a2b2c/html5/thumbnails/72.jpg)
2008 JavaOneSM Conference | java.sun.com/javaone | 72
Example Gameplan file
# Double jumpjump {nearpeak} jump [height>300]
# Can’t jump when you’re rollingroll [rolling] {200} jump [height=0]
# Shootingmaxshotsintheair=1 shoot [shotsintheair=1] shoot shoot [shotsintheair=1]
# Upgrademaxshotsintheair=4 shotsintheair=0 shoot [shotsintheair=1] shoot shoot [shotsintheair=3]
![Page 73: Writing Your Own JSR-Compliant, Domain- Specific Scripting ... · Writing Your Own JSR-Compliant, Domain-Specific Scripting Language David Smith, Software Engineer John Colosi, Software](https://reader034.vdocument.in/reader034/viewer/2022042222/5ec80a05fe46c315f91a2b2c/html5/thumbnails/73.jpg)
2008 JavaOneSM Conference | java.sun.com/javaone | 73
Verisign Gameplan Implementation (VGI)
One object method• GamplanScriptEngine.eval(String, context)
One properties file• Gameplan.definition.txt
One Registration file• javax.script.ScriptEngineFactory
![Page 74: Writing Your Own JSR-Compliant, Domain- Specific Scripting ... · Writing Your Own JSR-Compliant, Domain-Specific Scripting Language David Smith, Software Engineer John Colosi, Software](https://reader034.vdocument.in/reader034/viewer/2022042222/5ec80a05fe46c315f91a2b2c/html5/thumbnails/74.jpg)
2008 JavaOneSM Conference | java.sun.com/javaone | 74
GamplanScriptEngine.eval(String, context)
public Object eval(String script, ScriptContext context) throws ScriptException {
// Start the Game object
// Foreach line of input
// If it looks like [***]// Assert the condition inside
// If it looks like {***}// Wait on the condition inside
// Otherwise// Change the state of the Game object
// Stop the Game object}
![Page 75: Writing Your Own JSR-Compliant, Domain- Specific Scripting ... · Writing Your Own JSR-Compliant, Domain-Specific Scripting Language David Smith, Software Engineer John Colosi, Software](https://reader034.vdocument.in/reader034/viewer/2022042222/5ec80a05fe46c315f91a2b2c/html5/thumbnails/75.jpg)
2008 JavaOneSM Conference | java.sun.com/javaone | 75
Gameplan.definition.txt
script.extensions = .game .gpscript.mimetypes = text/plain application/gameplanscript.name.short = Gameplanscript.name.long = Gameplan - Gameplay Description Languagescript.name.list = Gameplan gpln gp GDLscript.version = 1.0
engine.name = Verisign Gameplan Interpreterengine.class = com.vrsn.script.GameplanScriptEngineengine.version = 2.3
![Page 76: Writing Your Own JSR-Compliant, Domain- Specific Scripting ... · Writing Your Own JSR-Compliant, Domain-Specific Scripting Language David Smith, Software Engineer John Colosi, Software](https://reader034.vdocument.in/reader034/viewer/2022042222/5ec80a05fe46c315f91a2b2c/html5/thumbnails/76.jpg)
2008 JavaOneSM Conference | java.sun.com/javaone | 76
javax.script.ScriptEngineFactory
/META-INF/services/javax.script.ScriptEngineFactory• com.vrsn.script.gameplan.GameplanScriptEngineFactory
![Page 77: Writing Your Own JSR-Compliant, Domain- Specific Scripting ... · Writing Your Own JSR-Compliant, Domain-Specific Scripting Language David Smith, Software Engineer John Colosi, Software](https://reader034.vdocument.in/reader034/viewer/2022042222/5ec80a05fe46c315f91a2b2c/html5/thumbnails/77.jpg)
2008 JavaOneSM Conference | java.sun.com/javaone | 77
VeriSign Gameplan Interpreter
![Page 78: Writing Your Own JSR-Compliant, Domain- Specific Scripting ... · Writing Your Own JSR-Compliant, Domain-Specific Scripting Language David Smith, Software Engineer John Colosi, Software](https://reader034.vdocument.in/reader034/viewer/2022042222/5ec80a05fe46c315f91a2b2c/html5/thumbnails/78.jpg)
2008 JavaOneSM Conference | java.sun.com/javaone | 78
The Gaming Revolution
Don’t worry, we’ve slowed down the game for demonstration purposes. The real version will run almost 10% faster!
![Page 79: Writing Your Own JSR-Compliant, Domain- Specific Scripting ... · Writing Your Own JSR-Compliant, Domain-Specific Scripting Language David Smith, Software Engineer John Colosi, Software](https://reader034.vdocument.in/reader034/viewer/2022042222/5ec80a05fe46c315f91a2b2c/html5/thumbnails/79.jpg)
2008 JavaOneSM Conference | java.sun.com/javaone | 79
The Gaming Revolution
I know what you’re thinking, does this game really revolutionize gaming…
![Page 80: Writing Your Own JSR-Compliant, Domain- Specific Scripting ... · Writing Your Own JSR-Compliant, Domain-Specific Scripting Language David Smith, Software Engineer John Colosi, Software](https://reader034.vdocument.in/reader034/viewer/2022042222/5ec80a05fe46c315f91a2b2c/html5/thumbnails/80.jpg)
2008 JavaOneSM Conference | java.sun.com/javaone | 80
John & David write their DSLs, get traction
MP3-player users love scripting their playersVideogame users love scripting their playersBecause they’re so easy to use, others besides intended users pick up on them• QA for MP3 player want to start using it• {…some people besides users…} for videogame wanna use it
![Page 81: Writing Your Own JSR-Compliant, Domain- Specific Scripting ... · Writing Your Own JSR-Compliant, Domain-Specific Scripting Language David Smith, Software Engineer John Colosi, Software](https://reader034.vdocument.in/reader034/viewer/2022042222/5ec80a05fe46c315f91a2b2c/html5/thumbnails/81.jpg)
2008 JavaOneSM Conference | java.sun.com/javaone | 81
Allow plugins
Allow for people to add to the language dynamically via pluginsPlugins implement callback for handling script commands
public interface ScriptPlugin { handleLine (String scriptLine)}
Plugins register their triggering keywords with scripts.Interpreter routes triggered commands to plugins
![Page 82: Writing Your Own JSR-Compliant, Domain- Specific Scripting ... · Writing Your Own JSR-Compliant, Domain-Specific Scripting Language David Smith, Software Engineer John Colosi, Software](https://reader034.vdocument.in/reader034/viewer/2022042222/5ec80a05fe46c315f91a2b2c/html5/thumbnails/82.jpg)
2008 JavaOneSM Conference | java.sun.com/javaone | 82
Registration mechanism
# register ‘assert’ plugin with engineplugin assert com.verisign.mp3.qa.Assertions
# validate that plugin is workingassert activeSongCount=0
![Page 83: Writing Your Own JSR-Compliant, Domain- Specific Scripting ... · Writing Your Own JSR-Compliant, Domain-Specific Scripting Language David Smith, Software Engineer John Colosi, Software](https://reader034.vdocument.in/reader034/viewer/2022042222/5ec80a05fe46c315f91a2b2c/html5/thumbnails/83.jpg)
2008 JavaOneSM Conference | java.sun.com/javaone | 83
QA script
# validate filter featuresfilter genre=downtempoassert activeSongCount=33assert activeGenre=downtemposaveFilter myTestFilterclearFilterassert activeSongCount=0loadFilter myTestFilterassert activeSongCount=33assert activeGenre=downtempo
![Page 84: Writing Your Own JSR-Compliant, Domain- Specific Scripting ... · Writing Your Own JSR-Compliant, Domain-Specific Scripting Language David Smith, Software Engineer John Colosi, Software](https://reader034.vdocument.in/reader034/viewer/2022042222/5ec80a05fe46c315f91a2b2c/html5/thumbnails/84.jpg)
2008 JavaOneSM Conference | java.sun.com/javaone | 84
Videogame marketing folks
you can have your Java platform code generate and execute such scripts while running you can save yourself compilation, build, packaging, and deployment cycles by separating the dynamic logic from the application proper
![Page 85: Writing Your Own JSR-Compliant, Domain- Specific Scripting ... · Writing Your Own JSR-Compliant, Domain-Specific Scripting Language David Smith, Software Engineer John Colosi, Software](https://reader034.vdocument.in/reader034/viewer/2022042222/5ec80a05fe46c315f91a2b2c/html5/thumbnails/85.jpg)
2008 JavaOneSM Conference | java.sun.com/javaone | 85
Synergy between music fans and gamers
What gamer doesn’t want to control the game’s soundtrack?Gamers want to use their own musicGamers want the right music for the right moment
![Page 86: Writing Your Own JSR-Compliant, Domain- Specific Scripting ... · Writing Your Own JSR-Compliant, Domain-Specific Scripting Language David Smith, Software Engineer John Colosi, Software](https://reader034.vdocument.in/reader034/viewer/2022042222/5ec80a05fe46c315f91a2b2c/html5/thumbnails/86.jpg)
2008 JavaOneSM Conference | java.sun.com/javaone | 86
The beauty of JSR-223 compliance
Because the scripting languages share common interfaces…Because the JSR specifies a discovery mechanism…Because the calling program doesn’t need to know anything about the language…The languages become interoperable
![Page 87: Writing Your Own JSR-Compliant, Domain- Specific Scripting ... · Writing Your Own JSR-Compliant, Domain-Specific Scripting Language David Smith, Software Engineer John Colosi, Software](https://reader034.vdocument.in/reader034/viewer/2022042222/5ec80a05fe46c315f91a2b2c/html5/thumbnails/87.jpg)
2008 JavaOneSM Conference | java.sun.com/javaone | 87
Combination script
{{ some Gameplan stuff }}[[[ mp3filter band=Wolfhoundsshuffle onrepeat onplay]]]{{ more Gameplan }}
![Page 88: Writing Your Own JSR-Compliant, Domain- Specific Scripting ... · Writing Your Own JSR-Compliant, Domain-Specific Scripting Language David Smith, Software Engineer John Colosi, Software](https://reader034.vdocument.in/reader034/viewer/2022042222/5ec80a05fe46c315f91a2b2c/html5/thumbnails/88.jpg)
2008 JavaOneSM Conference | java.sun.com/javaone | 88
Agenda
Background on JSR-223, scripting, and DSLsDomain Specific Languages in detailWalk-through of JSR-223Writing your own DSLDSL Case StudiesJumpstart your development
![Page 89: Writing Your Own JSR-Compliant, Domain- Specific Scripting ... · Writing Your Own JSR-Compliant, Domain-Specific Scripting Language David Smith, Software Engineer John Colosi, Software](https://reader034.vdocument.in/reader034/viewer/2022042222/5ec80a05fe46c315f91a2b2c/html5/thumbnails/89.jpg)
2008 JavaOneSM Conference | java.sun.com/javaone | 89
Introducing ScriptBlend
Non-intrusive means of embedding different languages in the same scriptScripts can share variables with one anotherForeign script snippets can be inserted into flows midstream
![Page 90: Writing Your Own JSR-Compliant, Domain- Specific Scripting ... · Writing Your Own JSR-Compliant, Domain-Specific Scripting Language David Smith, Software Engineer John Colosi, Software](https://reader034.vdocument.in/reader034/viewer/2022042222/5ec80a05fe46c315f91a2b2c/html5/thumbnails/90.jpg)
2008 JavaOneSM Conference | java.sun.com/javaone | 90
ScriptBlend: Midstream insertion
echo “hello”[[[ groovyfor ( i in 1..5 ) {... ]]]echo “hi from native script”[[[ ...}def groovyHi = "hi from groovy";scriptGlue.publish("groovyHi", groovyHi);]]]echo ${groovyHi}
![Page 91: Writing Your Own JSR-Compliant, Domain- Specific Scripting ... · Writing Your Own JSR-Compliant, Domain-Specific Scripting Language David Smith, Software Engineer John Colosi, Software](https://reader034.vdocument.in/reader034/viewer/2022042222/5ec80a05fe46c315f91a2b2c/html5/thumbnails/91.jpg)
2008 JavaOneSM Conference | java.sun.com/javaone | 91
More on ScriptBlend
Supports nesting of foreign scripts (e.g., JavaScript™ technology snippet inside a Groovy snippet inside a Beanshell snippet)Provides a simple way to enable the ScriptEngineManager, individual ScriptEngineFactories, and individual ScriptEngines to interpret blended scriptsPossible Eclipse plugin for creating and editing blended scriptsMore to follow…?
![Page 92: Writing Your Own JSR-Compliant, Domain- Specific Scripting ... · Writing Your Own JSR-Compliant, Domain-Specific Scripting Language David Smith, Software Engineer John Colosi, Software](https://reader034.vdocument.in/reader034/viewer/2022042222/5ec80a05fe46c315f91a2b2c/html5/thumbnails/92.jpg)
2008 JavaOneSM Conference | java.sun.com/javaone | 92
Excited to get started scripting?
We have a starter kit to get you goingSimplifies an already-friendly API
![Page 93: Writing Your Own JSR-Compliant, Domain- Specific Scripting ... · Writing Your Own JSR-Compliant, Domain-Specific Scripting Language David Smith, Software Engineer John Colosi, Software](https://reader034.vdocument.in/reader034/viewer/2022042222/5ec80a05fe46c315f91a2b2c/html5/thumbnails/93.jpg)
2008 JavaOneSM Conference | java.sun.com/javaone | 93
Starter Kit
Implementations of JSR-223 must provide a factory and engine, but some common functionality can be assumed• VerisignScriptEngineProperties
• Loads properties from a resource• VerisignScriptEngineFactory
• Loads Engine specified in the properties• VerisignScriptEngine
• Reads input scripts intelligently• Funnels all eval methods into one which you implement
All that’s left is to dream up the language
![Page 94: Writing Your Own JSR-Compliant, Domain- Specific Scripting ... · Writing Your Own JSR-Compliant, Domain-Specific Scripting Language David Smith, Software Engineer John Colosi, Software](https://reader034.vdocument.in/reader034/viewer/2022042222/5ec80a05fe46c315f91a2b2c/html5/thumbnails/94.jpg)
2008 JavaOneSM Conference | java.sun.com/javaone | 94
Presentation Map
DSL
JSR-223John and David’s
Simple Framework
Gameplan
GameplayDescriptionLanguageVGI
VeriSign GameplanInterpreter
GameplanExamples
MusicInteraction Language
AdvancedTechniques
Where to go from here
![Page 95: Writing Your Own JSR-Compliant, Domain- Specific Scripting ... · Writing Your Own JSR-Compliant, Domain-Specific Scripting Language David Smith, Software Engineer John Colosi, Software](https://reader034.vdocument.in/reader034/viewer/2022042222/5ec80a05fe46c315f91a2b2c/html5/thumbnails/95.jpg)
2008 JavaOneSM Conference | java.sun.com/javaone | 95
Summary
Domain Specific Languages provide portable power in a simple box that even the business guys can understand
Build a rocket ship with a one page manual that your customers can operate
![Page 96: Writing Your Own JSR-Compliant, Domain- Specific Scripting ... · Writing Your Own JSR-Compliant, Domain-Specific Scripting Language David Smith, Software Engineer John Colosi, Software](https://reader034.vdocument.in/reader034/viewer/2022042222/5ec80a05fe46c315f91a2b2c/html5/thumbnails/96.jpg)
2008 JavaOneSM Conference | java.sun.com/javaone | 96
For More Information
List• Cross-references to other sessions• BOFs• URLs• Related books, etc.
![Page 97: Writing Your Own JSR-Compliant, Domain- Specific Scripting ... · Writing Your Own JSR-Compliant, Domain-Specific Scripting Language David Smith, Software Engineer John Colosi, Software](https://reader034.vdocument.in/reader034/viewer/2022042222/5ec80a05fe46c315f91a2b2c/html5/thumbnails/97.jpg)
2008 JavaOneSM Conference | java.sun.com/javaone | 97
Image Attributions
Creative Commons License• First Base Flickr user timailius• Second Base Flickr user billaday• 1 out Flickr user newyork808• Batter Flickr user pingnews• Fly ball Flickr user foreverdigital• Dropped ball Flickr user hobbes8calvin• Double play Flickr user Michael (mx5tx)• Umpire Flickr user Tom Clifton• Deep Blue Flickr user davespilbrow• Chess Pieces Flickr user Shefaet• Earth Flickr user susemueller• Silhouette Flickr user jekkyl• Fisheye Flickr user ValterJacinto• Baseball Flickr user B Tal
Stock Xchng, Public License• Thunderbirds2 Rocketship
![Page 98: Writing Your Own JSR-Compliant, Domain- Specific Scripting ... · Writing Your Own JSR-Compliant, Domain-Specific Scripting Language David Smith, Software Engineer John Colosi, Software](https://reader034.vdocument.in/reader034/viewer/2022042222/5ec80a05fe46c315f91a2b2c/html5/thumbnails/98.jpg)
2008 JavaOneSM Conference | java.sun.com/javaone | 98
David Smith, Software EngineerJohn Colosi, Software Engineer
TS-5693