JRebel
# JRebel

JRebel ist ein von ZeroTurnaround entwickeltes Werkzeug, welches das dynamische Deployen von Java Web-Applikationen in einem sogenannten Applikations-Server unterstützt. Damit wird veränderter Java-Code ad-hoc im Applikationsserver verwendet und es ist kein Redeploy oder Hotdeploy nötig.

## Prinzip und Umsetzung

JRebel ist als JVM „-javaagent“ Plugin umgesetzt und wird als ein einziges JAR-File ausgeliefert. Es integriert sich als solches in die Class-Loader der JVM und des Applikationsservers. Dabei werden keine neuen Class-Loader erstellt oder bestehende gewrapped. Werden Klassen vom Class-Loader geladen, versucht JRebel die zugehörige .class Datei zu finden und speichert sich den Timestamp dieser Datei. Dieser wird dann überwacht und bei Änderungen werden diese über den class-loader an die laufende Applikation weitergegeben. Dabei werden bestehende Instanzen dieser Klasse erhalten. Sollte allerdings eine Member-Variable hinzugekommen sein, wird diese nicht initialisiert, da der Konstruktor nicht erneut aufgerufen wird.

## Lizenz

JRebel ist in einem Mietlizenzmodell für 1, 2 oder 3 Jahre erhältlich.
2011 stellte ZeroTurnaround mit der Version 4.5 eine frei verfügbare Lizenz für nicht-kommerzielle Projekte vor. Um die Lizenz zu erwerben, muss man sich mittels Facebook oder Twitter registrieren. Mit der Registrierung werden Benutzungsstatistiken des Werkzeugs über die sozialen Medien geteilt. Der Name social JRebel wurde später auf myJRebel geändert.

## JRebel.Android

Im Jahr 2015 stellte ZeroTurnaround JRebel.Android vor. Dieses Werkzeug erlaubt es, ähnlich wie die Desktop-Variante, dynamische Deployments, nur auf Android-Geräten. Dabei wurde die Plugin Architektur um einen Service erweitert, welcher auf der Entwicklermaschine läuft. Dieser Service überwacht Änderungen in den Resource-Ordnern der Android Applikation und schickt sie als für JRebel transformierten Bytecode an den Agenten, welcher am Android Gerät läuft. Dieser Agent übernimmt dann die geänderten Klassen in die laufende Android-Applikation.