Hotswap und Alternativen?

15

Seit den Anfängen meines College-Lebens benutze ich Java und das größte Problem ist, dass wir absolut weniger produktiv sind als andere interpretierte Sprachen. Alle Leute sind sich sicher, dass Java eine der am besten kompilierten Sprachen ist.

Weder Sun noch Oracle haben jedoch genügend Anstrengungen unternommen, um dieses Problem zu lösen. Eines der Probleme ist natürlich das Nachladen von Klassen.

Neueste Versuche der Community, dieses Problem zu lösen, sind das DaVinci Hotswap-Projekt , JRebel , PlayFramework . Zum Zeitpunkt des Schreibens waren sie jedoch noch nicht ausgereift (imo) und einheimisch. Einige von ihnen sind nicht betriebsbereit, einige sind nicht mit allen IDEs kompatibel, einige sind unausgereifte Hochschulprojekte. Die Roadmap und sogar Java für Entwickler ist bereit, aber die Java-Community hat noch keine Lösung für das Neuladen von On-the-Fly-Klassen.

Ist es für Oracle so schwierig, Anstrengungen zu unternehmen, um dieses Problem zu lösen? Warum wurde Class Reloading noch nicht nativ implementiert?

Ozgur
quelle
2
Tatsächlich ist JRebel vollständig betriebsbereit und verfügt über einen recht guten IDE-Support, der jedoch nicht kostenlos ist.
CarlosZ
@ CarlosZ Wirklich? Ich habe IntelliJ IDEA mit JRebel von der ersten Beta bis zur 3.x-Serie verwendet. Anstelle von "this" müssen Sie "that" verwenden. Im Forum für jede Version werden Sie viele Probleme bezüglich des intelliJ-Plugins sehen. Die schlimmste Erfahrung war jedoch das Debuggen von Problemen. Debugger konnte sehr spät verbinden. Und wir hatten enorme Probleme. Als intellJ Benutzer habe ich konkrete Erfahrungen in Bezug auf JRebel in IDEA. Und natürlich ist auch das Bezahlen von Geld ein Thema.
@CarlosZ Es ist wirklich eine Frage, ich bin neugierig zu erfahren, warum es schwierig ist, Klassen-Reload in Java nativ zu implementieren.

Antworten:

4

Was ist mit JEE / J2EE? Dies wurde erstmals vor 12 Jahren veröffentlicht. Dies wird direkt von Sun / Oracle und vielen anderen Anbietern unterstützt.

Was ist mit und OSGi? Seine erste Veröffentlichung war vor fast 11 Jahren. Eclipse (eine IDE) ist darauf aufgebaut, Glassfish von Sun / Oracle und Apache Felix verwenden es ausgiebig. Sie können es mit Spring-OSGi verwenden.

Es wurde in Java SE von Haus aus nicht unterstützt, da Unternehmensanwendungen absichtlich von Anwendungsservern als separate Produkte unterstützt wurden.

Peter Lawrey
quelle
@ Peter Lawrey 1) Lawrey In Bezug auf J2EE gibt es eine konkrete Lösung? Ich konnte deinen Standpunkt nicht erkennen? 2) Glauben Sie, dass OSGI verwendet werden sollte, um die Klasse neu zu laden? Was ist mit Jigsaw? Selbst auf JCR-Ebene gibt es noch keinen Konsens :). OSGI adressiert einen ganz anderen Bereich als das Neuladen von Klassen. 3) Ich konnte den JavaSE-Teil nicht verstehen, könntest du etwas mehr erklären? Bitte beachten Sie, dass das DaVinci HotSwap-Projekt von Oracle gesponsert wird. Zumindest für mich bedeutet dies, dass sie auch eine solche Lösung suchen.
Es hängt davon ab, was Sie von einem Hot-Swap erwarten. Wenn Sie Hot-Swap für das Debuggen möchten, können Sie dies seit einiger Zeit tun. Für robuste Unternehmenslösungen ist ein solcher Hot-Swap jedoch nicht geeignet und nur kontrollierte Releases. In diesem Fall können Sie mit JEE und OSGi laufende Anwendungen aktualisieren, was den gleichen Vorteil hat, aber die Steuerung bietet, die Sie von einer Produktionsumgebung erwarten würden. In meinem OSGi-Container kann ich beispielsweise Klassen entfernen und durch neuere Versionen ersetzen, ohne die Anwendung zu stoppen. Was brauchst du, was OSGi nicht macht?
Peter Lawrey
1) JEE / J2EE-Referenzimplementierung ist möglicherweise ein Ausgangspunkt, aber es gibt viel mehr beliebte, einfacher zu verwendende JEE. Mein Punkt ist, dass Sie den Code in einem laufenden System ersetzen können. Was brauchen Sie mehr in einer produktiven / kontrollierten Umgebung?
Peter Lawrey
1
2) Das Neuladen von Klassen ist das einzige, wofür ich OSGi benutze. Was sehen Sie als Hauptanwendung für OSGi?
Peter Lawrey
3) Der springende Punkt bei JEE ist, dass dies der Bereich für die Unterstützung von Unternehmensanwendungen ist. JSE ist die zugrunde liegende Plattform, die für JEE oder andere Anwendungen verwendet werden kann.
Peter Lawrey
2

Versuchen Sie dies: http://www.zeroturnaround.com/blog/reloading_java_classes_401_hotswap_jrebel/

Es gibt mehrere komplexe Probleme. Mir sind derzeit keine Lösungen bekannt (für Java oder nicht), die strukturelle Änderungen an Stateful Entities vornehmen. Dynamische Sprachen wie Ruby oder PHP machen das nicht wirklich, ich bin mir nicht sicher, aber ich denke, es wird auch den Status verlieren.

Jevgeni Kabanov
quelle