nudge4j wird vorgestellt

Wir stellen vor: nudge4j

1. Überblick

Mitnudge4j können Entwickler die Auswirkungen eines Vorgangs sofort erkennen und eine Umgebung bereitstellen, in der sie ihre Anwendung erkunden, lernen und letztendlich weniger Zeit für das Debuggen und erneute Bereitstellen ihrer Anwendung aufwenden können.

In diesem Artikel werden wir untersuchen, wasnudge4j ist, wie es funktioniert und wie jede Java-Anwendung in der Entwicklung davon profitieren kann.

2. Wienudge4j funktioniert

2.1. Eine verkleidete REPL

nudge4j ist im Wesentlichen eine Read-Eval-Print-Schleife (REPL), in der Sietalk to your Java application within a browser window über eine einfache Seite mit nur zwei Elementen ausführen:

  • ein Bearbeiter

  • die TasteExecute on JVM

image

Sie können in einem typischen REPL-Zyklus mit Ihrer JVM sprechen:

  • Geben Sie einen beliebigen Code in den Editor ein und drücken SieExecute on JVM

  • Der Browser sendet den Code an Ihre JVM, die ihn dann ausführt

  • Das Ergebnis wird als String zurückgegeben und unterhalb der Schaltfläche angezeigt

nudge4j enthält einige Beispiele, die Sie sofort ausprobieren können, z. B. die Abfrage, wie lange die JVM ausgeführt wurde und wie viel Speicher derzeit verfügbar ist. Ich schlage vor, Sie beginnen mit diesen, bevor Sie Ihren eigenen Code schreiben.

2.2. Die JavaScript Engine

Der Code, der vom Browser an die JVM gesendet wird, ist JavaScript, das Java-Objekte manipuliert (nicht zu verwechseln mit JavaScript, das im Browser ausgeführt wird). Das JavaScript wird von der integrierten JavaScript-EngineNashorn ausgeführt.

Machen Sie sich keine Sorgen, wenn Sie JavaScript nicht kennen (oder mögen) - für die Anforderungen vonnudge4jkönnen Sie es sich einfach als untypisierten Java-Dialekt vorstellen.

Beachten Sie, dass mir bewusst ist, dass“JavaScript is untyped Java” eine enorme Vereinfachung darstellt. Aber ich möchte, dass Java-Entwickler (die möglicherweise Vorurteile gegenüber JavaScript haben)nudge4jeine faire Chance geben.

2.3. Umfang der JVM-Interaktion

Mitnudge4j können Sieaccess any Java class which is accessible from your JVM aufrufen, Methoden aufrufen, Objekte erstellen usw. Dies ist sehr leistungsfähig, aber möglicherweise nicht ausreichend, wenn Sie mit Ihrer Anwendung arbeiten.

In einigen Situationen möchten Sie möglicherweise ein oder mehrere Objekte erreichen, die nur für Ihre Anwendung spezifisch sind, damit Sie sie bearbeiten können. nudge4j ermöglicht dies. Jedes Objekt, das verfügbar gemacht werden muss, kann zur Instanziierungszeit als Argument übergeben werden.

2.4. Ausnahmebehandlung

Das Design vonnudge4j erkennt die Möglichkeit, dass Benutzer des Tools Fehler machen oder Fehler in der JVM verursachen können. In beiden Fällen ist das Tool so konzipiert, dass es den vollständigen Stack-Trace meldet, um den Benutzer zur Behebung des Fehlers oder Fehlers zu führen.

Schauen wir uns einen Screenshot an, in dem ein ausgeführter Codeausschnitt dazu führt, dass eine Ausnahme ausgelöst wird:

image

3. Hinzufügen vonnudge4j zu Ihrer Anwendung

3.1. Einfach kopieren und einfügen

Die Integration mitnudge4j wird etwas unkonventionell erreicht, da Ihrem Klassenpfad keinejar-Dateien hinzugefügt werden müssen und keine Abhängigkeiten zu einem Maven- oder Gradle-Build hinzugefügt werden müssen.

Stattdessen müssen Siesimply copy and paste a small snippet of Java code - ungefähr 100 Zeilen - irgendwo in Ihren eigenen Code eingeben, bevor Sie ihn ausführen.

Sie finden das Snippet aufnudge4j home page. Auf der Seite befindet sich sogar eine Schaltfläche, auf die Sie klicken können, um das Snippet in Ihre Zwischenablage zu kopieren.

Dieser Codeausschnitt mag zunächst recht abstrus erscheinen. Dafür gibt es einige Gründe:

  • Dasnudge4j-Snippet kann in eine beliebige Klasse eingefügt werden. Daher konnte keine Annahme bezüglich desimports getroffen werden, und jede darin enthaltene Klasse musste vollständig qualifiziert sein

  • Um mögliche Konflikte mit bereits definierten Variablen zu vermeiden, wird der Code in eine Funktion eingeschlossen

  • Der Zugriff auf den integrierten JDK HttpServer erfolgt über eine Introspektion, um Einschränkungen zu vermeiden, die bei einigen IDEs (z. Eclipse) für Pakete, die mit“com.sun.*” beginnen

Obwohl Java bereits eine ausführliche Sprache ist, musste es noch ausführlicher gestaltet werden, um eine nahtlose Integration zu gewährleisten.

3.2. Beispielanwendung

Beginnen wir mit einer Standard-JVM-Anwendung, in der wir so tun, als ob ein einfachesjava.util.HashMap die meisten Informationen enthält, mit denen wir spielen möchten:

public class MyApp {
    public static void main(String args[]) {
        Map map = new HashMap();
        map.put("health", 60);
        map.put("strength", 4);
        map.put("tools", Arrays.asList("hammer"));
        map.put("places", Arrays.asList("savannah","tundra"));
        map.put("location-x", -42 );
        map.put("location-y", 32);

        // paste original code from nudge4j below
        (new java.util.function.Consumer() {
            public void accept(Object args[]) {
                ...
                ...
            }
        }).accept(new Object[] {
            5050,  // <-- the port
            map    // <-- the map is passed as a parameter.
        });
    }
}

Wie Sie in diesem Beispiel sehen können, fügen Sie einfach dasnudge4j-Snippet am Ende Ihres eigenen Codes ein. Die Zeilen 12-20 in diesem Beispiel dienen als Platzhalter für eine abgekürzte Version des Snippets.

Zeigen wir nun mit dem Browser aufhttp://localhost:5050/.. Auf die Karte kann jetzt im Browser alsargs[1] zugegriffen werden, indem Sie einfach Folgendes eingeben:

args[1];

Dies liefert eine Zusammenfassung unsererMap (in diesem Fall basierend auf dertoString()-Methode derMap und ihren Schlüsseln und Werten).

Angenommen, wir möchten den EintragMap mit dem Schlüsselwert“tools” untersuchen und ändern.

Um eine Liste aller verfügbarentools inMap zu erhalten, schreiben Sie:

map = args[1];
map.get("tools");

Und um ein neuestool zuMap hinzuzufügen, würden Sie schreiben:

map = args[1];
map.get("tools").add("axe");

Im Allgemeinen sollten wenige Codezeilen ausreichen, um eine Java-Anwendung zu testen.

4. Fazit

Durch die Kombination von zwei einfachen APIs innerhalb des JDK (Nashorn undHttp server)nudge4j können Sie jede Java 8-Anwendung untersuchen.

In gewisser Weise istnudge4j nur ein moderner Ausschnitt aus einer alten Idee: Entwickeln Sie Entwicklern über eine Skriptsprache Zugriff auf die Funktionen eines vorhandenen Systems - eine Idee, die sich darauf auswirken kann, wie Java-Entwickler ihren Tag mit Codierung verbringen können .