«1. Обзор

nudge4j позволяет разработчикам сразу увидеть влияние любой операции и предоставляет среду, в которой они могут исследовать, учиться и, в конечном счете, тратить меньше времени на отладку и повторное развертывание своего приложения.

В этой статье мы рассмотрим, что такое nudge4j, как он работает и какую пользу он может извлечь из разрабатываемого Java-приложения.

2. Как работает nudge4j

2.1. REPL in Disguise

nudge4j — это, по сути, цикл чтения-оценки-печати (REPL), в котором вы взаимодействуете со своим Java-приложением в окне браузера через простую страницу, содержащую всего два элемента:

    редактор, исполняемый на Кнопка JVM

Вы можете общаться с вашей JVM в типичном цикле REPL:

    Введите любой код в редактор и нажмите Execute on JVM Браузер отправляет код на вашу JVM, которая затем запускает код Результат возвращается ( в виде строки) и отображается под кнопкой

nudge4j поставляется с несколькими примерами, которые можно попробовать сразу, например, узнать, как долго работает JVM и сколько памяти доступно в данный момент. Я предлагаю вам начать с них, прежде чем писать собственный код.

2.2. Движок JavaScript

Код, отправляемый браузером в JVM, представляет собой код JavaScript, который манипулирует объектами Java (не путать с любым JavaScript, работающим в браузере). JavaScript выполняется встроенным движком JavaScript Nashorn.

Не волнуйтесь, если вы не знаете (или не любите) JavaScript — для ваших нужд nudge4j вы можете просто думать о нем как о нетипизированном диалекте Java.

Обратите внимание, что я знаю, что утверждение, что «JavaScript — это нетипизированная Java», является огромным упрощением. Но я хочу, чтобы Java-разработчики (которые могут иметь предубеждение ко всему, что относится к JavaScript) дали nudge4j шанс.

2.3. Объем взаимодействия с JVM

nudge4j позволяет вам получить доступ к любому классу Java, который доступен из вашей JVM, позволяя вам вызывать методы, создавать объекты и т. д. Это очень мощно, но этого может быть недостаточно при работе с вашим приложением.

В некоторых ситуациях вам может понадобиться получить доступ к одному или нескольким объектам, специфичным только для вашего приложения, чтобы вы могли манипулировать ими. nudge4j позволяет это сделать. Любой объект, который необходимо показать, может быть передан в качестве аргумента во время создания экземпляра.

2.4. Обработка исключений

Дизайн nudge4j признает возможность того, что пользователи инструмента могут совершать ошибки или вызывать ошибки в JVM. В обоих этих случаях инструмент предназначен для создания отчета о полной трассировке стека, чтобы помочь пользователю исправить ошибку или ошибку.

Давайте посмотрим на снимок экрана, на котором выполненный фрагмент кода приводит к возникновению исключения:

3. Добавление nudge4j в ваше приложение

3.1. Просто скопируйте и вставьте

Интеграция с nudge4j достигается несколько нетрадиционно, поскольку нет файлов jar, которые можно добавить в путь к классам, и нет зависимостей, которые можно добавить в сборку Maven или Gradle.

Вместо этого вам необходимо просто скопировать и вставить небольшой фрагмент кода Java — около 100 строк — в любое место вашего собственного кода, прежде чем запускать его.

Вы найдете фрагмент на домашней странице nudge4j — на странице даже есть кнопка, которую можно нажать, чтобы скопировать фрагмент в буфер обмена.

Этот фрагмент кода на первый взгляд может показаться довольно запутанным. Для этого есть несколько причин:

Фрагмент nudge4j можно добавить в любой класс; поэтому он не мог делать никаких предположений относительно импорта, и любой содержащийся в нем класс должен был быть полностью квалифицирован. Чтобы избежать потенциальных конфликтов с уже определенными переменными, код заключен в функцию. Доступ к встроенному JDK HttpServer осуществляется путем самоанализа. чтобы избежать ограничений, существующих в некоторых IDE (например, Eclipse) для пакетов, начинающихся с \»com.sun.*\». обеспечивают бесшовную интеграцию.

    3.2. Пример приложения

«Давайте начнем со стандартного JVM-приложения, где мы притворимся, что простой java.util.HashMap содержит большую часть информации, с которой мы хотим поиграть:

Как видно из этого примера, вы просто вставляете nudge4j фрагмент в конце вашего собственного кода. Строки 12-20 в этом примере служат заполнителем для сокращенной версии фрагмента.

Теперь давайте укажем браузеру на http://localhost:5050/. Карта теперь доступна как args[1] в редакторе из браузера, просто набрав:

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<Object[]>() {
            public void accept(Object args[]) {
                ...
                ...
            }
        }).accept(new Object[] { 
            5050,  // <-- the port
            map    // <-- the map is passed as a parameter.
        });
    }
}

Это предоставит сводку нашей Карты (в данном случае полагаясь на метод toString() Карты и его ключи и значения).

Предположим, мы хотим проверить и изменить запись Map со значением ключа «tools».

args[1];

Чтобы получить список всех доступных инструментов на Карте, вы должны написать:

А чтобы добавить новый инструмент на Карту, вы должны написать:

В общем, несколько строк кода должно быть достаточно для проверки любого Java-приложения.

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

4. Заключение

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

Объединив два простых API в JDK (Nashorn и Http-сервер), nudge4j дает вам возможность исследовать любое приложение Java 8.

В каком-то смысле nudge4j — это просто современный вариант старой идеи: предоставить разработчикам доступ к возможностям существующей системы через язык сценариев — идея, которая может повлиять на то, как Java-разработчики могут проводить свой день. кодирование.

«

In a way, nudge4j is just a modern cut off an old idea: give developers access to the facilities of an existing system via a scripting language – an idea that can make an impact on how Java developers could spend their day coding.