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";
}
iv = $o->iv + 1;
sv = $o->sv . 'X';
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)
--- SoupGate-Win32 v1.05
* Origin: fsxNet Usenet Gateway (21:1/5)