sábado, 30 de enero de 2010

Java 6: Conexión con los lenguajes de Script.

Si desea ver una imagen en tamaño completo haga click en ella.

   Con la versión más reciente de Java (J2SE 6) se hace posible combinar secciones de código Java con lenguajes de Script como JavaScript, PHP, Ruby y Phyton entre otros. Esto gracias al nuevo paquete javax.script.
   En nuestros ejemplos ejecutaremos ejemplos sólo combinando hasta ahora JavaScript y Java.

   Para comenzar lo más importante es saber que se debe crear una instancia de ScriptEngineManager que me permitirá retornar un objeto ScriptEngine especificando el lenguaje con el que haré la conexión veamos esto con código:



Como se puede ver, además de crear los objetos explicados anteriormente se utilizó el método eval de ScriptEngine para evaluar el código Script (lanza ScriptException), en este caso obtendríamos por consola, la frase: Hola Mundo, que se ha impreso desde código JavaScript combinado con Java.

Nota: También podríamos enlazar con JavaScript con el método getEngineByExtension de ScriptEngineManager de la siguiente manera: factory.getEngineByExtension(“js”);

Claro, este es el ejemplo más sencillo, veamos qué otras opciones tenemos.
Supongamos que tenemos un procedimiento que queremos invocar en varias ocasiones, no es necesario colocar todo el código de nuevo, podemos hacer una función JavaScript mediante el método eval y luego castear el objeto ScriptEngine en Invocable, para llamar a la función creada en el momento que lo deseemos.



Salide del Ejemplo:
Hola, como estas?
Saludando de nuevo...
Hola, como estas?
Se invocó la función dos veces.

También podemos acceder a objetos de java desde nuestro código Script, para ello se utilizan los objetos Binding que son un mapa (Map) de pares clave-valor con clave String y valores Object (Map), con esto puedo crear objetos y asignarlos a un String y mediante el código de Script realizar las operaciones que desee. Veamos el ejemplo:



Salida del ejemplo anterior:

Ambiente Script...
Java
C++
Phyton
Ambiente Java...
Java
C++
Phyton
Ruby

Aunque también puedo pasarle parámetros reales en la invocación del método en invokeFunction() de la interface Invocable, veamos:



Salida del ejemplo anterior:
Primera Impresion...
Java
C++
Segunda Impresion...
Java
C++
Ruby

Para terminar también es bueno saber que puedo utilizar objetos y métodos de java dentro de los scripts, para ello debo importar el paquete que desee y utilizarlo dentro del script, veamos ejemplo:



Salida del ejemplo anterior, por consola un número aleatorio del 0 al 1.

Para descargar un ejemplo completo de Scripting Java 6 haga click Aquí

2 comentarios:

Anónimo dijo...

Excelente aportación.
Gracias...

Anónimo dijo...

Muy interesante amigo.
Vamos a buscarle utilidad a esto.