2012-04-02 17 views
2

Gibt es eine Möglichkeit festzustellen, wenn Klassen während der Laufzeit mit Hotswap geändert haben?So erkennen Sie Hotswap

Ich habe eine Klasse, die Daten generiert, die ich für die spätere Verwendung speichern. Ich kann die Datenregeneration manuell auslösen, nachdem Hotswap aufgetreten ist, aber ich möchte dies automatisieren. Ich suche nach einer Lösung, mit der ich feststellen kann, wann sich eine der Klassen geändert hat, damit die Daten automatisch im laufenden Betrieb regeneriert werden können. Ich möchte auch herausfinden, welche Klassen geändert wurden, da ich mehrere Klassen habe, die unterschiedliche Daten erzeugen, und es ist ein Overhead, alle zu regenerieren.

+0

Haben Sie versucht, zu überprüfen, ob eine Klasse hashCode geändert ? Z.B. Überwachen Sie, ob HotSwap SomeClass.class.hashCode() beeinflusst. –

+0

Der hashCode der Klasse ändert sich nicht. – msell

Antwort

3

können Sie Java-Agenten verwenden, um alle Änderungen in Byte-Code zu überwachen:

API doc: http://docs.oracle.com/javase/6/docs/api/java/lang/instrument/ClassFileTransformer.html

Beispiel:

http://www.informit.com/guides/content.aspx?g=java&seqNum=589

+0

Muss ich ein JAR für den Agenten erstellen oder gibt es eine einfachere Möglichkeit, es für den Agenten zu registrieren? – msell

+0

Sie müssen JVM mit dem entsprechenden Parameter starten: << Wenn Sie Ihre Anwendung mit dem Befehlszeilenargument -javaagent: starten, öffnet die JVM diese JAR-Datei und sucht nach dem MANIFEST .MF-Datei und rufen Sie dann die Premain() - Methode der Premain-Klasse auf. >>. I.e. Sie können einen Agenten nicht im laufenden Betrieb registrieren. –

+0

Es funktioniert, danke. Gibt es eine Möglichkeit, den Agenten direkt mit meiner Anwendung zu kommunizieren oder sollte ich Sockets oder ähnliches verwenden? – msell