{"id":1728,"date":"2009-09-10T13:28:31","date_gmt":"2009-09-10T12:28:31","guid":{"rendered":"http:\/\/webbservern.se\/~jonas\/wordpress\/?p=1728"},"modified":"2009-09-10T13:28:31","modified_gmt":"2009-09-10T12:28:31","slug":"javazone-scripting-i-java-med-jsr-223","status":"publish","type":"post","link":"https:\/\/webbservern.se\/~jonas\/wordpress\/?p=1728","title":{"rendered":"Javazone: Scripting i Java med JSR-223"},"content":{"rendered":"<p>Jag h\u00f6rde nyligen ett f\u00f6redrag om scripting i Java mha <a href=\"http:\/\/www.jcp.org\/en\/jsr\/detail?id=223\">JSR-223<\/a>.<\/p>\n<p>Verkar ju lite tufft att kunna k\u00f6ra Python, Ruby, JavaScript (eller ja, kanske inte s\u00e5 tufft) mm d\u00e5 och d\u00e5 n\u00e4r det anses passande s\u00e5 jag har testk\u00f6rt lite.<\/p>\n<p>Som standard, iaf i min JVM, finns bara javascript-st\u00f6d men det g\u00e5r fint att l\u00e4gga till st\u00f6d f\u00f6r fler skriptspr\u00e5k. F\u00f6r att ordna detta st\u00f6d \u00e4r det l\u00e4mpligt att l\u00e4gga vantarna p\u00e5 <a href=\"https:\/\/scripting.dev.java.net\/files\/documents\/4957\/37592\/jsr223-engines.tar.gz\">fler skriptmotorer<\/a> samt &#8220;sj\u00e4lva skriptspr\u00e5ket&#8221;.<\/p>\n<p>I v\u00e5r labbmilj\u00f6 som vi skapar nu kan vi kosta p\u00e5 oss att vara lite r\u00e5a och skippa Maven. F\u00f6r att l\u00e4gga till \u00f6nskade skriptmotorer packar vi upp och l\u00e4gger till de uppackningskatalog\/scriptmotornamn\/build\/scriptnamn-engine.jar-filer som \u00e4r av intresse till classpathen. Jag la till jruby (jruby-engine.jar) och jython (jython-engine.jar).<\/p>\n<p>F\u00f6r att kunna skriva Python \u00e4r det allts\u00e5, f\u00f6rutom jython-skriptmotorn, l\u00e4ge att installera Jython. I readme-filen f\u00f6r jython-skriptmotorn st\u00e5r det att den jython-skriptmotor jag laddade ner \u00e4r byggd f\u00f6r <a href=\"http:\/\/downloads.sourceforge.net\/project\/jython\/jython\/2.2.1\/jython_installer-2.2.1.jar?use_mirror=sunet\">Jython 2.2.1<\/a> s\u00e5 jag installerade den och valde &#8220;standalone jar&#8221; som sen las med i classpathen. Motsvarande g\u00e4ller f\u00f6r Ruby d\u00e4r man kan <a href=\"http:\/\/dist.codehaus.org\/jruby\/1.3.1\/jruby-bin-1.3.1.tar.gz\">ladda ner JRuby (1.3.1 i detta fall)<\/a> och hitta en jruby.jar i lib-katalogen.<\/p>\n<p>S\u00e5 hur g\u00f6r man rent praktiskt n\u00e4r man nu har de d\u00e4r motorerna i classpathen? Det \u00e4r faktiskt mycket smidigt:<br \/>\n1. L\u00e4gg beslag p\u00e5 en ScriptEngineManager, exempelvis <em>new ScriptEngineManager();<\/em><br \/>\n2. Fr\u00e5ga den d\u00e4r motorhanteraren om en viss skriptmotor, exempelvis <em>engineManager.getEngineByName(&#8220;python&#8221;);<\/em><br \/>\n3. Anv\u00e4nd dina nya m\u00f6jligheter! Exempelvis triviala <em>engine.eval(&#8220;print &#8220;Hello Python\/Jython world!&#8221;&#8221;);<\/em><\/p>\n<p>Jag testk\u00f6rde \u00e4ven ett litet testprogram som anv\u00e4nder en ScriptContext som s\u00e4tts p\u00e5 respektive skriptmotor och sedan anropar en metod p\u00e5 ett objekt som \u00e4r knutet till denna ScriptContext.<\/p>\n<p>S\u00e5 n\u00e4r \u00e4r det anv\u00e4ndbart med denna typ av h\u00f6gniv\u00e5skriptspr\u00e5k? Ett typexempel skulle kunna vara att anv\u00e4nda python\/ruby\/liknande till viss textfilsmanipulation eller liknande n\u00e4r skriptalternativet g\u00e5r att skriva p\u00e5 en tiondel av javakoden. Eller kanske r\u00e5kar man beh\u00f6va ett visst tredjepartbibliotek som enbart finns f\u00f6r ett av de skriptspr\u00e5k som st\u00f6ds av JVM:en. Ist\u00e4llet f\u00f6r att skriva om det kan skriptst\u00f6det vara r\u00e4ddaren i n\u00f6den.<\/p>\n<p>En viktig sak som \u00e4r p\u00e5 sin plats att n\u00e4mna avslutningsvis \u00e4r att man allts\u00e5 kan komma \u00e5t objekt kors och tv\u00e4rs mellan Java och skriptmilj\u00f6n s\u00e5 detta st\u00f6d tillf\u00f6r mycket \u00e4n det skulle inneb\u00e4ra att starta en ny frist\u00e5ende process (ex System.getRuntime.exec(skript)) som k\u00f6r ett skript.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Jag h\u00f6rde nyligen ett f\u00f6redrag om scripting i Java mha JSR-223. Verkar ju lite tufft att kunna k\u00f6ra Python, Ruby, JavaScript (eller ja, kanske inte s\u00e5 tufft) mm d\u00e5 och d\u00e5 n\u00e4r det anses passande s\u00e5 jag har testk\u00f6rt lite. &hellip; <a href=\"https:\/\/webbservern.se\/~jonas\/wordpress\/?p=1728\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[39,26],"tags":[281,283,284,289,463,485,507],"class_list":["post-1728","post","type-post","status-publish","format-standard","hentry","category-java","category-programmering","tag-javazone","tag-jruby","tag-jsr-223","tag-jython","tag-python","tag-ruby","tag-scripting"],"_links":{"self":[{"href":"https:\/\/webbservern.se\/~jonas\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/1728","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/webbservern.se\/~jonas\/wordpress\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/webbservern.se\/~jonas\/wordpress\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/webbservern.se\/~jonas\/wordpress\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/webbservern.se\/~jonas\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1728"}],"version-history":[{"count":0,"href":"https:\/\/webbservern.se\/~jonas\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/1728\/revisions"}],"wp:attachment":[{"href":"https:\/\/webbservern.se\/~jonas\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1728"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/webbservern.se\/~jonas\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1728"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/webbservern.se\/~jonas\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1728"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}