JRuby - Primeiras Impressões

3 respostas
nbluis

Estive estudando um pouquinho o jruby na ultima semana, e tem algumas coisas que gostaria de compartilhar.
Principalmente para conhecimento geral.
E claro dicas dos mais experientes no assunto serão bem vindas.

Ver o JRuby rodar Rails simplesmente não me traz tantas emoções. Mas fiz alguns trechos de código, com coisas que realmente me deixaram muito feliz.
OBS: Os trechos abaixo foram de um programador java tentando entender ruby, portanto contenha-se. :lol:

Trabalhando com swing no jruby

require 'java'

#java.awt.event.ActionListener
class Action
  def actionPerformed(e) 
    puts e.getActionCommand
  end
end

frame = javax.swing.JFrame.new('new Frame')
frame.setDefaultCloseOperation(javax.swing.JFrame::EXIT_ON_CLOSE)

button = javax.swing.JButton.new('Button 1')
button.addActionListener(Action.new)

frame.getContentPane.add(button)
frame.pack
frame.setVisible(true)

:arrow: O mais interessante disso é a implementacao do actionListener dentro do ruby. (sim funciona)

require 'java'

list = java.util.ArrayList.new(['6aaa', '3ddd','1fff', '4ccc','5bbb', '2eee'])

puts '----------'

#default comparator de java.lang.String
java.util.Collections.sort(list)
list.each {|o| puts o}

puts '----------'

class ReverseComparator
  def compare(o1, o2)
    (o1.nil? || o2.nil?) ? 0 : o1.reverse <=> o2.reverse
  end
end

#utilizando o comparador local, que usa metodos do ruby para trabalhar
java.util.Collections.sort(list, ReverseComparator.new)
list.each {|o| puts o}

puts '----------'

:arrow: Portando arrays e string de java para ruby e ruby para java transparentemente.
:arrow: Notem o uso de each para um ArrayList e a implementação do comparator meio ruby meio java.

Fora isso, o uso do IRB tendo todo o porte mencionado acima, legitimas coisas que não tem preço. :smiley:

Fiquem a vontade para comentários.

Até mais.

3 Respostas

Fabio_Kung

Legal também é que o JRuby deixa você usar o código Java de “uma forma mais Ruby”:

# ao inves de:
frame.setDefaultCloseOperation(javax.swing.JFrame::EXIT_ON_CLOSE)
  
# posso:
frame.default_close_operation = javax.swing.JFrame::EXIT_ON_CLOSE
frame.visible = true
# ...
nbluis

Valeu Fabio.

Só para constar.
Fiz mais uns testes aqui, e fiz uma aplicaçãozinha Rails acessando um EJB remoto.

Passei algum trabalho por causa do classloader, mas funcionou sem mais problemas.

A coisa ta ficando legal.

nbluis

A coisa fica mais legal ainda quando a gente começa a pensar em Rspec e invocação de ejbs via script/console.

:smiley:

Criado 15 de abril de 2008
Ultima resposta 16 de abr. de 2008
Respostas 3
Participantes 2