Artikel

 
September 2009 | Artikel

JRuby: Aller Anfang ist leicht Fortsetzung, Teil 2

Teil 1   Teil 2   Teil 3   Teil 4   

Java aus JRuby aufrufen
Der Aufruf von Java-Klassen aus Ruby heraus mit JRuby ist eine sehr einfache und schöne Möglichkeit, vorhandene Java-Bibliotheken weiter zu verwenden. Die Java-Klasse in Listing 1 dient als Beispiel für diese Möglichkeit.

Listing 1
  1. package com.railsexperts.jruby.call2java;
  2. public class Call2Java {
  3. private String message;
  4. public Call2Java() {
  5. message = "Hello World!";
  6. }
  7. public void sayHello() {
  8. System.out.println(message);
  9. }
  10. public static void main(String[] args) {
  11. System.out.println("Main Methode wurde aufgerufen.");
  12. }
  13. }


Die Klasse ist sehr einfach gehalten und stellt im Grunde das klassische „Hello World!“-Programm dar. Im Konstruktor wird das Attribut message mit „Hello World!“ initialisiert. Die Methode sayHello gibt den Inhalt der Variablen message auf der Systemkonsole aus. Eine Ruby-Klasse namens Call2JavaOne soll nun die Klasse Call2Java instanziieren und die Methode sayHello aufrufen. Hierzu dient der folgende Ruby-Code:

  1. include Java
  2. Call2Java = com.railsexperts.jruby.call2java.Call2Java
  3. class Call2JavaOne
  4. def initialize
  5. @call2java = Call2Java.new
  6. end
  7. def sayHello
  8. @call2java.sayHello
  9. end
  10. end
  11. c2j = Call2JavaOne.new
  12. c2j.sayHello


Die Datei call2javaone.rb enthält neben der Ruby-Klasse Call2JavaOne ein zweizeiliges Skript, um die Klasse zu instanziieren und die Methode sayHello aufzurufen. Die erste Zeile ist ein Include, das die Klassen aus dem Package java.lang in den Scope des Skripts bringt. Die zweite Zeile definiert den Typ Call2Java aus der zugehörigen Java-Klasse. Damit ist Call2Java einfacher zu verwenden, als wenn der komplette Package-Name angegeben werden müsste. Es wäre an dieser Stelle auch möglich, den Klassennamen zu verändern.

Die Klassendefinition für Call2JavaOne enthält einen Konstruktor (initialize-Methode), der eine Instanzvariable @call2java mit einer Instanz von Call2Java definiert. Die Methode sayHello delegiert den Aufruf an das Java-Objekt. Ruby hat bekanntlich seine eigenen Konventionen, wenn es um die Namensgebung von Methoden etc. geht. JRuby unterstützt diese Konventionen, und so könnte das obige Ruby-Skript auch folgendermaßen geschrieben werden:

  1. include Java
  2. include_class "com.railsexperts.jruby.call2java.Call2Java"
  3. class Call2JavaOne
  4. def initialize
  5. @call2java = Call2Java.new
  6. end
  7. def say_hello
  8. @call2java.say_hello
  9. end
  10. end
  11. c2j = Call2JavaOne.new
  12. c2j.say_hello


JRuby kennt die Konventionen von Ruby und bietet neben der normalen Schreibweise von Java-Methoden entsprechende Ruby-Pendants an, die im Beispiel in Fettschrift hervorgehoben sind.

Teil 1   Teil 2   Teil 3   Teil 4   

Anzeige

Kommentare

Gravatar Wolfgang Schell 08.09.2009
um 16:24 Uhr
Warum Groovy und Grails wegen der besonderen Nähe JRuby's zu Rails zweite Wahl sein soll verstehe ich ja nicht. Ebenso wenig warum man bei Rails "an der Quelle" sitzt Grails aber nur ein Nachbau (und deswegen "schlechter"???) ist. Eine große Community hat Grails übrigens auch!Ich denke dass sich Grails und Rails eher gegenseitig befruchten könn(t)en. Klar Grails hat viele Konzepte von Rails übernommen hat aber auch genug eigene entwickelt und ist vor allem optimal an die Java-Plattform angepasst während Rails "nur" kompatibel gemacht wurde. Meiner Meinung nach wäre es besser wenn man wertfrei über die Vorteile von Web Frameworks mit CoC und DRY im Allgemeinen schreibt und vielleicht neue Entwickler dafür interessiert. Auf Grails herabzuschauen weil es später kam und zufällig nicht in der heiligen Sprache Ruby geschrieben ist halte ich nicht für sinnvoll. Die Auswahl zwischen Grails und Rails (oder Lift oder sonstigen Frameworks) kann man dann getrost dem mündigen Entwickler und seinen Präferenzen bzw. seinem persönlichen Geschmack überlassen. #zitieren

Anzeige

zurück zum Seitenanfang