Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.java.programmer > #39949

JSR 223 API

From Arne Vajhøj <arne@vajhoej.dk>
Newsgroups comp.lang.java.programmer
Subject JSR 223 API
Date 2023-04-21 10:42 -0400
Organization A noiseless patient Spider
Message-ID <u1u7c0$2pjnb$1@dont-email.me> (permalink)

Show all headers | View raw


I have posted some examples of usage of JSR 223 API
(scripting engines) in comp.os.vms and I will
post them here as well just in case someone ever need
to find such examples (there is not that much
available on the net).

Required libs to run all: abcl, bsh, groovy, jacl, jruby, jython,
luaj, perlito5 and quercus (but in most practical cases
you would only need lib for one language).

Arne

import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;

public class EmbeddedScript {
     public static void test(String language, String source) throws 
ScriptException {
         System.out.println(language + ":");
         System.out.print(source);
         ScriptEngineManager sem = new ScriptEngineManager();
         ScriptEngine se = sem.getEngineByName(language);
         se.eval(source);
     }
     public static void main(String[] args) throws ScriptException {
         test("javascript", "for(i = 0; i < 3; i++) {\r\n" +
                            "    print(\"Hi from JavaScript!\")\r\n" +
                            "}\r\n");
         test("python", "for i in range(3):\r\n" +
                        "    print(\"Hi from Python!\")\r\n");
         test("ruby", "for i in 1..3 do\r\n" +
                      "    puts 'Hi from Ruby!'\r\n" +
                      "end\r\n");
         test("php", "<?php\r\n" +
                     "for($i = 0; $i < 3; $i++) {\r\n" +
                     "    echo \"Hi from PHP!\\r\\n\";\r\n" +
                     "}\r\n" +
                     "?>\r\n");
         test("groovy", "for(i in 1..3) {\r\n" +
                        "    println \"Hi from Groovy!\"\r\n" +
                        "}\r\n");
         test("beanshell", "for(int i = 0; i < 3; i++) {\r\n" +
                           "    System.out.println(\"Hi from 
BeanShell!\");\r\n"+
                           "}\r\n");
         test("perl", "for(1..3) {\r\n" +
                      "    print(\"Hi from Perl!\\n\");\r\n" +
                      "}\r\n");
         test("lua", "for i = 1,3\r\n" +
                     "do\r\n" +
                     "    print(\"Hi from Lua!\")\r\n" +
                     "end\r\n");
         test("Lisp", "(dotimes (n 3)\r\n" +
                      "    (format t \"Hi from Lisp!~%\"))\r\n");
         test("tcl", "for {set i 0} {$i < 3} {incr i} {\r\n" +
                      "    puts \"Hi from Tcl!\"\r\n" +
                      "}\r\n");
     }
}

Output:

javascript:
for(i = 0; i < 3; i++) {
     print("Hi from JavaScript!")
}
Hi from JavaScript!
Hi from JavaScript!
Hi from JavaScript!
python:
for i in range(3):
     print("Hi from Python!")
Hi from Python!
Hi from Python!
Hi from Python!
ruby:
for i in 1..3 do
     puts 'Hi from Ruby!'
end
Hi from Ruby!
Hi from Ruby!
Hi from Ruby!
php:
<?php
for($i = 0; $i < 3; $i++) {
     echo "Hi from PHP!\r\n";
}
?>
Hi from PHP!
Hi from PHP!
Hi from PHP!
groovy:
for(i in 1..3) {
     println "Hi from Groovy!"
}
Hi from Groovy!
Hi from Groovy!
Hi from Groovy!
beanshell:
for(int i = 0; i < 3; i++) {
     System.out.println("Hi from BeanShell!");
}
Hi from BeanShell!
Hi from BeanShell!
Hi from BeanShell!
perl:
for(1..3) {
     print("Hi from Perl!\n");
}
Hi from Perl!
Hi from Perl!
Hi from Perl!
lua:
for i = 1,3
do
     print("Hi from Lua!")
end
Hi from Lua!
Hi from Lua!
Hi from Lua!
Lisp:
(dotimes (n 3)
     (format t "Hi from Lisp!~%"))
Hi from Lisp!
Hi from Lisp!
Hi from Lisp!
tcl:
for {set i 0} {$i < 3} {incr i} {
     puts "Hi from Tcl!"
}
Hi from Tcl!
Hi from Tcl!
Hi from Tcl!

import javax.script.ScriptContext;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
import javax.script.SimpleScriptContext;

import org.luaj.vm2.script.LuajContext;

public class EmbeddedScript2 {
     public static class Data {
         public int iv;
         public String sv;
         public Data(int iv, String sv) {
             this.iv = iv;
             this.sv = sv;
         }
         public void m() {
             iv++;
             sv += "X";
         }
         @Override
         public String toString() {
             return String.format("(%d,%s)", iv, sv);
         }
     }
     public static void test(String language, String source) throws 
ScriptException {
         System.out.println(language + ":");
         System.out.print(source);
         ScriptEngineManager sem = new ScriptEngineManager();
         ScriptEngine se = sem.getEngineByName(language);
         ScriptContext ctx;
         switch(language) {
             case "lua":
                 ctx = new LuajContext(); // LuaJ insist on getting a 
LuajContext which is actually a sub class of SimpleScriptContext
                 break;
             default:
                 ctx = new SimpleScriptContext();
                 break;
         }
         ctx.setAttribute("n", 3, ScriptContext.ENGINE_SCOPE);
         ctx.setAttribute("o", new Data(123, "ABC"), 
ScriptContext.ENGINE_SCOPE);
         se.eval(source, ctx);
         Data o = (Data)ctx.getAttribute("o");
         System.out.println(o);
     }
     public static void main(String[] args) throws ScriptException {
         test("javascript", "for(i = 0; i < n; i++) {\r\n" +
                            "    print(\"Hi from JavaScript!\")\r\n" +
                            "}\r\n" +
                            "o.iv = o.iv + 1;\r\n" +
                            "o.sv = o.sv + \"X\";\r\n" +
                            "o.m();\r\n");
         test("python", "for i in range(n):\r\n" +
                        "    print(\"Hi from Python!\")\r\n" +
                        "o.iv = o.iv + 1\r\n" +
                        "o.sv = o.sv + 'X'\r\n" +
                        "o.m()\r\n");
         test("ruby", "for i in 1..n do\r\n" +
                      "    puts 'Hi from Ruby!'\r\n" +
                      "end\r\n" +
                      "o.iv = o.iv + 1\r\n" +
                      "o.sv = o.sv + 'X'\r\n" +
                      "o.m()\r\n");
         test("php", "<?php\r\n" +
                     "for($i = 0; $i < $n; $i++) {\r\n" +
                     "    echo \"Hi from PHP!\\r\\n\";\r\n" +
                     "}\r\n" +
                     "$o->iv = $o->iv + 1;\r\n" +
                     "$o->sv = $o->sv . 'X';\r\n" +
                     "$o->m();\r\n" +
                     "?>\r\n");
         test("groovy", "for(i in 1..n) {\r\n" +
                        "    println \"Hi from Groovy!\"\r\n" +
                        "}\r\n" +
                        "o.iv = o.iv + 1\r\n" +
                        "o.sv = o.sv + \"X\"\r\n" +
                        "o.m()\r\n");
         test("beanshell", "for(int i = 0; i < n; i++) {\r\n" +
                           "    System.out.println(\"Hi from 
BeanShell!\");\r\n"+
                           "}\r\n" +
                           "o.iv = o.iv + 1;\r\n" +
                           "o.sv = o.sv + \"X\";\r\n" +
                           "o.m();\r\n");
         // I cannot get perlito5 to work with context
         test("lua", "for i = 1,n\r\n" +
                     "do\r\n" +
                     "    print(\"Hi from Lua!\")\r\n" +
                     "end\r\n" +
                     "o.iv = o.iv + 1\r\n" +
                     "o.sv = o.sv .. \"X\"\r\n" +
                     "o:m()\r\n");
         test("Lisp", "(dotimes (n n)\r\n" +
                      "    (format t \"Hi from Lisp!~%\"))\r\n" +
                      "(setf (jfield \"iv\" o) (+ (jfield \"iv\" o) 
1))\r\n" +
                      "(setf (jfield \"sv\" o) (concatenate 'string 
(jfield \"sv\" o) \"X\"))\r\n" +
                      "(jcall \"m\" o)\r\n");
         // I cannot get jacl to work with context
     }
}

Output:

javascript:
for(i = 0; i < n; i++) {
     print("Hi from JavaScript!")
}
o.iv = o.iv + 1;
o.sv = o.sv + "X";
o.m();
Hi from JavaScript!
Hi from JavaScript!
Hi from JavaScript!
(125,ABCXX)
python:
for i in range(n):
     print("Hi from Python!")
o.iv = o.iv + 1
o.sv = o.sv + 'X'
o.m()
Hi from Python!
Hi from Python!
Hi from Python!
(125,ABCXX)
ruby:
for i in 1..n do
     puts 'Hi from Ruby!'
end
o.iv = o.iv + 1
o.sv = o.sv + 'X'
o.m()
Hi from Ruby!
Hi from Ruby!
Hi from Ruby!
(125,ABCXX)
php:
<?php
for($i = 0; $i < $n; $i++) {
     echo "Hi from PHP!\r\n";
}
$o->iv = $o->iv + 1;
$o->sv = $o->sv . 'X';
$o->m();
?>
Hi from PHP!
Hi from PHP!
Hi from PHP!
(125,ABCXX)
groovy:
for(i in 1..n) {
     println "Hi from Groovy!"
}
o.iv = o.iv + 1
o.sv = o.sv + "X"
o.m()
Hi from Groovy!
Hi from Groovy!
Hi from Groovy!
(125,ABCXX)
beanshell:
for(int i = 0; i < n; i++) {
     System.out.println("Hi from BeanShell!");
}
o.iv = o.iv + 1;
o.sv = o.sv + "X";
o.m();
Hi from BeanShell!
Hi from BeanShell!
Hi from BeanShell!
(125,ABCXX)
lua:
for i = 1,n
do
     print("Hi from Lua!")
end
o.iv = o.iv + 1
o.sv = o.sv .. "X"
o:m()
Hi from Lua!
Hi from Lua!
Hi from Lua!
(125,ABCXX)
Lisp:
(dotimes (n n)
     (format t "Hi from Lisp!~%"))
(setf (jfield "iv" o) (+ (jfield "iv" o) 1))
(setf (jfield "sv" o) (concatenate 'string (jfield "sv" o) "X"))
(jcall "m" o)
Hi from Lisp!
Hi from Lisp!
Hi from Lisp!
(125,ABCXX)

Back to comp.lang.java.programmer | Previous | Next | Find similar | Unroll thread


Thread

JSR 223 API Arne Vajhøj <arne@vajhoej.dk> - 2023-04-21 10:42 -0400

csiph-web