DukeScript является победителем конкурса Duke’s Choice на JavaOne 2014, и это еще одно воплощение мечты Java о том, чтобы писать один раз в любом месте. В этом случае целью являются мобильные и веб-приложения.
DukeScript-это не новый язык. Это та же старая Java, которую вы уже знаете, но у нее есть некоторые дополнительные параметры развертывания и пользовательского интерфейса. Утверждается, что одно и то же приложение может работать на рабочем столе, iOS, Android и в любом браузере. Удивительно, но с подобными утверждениями это не компилятор Java для JavaScript. Он работает путем запуска байтового кода на соответствующей JVM и использует набор привязок к пользовательскому интерфейсу, созданному с использованием HTML.
Ключевая идея заключается в том, что пользовательский интерфейс создается с использованием HTML/CSS. В частности, вы можете использовать такие библиотеки, как Knockout. Идея заключается в том, что вы создаете модели данных в Java, которые имеют значения, которые могут быть автоматически привязаны к элементам HTML. Это означает, что ваш Java-код не работает непосредственно с HTML через DOM. Вместо этого вы создаете модели с помощью аннотаций и привязываете их к HTML, указывая идентификаторы как для элементов HTML, так и для свойств модели.
Это очень «ручной» подход и означает, что вы можете в основном игнорировать детали того, как ваши данные на самом деле обрабатываются пользовательским интерфейсом — это в значительной степени подход к представлению модели. Это также означает, что вы можете изменить пользовательский интерфейс, просто изменив привязки. Модели также могут, например, взаимодействовать с сервером через REST или WebSockets через привязки.
Вы можете использовать новую технологию в качестве надстройки для NetBeans, и она предоставит вам полный шаблон проекта, готовый к работе. Однако то, что вам представлено, выглядит сложным, и документация не очень хороша. Если вы знаете, как работает DukeScript, вы найдете JAVADOC адекватными, но если вы ищете что-то простое, например, как установить связь между текстовым элементом и строкой данных, вам придется довольно много работать.
Как и во многих других новых проектах Java, все это терпит неудачу, потому что нет простого пути в новую технологию. Веб-сайт DukeScript выглядит красиво, и он предоставляет вам 1000-футовый обзор того, что вы можете сделать, но как это сделать, не так просто увидеть. Есть также видео, но оно действительно не помогает. Когда Oracle поймет, что серия видеороликов о ночном взломе серьезно подрывает доверие к ней?
Предполагая, что вам удастся увидеть, как все это работает, и вы создали приложение, вы можете легко развернуть его на любой из платформ, упомянутых ранее. Интересно узнать, как на самом деле работает каждое из этих развертываний.
При развертывании на Android виртуальная машина Dalvik запускает байтовый код, а HTML-код размещается компонентом WebView. Конечно, есть приложение-контейнер, которое заставляет все это работать. Для iOS используется аналогичный подход, но виртуальная машина-RoboVM.
Для развертывания в браузере используемое решение вызывает удивление. Нет, настоящая виртуальная машина Java не используется. Вместо этого используется реализация проекта Bck2Brwser виртуальной машины в JavaScript. Это позволяет байт-коду работать без каких-либо плагинов или специальных положений Java. Это все «родной» JavaScript. Конечно, веб-браузер отображает HTML.
Для развертывания на рабочем столе используется JavaFX и реальная JVM.
Так нужен ли нам DukeScript?
Это не единственная попытка получить Java в браузере. Наиболее примечательным является GWT от Google, но он компилирует Java в JavaScript. Что важно и отличается от DukeScript, так это то, что он не компилируется в JavaScript, а запускает байтовый код с помощью соответствующей JVM.
Это старый способ Java — реализовать JVM, а затем запустить свой код.
Это может даже оказаться успешным, если им удастся облегчить начало работы.