Lorque la simplicité de Ruby s'allie à la puissance de Java

Publié par Brice Argenson Lun 08 sept 2008 13:23:00 GMT

Duke with RubyJRuby est une implémentation en Java de l’interpréteur Ruby.
Pourquoi un interpréteur en langage Java ?
Java est accepté depuis de nombreuses années en entreprise. En effet, la technologie java a su convaincre grâce à sa fiabilité, sa grande compatibilité ainsi que par ses nombreux usages possibles (applications mobile, applications client-serveur, etc…).
Beaucoup d’entreprises utilisent donc la technologie Java depuis plusieurs années et se sont développées autour de celle-ci. Le passage à un autre langage comme Ruby semble donc exclu pour garder une certaine compatibilité avec les applications et outils de programmations déjà en place.
C’est en cela que JRuby constitue une solution. En effet, l’interpréteur utilisant la technologie Java, il rend possible l’utilisation de classe Java dans du code Ruby.
Afin d’illustrer cela, voici un exemple d’application JRuby basique affichant une fenêtre qui change de couleur lorsqu’on appuie sur un bouton et ce, en utilisant la bibliothèque graphique Swing de Java :

require "java"

include_class ‘javax.swing.JFrame’
include_class ‘javax.swing.JButton’
include_class ‘java.awt.BorderLayout’
include_class ‘java.lang.System’
include_class ‘java.awt.event.ActionListener’
include_class ‘java.awt.Color’

class MaFrame < JFrame
  include ActionListener
 
  def initialize
    super
    setTitle "JFrame with ruby !!!"
    setBounds 120, 120, 242, 51
    setResizable false
    getContentPane.setLayout BorderLayout.new
    @button = JButton.new("Jaune !")
    @button.addActionListener self
    getContentPane.add @button, BorderLayout::SOUTH
    setDefaultCloseOperation EXIT_ON_CLOSE
    setVisible true
  end
 

  def actionPerformed e
    if @button.getText == "Jaune !"
      @button.setText("Rouge !")
      setBackground Color::YELLOW
    else
      @button.setText("Jaune !")
      setBackground Color::RED
    end
  end
 
end


MaFrame.new

 


Comment fait-on cela ? Rien de bien compliqué, il suffit juste de créer un fichier de script Ruby (.rb) comme on l’aurait fait normalement. Rappelons que JRuby est un interpréteur et non pas un langage. De ce fait, le plus important sera d’utiliser cet interpréteur plutôt que l’habituel.
On remarquera plusieurs choses :
-    tout d’abord la ligne « require "java" ». Celle-ci indique à l’interpréteur que le script va faire usage de classe Java.
-    chaque classe doit ensuite être incluse grâce à l’instruction « include_class » suivi du chemin vers celle-ci
-    la syntaxe utilisée reste la syntaxe Ruby même dans l’utilisation de classe Java. JRuby est un interpréteur Ruby, la syntaxe reste donc une syntaxe Ruby.

Evidemment, tout cela marche aussi pour une application web développée avec le framework Rails et c’est avant tout cela qui rend JRuby intéressant. Les applications web Java sont connues pour leurs résistances à de grosses montées en charge (contre une forte consommation en mémoire) et JRuby apporte cela aux applications Rails.
Pour le moment les performances ont beau être au rendez vous, elles n’atteignent pas encore ce que l’on pourrait attendre d’elles. L’interpréteur reste peu utilisé en production de par sa jeunesse mais cela pourrait bien changer depuis le rapprochement de Sun avec les principaux acteurs du projet.


JRuby est donc une technologie à surveiller de très près, apportant à la simplicité de Rails la puissance de Java.


Voici quelques liens pour en savoir plus :
Le site du projet : http://jruby.codehaus.org/
Un comparatif de performance entre JRuby et Ruby : http://shootout.alioth.debian.org/gp4sandbox/benchmark.php?test=all⟨=jruby&lang2=ruby
Un tutoriel afin de porter une application Ruby on Rails existante vers JRuby on Rails : http://www.mti.epita.fr/blogs/j2ee/2008/07/05/porter-une-application-rails-en-jruby/
Un screencast sur l’exécution d’une application JRuby on Rails sur un serveur d’application Glassfish : http://www.netbeans.tv/screencasts/First-JRuby-app-in-GlassFish-86/
 

Publié sous  | Mots clés , ,  | aucun commentaires