Tutorial: Debuggen einer in einem lokalen Service Fabric-Cluster bereitgestellten Java-Anwendung

Dieses Tutorial ist der zweite Teil einer Reihe. Hier erfahren Sie, wie Sie mithilfe von Eclipse einen Remotedebugger für die Service Fabric-Anwendung anfügen. Außerdem erfahren Sie, wie Sie Protokolle von den ausgeführten Anwendungen an einen geeigneten Speicherort für den Entwickler umleiten.

In dieser Tutorialserie lernen Sie Folgendes:

Im zweiten Teil der Reihe lernen Sie Folgendes:

  • Debuggen einer Java-Anwendung mithilfe von Eclipse
  • Umleiten von Protokollen an einen konfigurierbaren Speicherort

Voraussetzungen

Bevor Sie mit diesem Tutorial beginnen können, müssen Sie Folgendes tun:

  • Richten Sie Ihre Entwicklungsumgebung für Mac oder Linux ein. Führen Sie die erforderlichen Schritte aus, um das Eclipse-Plug-In, Gradle, das Service Fabric SDK und die Service Fabric-Befehlszeilenschnittstelle (sfctl) zu installieren.

Laden Sie die Beispielanwendung „Voting“ herunter.

Falls Sie die Beispielanwendung „Voting“ aus Teil 1 dieser Tutorialreihe nicht erstellt haben, können Sie sie herunterladen. Führen Sie in einem Befehlsfenster den folgenden Befehl aus, um das Beispiel-App-Repository auf Ihren lokalen Computer zu klonen.

git clone https://github.com/Azure-Samples/service-fabric-java-quickstart

Erstellen Sie die Anwendung, und stellen Sie sie in einem lokalen Entwicklungscluster bereit.

Debuggen einer Java-Anwendung mithilfe von Eclipse

  1. Öffnen Sie auf Ihrem Computer die Eclipse-IDE, und klicken Sie auf File -> Import...

  2. Wählen Sie im Popup-Fenster die Option Allgemein -> Vorhandene Projekte in den Arbeitsbereich und klicken Sie auf Weiter.

  3. Klicken Sie im Fenster „Import Projects“ (Projekte importieren) auf Select root directory (Stammverzeichnis auswählen), und wählen Sie das Verzeichnis Voting aus. Wenn Sie den ersten Teil der Tutorialreihe absolviert haben, befindet sich das Verzeichnis Voting im Verzeichnis Eclipse-workspace.

  4. Aktualisieren Sie „entryPoint.sh“ für den Dienst, den Sie debuggen möchten, sodass der Java-Prozess mit Remotedebugparametern gestartet wird. Für dieses Tutorial wird das zustandslose Front-End verwendet: Voting/VotingApplication/VotingWebPkg/Code/entryPoint.sh. In diesem Beispiel wurde für das Debuggen Port 8001 festgelegt.

    java -Xdebug -Xrunjdwp:transport=dt_socket,address=8001,server=y,suspend=n -Djava.library.path=$LD_LIBRARY_PATH -jar VotingWeb.jar
    
  5. Aktualisieren Sie das Anwendungsmanifest, indem die Instanz- oder Replikatanzahl für den zu debuggenden Dienst auf „1“ festlegen. Diese Einstellung vermiedet Konflikte an dem Port, der für das Debuggen verwendet wird. Legen Sie für zustandslose Dienste z.B. InstanceCount="1" und für zustandsbehaftete Dienste die Ziel- und Mindestgröße für Replikatgruppen wie folgt auf 1 fest: TargetReplicaSetSize="1" MinReplicaSetSize="1".

  6. Wählen Sie in der Eclipse-IDE Ausführen -> Debug-Konfigurationen -> Entfernte Java-Anwendung, drücken Sie die Schaltfläche Neu, stellen Sie die Eigenschaften wie folgt ein und klicken Sie auf Anwenden.

    Name: Voting
    Project: Voting
    Connection Type: Standard
    Host: localhost
    Port: 8001
    
  7. Fügen Sie in Zeile 109 der Datei Voting/VotingWeb/src/statelessservice/HttpCommunicationListener.java einen Breakpoint ein.

  8. Klicken Sie im Paket-Explorer mit der rechten Maustaste auf das Projekt Abstimmung und klicken Sie auf Service Fabric -> Anwendung veröffentlichen ...

  9. Wählen Sie im Fenster Publish Application (Anwendung veröffentlichen) in der Dropdownliste die Option Local.json aus, und klicken Sie auf Publish (Veröffentlichen).

  10. Wählen Sie in der Eclipse-IDE Ausführen -> Debug-Konfigurationen -> Entfernte Java-Anwendung, klicken Sie auf die von Ihnen erstellte Konfiguration Abstimmen und klicken Sie auf Debug.

  11. Navigieren Sie in Ihrem Webbrowser zu localhost:8080. Dadurch wird automatisch der Breakpoint erreicht, und Eclipse wechselt in die Debugging-Perspektive.

Sie können nun die gleichen Schritte ausführen, um eine beliebige Service Fabric-Anwendung in Eclipse zu debuggen.

Umleiten von Anwendungsprotokollen an einen benutzerdefinierten Speicherort

Die folgenden Schritte zeigen, wie Sie die Anwendungsprotokolle aus dem Standardspeicherort /var/log/syslog an einen benutzerdefinierten Speicherort umleiten.

  1. Derzeit unterstützen Anwendungen, die in Service Fabric-Linux-Clustern ausgeführt werden, nur die Erfassung einer einzelnen Protokolldatei. Wenn Sie eine Anwendung so konfigurieren möchten, dass die Protokolle immer unter /tmp/mysfapp0.0.log gespeichert werden, erstellen Sie unter Voting/VotingApplication/VotingWebPkg/Code/logging.properties eine Datei namens „logging.properties“, und fügen Sie ihr folgenden Inhalt hinzu:

    handlers = java.util.logging.FileHandler
    
    java.util.logging.FileHandler.level = ALL
    java.util.logging.FileHandler.formatter = java.util.logging.SimpleFormatter
    
    # This value specifies your custom location.
    # You will have to ensure this path has read and write access by the process running the SF Application
    java.util.logging.FileHandler.pattern = /tmp/mysfapp0.0.log
    
  2. Fügen Sie in der Datei Voting/VotingApplication/VotingWebPkg/Code/entryPoint.sh den folgenden Parameter für den Java-Ausführungsbefehl hinzu:

    -Djava.util.logging.config.file=logging.properties
    

    Das folgende Beispiel zeigt eine Beispielausführung mit angefügtem Debugger. Sie ähnelt der Ausführung im vorherigen Abschnitt.

    java -Xdebug -Xrunjdwp:transport=dt_socket,address=8001,server=y,suspend=n -Djava.library.path=$LD_LIBRARY_PATH -Djava.util.logging.config.file=logging.properties -jar VotingWeb.jar
    

Sie wissen nun, wie Sie das Debugging durchführen und bei der Entwicklung von Service Fabric-Java-Anwendungen auf Ihre Anwendungsprotokolle zugreifen.

Nächste Schritte

In diesem Teil des Tutorials haben Sie Folgendes gelernt:

  • Debuggen einer Java-Anwendung mithilfe von Eclipse
  • Umleiten von Protokollen an einen konfigurierbaren Speicherort

Fahren Sie mit dem nächsten Tutorial fort: