En este primer ejemplo vamos a mostrar los motores disponibles y sus múltiples nombres, es decir, los nombres con los que podemos obtener ese motor.
import java.util.List;
import javax.script.Invocable;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineFactory;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
public class SimpleTest{
public static void main(String[] args) throws ScriptException{
ScriptEngineManager manager = new ScriptEngineManager();
Listfactories = manager.getEngineFactories();
for(ScriptEngineFactory sef : factories){
System.out.println(sef.getNames());
}
}
}
En este segundo ejemplo ejecutamos un script que muestra un saludo y seguidamente evaluamos una función para ser llamada posteriormente pasandole un parámetro.
ScriptEngine js = manager.getEngineByName("js");
js.eval("println('Hola Mundo !');");
js.eval("function holaMundo(msg){" +
" println('Hola Mundo desde funcion: ' + msg);" +
"}");
Invocable invocable = (Invocable)js;
invocable.invokeFunction("holaMundo", "¡parametro desde Java!");
El casting a Invocable es necesario porque es una interface opcional. Normalmente se debería consultar su disponibilidad con el operador instanceof.
La llamada a funciones no solo puede recibir argumentos sino que también podemos recoger sus valores de retorno tal como se muestra a continuación:
js.eval("function suma(a,b){" +
" return a+b;" +
"}");
Invocable invocable = (Invocable) js;
double total = (Double)invocable.invokeFunction("suma", 2,3);
System.out.println(total);
Los objetos Java de nuestra aplicación pueden ser puestos a disposición de los scripts tanto para su uso como modificación:
Point punto = new Point(2,3);
js.put("punto",punto);
js.eval("println(punto);");
js.eval("println('X: ' + punto.x + ' Y: ' + punto.getY());");
js.eval("punto.setLocation(5,6)");
System.out.println(punto.toString());
En este último ejemplo comprobamos el uso de otro tipo de objetos, en este caso colecciones:
Listides = Arrays.asList("Eclipse","Netbeans","IntelliJIdea",
"JDeveloper");
js.put("ides",ides);
js.eval("println(ides);");
js.eval("var i;" +
"var idesArray = ides.toArray();" +
"for(i in idesArray) {" +
" println(idesArray[i]);" + "}");
1 comentario:
Interesante el tema y Buen BLOGs ..! aqui les comparto un par más ...
Saludos
http://viviendoconjavaynomoririntentandolo.blogspot.com
http://frameworksjava2008.blogspot.com
Publicar un comentario