Рубрики
Без рубрики

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

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

Автор оригинала: Lorenzo Puccetti.

1. Обзор

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

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

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

2.1. Переодетый РЕПЛ

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

  • редактор
  • кнопка Выполнить на JVM

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

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

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

2.2. Движок JavaScript

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

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

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

2.3. Сфера взаимодействия СПМ

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

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

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

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

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

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

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

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

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

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

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

  • Фрагмент nudge4j может быть отброшен в любой класс; поэтому он не мог сделать никаких предположений относительно импорта s, и любой класс, который он содержал, должен был быть полностью квалифицирован
  • Чтобы избежать возможных столкновений с уже определенными переменными, код завернут в функцию
  • Доступ к встроенному 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 со значением ключа “инструменты” .

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

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

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

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

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

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

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

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