1 / 39

How Java becomes agile riding Rhino Xavier Casellato VP of engineering, Liligo

How Java becomes agile riding Rhino Xavier Casellato VP of engineering, Liligo.com. Let the ride begin !. Change request : Simon says. We need a white rectangle. The rectangle should be blue. Tuesday we want a circle but only if it rains. Why don’t we do a triangle ?.

zeno
Download Presentation

How Java becomes agile riding Rhino Xavier Casellato VP of engineering, Liligo

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. How Java becomes agile riding RhinoXavier CasellatoVP of engineering, Liligo.com

  2. Let the ride begin !

  3. Change request : Simon says We need a white rectangle The rectangle should be blue Tuesday we want a circle but only if it rains Why don’t we do a triangle ? The rectangle is blue and green every Monday The border should be yellow except if it’s sunny The circle must be green The rectangle should be blue when it’s sunny and white when it rains The rectangle must be yellow if temperature is less than 23° Didn’t we say it should be orange ? The rectangle is circle if temperature is less than 0° and it’s sunny Who decided it must be a rectangle ?

  4. Flexibility is required • Many inputs affect the final result • Many rules can be applied • Rules change often

  5. Database needs a model XML needs a DTD Home made data storage ! Are you sure it’s a solution ? None of these solutions are really flexible. Modeling flexibility

  6. Stuck !?

  7. Constraints • Application behavior must be modified quickly • Deploying compiled code is time consuming • Compiled code required IT resources

  8. Needs • Empower business decision • Reduce change requests delay • Introduce customizable business logic in application

  9. Rhino, inside the beast

  10. Rhino History • Netscape project started in 1997 • First Release in 1998 • Embedded in JVM since Java Standard Edition 1.6

  11. What is Rhino ? • Full-java API • Rhino contains • All the features of JavaScript 1.6 • A JavaScript shell for executing JavaScript scripts • A JavaScript compiler to transform JavaScript source files into Java class files • A JavaScript debugger for scripts executed with Rhino Embed and execute JavaScript codes inside a Java application

  12. General concepts • Context • stores information about the execution environment of a script. • Scope • set of JavaScript objects • Host • Host objects implement special JavaScript features like dynamic properties.

  13. How it works

  14. Basic Rhino Execution sequence // Create Context Context cx = Context.enter(); // Initialize standard objects ScriptableObject scope = cx.initStandardObjects(); // Build scope scope.put(“input”,input1); // use Script … // Exit Context cx.exit();

  15. Object x = scope.get("x", scope); if (x == Scriptable.NOT_FOUND) { System.out.println("x is not defined."); } else { System.out.println("x = " + Context.toString(x)); } Access javascript variables with java “X” variable is read from script

  16. Using javascript function in Java Object fObj = scope.get("f", scope); if (!(fObj instanceof Function)) { System.out.println("f is undefined or not a function."); } else { Object functionArgs[] = { "my arg" }; Function f = (Function)fObj; Object result = f.call(cx, scope, scope, functionArgs); String report = "f('my args') = " + Context.toString(result); System.out.println(report); } • Call expects two scriptable objects : • scope to execute the function relative to • JavaScript this object

  17. Create java object in Javascript String script = "var x =5; System.out.println(x);"; result = cx.evaluateString(scope, script, “<cmd>", 1, null); “X” variable is declared in the JavaScriptand console output is called from JavaScript. You can access to native java classes from JavaScript.

  18. Sharing java object with javascript Object wrappedOut = Context.javaToJS(System.out, scope); ScriptableObject.putProperty(scope, "out", wrappedOut); Object is wrapped as a scope element. Method calls uses reflection.

  19. Host object • Host is a java class that can be manipulated as a JavaScript prototype. • Naming pattern should be applied to the methods • Constructor • Getter and Setter • Functions

  20. Host class signature public class Counter extends ScriptableObject { public void jsConstructor(int a) { … } Javascript … var counter = new Counter(7); … Declare a constructor for Host object

  21. Host class signature public int jsGet_field() { return field; } public void jsSet_field(int value) { field = value; } Getter and setter syntax Javascript … var x =counter.field; counter.field = x; …

  22. Host class signature public int jsFunction_increment() { field++; } Host object : functions Javascript … counter.increment(); …

  23. Declare host object ScriptableObject.defineClass(scope, Counter.class); Host object definition must be declared in the scope. The line above declares the counter class a JavaScript prototype. Java class becomes a JavaScript prototype. You can refer it using as a JavaScript object.

  24. Scope types • Shared scope Use it to share object defined in a scope without modifying their values between to concurrent scope execution. • Sealed shared scope Object sealed properties can not be added/deleted to the object and the existing object properties can not be changed • Dynamic scope Allow to enclose common functions and shared objects in a multi-threaded environment.

  25. Rhino performances Execution time almost 3 times faster with compiled code Even compiled code is almost 10 times slower than java compiled code.

  26. Performances concerns • There is a huge difference between evaluated script and compiled ones. • To keep good performances you must compile your script before execution and focus the Rhino usage to the relevant code part.

  27. Rhino in action

  28. Identify use cases Identify logical components which requires adaptive behavior.  Need to have a flexible behavior Identify complex rules  Various input data and outputs Estimate execution frequency JavaScript is slower than compiled Java

  29. Embedding strategy Out-of-box integration Deep integration Script Script Host objects Java Native classes Function JAVA JAVA

  30. Storing the script Flexibility works with a correct storage support ! Don’t miss your target ! SCRIPT MUST BE EASILY MANAGEABLE

  31. Customizable function JAVA BEAN Javascript function Script Source is an attribute of the object. Script execution is a bean method.

  32. Customizable process Java bean initial state (Host) Bean Manager (Context) State change Java bean new state Host object JavaScript function

  33. Workflow definition Workflow task Host object Rhino Use case : Workflow Workflow Manager ( Context manager ) Workflow task Host object

  34. Liligo use case 1 : Categorization Package offers Script Storage rules Storage process Ski Week-ends Cruises

  35. Liligo use case 2 : Flexible processing XML HTML CSV Text file Data processing Script Data Host object

  36. A few more words • J2SE integrates a higher level of integration which allows you to decide the scripting engine you want to use. • JRuby, Jython are alternative to JavaScript and Rhino. • Helma framework embeds Rhino to provide a full JavaScript server-side framework.

  37. To learn more • www.mozilla.org/rhino/ • https://scripting.dev.java.net/ • http://java.sun.com/developer/technicalArticles/J2SE/Desktop/scripting/

  38. Conclusion Rhino is a really powerful tool. Rhino is easy to integrate especially since the J2SE1.6. Performance concerns imply to clearly identify the right embedding strategy. Properly used in your application it will convert a monolithic java application into a customizable user-oriented one !!!

  39. “ and don’t hesitate to contact me with questions or if you were interested in working in our team: xavier.casellato@liligo.com ” Any questions ?

More Related