Dieses Blog durchsuchen

Sonntag, 2. Juni 2013

Hot-Deployment mit JRebel

Einer der großen Nachteile der Software-Entwicklung mit Java EE ist es, dass das Deployment von Anwendungen oft sehr viel Zeit in Anspruch nimmt. Dies ist bei Interpreter-Sprachen wie Java-Script oder PHP anders, ein Refresh der Seite genügt, um die Änderungen am Quelltext direkt testen zu können.

Das Deployment im Java EE Bereich dagegen kann sehr lange dauern. Zwar gibt es die Möglichkeit des Hot-Deployments bei Java EE Servern, allerdings funktioniert dies nicht immer und das Neuladen der Anwendung dauert trotzdem seine Zeit. Außerdem geht die aktuelle Session (üblicherweise) verloren, sodass man, um ein Feature testen zu können, den Ausgangspunkt innerhalb der Anwendung wiederherstellen muss. Gerade im Bereich von Web-Anwendungen sind zum Teil sehr viele Deployments pro Tag notwendig. (da können schon mal 5-10 oder mehr Deployments pro Stunde zusammenkommen) Hier geht viel Zeit verloren. Besonders nachteilig ist, dass man während des Server-Neustarts eine andere Aufgabe wahrnehmen muss. Dieser Context-Switch kostet zusätzlich Zeit, da man sich ständig in neue Problemstellungen hineindenken muss.

Der o.b. Problematik hat sich die Firma zeroturnaround angenommen. Das Produkt "JRebel" ermöglicht es, dass Source-Code Anpassungen innerhalb von JEE-Anwendungen sofort sichtbar werden. Das betrifft sowohl kompilierte Klassen, als auch Resource-Daten (xhtml) oder auch properties-Dateien. Sogar Spring-Beans und Hibernate-Entity-Klassen werden zur Laufzeit ausgetauscht und ermöglichen strukturelle Anpassungen der Anwendung "on-the-fly". Unterstützt werden gängige Entwicklungsumgebungen und Applikationsserver.

JRebel ist sehr schnell eingebunden und konfiguriert. Damit das Ganze funktioniert, muss der Applikationsserver mit folgendem Parameter gestartet werden:

-javaagent:c:\Java\jrebel\jrebel.jar

Jrebel.jar ist die Bibliothek, die das Austauschen von Klassen zur Laufzeit ermöglicht.  Außerdem wird noch eine XML-Datei (rebel.xml) im Classpath der Anwendung benötigt, welche Informationen darüber beinhaltet, wo sich die Dateien befinden, die auszutauschen sind.

 <classpath>
    <dir name="C:\PfadZuDenKompiliertenKlassen"/>
    <dir name="C:\PfadZuDenResources"/>
  </classpath>


Ändert sich nun eine Datei innerhalb o.g. Pfade, wird diese automatisch im Hintergrund auf dem Applikationsserver ausgetauscht.

Nach einigen Stunden des Testens stellte sich heraus, dass es wirklich eine enorme Verbesserung der täglichen Arbeit ist. Man konzentriert sich automatisch auf die eigentliche Arbeit (das Programmieren) und kann die Infrastruktur-Aufgaben vernachlässigen. Die eingesparte Zeit ist gerade für größere Projekte enorm und zusätzlich macht das Entwickeln einfach mehr Spaß.

Das Produkt ist leider nicht ganz billig (zur Zeit 265$ pro Jahr für eine auf den Entwickler zugelassene Lizenz), amortisiert sich aber meist sehr schnell. Ein weiterer Nachteil ist, dass der JRebel-Vertrieb sehr penetrant ist und man mit Anrufen überhäuft wird. Interessant ist die Möglichkeit, eine komplett freie Lizenz von JRebel nutzen zu können; dafür postet JRebel allerdings auf dem eigenen Twitter-Account und die Lizenz ist nur für nicht kommerzielle Projekte nutzbar.


Keine Kommentare:

Kommentar posten