scripting yor java application with bsf3
TRANSCRIPT
![Page 1: Scripting Yor Java Application with BSF3](https://reader033.vdocuments.site/reader033/viewer/2022060110/55599c70d8b42ac7648b56dc/html5/thumbnails/1.jpg)
Scripting your Java Application with BSF 3.0
Felix MeschbergerApacheCon EU 09
![Page 2: Scripting Yor Java Application with BSF3](https://reader033.vdocuments.site/reader033/viewer/2022060110/55599c70d8b42ac7648b56dc/html5/thumbnails/2.jpg)
About
• Senior Developer at Day• [email protected] • http://blog.meschberger.ch • Apache Projects:
– Sling– Felix– Jackrabbit
![Page 3: Scripting Yor Java Application with BSF3](https://reader033.vdocuments.site/reader033/viewer/2022060110/55599c70d8b42ac7648b56dc/html5/thumbnails/3.jpg)
Contents
• Scope• BSF 3.0• Scripting for the JavaTM Platform• OSGi Framework• Demo
![Page 4: Scripting Yor Java Application with BSF3](https://reader033.vdocuments.site/reader033/viewer/2022060110/55599c70d8b42ac7648b56dc/html5/thumbnails/4.jpg)
Scope
• Scripting for the JavaTM Platform• Using BSF 3• Not using BSF 2 API• Example: Apache Sling
![Page 5: Scripting Yor Java Application with BSF3](https://reader033.vdocuments.site/reader033/viewer/2022060110/55599c70d8b42ac7648b56dc/html5/thumbnails/5.jpg)
Contents
• Scope• BSF 3.0• Scripting for the JavaTM Platform• OSGi Framework• Demo
![Page 6: Scripting Yor Java Application with BSF3](https://reader033.vdocuments.site/reader033/viewer/2022060110/55599c70d8b42ac7648b56dc/html5/thumbnails/6.jpg)
About BSF
• Bean Scripting Framework• http://jakarta.apache.org/bsf/ • Timeline
– 1999 Sanjiva Weerawarana, IBM– 2002 Subproject of Jakarta (Version 2.3)– 2006 BSF 2.4– 2007 BSF 3.0 beta2– 2009 BSF 3.0 beta3 (right now!)
![Page 7: Scripting Yor Java Application with BSF3](https://reader033.vdocuments.site/reader033/viewer/2022060110/55599c70d8b42ac7648b56dc/html5/thumbnails/7.jpg)
BSF 3.0
• Java Scripting API (JSR-223)• Stable• Beta due to TCK issues
![Page 8: Scripting Yor Java Application with BSF3](https://reader033.vdocuments.site/reader033/viewer/2022060110/55599c70d8b42ac7648b56dc/html5/thumbnails/8.jpg)
Contents
• Scope• BSF 3.0• Scripting for the JavaTM Platform• OSGi Framework• Demo
![Page 9: Scripting Yor Java Application with BSF3](https://reader033.vdocuments.site/reader033/viewer/2022060110/55599c70d8b42ac7648b56dc/html5/thumbnails/9.jpg)
Scripting for the JavaTM Platform
• JSR-223• Approved November 2006• Builds on BSF 2.4 and BeanShell• Included in Java 6• BSF 3.0 for Java 1.4 and Java 5
![Page 10: Scripting Yor Java Application with BSF3](https://reader033.vdocuments.site/reader033/viewer/2022060110/55599c70d8b42ac7648b56dc/html5/thumbnails/10.jpg)
Three Steps for Scripting
1. Get the ScriptEngineManagerScriptEngineManager mgr = new ScriptEngineManager();
2. Get the ScriptEngineScriptEngine eng = mgr.getEngineByExtension(„js“);
3. Evaluate the ScriptObject result = eng.eval(„'Hello World'“);
![Page 11: Scripting Yor Java Application with BSF3](https://reader033.vdocuments.site/reader033/viewer/2022060110/55599c70d8b42ac7648b56dc/html5/thumbnails/11.jpg)
Demo 1
• Scripting in Three Steps– Sample0.java– Call Class from Command Line
![Page 12: Scripting Yor Java Application with BSF3](https://reader033.vdocuments.site/reader033/viewer/2022060110/55599c70d8b42ac7648b56dc/html5/thumbnails/12.jpg)
Main API
• javax.script.ScriptEngineManager– Manages ScriptEngineFactory– Provides access to ScriptEngine– Manages Global Scope
• javax.script.ScriptEngineFactory– Registered with ScriptEngineManager– Creates ScriptEngine
• javax.script.ScriptEngine– Evaluates Scripts
![Page 13: Scripting Yor Java Application with BSF3](https://reader033.vdocuments.site/reader033/viewer/2022060110/55599c70d8b42ac7648b56dc/html5/thumbnails/13.jpg)
Helper API
• javax.script.Bindings– Variable Binding between Scripts and App.
• javax.script.ScriptContext– Context for evaluating Scripts– Bindings (Scopes)– Input/Output
• javax.script.ScriptException– Thrown on Script Execution Errors
![Page 14: Scripting Yor Java Application with BSF3](https://reader033.vdocuments.site/reader033/viewer/2022060110/55599c70d8b42ac7648b56dc/html5/thumbnails/14.jpg)
Advanced API
• javax.script.Invocable– Optionally implemented by ScriptEngine– Allows calling functions in scripts
• javax.script.Compilable– Optionally implemented by ScriptEngine– Allows precompiling scripts– Generates CompiledScript
• javax.script.CompiledScript– Generated by Compilable.compile()
![Page 15: Scripting Yor Java Application with BSF3](https://reader033.vdocuments.site/reader033/viewer/2022060110/55599c70d8b42ac7648b56dc/html5/thumbnails/15.jpg)
Issues
• Missing Lifecycle Support– ScriptEngineFactory can only be added– Cleanup of ScriptEngineManager only on GC
• Missing API– ScriptEngineManager.unregisterXXX()– ScriptEngineManager.destroy()– ScriptEngineFactory.destroy()
• META-INF/services– ClassLoader Dependency
![Page 16: Scripting Yor Java Application with BSF3](https://reader033.vdocuments.site/reader033/viewer/2022060110/55599c70d8b42ac7648b56dc/html5/thumbnails/16.jpg)
Script Language Support
• Implement 2 Interfaces– ScriptEngineFactory– ScriptEngine
• Register– Manually
ScriptEngineManager.registerEngineExtension()ScriptEngineManager.registerEngineMimeType()ScriptEngineManager.registerEngineName()
– AutomaticallyMETA-INF/services/javax.scripting.ScriptEngineFactory
![Page 17: Scripting Yor Java Application with BSF3](https://reader033.vdocuments.site/reader033/viewer/2022060110/55599c70d8b42ac7648b56dc/html5/thumbnails/17.jpg)
„Demo“ Script Engine Factorypublic class DemoScriptEngineFactory
implements ScriptEngineFactory {
public ScriptEngine getScriptEngine() {
return new DemoScriptEngine(this);
}
public List<String> getExtensions() {
return Arrays.asList("demo");
}
// more methods not shown
}
![Page 18: Scripting Yor Java Application with BSF3](https://reader033.vdocuments.site/reader033/viewer/2022060110/55599c70d8b42ac7648b56dc/html5/thumbnails/18.jpg)
„Demo“ Script Engine public class DemoScriptEngine
extends AbstractScriptEngine {
public Object eval(String script,
ScriptContext context) {
return script;
}
// more methods not shown
}
![Page 19: Scripting Yor Java Application with BSF3](https://reader033.vdocuments.site/reader033/viewer/2022060110/55599c70d8b42ac7648b56dc/html5/thumbnails/19.jpg)
„Demo“ Registration
META-INF/services/javax.script.ScriptEngineFactory
ch.meschberger.demo.engine.DemoScriptEngineFactory
ScriptEngineManager.registerEngine*()
ScriptEngineManager mgr =new ScriptEngineManager();
mgr.registerEngineName(engineName,new DemoScriptEngineFactory());
![Page 20: Scripting Yor Java Application with BSF3](https://reader033.vdocuments.site/reader033/viewer/2022060110/55599c70d8b42ac7648b56dc/html5/thumbnails/20.jpg)
Demo 2
• Automatic Registration of „Demo“ Engine– Sample1.java– Call Class from Commandline
• Manual Registration of „Demo“ Engine– Sample2.java– Call Class from Commandline
![Page 21: Scripting Yor Java Application with BSF3](https://reader033.vdocuments.site/reader033/viewer/2022060110/55599c70d8b42ac7648b56dc/html5/thumbnails/21.jpg)
Interaction
• Variable Bindings– Global Scope– Engine Scope– Runtime Scope
• Return Values
![Page 22: Scripting Yor Java Application with BSF3](https://reader033.vdocuments.site/reader033/viewer/2022060110/55599c70d8b42ac7648b56dc/html5/thumbnails/22.jpg)
Demo 3
• Simple Script Executor– Sample4– Reads and executes <lang>: <script>
• Return Value From Script• Global Scope – Shared Bindings• Runtime Scope – Non-shared Bindings
![Page 23: Scripting Yor Java Application with BSF3](https://reader033.vdocuments.site/reader033/viewer/2022060110/55599c70d8b42ac7648b56dc/html5/thumbnails/23.jpg)
Contents
• Scope• BSF 3.0• Scripting for the JavaTM Platform• OSGi Framework• Demo
![Page 24: Scripting Yor Java Application with BSF3](https://reader033.vdocuments.site/reader033/viewer/2022060110/55599c70d8b42ac7648b56dc/html5/thumbnails/24.jpg)
OSGi Quick Shot
The Framework forms the core of the OSGi Service Platform Specifications. It provides a general-purpose, secure, and managed Java framework that supports the deployment of extensible and downloadable applications known as bundles.
OSGi Service Platform Core Specification, Release 4, Version 4.1, The OSGi Alliance, April 2007
![Page 25: Scripting Yor Java Application with BSF3](https://reader033.vdocuments.site/reader033/viewer/2022060110/55599c70d8b42ac7648b56dc/html5/thumbnails/25.jpg)
OSGi Layers
• Security Layer– Java 2 Security based
• Module Layer– Bundles and Classloaders
• Life Cycle Layer– Installation, Start, Stop, Uninstallation, ...
• Service Layer– Service Registry
• Actual Services
![Page 26: Scripting Yor Java Application with BSF3](https://reader033.vdocuments.site/reader033/viewer/2022060110/55599c70d8b42ac7648b56dc/html5/thumbnails/26.jpg)
Sling and Java Scripting
• Provide BSF 3.0 API (Java 5 only)• Manage ScriptEngineFactory
– Create ScriptEngineManager– Update ScriptEngineManager
• Automatic Registration– META-INF/services/j.s.ScriptEngineFactory– ScriptEngineFactory services
![Page 27: Scripting Yor Java Application with BSF3](https://reader033.vdocuments.site/reader033/viewer/2022060110/55599c70d8b42ac7648b56dc/html5/thumbnails/27.jpg)
ScriptEngine for Sling
• Create a Bundle– Export-Package: None required– Import-Package: javax.script plus required– DynamicImport-Package: *
• ClassLoader Issues– Create Bridging ClassLoader
http://wiki.eclipse.org/BundleProxyClassLoader_recipe
– Set Thread's context ClassLoader
![Page 28: Scripting Yor Java Application with BSF3](https://reader033.vdocuments.site/reader033/viewer/2022060110/55599c70d8b42ac7648b56dc/html5/thumbnails/28.jpg)
Sling, Java Scripting: Lifecycle
• Problem:– Lifecycle required for Cleanup– META-INF/services required for Interoperability
• Solution:– BundleActivator
![Page 29: Scripting Yor Java Application with BSF3](https://reader033.vdocuments.site/reader033/viewer/2022060110/55599c70d8b42ac7648b56dc/html5/thumbnails/29.jpg)
Contents
• Scope• BSF 3.0• Scripting for the JavaTM Platform• OSGi Framework• Demo
![Page 30: Scripting Yor Java Application with BSF3](https://reader033.vdocuments.site/reader033/viewer/2022060110/55599c70d8b42ac7648b56dc/html5/thumbnails/30.jpg)
How Sling finds Scripts
/content/cars/audi/s4.details.html
![Page 31: Scripting Yor Java Application with BSF3](https://reader033.vdocuments.site/reader033/viewer/2022060110/55599c70d8b42ac7648b56dc/html5/thumbnails/31.jpg)
Demo: Sleep
• http://sleep.dashnine.org/ • Perl-like• Provides ScriptEngineFactory with
automatic registration• ch.meschberger.demo.sleep
– Downloads and Bundles Sleep
![Page 32: Scripting Yor Java Application with BSF3](https://reader033.vdocuments.site/reader033/viewer/2022060110/55599c70d8b42ac7648b56dc/html5/thumbnails/32.jpg)
Demo 3
• Sling Running• Web Console shows known Engines• Show Scripts
![Page 33: Scripting Yor Java Application with BSF3](https://reader033.vdocuments.site/reader033/viewer/2022060110/55599c70d8b42ac7648b56dc/html5/thumbnails/33.jpg)
Links
• http://jakarta.apache.org/bsf/• http://www.jcp.org/en/jsr/detail?id=223 • http://incubator.apache.org/sling/ • http://felix.apache.org/ • http://scripting.dev.java.net/
![Page 34: Scripting Yor Java Application with BSF3](https://reader033.vdocuments.site/reader033/viewer/2022060110/55599c70d8b42ac7648b56dc/html5/thumbnails/34.jpg)
Questions ?
![Page 35: Scripting Yor Java Application with BSF3](https://reader033.vdocuments.site/reader033/viewer/2022060110/55599c70d8b42ac7648b56dc/html5/thumbnails/35.jpg)
Thank You !
![Page 36: Scripting Yor Java Application with BSF3](https://reader033.vdocuments.site/reader033/viewer/2022060110/55599c70d8b42ac7648b56dc/html5/thumbnails/36.jpg)
Famous Last Words
• Rate this talk at– http://apacheconus2008.crowdvine.com/talks/s
how/1348
• Join the Sling Community at– http://incubator.apache.org/sling – mailto:[email protected]