1. Обзор
nudge4j
позволяет разработчикам сразу увидеть влияние любой операции и предоставляет среду, в которой они могут исследовать, учиться и, в конечном счете, тратить меньше времени на отладку и повторное развертывание своего приложения.
В этой статье мы рассмотрим, что такое nudge4j
, как он работает и какую пользу он может извлечь из разрабатываемого Java-приложения.
2. Как работает nudge4j
2.1. REPL в маскировке
nudge4j
— это, по сути, цикл чтения-оценки-печати (REPL), в котором вы общаетесь со своим Java-приложением в окне браузера через простую страницу, содержащую всего два элемента:
- редактор
- кнопка Выполнить
на JVM
Вы можете общаться со своей JVM в типичном цикле REPL:
- Введите любой код в редактор и нажмите
Execute на 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
можно добавить в любой класс; поэтому он не мог делать никаких предположений относительноimport
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<Object[]>() {
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];
Это предоставит сводку нашей карты
(в данном случае опираясь на метод toString ()
карты
и его ключи и значения).
Предположим, мы хотим проверить и изменить запись Map
со значением ключа «tools»
.
Чтобы получить список всех доступных инструментов
на карте
, вы должны написать:
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-разработчики могут проводить свой день за программированием.