Misturando aplicações Ruby e Java
Contribuição de Tor Norbye e manutenção de Beth Stearns
Dezembro de 2007 [Número da versão: V6.0-1]
Este artigo mostra como combinar aplicações Ruby e Java usando o NetBeans IDE.
Conteúdo
Requisitos do artigo
Este artigo mostra como combinar aplicações Java com aplicações Ruby. Ao longo do caminho, ele demonstra alguns dos recursos mais recentes do Ruby no NetBeans IDE 6.0.
Este artigo requer o seguinte:
- Um conhecimento básico de programação com as tecnologias Ruby
- NetBeans IDE 6.0 com Ruby (download) em seu computador
Instruções de configuração
Existem várias tarefas de configuração, principalmente chamar a configuração do banco de dados e incluir arquivos JAR TopLink. Eis aqui como adicionar os dados de moeda obrigatórios a uma tabela de banco de dados. Quando configurar o projeto Rails, você adicionará os arquivos JAR TopLink necessários.
Você precisa configurar o banco de dados da seguinte forma:
- Crie uma tabela chamada CURRENCY.
- Crie três colunas string (ou VARCHAR) na tabela CURRENCY: Country, Currency e Name.
- Preencha a tabela com alguns dados. Por exemplo, talvez você queira adicionar estas três moedas mais algumas outras: "USA", "Dollar", "USD"; "Czech Republic", "Koruna", "CZK"; "Norway", "Krone", "NOK".
Você também deve configurar o NetBeans para que ele possa acessar a tabela de banco de dados. Ou seja, se necessário, configure um driver JDBC para o banco de dados e adicione uma fonte de dados na janela Serviços.
Por exemplo, o SQL seguinte cria uma tabela CURRENCY em um banco de dados Derby chamado SAMPLE (com uma combinação de nome de usuário e senha APP/APP). Se quiser usar o mesmo banco de dados SAMPLE, você pode executar esse SQL a partir do IDE (depois de conectar-se ao banco de dados SAMPLE) e criar a tabela. Fique a vontade para criar seu próprio banco de dados Derby, também, usando a ação Ferramentas->Banco de dados Java DB->Criar banco de dados. O SQL para criar a mesma tabela em um sistema de banco de dados diferente pode ser diferente deste exemplo.
drop table "APP"."CURRENCY";
create table "APP"."CURRENCY" (
country VARCHAR(20), currency VARCHAR(20), name VARCHAR (20),
id INTEGER GENERATED always AS IDENTITY);
alter table CURRENCY add constraint currencyPK PRIMARY KEY (id);
INSERT INTO CURRENCY VALUES ('USA', 'Dollar', 'USD',DEFAULT);
INSERT INTO CURRENCY VALUES ('Czech Republic', 'Koruna', 'CZK',DEFAULT);
INSERT INTO CURRENCY VALUES ('Norway', 'Krone', 'NOK',DEFAULT);
INSERT INTO CURRENCY VALUES ('France', 'Euro', 'EU',DEFAULT);
Criar o projeto Java
Depois de concluir as etapas de configuração, você pode criar seu projeto. Comece criando uma aplicação de área de trabalho Java, que é realmente uma aplicação Swing, e escolha a opção para a vinculação de banco de dados. O assistente orienta você nas etapas para conectar o projeto, que podemos chamar de Money, à fonte de dados, que em nosso caso é a tabela CURRENCY no banco de dados de amostra Derby. Com alguns cliques você tem uma aplicação CRUD de banco de dados totalmente funcional.
Figura 1: Criar uma aplicação de banco de dados de área de trabalho chamada Money

Clique para ampliar
Execute a aplicação Money (clique com o botão direito do mouse no projeto e selecione Executar) e você deve ver uma tela parecida com a seguinte. (Use Ctrl+Q para sair da aplicação.)
Figura 3: Aplicação Money
Editar o projeto Java
Comece examinando as classes Java geradas; em particular, a classe Currency.java. Aqui há algumas dicas para visualizar as partes do projeto.
Na janela Projetos, expanda o nó Pacotes de origem->money do projeto e clique duas vezes em Currency.java para abrir o arquivo no editor de código-fonte. A janela Editor exibe a classe inteira e seu código.
Membros da classe
Pressione Ctrl+F12 para ver uma lista dos membros da classe Currency. Use a caixa de diálogo Membros para mover-se rapidamente dentro da classe.
Figura 4: Membros da classe Currency.java
Por exemplo, para ver a definição da classe, indique Cur no campo Filtro.
Figura 5: Definição da classe Currency

Observação: verifique se o código Currency.java gerado declara corretamente o campo do identificador ID. Talvez você tenha que adicionar uma linha ao arquivo Java que indica que o identificador está gerado e é único. O código correto do campo do identificador está a seguir. Observe também que adicionar a linha do tipo de geração (@GeneratedValue (strategy=GenerationType.IDENTITY)) provavelmente resultará em um erro de importações ausentes e a linha será sublinhada em vermelho. Você pode corrigir isso facilmente, clicando no erro e pressionando Alt+Enter.
@Id
@GeneratedValue (strategy=GenerationType.IDENTITY)
@Column(name = "ID", nullable = false)
private Integer id;
Lista de tarefas
O IDE mantém automaticamente uma lista de tarefas mostrando erros de compilação, avisos, etc. Você pode abrir e visualizar a Lista de tarefas a qualquer momento, pressionando Ctrl+6.
Figura 6: Lista de tarefas
Examine o código-fonte de Currency. Observe que ele contém anotações de API de persistência Java. Essas anotações indicam a vinculação às colunas do banco de dados e são marcadas com um sinal (@). Por exemplo, as vinculações às colunas do banco de dados são marcadas com @Column, seguidas por um nome de coluna e a variável Java, tal como: @Column(name="COUNTRY") private String country;
Crie uma classe Java para acessar as colunas do banco de dados
Você precisa criar uma nova classe Java, que pode chamar de CurrencyLookup, que acessa essas entidades de persistência Java, as colunas de banco de dados. Em seguida, sua aplicação Rails chama essa classe CurrencyLookup para obter a lista de moedas do banco de dados. Os recursos de modelo e auto-completar de código do editor de código-fonte do IDE ajudam você nessa tarefa.
Na classe CurrencyLookup, escreva um método getAll para executar a lista de moedas. O método concluído se parecerá com o seguinte. Observe que a unidade de persistência, samplePU, corresponde ao nome do banco de dados SAMPLE que usamos; sua unidade de persistência pode ser diferente.
public List<Currency> getAll() {
EntityManager em = Persistence.createEntityManagerFactory("samplePU").createEntityManager();
Query query = em.createQuery("select c from Currency c");
return query.getResultList();
};
- Clique com o botão direito do mouse no nó money em Pacotes de origem e selecione Novo->Classe Java.
- Indique CurrencyLookup para o campo Nome da classe na caixa de diálogo Nova classe Java. (Verifique se a caixa de diálogo indica que a localização é Pacotes de origem e o nome do pacote é money. Caso contrário, defina esses campos de acordo.) O IDE cria uma classe CurrencyLookup.java e a coloca no nó Pacotes de origem->money.
- Escreva o método para retornar uma lista de todas as moedas. As funções do IDE (tais como auto-completar de código, corrigir importações, etc.) podem ajudá-lo. Comece digitando pu (para public)em algum lugar na classe CurrencyLookup, em seguida, pressione Ctrl+Espaço. Observe que o IDE completa o texto para você. (Observe que as combinações de tecla de atalho mostradas aqui são para uma plataforma Windows e podem ser diferentes em outras plataformas. Você deve consultar a Ajuda->arquivo de atalhos de teclado para saber a combinação de teclas exata para o seu ambiente.)
Figura 7: Auto-completar de código
- Digite List<Cu, seguido pela combinação de teclas Ctrl+K para completar o nome da classe Currency. O IDE completa o nome como CurrencyLookup, exclua Lookup.
Figura 8: Conclusão do nome da classe
- Continue a indicar o nome do método e o resto do código do método.
Mais dicas de edição do código-fonte
Eis aqui algumas outras dicas de edição de código-fonte:
- Use a função Corrigir importações do menu de contexto da janela Editor para importar quaisquer classes ausentes.
- Pressione Alt+Enter para ver uma dica sobre os componentes ausentes de um método.
- Ao editar o corpo do método, pressionar Return insere a chave direita correspondente (}).
- Você pode substituir uma palavra rapidamente, colocando o cursor nessa palavra, em seguida, pressionando Ctrl+R e indicando o novo texto.
Quando você completa a classe de consulta CurrencyLookup, pode testá-la, se quiser. Use a função Ferramentas->Criar teste JUnit, ou use a combinação de teclas de atalho Ctrl+Shift+U. Isso gera uma classe de esqueleto CurrencyLookupTest. Você pode excluir o código fictício e adicionar uma linha assertFalse para teste. Por exemplo, talvez você queira adicionar a linha seguinte para testar se uma linha de dados retornada do banco de dados não está vazia: assertFalse("contains data", new CurrencyLookup().getAll().isEmpty());. Em seguida, use Shift+F6 para executar o teste.
Escrever a aplicação Rails
Agora, crie a aplicação Rails que acessará o código Java na aplicação Money. Você primeiro precisa fazer algum trabalho mínimo de configuração, inclusive construir o projeto Money e adicionar alguns arquivos JAR Java ao projeto Rails.
Criar e configurar o projeto Rails
- Primeiro, verifique se a aplicação de área de trabalho Java Money está construída. Selecione a função Limpar e construir do menu de contexto do projeto, ou pressione Shift+F11.
- Crie um novo projeto Ruby->Ruby on Rails. Aceite os padrões do assistente e o IDE gera o projeto Rails. (Se você instalou o C Ruby nativo, então, será solicitado a escolher um intérprete Ruby. Você deve escolher o intérprete JRuby empacotado.)
- Em seguida, configure algumas propriedades Java para o projeto Rails. Especificamente, você precisa adicionar os arquivos JAR TopLink da API de persistência Java, mais o arquivo JAR da aplicação de área de trabalho Java Money. (O arquivo Money.jar no diretório /dist do projeto Money.) Clique com o botão direito do mouse no nó do projeto Rails e selecione Propriedades. Selecione a categoria Java, em seguida, o botão Adicionar JAR/pasta. Navegue para os três arquivos JAR e inclua-os. Garanta a inclusão de toplink-essentials-agent.jar e de toplink-essentials.jar, os quais podem ser encontrados em seu diretório java1/modules/ext/toplink/ da instalação do NetBeans. Não é necessário editar o arquivo config/database.yml do Rails neste projeto, já que a aplicação Rails usa o código Java para suas operações de pesquisa de banco de dados.
Figura 10: Incluir os arquivos JAR
Adicionar Currency Lookup ao projeto Rails
Aqui você modifica o projeto Rails gerado para usar o código de pesquisa atual a partir do projeto Java Money.
- Primeiro, execute o projeto Rails para abrir a página do Rails padrão, vazia, no navegador. Edite a URL padrão para defini-la para a aplicação. Por exemplo, você deve ver uma URL semelhante a http://localhost:3001/ a qual pode anexar /money/list. O navegador exibe uma mensagem de erro de roteamento. Quando você completar o seu código - estará adicionando uma ação para responder a essa URL - em seguida, a aplicação será executada corretamente no navegador.
- Use o gerador de código do Rails para criar um controlador money e uma visualização de lista. No menu de contexto do projeto Rails, selecione Gerar. Na caixa de diálogo Gerador do Rails, selecione controlador no campo Gerar, e digite money no campo Nome e lista no campo Visualização. Clique em OK.
Figura 11: Gerar controlador money
O controlador money gerado se abre na janela Editor. Adicione o código ao controlador para permitir que a aplicação acesse o código Java (require 'java') e inclua a classe Java CurrencyLookup (include_class 'money.CurrencyLookup'). Depois de fazer isso, você pode chamar a classe Java CurrencyLookup do projeto Money como qualquer outra classe. Tenha em mente também que o IDE tem disponível o recurso auto-completar de código específico do Ruby and Rails; pressione Ctrl+K e Ctrl+Espaço para obter ajuda na conclusão dos nomes de método, etc.
Eis aqui o código completo da classe MoneyController:
class MoneyController < ApplicationController
def list
require 'java'
include_class 'money.CurrencyLookup'
lookup = CurrencyLookup.new
@list = lookup.get_all
end
end
Configurar a visualização
Eis aqui como produzir uma tabela perfeitamente formatada mostrando as três colunas do banco de dados. Também mostramos alguns dos atalhos do IDE Ruby.
- Abra a visualização de lista gerada para a classe MoneyController. Use a função Navegar->Ir para ação/visualização do Rails, ou Ctrl+Shift+A. O arquivo list.rhtml, ou a visualização Money#list, se abre na janela Editor.
- Insira um esqueleto de tabela na visualização de lista. Para fazer isso rapidamente, digite tabela e pressione a tecla Tab. O IDE adiciona o HTML das linhas e das células da tabela.
Figura 12: Usando o atalho de teclado Tab
- Selecione o bloco (<tr>) da linha da tabela e pressione Alt+Enter. Já que você deseja que o código itere sobre a lista de moedas, talvez queira circular as linhas da tabela com um loop for. O atalho Alt+Enter exibe uma opção de correção rápida, que aparece com um ícone de lâmpada. Escolha a opção Circular com for, em seguida, pressione Enter.
Figura 13: Usando o atalho Alt+Enter
- Agora, altere os parâmetros do loop for para coincidir com os dados de moeda. Use a tecla Tab para mover-se entre esses parâmetros. Chame a variável loop c em vez de f e altere @field para @list. Use o atalho de auto-completar de código para adicionar marcas de célula de tabela extras (<td></td>) dentro da marca de linha (<tr></tr>).
Figura 14: Usando auto-completar de código para adicionar marcas HTML
- Insira um modelo de código para uma expressão Ruby dentro das marcas de célula da tabela. Digite re, em seguida, pressione a tecla Tab. O IDE insere a expressão Ruby <%= %>.
Figura 15: Inserindo expressões Ruby
- Configure três blocos de células da tabela, cada um contendo a expressão Ruby <%= %>. Insira os nomes de coluna de moeda (c.country, c.code e c.name) nos blocos <%= %>. Quando você terminar, o código deve ser semelhante ao seguinte:
<h1>Money#list</h1>
<p>Find me in app/views/money/list.rhtml</p>
<table border="1">
<% for c in @list %>
<tr>
<td>
<%= c.country %>
</td>
<td>
<%= c.currency %>
</td>
<td>
<%= c.name %>
</td>
</tr>
<%end%>
</table>
- Pressione Shift+F6 para visualizar a tabela no navegador. Você deve ver algo como o seguinte, dependendo das moedas que adicionou ao banco de dados:
Figura 16: Exibindo a tabela de moedas do Ruby
Resumo
Este artigo demonstrou como você pode combinar uma aplicação Ruby on Rails com uma aplicação de área de trabalho Java. A aplicação de área de trabalho Java continha o código para acessar uma tabela de banco de dados e a aplicação Ruby chamava o código de acesso da tabela de banco de dados Java para recuperar e exibir os dados.
O artigo também ilustrou inúmeros atalhos de teclado disponíveis durante o desenvolvimento de aplicações Java e Ruby.
Próximas etapas
>> Mais documentação do NetBeans Ruby