Представляем nudge4j

Представляем nudge4j

1. обзор

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

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

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

2.1. Замаскированный REPL

nudge4j - это, по сути, цикл чтения-оценки-печати (REPL), в котором выtalk to your Java application within a browser window через простую страницу, содержащую всего два элемента:

  • редактор

  • кнопкаExecute on JVM

image

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

  • Введите любой код в редактор и нажмитеExecute on JVM

  • Браузер отправляет код в вашу JVM, которая затем запускает код

  • Результат возвращается (в виде строки) и отображается под кнопкой

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

2.2. Двигатель JavaScript

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

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

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

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

nudge4j позволяет вамaccess any Java class which is accessible from your JVM, позволяя вызывать методы, создавать объекты и т. д. Это очень мощный инструмент, но его может быть недостаточно при работе с вашим приложением.

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

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

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

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

image

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

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

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

Вместо этого вам необходимоsimply copy and paste a small snippet of Java code - около 100 строк - в любом месте вашего собственного кода, прежде чем запускать его.

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

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

  • Фрагментnudge4j можно поместить в любой класс; следовательно, он не мог сделать никаких предположений относительноimports, и любой класс, который он содержал, должен был быть полностью квалифицирован

  • Чтобы избежать потенциальных конфликтов с уже определенными переменными, код обернут в функцию

  • Доступ к встроенному JDK HttpServer осуществляется посредством самоанализа во избежание ограничений, которые существуют в некоторых IDE (например, Eclipse) для пакетов, начинающихся с“com.sun.*”

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

3.2. Образец заявки

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

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

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

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

args[1];

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

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

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

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

И чтобы добавить новыйtool кMap, вы должны написать:

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

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

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

Комбинируя два простых API в JDK (Nashorn иHttp server)nudge4j дает вам возможность исследовать любое приложение Java 8.

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