Java-дайджест (26 июня — 02 июля)

Этот дайджет взаимодополняет выпуск подкаста «Разбор Полётов». На этот раз в студии были Виктор Гамов, Алексей Абашев и Олег Чирухин. Получить запись подкаста можно либо пройдя по ссылке на сайт РП, либо скачав MP3-файл.

The State of Developer Ecosystem in 2018

Отличная инфографика от JetBrains доступна по ссылке. Очень объемный документ, пересказывать который в дайджесте бессмысленно — это нужно смотреть. Есть как обычные вопросы вида «пишете ли вы юнит-тесты», так и забавная статистика о количестве часов сна.

Ну и, конечно, мы как всегда командуем парадом!

JVM-языки

IDE

Конец эры Eclipse, как мы её знали. Eclipse Photon

Eclipse переходит с ежегодных общих сборок на Rolling Release длиной в три месяца. Кто не успел — тот опоздал. В этом релизе впервые за десятки лет нет из коробки SVN и Gerrit — их разработчики дезактивировались и не успели). Eclipse Sphinx (моделирование) и Eclipse Orion (браузерный редактор для разработки под веб) решили и не успевать. Интересно интервью JAXCenter с Вейном Битоном (директором OSS-проектов в Eclipse Foundation) как раз на эту тему. Говорит про девопс, CI/CD, имена релизов вида YYYY-MM, грядущий переход на Open J9.

Полный обзор Photon с веселыми картинками есть по ссылке.

  • Поддержка Java 10 и JavaEE 8;
  • Полная поддержка Rust (сборка, отладка, запуск, сборка пакетов);
  • Улучшения в C# (отладка, подсветка синтаксиса, автодополнение, диагностика, навигация);
  • Улучшения в тёмной теме (цвет текста и фона, всплывающие окна и так далее).

Из казусов — уже использовали новый девопс процесс, чтобы сломать и починить Eclipse Marketplace. Починка с точки зрения пользователя, к сожалению, ручная (надо идти и обновлять плагин маркетплейса).

Eclipse WebToolsPlatform (WTP) 3.10

  • Входит в состав Java EE IDE и JavaScript and Web Developers IDE или устанавливается через Marketplace;
  • Улучшена навигация по исходникам, когда есть неполный classpath или есть дубликаты классов, или нужно докачать зависимости из Maven и так далее;
  • Для проектов, собирающихся на Apache Tomcat или J2EE Preview, можно смотреть стандартную JEE-документацию прямо в Эклипсе. Требует активного интернет-соединения;
  • При развертывании проекты могут задекларировать, что им требуется JAX-RS 2.1;
  • Уважаются настройки темной темы;
  • Вернули Snippets View и JSP Java Search, перформанс последней сильно улучшили.

NetBeans 9

Понемногу развивается, пишутся посты в блогах, но на сайте нет сборок позже 28 мая. Как его собрать самому?

  1. git clone https://github.com/apache/incubator-netbeans.git;
  2. перейти в директорию incubator-netbeans;
  3. выполнить команду ant (если Ant не установлен заранее — установить);
  4. зайти в директорию ncubator-netbeans/nbbuild/netbeans — там лежит сборка;
  5. запустить Netbeans из директории со сборкой (incubator-netbeans/nbbuild/netbeans/bin/netbeans).

IntelliJ IDEA

Отличный пост про inspections и intentions в версии 2018.2 в официальном блоге. Присутствуют анимированные гифки.

Фреймворки

Spring

Spring Fu

Spring Fu — это экспериментальный микрофреймворк на Kotlin, который предназначен для тестирования новых идей для будущей интеграции в Spring Boot.

Теперь он стал нормально собираться с помощью GraalVM (точней, SVM native-image). Нужен Graal 1.0.0.RC2 и Kotlin 1.2.60 (с 1.2.51 тоже должно работать). Время запуска — меньше 3 миллисекунд на ноутбуке. Размер исполняемого файла — 50 мегабайт, но вполне возможно, что его получится уменьшить. Настоящий прорыв со скорости запуска.

Spring Cloud for Google Cloud Platform 1.0.0.RC1

  • Google Cloud Pub/Sub (через Spring Integration и Spring Cloud Stream);
  • Google Cloud SQL;
  • Google Cloud Storage;
  • Google Cloud Stackdriver Logging;
  • Google Cloud Stackdriver Trace (через Spring Cloud Sleuth);
  • Google Cloud Accounts;
  • Примеры лежат на GitHub.

Spring Cloud Stream Fishtown.M1 /2.1.0.M1 (release train)

  • Огромная куча починенных багов и улучшений;
  • В release notes есть уточнения о совместимости со Spring Boot, Spring Cloud, Spring AMQP, Spring for Apache Kafka;
  • Core
    • Официальная поддержка старшинства свойств. В данном примере третья строка уточняет вторую:

      spring.cloud.stream.default.contentType=text/plain
      spring.cloud.stream.default.producer.partitionCount=1
      spring.cloud.stream.bindings.output.producer.partitionCount=4
    • Кастомизация Message Listener container регистрацией бина ListenerContainerCustomizer;
    • output binding actuator endpoints;
  • Kafka Binder
    • Wildcards для имен топиков;
    • Новая аннотация @KafkaStreamsStateStore для создания сторов на низкоуровневом API стримов;
    • Подписка на несколько топиков;
    • Улучшения в интерактивных запросах — работа с несколькими подписчиками;
    • QueryableStoreRegistry — deprecated, появилось новое API InteractiveQueryService. В дополнение к возможности делать запросы к state stores, это API позволяет получать информацию о хосте, где работает подписчик;
    • Мультиплексирование

Spring Cloud Data Flow 1.5

Spring Cloud Data Flow нужен для создания риалтаймовых пайплайнов обработки данных. В этом релизе произошли закономерные улучшения в UI, метриках, спринговых стартерах, интеграции с Kubernetes и так далее.

Сейчас можно наблюдать, что Spring CDF — это сложная система, построенная на интеграции со многими другими спринговыми проектами.

SpringBoot for Apache Geode and Pivotal Gemfire 1.0.0.M1

Apache Geode — это ядро Pivotal GemFire. Низкопаузная in-memory база данных, для развертывания в облаке. Есть своя модель консистентности, транзакции, shared-nothing архитектура для сильно конкурентной обработки данных. Можно использовать Geode не только как кэш, но и как хранилище реальных данных (есть встроенный persistance), есть OQL (Object Query Language) для запросов ко вложенным объектам и так далее.

Jolokia

Jolokia — это JMX-HTTP биндинг, который предоставляет альтернативу коннекторам JSR-160. Появилось интересное исследование мантейнера Jolokia, который утверждает, что многие сайты просто бросают jolokia.war в деплойменты и не конфигурируют ее по мануалу (или конфигурируют не полностью), что позволяет злоумышленнику утягивать произвольную информацию, включая доступы к БД и организовывать DDoS-атаки.

JHipster 5.0.0

  • Фронт
    • Поддержка React вышла из экспериментального статуса
      • Те же фичи, что и для Angular
      • Redux, React Router v4
    • Angular 6
    • Webpack 4 для Angular и React
    • Возможность юзать Jest вместо Puppeteer
    • Font Awesome 5, Prettier, Husky
  • Бэк
    • Spring Boot 2.0.0 (Data, Cloud, Security)
    • Улучшения в OAuth
    • swagger-codegen -> openapi-generator (community-driven форк сваггера. Контрибьютор @cbornet ушел в этот форк и пилит улучшалки только туда)
    • Memcached как альтернативная реализация Spring Cache. Утверждается, что его гораздо проще использовать, чем Ehcache/Hazelcast/Infinispan на клаудных провайдерах вроде Heroku, GCP или AWS.
  • Инструменты
    • Улучшения в JDL, на котором можно теперь делать полноценные приложения
    • Система blueprints, которая может заменить JHipster Templates. Документации пока почти нет, в качестве примера можно смотреть JHipster Kotlin.
    • Поддержка Istio

Инструменты и DevOps

AutoDevOps в GitLab 11.0

Только что вышел свежий GitLab, и в нём анонсирована фича под названием AutoDevOps. По сути, это преднастроенный end-to-end пайплайн, включающий сборку, тестирование, анализ кода, анализ безопасности, проверку лицензий, пакетирование, перформанс-тестирование, развертывание и даже мониторинг. Есть небольшой ознакомительный ролик на YouTube. По сути, ты коммитишь код в репозиторий, и дальше GitLab подхватывает его и тащит по пайплайну совершенно самостоятельно.

Кроме того, в новый GitLab добавили Web IDE для просмотра CI/CD пайплайнов, автоматическое определение лицензий зависимостей проекта, обновленный интерфейс эпиков и роадмапов, улучшенную интеграцию с Kubernetes и средствами тестирования и еще кучу всего по мелочи.

Git 2.18 и Git Protocol Version 2

Git wire Protocol version 2 доступен теперь в последнем официальном релизе. Описание можно прочитать здесь. Новая версия протокола предназначена для улучшения перформанса, например — для серверной фильтрации бранчей и тэгов. В смысле, серверу больше не требуется отсылать на клиент список со всеми референсами репозитория, чтобы клиент их там пофильтровал. На больших проектах раньше пересылаемый объем данных мог доходить до многих мегабайтов, вне зависимости от операции, которую хочет сделать клиент. В протоколе версии 2 всё будет зависеть от типа операции. Например, если хочется обновить бранч, который всего лишь на пару коммитов отстал от апстрима, или проверить, что бранч и так свежий, передача всех-всех данных — это просто трата времени и сетевого трафика. Для большого репозитория такие операции могут ускориться раза в три, по словам Brandon Williams (корного коммитера Git). Версию протокола можно будет выбирать с помощью параметра, например: git -c protocol.version=2 ls-remote.

Другая важная фича версии 2.18 — serialized commit-graph, которая может дать двукратное ускорение на больших репозиториях вроде репозитория ядра Linux или самого Git. Включается командой git config core.commitGraph true.

Безопасность

  • По роадмапу Web Assembly видно, что он получит доступ к использованию тредов и shared memory, что дает дорогу к созданию точных таймеров, что в свою очередь позволяет эксплуатировать Meltdown и Spectre. Соответственно, через веб-приложение можно будет хакнуть компьютер пользователя в произвольном месте, и организовать совершенно новый вид атак на веб-сервисы.

Тестирование

Обновления

  • Mockito 2.19.0. Очень странное обновление, увидел на гитхабе только то, что они поменяли ссылки в связи с публикацией на Maven Central.

Статьи

Важно: 2018 State of Testing Report (и приуроченный к нему интервью InfoQ)

Технические

Общеобразовательные

Дайджест готовили

  • Текстовая версия: Олег Чирухин (контент, верстка, проверка фактов) и редакция JUG.ru Group.
  • Подкаст «Разбор Полётов» (ссылка на запись): Виктор Гамов, Алексей Абашев, Олег Чирухин.