JRuby – Java, Ruby, Eclipse e RDT – Parte V

 

Instalação e configuração de um ambiente e os primeiros passos para desenvolvimento com JRuby

 

Marcelo Henrique da Silva e Marcos Alberto Lopes da Silva

 

Executando scripts em um arquivo Ruby dentro do código Java através da JSR 2.2.3

Utilizaremos o código da Listagem 5: Chamando arquivos de script Ruby no código Java: TesteRuby2.java, para mostrar como chamar um arquivo Ruby.

 

import javax.script.*;

import java.io.*;

 

public class TesteRuby2 {

 

public void testeScriptArquivo()

{

ScriptEngineManager engineMgr = new ScriptEngineManager();

ScriptEngine engine = engineMgr.getEngineByName("jruby");

InputStream is =

this.getClass().getResourceAsStream("/ruby_arquivo.rb");

try {

Reader reader = new InputStreamReader(is);

engine.eval(reader);

} catch (ScriptException ex) {

ex.printStackTrace();

}

}

public static void main(String args[])

{

TesteRuby2 tr2 = new TesteRuby2();

tr2.testeScriptArquivo();

}

}

Listagem 5. Chamando arquivos de script Ruby no código Java: TesteRuby2.java

 

As linhas InputStream is = this.getClass().getResourceAsStream("/ruby_arquivo.rb") e Reader reader = new InputStreamReader(is) criam um Reader do arquivo de script a ser executado. Este objeto Reader é passado como parâmetro para o método eval da classe ScriptEngine. O procedimento é semelhante ao da Listagem 4: Utilizando scripts Ruby em códigos Java através da JSR 2.2.3, a única diferença é que neste caso o parâmetro passado no método eval não é uma string contendo o script a ser executado, mas sim um arquivo (objeto Reader) a ser lido e executado. Não entrarei em detalhes aqui, mas há várias possibilidades ao utilizar arquivos desta forma. Por exemplo, podemos chamar funções definidas nos arquivos de scripts.

 

Utilizando scripts Ruby em código Java através do Bean Scripting Framework (BSF)

A segunda forma de chamar scripts Ruby dentro de código Java é através do BSF. Para utilizá-lo basta inserir o jar bsf.jar, que se encontra dentro da pasta lib da instalação do JRuby (em nosso exemplo c:\jruby\lib), no projeto.

 

A Listagem 6: Bean Scripting Framework: TesteBSF.java, ilustra a utilização do BSF.

 

import org.apache.bsf.*;

 

public class TesteBSF {

public static void main(String[] args) throws Exception {

 

// cria um gerenciador de script.

BSFManager bsfmanager=new BSFManager();

 

// Avalia o script

try {

bsfmanager.eval("jruby","Teste",0,0,"puts('Hello BSF!')");

} catch (BSFException exception) {

exception.printStackTrace();

}

}

}

Listagem 6. Bean Scripting Framework: TesteBSF.java

 

Para utilizar o BSF é necessário importar o pacote org.apache.bsf.*. Feito isso, cria-se um objeto para gerenciar os scripts como identificado na linha BSFManager bsfmanager=new BSFManager(). A linha bsfmanager.eval("jruby","Teste",0,0,"puts('Hello BSF!')") avalia e executa o script. Note que a utilização do BSF é semelhante à utilização da JSR.

Os parâmetros do método eval acima são:

 

Jruby: Script que estamos manipulando;

Teste: Nome do arquivo de script que estamos manipulando (neste caso é indiferente pois não estamos utilizando um arquivo mas sim um script).

0: Número da linha em que eventual erro de script pode ocorrer.

0: Número da coluna em que eventual erro de script pode ocorrer.

Puts(Hello BSF!’): Script a ser avaliado e executado.

 

É isso. Até este ponto contemplamos várias funcionalidades e possibilidades do JRuby. Instalamos, configuramos e utilizamos o ambiente para desenvolvimento desde os recursos básicos até a IDE Eclipse com RDT. Contemplamos a utilização do Rails além de exemplos de utilização de scripts Ruby utilizando código Java. Vimos também a utilização de scripts Ruby em código Java de duas formas diferentes e também as configurações necessárias para tal funcionamento. Sendo assim foi possível ter uma visão geral dos recursos do JRuby bem como de suas potencialidades.

 

Conclusão

Muita gente ainda não se despertou para as possibilidades que podem surgir com a junção destas duas ferramentas extremamente poderosas e flexíveis. Talvez pelo fato de acharem que ambas são mutuamente exclusivas e que uma surge para substituir a outra. Há certo tempo atrás isto até poderia ser verdade, mas a tendência hoje é de que as não só Java e ruby, mas as tecnologias em geral se complementem e sejam facilmente interligadas. Assim é possível utilizar recursos de várias tecnologias diferentes para facilitar a resolução de problemas.

 

Apesar de apresentar problemas relacionados a tempo de execução, JRuby é uma ferramenta muito promissora por unir os inúmeros recursos e estabilidade do Java com a versatilidade e poder do Ruby. Com isso, os desenvolvedores ganham mais alternativas, flexibilidade, poder, produtividade e diversão!

 

Links

http://java.sun.com/

Java

http://www.ruby-lang.org/en/downloads/

Ruby – Linguagem Ruby

http://www.eustaquiorangel.com/files

Tutorial de Ruby – Tutorial sobre a linguagem Ruby

http://kb.reflectivesurface.com/br/tutoriais/railsDiversaoLucro/

Rails para sua Diversão e Lucro – Tutorial sobre Ruby on Rails

http://hacketyhack.net/

Hackety Hack – Kit para aprendizagem de Ruby para quem nunca programou

http://sitekreator.com/satishtalim/java_to_ruby.html

Java to Ruby - Comparativo entre Java e Ruby

http://jruby.codehaus.org/

JRuby – Site oficial

http://dist.codehaus.org/jruby/

JRuby – Arquivos para download

http://java.sun.com/developer/technicalArticles/scripting/jruby/

JRuby and the Java Platform – Artigo sobre JRuby

http://www.martinfowler.com/articles/rake.html

Using the Rake Build Language – Artigo sobre Rake

http://www.eclipse.org/downloads/

Eclipse – Site oficial da IDE Eclipse

http://rubyeclipse.sourceforge.net/

Plugin Ruby Development Tools - Plugin RDT para Eclipse

http://www-128.ibm.com/developerworks/opensource/library/os-rubyeclipse/

Using the Ruby Development Tools plug-in for Eclipse - Configuração do RDT no Eclipse

http://www.napcs.com/howto/railsonwindows.html

Setting up a Rails Development Environment on Windows Using Eclipse - Configuração do RDT no Eclipse

https://scripting.dev.java.net/

Scripting - JSR Scripting

 

Leia também