Der Tool-Radar

JavaRebel: Ein rebellisches Aha-Erlebnis

Marc Teufel

Wann hatten Sie Ihr letztes Aha-Erlebnis? Wann haben Sie zuletzt ein Tool evaluiert, das von Anfang an überzeugen konnte, dass genau dieses Werkzeug Ihre tägliche Arbeit erleichtern wird? Ein solches Tool möchten wir Ihnen heute vorstellen: JavaRebel.

Dabei handelt es sich um ein Werkzeug aus dem Hause ZeroTurnaround, das Änderungen an Java-Klassen im laufenden Betrieb überwacht und erkennt, die geänderte Klasse automatisch nachlädt und der laufenden Anwendung sofort zur Verfügung stellt. Der Clou dabei liegt auf der Hand: Änderungen am Quellcode werden so in der laufenden Anwendung sofort und ohne Neustart aktiv. Das spart Zeit und Geld im Entwicklungsprozess, denn die mitunter zeitaufwändigen Wartepausen, die beispielsweise beim wiederholten Redeployment einer Webanwendung entstehen, nur um vorher durchgeführte Codeänderungen zu überprüfen, können enorm sein. Mit JavaRebel können diese Zwangspausen auf ein erträgliches Level abgesenkt werden. Dabei kann JavaRebel nahezu überall eingesetzt werden: tn Java-EE-Projekten, Webanwendungen, Spring bis hin zur Eclipse RCP – der Rebell ist mit wenigen Handgriffen einsatzbereit.

Unter der Haube

Neben so populären neuen Features wie Annotations oder Generics wurde mit Java 5 auch das so genannte Instrumentation API (java.lang.instrument) eingeführt. Mit diesem neuen API ist es möglich, Konstrukte zu programmieren, die sich über den JVM-Parameter –javaagent in eine laufende VM einklinken lassen. Einmal eingeklinkt, lassen sich dann mithilfe der neuen API Veränderungen an allen in der VM befindlichen Klassen vornehmen, bevor sie ausgeführt werden. JavaRebel nutzt diese Technik, um entsprechende Klassen nach Veränderungen einfach neu zu laden. Ein weiteres, sehr prominentes Produkt, das die Instrumentation API ebenso einsetzt, ist AspectJ. Konkret kommt hier beim Einweben von Aspekten auf Bytecodeebene (Load Time Weaving) ein von AspectJ bereitgestellter Agent zum Einsatz. Wer jetzt mehr über das Instrumentation API erfahren möchte, dem sei dieser und dieser Link zur Lektüre empfohlen.

Konfigurationsbeispiele

Stellen Sie sich vor, Sie entwickeln eine auf JSF oder Spring MVC basierende Webanwendung. Dabei benutzen Sie einen durch Ant oder Maven gestützten Build-Prozess in Verbindung mit Tomcat. JavaRebel binden Sie in diesem Szenario an den Tomcat-Server. Hierzu ist in der Konfigurationsdatei catalina.bat der Tomcat-Installation lediglich folgende Zeile hinzuzufügen:

set JAVA_OPTS=-noverify -javaagent:C:javarebel-1.2.2javarebel.jar %JAVA_OPTS% 

Das Flag –noverify, laut Dokumentation dringend erforderlich, schaltet die so genannte Bytecode Verification in der JVM ab. Einige weitere Konfigurationsbeispiele (z.B. für JBoss, GlassFish, Jetty) finden sich ebenso in der Dokumentation. Zur weiteren, verfeinerten Konfiguration von JavaRebel stehen darüber hinaus noch zusätzliche Parameter zur Verfügung, mit denen man beispielsweise die Überwachung der Java-Klassen auf bestimmte Verzeichnisse oder Packages beschränken kann (Tabelle 1). Besonders interessant ist JavaRebel auch in der Welt der RCP- oder Plug-in-Entwicklung mit Eclipse. Hier binden Sie JavaRebel schlicht in der entsprechenden Run Configuration (Reiter Arguments, Eingabefeld VM arguments) wie folgt ein:

-noverify -javaagent:C:javarebel-1.2.2javarebel.jar -Xmx512m -XX:MaxPermSize=128m 
Fazit

JavaRebel ist ein sinnvolles Werkzeug, das die Entwicklungszeit von Java-Anwendungen beschleunigen kann, weil es die Möglichkeit bietet, Java-Klassen zu überwachen und zur Laufzeit auszutauschen. Somit kann das wiederholte Neustarten oder Redeployment der entwickelten Java-Anwendung auf ein erträgliches Maß gesenkt werden. Möglich wird dies durch das mit Java 5 eingeführte Instrumentation API. JavaRebel ist ein kommerzielles Produkt, dessen Konzept und Praxistauglichkeit zu überzeugen wissen. Geben Sie dem Werkzeug einen Testlauf und genießen Sie Ihr nächstes Aha-Erlebnis.

Parameter

Beschreibung

-Drebel.dirs

Angabe von Verzeichnissen, in denen JavaRebel die .class-Files auf Änderungen überwachen soll; Angaben getrennt durch Strichpunkt

-Drebel.packages

Bei Verwendung dieses Parameters wird JavaRebel nur die Klassen überwachen, die zu den angegebenen Packages gehören; Angaben getrennt durch Strichpunkt

Tabelle 1: Kleine Auswahl von Parametern mit denen JavaRebel konfiguriert werden kann

Geschrieben von
Marc Teufel
Marc Teufel
Marc Teufel arbeitet als Projektleiter und Softwarearchitekt bei der hama GmbH & Co KG und ist dort für die Durchführung von Softwareprojekten im Bereich internationale Logistik zuständig. Er ist Autor zahlreicher Fachartikel im Web-Services- und Eclipse-Umfeld. Er hat drei Bücher zu Web Services veröffentlicht, sein aktuelles Buch „Eclipse 4 – Rich Clients mit dem Eclipse 4.2 SDK“ ist kürzlich bei entwickler.press erschienen.
Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.