Anwendungscode analysieren

Sie können den Code Analyzer ausführen, um Ihren Code zu analysieren und eine instrumentierte Version Ihres Quellcodes zu erstellen. Diese Analyse ist der erste Schritt beim Refactoring Ihrer monolithischen Java®-Anwendungen in Partitionen.

Code Analyzer

Der Code Analyzer erfasst statische Daten aus dem Anwendungscode Ihrer monolithischen Java -Anwendungen, die als Eingabe für die AI-Engineverwendet werden, die Partitionsempfehlungen generiert. Diese statischen Daten sind auch als Eingabe für das binäre Instrumentererforderlich, das Laufzeitdaten aus Ihren implementierten Anwendungen erfasst. Während das Codeanalyseprogramm den Java -Code scannt, generiert es vier Dateien. Die JSON-Dateien enthalten Metadaten zu den gescannten Klassen und zur Konfiguration für den binären Instrumentierer. Die Metadaten enthalten Informationen, wie z. B. Klassennamen, ihre typisierten Memberattribute, Konstruktoren, Methoden mit Eingabeargumenten und Rückgabetypen sowie Quellendateipositionen der Klassen.

Das Codeanalyseprogramm kann auch den Quellcode Ihrer monolithischen Java -Anwendungen instrumentieren, sodass Laufzeittraces erfasst werden, wenn diese Anwendungen ausgeführt werden. Der Code Analyzer durchsucht alle Java -Klassen einer Anwendung, um Instrumentierungsanweisungen in Form von System.err.println("Entering...") und System.err.println("Exiting...") in allen Klassenmethoden, einschließlich Konstruktoren, einzufügen. Nach Abschluss der Codeinstrumentierung mit dem Codeanalyseprogramm müssen Sie die monolithische Java -Anwendung erneut erstellen und implementieren.

Die Quellcode-Instrumentierung ist ein veraltetes Feature der Code-Analysefunktion. Das binäre Instrumenter ist die empfohlene Option zum Erfassen von Laufzeittraces während der Ausführung von Geschäftsanwendungsfällen, sodass die monolithische Java -Anwendung nicht erneut erstellt und implementiert werden muss.

Voraussetzungen

Stellen Sie sicher, dass die Systemvoraussetzungenerfüllt sind.

Vorgehensweise

  1. Stellen Sie die binäre Archivdatei Ihrer monolithischen Java -Anwendung in eine Verzeichnisstruktur.

    Gültige Java -Archivdateiformate sind .cba, .class, .ear, .eba, .jarund .war. Außerdem sind .rar -und .zip -Dateien gültig, die die Java -Archivbinärdateien enthalten.

  2. Führen Sie das Codeanalyseprogramm für die Binärdatei Ihrer Anwendung aus.

    Führen Sie den Befehl analyze aus. Zum Abrufen der Hilfe für Befehle fügen Sie die Option -h hinzu.

    mono2micro analyze -a <binary-file-path>

    In den folgenden Informationen wird die Syntax für den Befehl erläutert:

    • Die Variable <binary-file-path> steht für den Pfadnamen der Binärdatei der zu analysierenden Anwendung. Standardmäßig erstellt der Befehl analyze ein Verzeichnis mit dem Namen binary-file-mono2micro im Benutzerarbeitsverzeichnis mit mehreren JSON-Dateien.

      Sie können die Option -o hinzufügen, um den Ausgabeverzeichnispfad für die generierten JSON-Dateien anzugeben. Der Benutzer, der die Codeanalysefunktion ausführt, muss Lese-und Schreibzugriff auf das Verzeichnis /<output-dir-path>/ haben.

      mono2micro analyze -a <binary-file-path> -o <output-dir-path>
    • Sie können die Konfiguration für das binäre Instrumenter generieren, das die Traces an den Standardausgabedatenstrom sendet. Standardmäßig instrumentiert der Binärinstrumenter Ihren Java -Code mit System.err.println() -Anweisungen zum Generieren von IBM Mono2Micro -Laufzeittraces im Standardfehlerdatenstrom. Das Festlegen der Option --instrumentation-target auf den Wert out gilt auch für die Quelleninstrumentierung, wenn der Befehl mono2micro instrument verwendet wurde.

Beispiele für Standardfehler und Standardausgabedatenströme

Führen Sie für den Standardfehlerdatenstrom den folgenden Befehl aus:

mono2micro analyze -a /apps/daytrader-ee7.ear

Führen Sie für den Standardausgabedatenstrom den folgenden Befehl aus:

mono2micro analyze -a /apps/daytrader-ee7.ear --instrumentation-target out

Steuern der Java -Paketliste für die binäre Analyse

Das Analyseprogramm für Binärdateien überprüft alle Java -Klassen in der Binärdatei mit Ausnahme der standardmäßig ausgeschlossenen Pakete. Sie können die Standardliste ausgeschlossener Pakete mit der Option -h überprüfen.

Die folgenden Optionen werden ausschließlich zur Steuerung der Java -Pakete verwendet, die mit der binären Analysefunktion analysiert werden sollen. Keine der Optionen bleibt bestehen, da die Analysefunktion keine Liste oder Benutzervorgabe speichert. Daher müssen Sie die gewünschten Optionen für jede Ausführung angeben. Geben Sie für die Optionen eine durch Kommas getrennte Liste ohne Leerzeichen an. Beispiel:
com.test.app,org.xyz.lib,edu.abc
--add-to-exclude-packages
Fügt Pakete zur Standardliste der auszuschließenden Pakete hinzu. Die binäre Analyse schließt die Standardlistenpakete und auch die Liste der Pakete aus, die durch diese Option angegeben werden.
--exclude-packages
Schließt die Liste der mit dieser Option angegebenen Pakete aus der binären Analyse aus. Alle Klassen mit Ausnahme der Klassen in diesen Paketen, die vom Benutzer angegeben werden, werden analysiert. Dies bedeutet, dass die Standardpaketliste ignoriert wird.
--include-packages
Analysiert nur die Liste der Pakete, die durch diese Option während der binären Analyse angegeben werden. Da nur Klassen in diesen Paketen analysiert werden, wird die Standardpaketliste ignoriert.
--analyze-all
Erzwingt die Analyse aller Klassen und Pakete.

Ergebnisse

Wenn bei erfolgreichem Abschluss der Analyse kein Ausgabeverzeichnis angegeben ist, erstellt das Codeanalyseprogramm ein Verzeichnis mit dem Namen binary-file-mono2micro im Benutzerarbeitsverzeichnis mit mehreren Dateien, wobei binary-file der Name der analysierten Java -Binärdatei ist. Wenn die Binärdatei beispielsweise daytrader-ee7.earist, erstellt das Codeanalyseprogramm ein Verzeichnis mit dem Namen daytrader-ee7-mono2micro im Arbeitsverzeichnis des Benutzers. Wenn die Ausgabeoption angegeben ist, werden die JSON-Dateien in das angegebene Verzeichnis gestellt.

Nach der Analyse enthält das Verzeichnis die folgenden Dateien:

  • symTable.json
  • refTable.json
  • instrumenter-config.json
  • recommender-config.properties

Die Dateien symTable.json und refTable.json enthalten Metadaten zu gescannten Klassen, wie z. B. Namen, Positionen, Attributnamen, Konstruktoren und Methoden. Die Datei instrumenter-config.json stellt die Konfiguration für das binäre Instrumenter bereit. Die Datei recommender-config.properties gibt die Position Ihres Java -Anwendungsarchivs auf der Platte und die Pakete an, die während der Analyse ausgeschlossen oder eingeschlossen wurden.

Wenn die Quelleninstrumentierung für die Codeanalysefunktion aktiviert wurde, enthält das Peerverzeichnis auch eine Kopie des Quellcodes, der mit System.err.println() -Anweisungen instrumentiert ist, die Sie später zum Generieren von IBM Mono2Micro -Laufzeittraces verwenden.

Die Instrumentierung des Codeanalyseprogramms gibt niemals den Wert von Variablen Ihrer Anwendung aus. Der Zweck der Instrumentierung besteht darin, die zeitlichen Abläufe durch verschiedene Methoden und Konstruktoren von Klassen aufzuzeichnen, und nicht die Werte von Variablen während der Laufzeit.

Aktuelle Einschränkungen

  • Wenn Sie Code kompilieren, der von der Codeanalysefunktion instrumentiert wurde, kann dieunreachable codeKompilierungsfehler. In einigen Edge-Fällen kann die Instrumentierung des Codeanalyseprogramms Instrumentierungsanweisungen einfügen, die der Java -Compiler als nicht erreichbar erkennt.

    Um das Problem zu beheben, entfernen oder Sie diese nicht erreichbaren Anweisungen oder setzen Sie diese in Kommentarzeichen. Ihre Entfernung wirkt sich in keiner Weise auf die Generierung von Laufzeittraces aus.

  • Wenn Sie das Codeanalyseprogramm ausführen, kann ein Fehler aufgrund abnormaler Speicherbedingungen im Java -Prozess auftreten. Setzen Sie zur Lösung des Problems die Umgebungsvariable --java-opts, indem Sie eine große maximale Größe des Heapspeichers als Wert angeben.

    Um beispielsweise eine maximale Java -Heapspeichergröße von 512 Megabyte anzugeben, führen Sie einen der folgenden Befehle aus.

    mono2micro analyze -s <src-dir-path>  --java-opts "-Xmx512m"
    mono2micro instrument -s <src-dir-path>  --java-opts "-Xmx512m"
  • Wenn das Binäranalyseprogramm mehrere Java -Klassen mit demselben Namen und Paketnamen findet, analysiert es die zuerst angegebene Klasse und ignoriert die anderen mit demselben Namen und Paketnamen. Doppelte Namen können auftreten, wenn dieselbe Klasse in mehreren Binärdateien im Binärarchiv gepackt ist. In diesem Fall wird eine Warnung protokolliert, um die gefundenen Duplikate zu melden. In den meisten Fällen ist dies kein Problem, insbesondere wenn die gefundenen Klassen identisch sind. Es kann jedoch ein Problem sein, wenn die Struktur der gefundenen Klassen unterschiedlich ist.

Die nächsten Schritte

Wenn Sie Partitionierungsempfehlungen auf der Basis der Geschäftslogik in der Anwendung abrufen möchten, führen Sie Ihre monolithischen Java -Anwendungen mit Instrumentierung aus, um Laufzeittracedateien zu generieren. Wenn Sie stattdessen schneller Empfehlungen erhalten möchten, die rein auf der statischen Analyse Ihrer Anwendung basieren, überprüfen Sie die gesammelten Daten und führen Sie dann die KI-Engine aus. Sie verwenden Informationen aus dem Code-Analyzer und optional aus dem Binär-Instrument und dem Anwendungsfall-Recorder als Input für die KI-Engine, die Partitionsempfehlungen generiert. Es ist wichtig, dass sich die Java -Anwendungsarchivdatei an derselben Position auf der Platte befindet, damit die KI-Engine sie während des Partitionsempfehlungsschritts weiter analysieren kann.

Wenn Sie ausgewählt haben, dass Laufzeittracedateien über die Quelleninstrumentierung erfasst werden sollen, können Sie, nachdem die Codeanalysefunktion den Instrumentierungsprozess erfolgreich abgeschlossen hat, die instrumentierte Anwendung in nicht produktiven, aber repräsentativen Umgebungen erstellen und implementieren. Folgen Sie dem genauen Prozess, den Sie zum Erstellen und Implementieren der ursprünglichen Anwendung verwenden. Abhängig von den Umgebungen können sich die Anwendungen und ihre instrumentierten Versionen auf Bare-Metal-Maschinen, virtuellen Maschinen oder Containern befinden.