Présentation de nudge4j

Présentation de nudge4j

1. Vue d'ensemble

nudge4j permet aux développeurs de voir immédiatement l'impact de toute opération et fournit un environnement dans lequel ils peuvent explorer, apprendre et, finalement, passer moins de temps à déboguer et redéployer leur application.

Dans cet article, nous explorerons ce qu'estnudge4j, comment cela fonctionne et comment toute application Java en développement pourrait en bénéficier.

2. Fonctionnement denudge4j

2.1. Un REPL déguisé

nudge4j est essentiellement une boucle read-eval-print-loop (REPL) dans laquelle voustalk to your Java application within a browser window via une simple page contenant seulement deux éléments:

  • un éditeur

  • le boutonExecute on JVM

image

Vous pouvez parler à votre machine virtuelle dans un cycle REPL typique:

  • Tapez n'importe quel code dans l'éditeur et appuyez surExecute on JVM

  • Le navigateur envoie le code à votre machine virtuelle Java, qui l'exécute ensuite.

  • Le résultat est renvoyé (sous forme de chaîne) et affiché sous le bouton.

nudge4j est livré avec quelques exemples à essayer tout de suite, comme demander depuis combien de temps la JVM est en cours d'exécution et combien de mémoire est actuellement disponible. Je vous suggère de commencer par ceux-ci avant d'écrire votre propre code.

2.2. Le moteur JavaScript

Le code envoyé par le navigateur à la machine virtuelle Java est un code JavaScript manipulant des objets Java (à ne pas confondre avec un code JavaScript exécuté sur le navigateur). Le JavaScript est exécuté par le moteur JavaScript intégréNashorn.

Ne vous inquiétez pas si vous ne connaissez pas (ou n'aimez pas) JavaScript - pour vos besoinsnudge4j, vous pouvez simplement le considérer comme un dialecte Java non typé.

Notez que je suis conscient que dire que“JavaScript is untyped Java” est une énorme simplification. Mais je veux que les développeurs Java (qui peuvent avoir des préjugés envers tout ce qui est JavaScript) donnent une chance équitable ànudge4j.

2.3. Portée de l'interaction JVM

nudge4j vous permet deaccess any Java class which is accessible from your JVM, vous permettant d'appeler des méthodes, de créer des objets, etc. C'est très puissant, mais cela pourrait ne pas être suffisant lorsque vous travaillez avec votre application.

Dans certaines situations, vous pouvez souhaiter atteindre un ou plusieurs objets, spécifiques à votre application uniquement, afin de pouvoir les manipuler. nudge4j le permet. Tout objet devant être exposé peut être passé sous forme d'argument au moment de l'instanciation.

2.4. Gestion des exceptions

La conception denudge4j reconnaît la possibilité que les utilisateurs de l'outil commettent des erreurs ou provoquent des erreurs sur la JVM. Dans ces deux cas, l'outil est conçu pour signaler la trace complète de la pile afin de guider l'utilisateur dans la correction de l'erreur ou de l'erreur.

Examinons une capture d'écran dans laquelle un extrait de code qui a été exécuté entraîne la levée d'une exception:

image

3. Ajout denudge4j à votre application

3.1. Copiez et collez simplement

L'intégration avecnudge4j est réalisée de manière peu conventionnelle, car il n'y a pas de fichiersjar à ajouter à votre chemin de classe, et il n'y a pas de dépendances à ajouter à une construction Maven ou Gradle.

Au lieu de cela, vous devezsimply copy and paste a small snippet of Java code - environ 100 lignes - n'importe où dans votre propre code avant de l'exécuter.

Vous trouverez l'extrait de code sur lesnudge4j home page - il y a même un bouton sur la page sur lequel vous pouvez cliquer pour copier l'extrait dans votre presse-papiers.

Cet extrait de code peut sembler assez abstrus au début. Il y a plusieurs raisons à cela:

  • L'extrait de codenudge4j peut être déposé dans n'importe quelle classe; par conséquent, il ne pouvait faire aucune hypothèse concernant lesimports, et toute classe qu'il contenait devait être pleinement qualifiée

  • Pour éviter les conflits potentiels avec les variables déjà définies, le code est encapsulé dans une fonction.

  • L’accès au serveur JDK intégré HttpServer se fait par introspection afin d’éviter les restrictions existant avec certains IDE (par exemple, Eclipse) pour les packages commençant par“com.sun.*”

Ainsi, même si Java est déjà un langage bavard, il a fallu le rendre encore plus verbeux pour permettre une intégration transparente.

3.2. Exemple d'application

Commençons par une application JVM standard où nous prétendons qu’un simplejava.util.HashMap contient la plupart des informations avec lesquelles nous voulons jouer:

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.
        });
    }
}

Comme vous pouvez le voir dans cet exemple, vous collez simplement l'extrait de codenudge4j à la fin de votre propre code. Les lignes 12 à 20 de l'exemple ci-dessous servent d'espace réservé pour une version abrégée de l'extrait de code.

Maintenant, pointons le navigateur vershttp://localhost:5050/. La carte est désormais accessible en tant queargs[1] dans l'éditeur depuis le navigateur en tapant simplement:

args[1];

Cela fournira un résumé de nosMap (dans ce cas en se basant sur la méthodetoString() desMap et ses clés et valeurs).

Supposons que nous voulions examiner et modifier l'entréeMap avec la valeur de clé“tools”.

Pour obtenir une liste de tous lestools disponibles dans lesMap, vous écrirez:

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

Et pour ajouter un nouveautool auxMap, vous écririez:

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

En général, quelques lignes de code devraient suffire pour sonder une application Java.

4. Conclusion

En combinant deux API simples dans le JDK (Nashorn etHttp server)nudge4j vous donne la possibilité de sonder n'importe quelle application Java 8.

D'une certaine manière,nudge4j est juste une idée moderne coupant une vieille idée: donner aux développeurs l'accès aux installations d'un système existant via un langage de script - une idée qui peut avoir un impact sur la façon dont les développeurs Java pourraient passer leur journée à coder .