JRuby – Java, Ruby, Eclipse e RDT – Parte IV
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
Utilizando classes Java em scripts Ruby
Agora que temos tudo instalado e funcionando vamos explorar um pouco das possibilidades do JRuby. Como mencionado anteriormente, um dos pontos interessantes do JRuby é a possibilidade de utilizar classes Java dentro de scripts Ruby. Nosso primeiro exemplo ilustra esta possibilidade. Para que seja possível a chamada de classes Java a partir do JRuby há duas alternativas descritas a seguir:
1 - Configurar o caminho das classes no Classpath ou
2 - Colocar o jar das classes a serem utilizadas na pasta lib dentro do diretório de instalação do JRuby. No nosso exemplo a pasta seria c:\jruby\lib.
Utilizaremos a primeira opção para seguir nosso exemplo. No projeto Rails criado anteriormente crie uma nova pasta com nome “java” (conforme ilustrado Erro! Fonte de referência não encontrada.), onde serão salvos nossos pacotes e classes Java.
Figura 6. Utilizando classes java
Coloque este diretório no Classpath do sistema utilizando o mesmo procedimento para configuração de variáveis citado na instalação do ambiente. Em variáveis de ambiente localize e edite a variável Classpath adicionando o caminho da pasta, que depende do workspace do eclipse que está sendo utilizado no projeto. Por exemplo, em minha máquina configurei o workspace na pasta c:\workspaces\jruby. Então o valor a ser adicionado no classpath seria c:\workspaces\jruby\teste\java. É necessário reinicializar o Eclipse após a configuração do classpath. Para maior facilidade utilizarei um pacote que eu já havia criado anteriormente e que será apenas copiado para a pasta java do projeto. Você pode criar um projeto Java para criar o pacote e a classe Pessoa e depois colar o pacote no projeto do Rails. A estrutura do pacote é mhs.unitri.javapos e possui somente a classe Pessoa conforme descrita na Listagem 2: Classe Java Pessoa: mhs.unitri.javapos.Pessoa.java.
package mhs.unitri.javapos;
public class Pessoa {
private String nome;
public Pessoa(String nome) { this.nome = nome; }
public Pessoa() { this(“”); }
public String getNome() { return nome; }
public void setNome(String nome) { this.nome = nome; }
}
Listagem 2. Classe Java Pessoa: mhs.unitri.javapos.Pessoa.java
Com a classe criada e compilada crie o arquivo Ruby de nome teste_java.rb como descrito na Listagem 3: Chamando Java no JRuby: teste_java.rb
require 'java' # instrução para utilizarmos classes java
include_class 'mhs.unitri.javapos.Pessoa' # qual classe queremos utilizar
pessoa = Pessoa.new("Fulano de Tal") # instancia um objeto ruby a partir da classe java
puts pessoa.getNome(); # imprime o nome da pessoa
Listagem 3. Chamando Java no JRuby: teste_java.rb
Certifique-se de que o cursor esteja no arquivo teste_java.rb e execute-o através da opção “Run as”>Ruby Application como mostra a Figura 7: Executando um arquivo JRuby
Figura 7. Executando um arquivo JRuby
Verifique o resultado da execução deste script no console conforme mostra Figura 8: Resultado do script teste_java.rb
Figura 8. Resultado do script teste_java.rb
Utilizando scripts Ruby em Java
Há duas maneiras de chamar scripts Ruby em códigos Java. A primeira é através da JSR 223 Scripting, uma API que possibilita a chamada de scripts pelo código Java e a troca de dados entre ambos. A JSR 223 Scripting já vem na instalação do JDK 6 e necessita de algumas configurações para rodar com o JRuby. A outra forma é utilizar o BSF (Bean Script Framework) que habilita o uso de scripts em códigos Java e já vem junto com o JRuby.
Utilizando scripts Ruby em código Java através da JSR 2.2.3
Faça o download do arquivo jsr223-engines.zip em https://scripting.dev.java.net/ através do link Documents & Files. Extraia o conteúdo deste arquivo para a pasta de instalação do JDK ou outro diretório qualquer de sua escolha e renomeie a pasta jsr223-engines para scriptengines. Em nosso exemplo após a extração a estrutura de pastas seria conforme a Figura 9: Estrutura de pastas dos scriptengines (JSR223).
Figura 9. Estrutura de pastas dos scriptengines (JSR223)
Primeiro vamos configurar o JSR 223 Scripting para trabalhar com o JRuby no Eclipse. Crie um novo projeto Java no Eclipse por exemplo com o nome teste_ruby. Crie uma nova classe, por exemplo, com o nome de TesteRuby conforme a Listagem 4: Utilizando scripts Ruby em códigos Java através da JSR 2.2.3. Adicione os seguintes jars ao projeto: c:\java\scriptengines\jruby\build\jruby-engine.jar, c:\java\scriptengines\jruby\lib\asm-2.2.3.jar e c:\java\scriptengines\jruby\lib\jruby.jar. Para adicionar os jars projeto clique com o botão direito do mouse sobre o nome do projeto. No menu popup que surgir clique em BuildPath|Configure Build Path. Na aba Libraries clique em Add External Jars. Localize e adicione cada um dos 3 arquivos citados anteriormente e clique em OK. Agora é só executar normalmente a classe Java e verificar que no console a string “Hello From JRuby” será impressa.
import javax.script.*;
public class TesteRuby {
public static void main(String[] args) throws Exception {
// cria a engine para gerenciar os scripts
ScriptEngineManager factory = new ScriptEngineManager();
// engine de qual tecnologia de script vamos utilizar
ScriptEngine engine = factory.getEngineByName("jruby");
// avalia a string de acordo com o script utilizado
try {
engine.eval("puts('Hello From JRuby!')");
} catch (ScriptException exception) {
exception.printStackTrace();
}
}
}
Listagem 4. Utilizando scripts Ruby em códigos Java através da JSR 2.2.3
Comentários sobre o código:
O pacote javax.script.* é quem permite a chamada a scripts através de código Java. Utilizamos a classe ScriptEngineManager para criar uma fábrica de objetos do tipo ScriptEngine, que nada mais é do que o tipo de script que queremos manipular (Ruby, Javascript, etc.). A linha ScriptEngine engine = factory.getEngineByName("jruby") cria o objeto para manipular um script (em nosso caso, scripts ruby). Para executar o código de um script utilizamos o método eval da classe ScriptEngine. Ou seja, a chamada engine.eval("puts('Hello From JRuby!')") avalia a string passada no parâmetro como código de script Ruby e o executa. A saída é mostrada no console do Eclipse.
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