Javazone: Scripting i Java med JSR-223

Jag hörde nyligen ett föredrag om scripting i Java mha JSR-223.

Verkar ju lite tufft att kunna köra Python, Ruby, JavaScript (eller ja, kanske inte så tufft) mm då och då när det anses passande så jag har testkört lite.

Som standard, iaf i min JVM, finns bara javascript-stöd men det går fint att lägga till stöd för fler skriptspråk. För att ordna detta stöd är det lämpligt att lägga vantarna på fler skriptmotorer samt “själva skriptspråket”.

I vår labbmiljö som vi skapar nu kan vi kosta på oss att vara lite råa och skippa Maven. För att lägga till önskade skriptmotorer packar vi upp och lägger till de uppackningskatalog/scriptmotornamn/build/scriptnamn-engine.jar-filer som är av intresse till classpathen. Jag la till jruby (jruby-engine.jar) och jython (jython-engine.jar).

För att kunna skriva Python är det alltså, förutom jython-skriptmotorn, läge att installera Jython. I readme-filen för jython-skriptmotorn står det att den jython-skriptmotor jag laddade ner är byggd för Jython 2.2.1 så jag installerade den och valde “standalone jar” som sen las med i classpathen. Motsvarande gäller för Ruby där man kan ladda ner JRuby (1.3.1 i detta fall) och hitta en jruby.jar i lib-katalogen.

Så hur gör man rent praktiskt när man nu har de där motorerna i classpathen? Det är faktiskt mycket smidigt:
1. Lägg beslag på en ScriptEngineManager, exempelvis new ScriptEngineManager();
2. Fråga den där motorhanteraren om en viss skriptmotor, exempelvis engineManager.getEngineByName(“python”);
3. Använd dina nya möjligheter! Exempelvis triviala engine.eval(“print “Hello Python/Jython world!””);

Jag testkörde även ett litet testprogram som använder en ScriptContext som sätts på respektive skriptmotor och sedan anropar en metod på ett objekt som är knutet till denna ScriptContext.

Så när är det användbart med denna typ av högnivåskriptspråk? Ett typexempel skulle kunna vara att använda python/ruby/liknande till viss textfilsmanipulation eller liknande när skriptalternativet går att skriva på en tiondel av javakoden. Eller kanske råkar man behöva ett visst tredjepartbibliotek som enbart finns för ett av de skriptspråk som stöds av JVM:en. Istället för att skriva om det kan skriptstödet vara räddaren i nöden.

En viktig sak som är på sin plats att nämna avslutningsvis är att man alltså kan komma åt objekt kors och tvärs mellan Java och skriptmiljön så detta stöd tillför mycket än det skulle innebära att starta en ny fristående process (ex System.getRuntime.exec(skript)) som kör ett skript.

This entry was posted in Java, programmering and tagged , , , , , , . Bookmark the permalink.

2 Responses to Javazone: Scripting i Java med JSR-223

  1. Julia says:

    Bra inlägg. Begripligt och användbart.

  2. jonas says:

    Kul att du tycker så Julia! Som gammal Python-räv har du nu möjlighet att fortsätta med Python-kodandet även om du gått tillbaka till Java EE-världen 🙂

Leave a Reply

Your email address will not be published. Required fields are marked *