Das Schreiben von Code ist die halbe Miete. Es muss noch dafür gesorgt werden, dass es richtig funktioniert. IDEs und Debugging-Tools helfen uns dabei sehr.
Am Beispiel von IntelliJ IDEA möchte ich mich damit vertraut machen, wie wir herausfinden können, was mit unserem Code passiert, wenn er ausgeführt wird. Debuggen ist ein weitreichendes Thema, daher bietet diese Rezension kein tiefes Eintauchen wie bei einem Taucher. Aber ich hoffe auf jeden Fall Schnorcheln)
Als nächstes müssen wir das von uns ausgewählte Projekt auf dem Server ausführen. Dieser Vorgang wird in einer kleinen Dokumentation beschrieben, die im Projekt selbst zu finden ist:
Danach können wir im Serverprotokoll sehen, wie das neue Projekt „bereitgestellt“ wurde:
Danach gehen wir zur Seite
Wenn alles in Ordnung ist, sehen wir unten eine Meldung dazu:
Drücken Sie die Eingabetaste, um zur gefundenen Quelle zu gelangen:
Wir sehen also, dass bei der Registrierung memberController.register aufgerufen wird. Anscheinend muss es sich dabei um eine Art Java-Klasse handeln. Klicken Sie
Tatsächlich gibt es eine solche Klasse. Lasst uns darauf eingehen. Anscheinend sollte es eine Registermethode geben. Klicken Sie
Tatsächlich haben wir es gefunden. Anscheinend erfolgt die Registrierung hier in memberRegistration.register . Drücken Sie Strg und klicken Sie auf die Methode, um hineinzufallen:
Lassen Sie uns nun einen „Breakpoint“ oder Break Point festlegen. Dies ist eine Markierung, die angibt, wo die Codeausführung angehalten werden soll. In diesem Moment werden wir die Gelegenheit haben, viele interessante Dinge zu lernen. Um es einzufügen, müssen Sie auf die Stelle rechts neben der Zeilennummer klicken.
Füllen Sie auf der Seite http://localhost:8080/wildfly-hibernate4 die Felder aus und klicken Sie auf die Schaltfläche Registrieren. Das Ideensymbol auf dem Bedienfeld blinkt:
Wenn Sie zu Idea gehen, können Sie sehen, dass das Debug-Panel viele interessante Informationen enthält:
Hier können Sie den Wert der Felder des Objekts sehen. Woraus besteht beispielsweise ein registriertes Mitglied:
Großartig. Was können wir sonst noch tun? Wir können das Kontextmenü öffnen und dort Ausdruck auswerten auswählen (oder über das Menü Ausführen -> Ausdruck auswerten). Besser noch, im Debugger-Kontrollfeld:
Dies ist eine super coole Fähigkeit an einem Haltepunkt, Zugriff auf alles zu haben, worauf dieser Codepunkt Zugriff hat, um jeden Code auszuführen, der an diesem Punkt ausgeführt werden könnte. Zum Beispiel:
Es gibt auch Steuerschaltflächen im Debugger-Bedienfeld, die dafür verantwortlich sind, wohin Sie die Programmflusssteuerung verschieben möchten. Ist das nicht Zauberei?) Durch Drücken der Taste F8 (Step Out) gehen wir durch den Code, ohne Methoden einzugeben. Durch Drücken von F9 hören wir auf, mit dem Debugger durch die Codezeilen zu laufen, und geben dem Debugger die Kontrolle über die Ausführung des Programms. Wenn wir F7 (Step Into) drücken, gehen wir den Code durch und geben jede Methode ein, die uns unterwegs begegnet. Achten Sie übrigens besonders auf diesen Informationsblock:
Dies zeigt den Thread, in dem wir uns befinden, und die Methoden auf dem Stapel des aktuellen Threads. Aber das ist nicht alles. Der Einfachheit halber können Sie die Registerkarte „Frames“ öffnen. Dazu muss es aktiviert sein:
Jetzt sehen wir auf der Registerkarte „Frames“ Informationen über den Übergang von Methode zu Methode, weil Ich habe begonnen, den Code mithilfe von „Step Into“ durchzugehen.
Wie wir sehen, können wir nicht immer dorthin übertragen werden, wo das Programm gerade ausgeführt wird. Wir sind jetzt bei „getDelegate:469, AbstractEntityManager(org.jboss.as.jpa.container)“. Aber tatsächlich sind wir in der Umsetzung. Dies wird durch die hier angegebene Klasse belegt:
Schauen wir uns das an. Wie wir wissen, zeigt es auf das aktuelle Objekt. Wir sind bei TransactionScopedEntityManager. Warum kann Idea uns den Code nicht zeigen? Tatsache ist, dass IntelliJ Idea derzeit keinen TransactionScopedEntityManager kennt, weil Es ist nicht mit unserem Projekt verbunden (es befindet sich nicht in den Projektabhängigkeiten). Wenn ein Anwendungsserver ausgeführt wird, laufen darin viele, viele verschiedene Bibliotheken. Aber wir wissen sehr wenig über sie, weil... Im Allgemeinen müssen wir uns nicht mit den Interna befassen, wir brauchen es nur, um zu funktionieren. Aber manchmal erfordert es die Arbeit oder das sportliche Interesse. Anschließend müssen Sie Idea über diese Bibliothek informieren, damit sie weiß, wo sie den Klassencode erhalten kann.
Warten wir nun auf das Ergebnis. Er wird dich nicht warten lassen)
Jetzt müssen wir irgendwo den Quellcode dafür finden. Und es gibt 2 Möglichkeiten:
Kommen wir nun zur Beschreibung der Abhängigkeit. Auf dieser Seite können Sie den Quellcode herunterladen. Großartig, jetzt haben wir den Code heruntergeladen. Jetzt muss nur noch die Bibliothek angeschlossen werden. Der Anschluss ist denkbar einfach. Wir müssen die Projekteinstellungen öffnen:
Dort wählen wir „Bibliotheken“ aus und fügen die empfangenen Quellcodes zum Abschnitt „Quellen“ hinzu. Im Abschnitt „Klassen“ geben wir die Bibliotheks-JAR-Datei selbst aus dem WildFly-Verzeichnis an, die wir mit Far Manager gefunden haben. Wenn wir danach durch F7 navigieren, sehen wir den Inhalt der Klassen AbstractEntityManager und TransactionScopedEntityManager und werden auch über eine Suche nach Klasse mit Strg+N verfügbar.
Jetzt wird der Haltepunkt nur dann ausgelöst, wenn der Name Maximilian lautet. Durch Klicken auf die Schaltfläche „Mehr“ steht Ihnen ein erweiterter Satz an Einstellungen für Haltepunkte zur Verfügung.
Und erstellen Sie eine neue Regel für den ausgewählten Ausnahmetyp:
Zum Beispiel für NPE:
#Wjatscheslaw
Einführung
Ein Teil des Codeschreibens besteht darin, ihn zu debuggen. Und wenn zu Ihren Aufgaben auch Code-Unterstützung gehört, fällt noch mehr Debugging an. Darüber hinaus können Sie mit Hilfe des Debuggings die Arbeit der verwendeten Bibliotheken und Frameworks genauso tief untersuchen wie Sie in den Dschungel des Codes anderer eintauchen können. Für unseren Tauchgang benötigen wir:- Entwicklungsumgebung: Kostenlose IntelliJ Idea Community Edition
- Maven installiert
- WildFly Application Server 12.0.0.Final
- Quellcode für offizielle Beispiele: Quick Start Source Code
bin\standalone.bat
\hibernate4\README.adoc
Wie in dieser Dokumentation angegeben, müssen wir den Befehl im Verzeichnis hibernate4 ausführen: mvn clean package wildfly:deploy
Wir warten auf eine Nachricht, dass der Build erfolgreich abgeschlossen wurde:
http://localhost:8080/wildfly-hibernate4
und es sollte eine Seite mit dem Formular „ Mitgliederregistrierung “ angezeigt werden. Unsere Vorbereitungen für die Experimente sind also abgeschlossen und wir können beginnen)) Zur Verdeutlichung werden noch viele Bilder folgen, also machen Sie sich bereit)
Remote-Debug
Daher müssen wir den Debug-Modus so konfigurieren, dass unsere IDE die Ausführung von Code auf dem Anwendungsserver steuert. IntelliJ Idea gibt es in zwei Versionen: kostenlos (Community) und kostenpflichtig (Ultimate). Letzteres kann offiziell in Form von EAP ausprobiert werden. In der Ultimate-Version ist alles einfach – der Anwendungsserver kann im Debug-Modus direkt aus der IDE gestartet werden. In der Community-Version müssen Sie jedoch einige Dinge manuell erledigen. Betrachten wir daher einen komplizierteren Fall, d. h. Einstellung in der Community-Version. Die Community-Version weist einige Einschränkungen auf. Insbesondere können Sie keinen Anwendungsserver darauf ausführen. Sie können jedoch Remote-Debugging (Remote Debug) einrichten, wenn irgendwo separat ein laufender Server mit der von uns benötigten Anwendung vorhanden ist. Verwenden wir die Beschreibung des Setups von hier: Remote-Debug Wildfly in der IntelliJ Idea Community Edition (Einrichten der Remote Run-Konfiguration für Port 8787). Nach der Konfiguration starten wir unsere neue Konfiguration im Debug-Modus:Debug-Prozess
Lassen Sie uns das Speichern des Datensatzes debuggen. Dazu müssen wir uns zunächst für den Ort entscheiden, den wir erkunden möchten. Dem Fenster nach zu urteilen, benötigen wir einen „Registrieren“-Button. Finden wir es im Code. Wir brauchen also ein Element, es sollte den Text haben: „Register“. Oder sie sollte etwas damit zu tun haben. Klicken Sie aufCtrl+Shift+F
und suchen Sie nach „In Anführungszeichen registrieren“. Wir sehen, dass es eine auf index.xhtml gibt.
Ctrl+N
und suchen Sie nach:
Ctrl+F12
und suchen Sie nach der Registrierungsmethode
Anbindung von Bibliotheken von Drittanbietern zum Debuggen
Zunächst müssen wir selbst verstehen, welche Art von Bibliothek angeschlossen werden muss. Der erste Weg ist der schwierigste – die Suche im Internet. Die Geschwindigkeit und das Ergebnis der Ergebnisfindung hängen stark davon ab, wie gut das Projekt gemanagt wurde. WildFly verfügt beispielsweise über ein offenes Repository. Wenn wir also „TransactionScopedEntityManager“ googeln, gehen wir zu https://github.com/wildfly/wildfly/tree/master/jpa/subsystem und stellen fest, dass wir wildfly-jpa benötigen. Die zweite Methode ist richtig. Wo der Server ist, schauen Sie dort nach. Dabei können verschiedene Mittel helfen. Unter Windows könnte es beispielsweise Far Manager sein . Nachfolgend finden Sie ein Beispiel für einen Suchalgorithmus. Nachdem Sie es installiert und gestartet haben, wechseln Sie mit der Tabulatortaste zu einer der Registerkarten, indem SieAlt+F1
die linke oder Alt+F2
rechte Registerkarte verwenden, und wählen Sie die benötigte Partition auf der Festplatte aus. Es ist durchaus möglich, dass das Far Manager-Verzeichnis selbst nach der Installation im Far Manager geöffnet ist. Um zum Stammverzeichnis der Festplatte zu gelangen, drücken Sie Ctrl + \
. Öffnen Sie mit Alt+F
das Suchfenster, beginnen Sie mit der Eingabe des Namens des Verzeichnisses und drücken Sie die Eingabetaste, nachdem das Verzeichnis gefunden wurde. Diese Suche ist clever und hebt diejenigen Verzeichnisse hervor, die zum Suchtext passen. Wenn Sie Zeichen eingeben, für die es keine Ordner gibt, können diese Zeichen nicht eingegeben werden. Auf diese Weise gelangen wir in das Verzeichnis des Anwendungsservers. Nehmen wir an, wir wissen nicht, wo sich die Module auf dem Server befinden. Vielleicht ist es das erste Mal in Ihrem Leben, dass Sie von einer Art WildFly hören. Klicken Sie daher sofort hier, Alt+F7
um nach Dateien zu suchen. Die Logik schreibt also vor: Wir brauchen eine Datei mit der Bibliothek. Das heißt, wir brauchen ein Glas. Es sollte eine TransactionScopedEntityManager-Klasse darin vorhanden sein. Weil class = file, dann suchen Sie nach „contains“. Das heißt, etwa so:
- Super nützliche versioneye.com
- Zentrales Maven-Repository
GO TO FULL VERSION