sábado, 23 de janeiro de 2010

Introdução a Java Scripting API (JSR-223)

INTRODUÇÃO

A Interface de programação de aplicações para uso de scripting está inclusa na versão 6 da linguagem Java e permite o uso de linguagens dinâmicas dentro do código Java. Sem essa API, teríamos que usar a interface nativa do Java (JNI) em código C/C++ e assim poder chamar os interpretadores das linguagens de scripting para poder rodar os códigos dessas linguagens dinâmicas e assim, enviar as variáveis a máquina virtual do Java.
A Java Scripting API facilita a integração do Java com outras linguagens dinâmicas, como python, ruby, etc. Nesse tutorial, daremos uma introdução do uso dessa API.


ARQUITETURA DA JSR-223

A API de scripting está contida no pacote javax.script e cujas classes e interfaces do pacotes são:
- ScriptEngineManager
Gerencia as fábricas de interpretadores para as linguagens dinâmicas.

- ScriptEngineFactory (Interface)
Fabrica (segundo padrão Factory) para uma linguagem de scripting específica.

- ScriptEngine (Interface)
Interpretador para uma linguagem de scripting específica.

- Bindings (Interface)
Mapeamento de vínculos entre nomes e objetos Java. Esse mapeamento permite que as linguagens de scripting consigam acessar objetos criados em Java.

- ScriptContext (Interface)
Contexto de execução de uma linguagem de scripting específica. Fornece recursos para acessar o leitor de entrada, escritor de saída e de erro.

- Invocable (Interface)
Permite a execução de funções de scripts que já foram avaliados.

EXEMPLO

Executando esse exemplo abaixo permite listar os motores de script instalados.
Para instalar um motor de script, basta colocar os pacotes ".jar" fornecidos pelas linguagens de script no CLASSPATH. No JDK 6 já vem o suporte para JavaScript através do motor Rhino.

-----------------------------------------------------------------------------------------

import javax.script.ScriptEngine;
import javax.script.ScriptEngineFactory;
import javax.script.ScriptEngineManager;


public class EnginesTest {

/**
* @param args
*/
public static void main(String[] args) {
ScriptEngineManager scriptEngineManager = new ScriptEngineManager();

for (ScriptEngineFactory scriptEngineFactory : scriptEngineManager.getEngineFactories()) {
System.out.println("EngineName: " + scriptEngineFactory.getEngineName());
System.out.println("EngineVersion: " + scriptEngineFactory.getEngineVersion());
System.out.println("LanguageName: " + scriptEngineFactory.getLanguageName());
System.out.println("LanguageVersion: " + scriptEngineFactory.getLanguageVersion());

// Extensões
StringBuffer strBuffer1 = new StringBuffer();

for (String string : scriptEngineFactory.getExtensions()) {
strBuffer1.append(string + " \n");

}

System.out.println("Extensions: \n" + strBuffer1.toString());

// Tipos de MIME'S
StringBuffer strBuffer2 = new StringBuffer();

for (String string : scriptEngineFactory.getMimeTypes()) {
strBuffer2.append(string + " \n");
}

System.out.println("Mime Types: \n" + strBuffer2.toString());

// Nomes
StringBuffer strBuffer3 = new StringBuffer();

for (String string : scriptEngineFactory.getNames()) {
strBuffer3.append(string + " \n");
}

System.out.println("Names: \n" + strBuffer3.toString());

// ScriptEngine
ScriptEngine scriptEngine = scriptEngineFactory.getScriptEngine();

System.out.println("-----------------------------");
}
}
}

--------------------------------------------------------------------------------------------

REFERÊNCIAS


http://jcp.org/en/jsr/summary?id=223
http://java.sun.com/docs/books/jni/

Nenhum comentário:

Postar um comentário