quinta-feira, 25 de setembro de 2008

Uso de JRuby em Java

Tecnologias de Integração Java-JRuby

A integração com Java 6 pode ser feita pelo uso:
  1. da API JSR223 (https://scripting.dev.java.net/)
  2. do Bean Scripting Framework (BSF) -- não tratado neste artigo

Integração pela API JSR223

As versões 1.1rc3 e 1.1.x do JRuby sobre Java 6 devem utilizar alguma máquina JRuby. A instalação envolve:
  1. Baixar o jruby-engine-1.1.5.zip (última versão da máquina)
  2. Descompactar em algum diretório (ex.: ~/lib/jsr223/jruby-engine-1.1.5)
  3. Incluir o ~/lib/jsr223/jruby-engine-1.1.5/lib/jruby-engine.jar na rota de busca do ambiente Java
  4. Copiar o jruby.jar para o diretório ~/lib/jsr223/jruby-engine-1.1.5/lib
  5. Incluir este jruby.jar na rota de busca do ambiente Java

Lista de Máquinas Instaladas

static ScriptEngine obter() {
        // http://java.sun.com/developer/technicalArticles/J2SE/Desktop/scripting/
        String nome = "ECMAScript";
        nome = "ruby";
        ScriptEngine engine = null;
        ScriptEngineManager mgr = new ScriptEngineManager();
        List scriptFactories = mgr.getEngineFactories();
        for (ScriptEngineFactory factory : scriptFactories) {
            String langName = factory.getLanguageName();
            String langVersion = factory.getLanguageVersion();
            if (langName.equals(nome) && langVersion.equals("1.8.6")) {
                engine = factory.getScriptEngine();
                break;
            }
        }
        return engine;
    }


Execução de Código Ruby

static void executarCodigoRuby(ScriptEngine rubyEngine) {
        try {
            rubyEngine.eval("puts 2 + 3");
        } catch (ScriptException e) {
            e.printStackTrace();
        }
    }


Troca de Dados entre Java e JRuby

static void acessarContexto(ScriptEngine rubyEngine) {
        ScriptContext context = rubyEngine.getContext();
        context.setAttribute("label", new Integer(4), ScriptContext.ENGINE_SCOPE);
        try {
            rubyEngine.eval("puts 2 + $label", context);
        } catch (ScriptException e) {
            e.printStackTrace();
        }
    }


Referências
  • https://scripting.dev.java.net/
  • http://wiki.jruby.org/wiki/Java_Integration

Nenhum comentário: