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.

 

mhsjrubyfig06.jpg

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

 

mhsjrubyfig07.jpg

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

 

mhsjrubyfig08.jpg

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

 

mhsjrubyfig09.jpg

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

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