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
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
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
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