Java-дайджест (25 мая — 4 июня)

Расписание дайджестов

Мы провели небольшие исследования, и теперь Java-дайджест будет выходить в понедельник. Новый график действует в экспериментальном режиме до получения стабильного фидбэка от читателей.

Сообщество

  • Вышли первые два (раз, два) из примерно шести выпусков «Разбора Полётов», записанные на JPoint вместе с Антоном Черноусовым.

Платформа Java

  • Встречайте нового члена Java Community Process (JCP) Executive Committee (EC) — Alibaba. В своем питче «почему за нас стоит голосовать» Kingsum Chow (занимающий должность Chief Scientist в Alibaba System Software Hardware Co-optimization group) сказал: «Alibaba имеет долгую историю участия в open source и сообществе […] Мы делаем софт на основе богатой экосистемы Java, выложенной в open source, и мы возвращаем наработки в сообщество, включая jStorm, fastJSON, и т.п. У нас есть два коммитера в OpenJDK и еще один человек в экспертной группе по JSR 353».
  • В Оракле хотят выбросить джавовую стандартную сериализацию. Это долгосрочная цель, являющаяся частью Project Amber. Вместо неё в JDK предлагается впилить фреймворк, который будет делать сериализацию над графами рекордов. Конечно, это может произойти только тогда, когда рекордами можно будет пользоваться — а когда это произойдет, в точности никто и не знает (включая Рейнхольда и Гёца).
  • Предлагается добавить метод Files.isSameContent, нужный сами понимаете для чего. Обсуждение в рассылочке заключается в решении довольно скучных вопросов:
    • А может назвать haveSameContents()?
    • Объяснить взаимоотношения с существующим методом isSameFile(). Например, обсудить, что isSameFile(Path,Path) возвращает true просто по факту совпадения аргументов Path, даже не проверяя существование этих файлов.
    • А существуют ли реальные жизненные примеры использования такого метода? Ну например, чтение файла сразу в строку.
    • Интересное сообщение от Remi Forax о том, как в шесть строк джавакода можно захэшировать содержимое файла, используя няшные нововведения из JDK 9 и 10 (InputStream.transfer(OutputStream), local variable type inference, MessageDigest, DigestOutputStream).
  • Скорей всего, isSameContent примут, потому что он уже обсуждается в другом предложении — Add methods to Files for reading/writing a string from/to a file, добавляющее следующие методы:
    • readString(Path)
    • readString(Path, Charset)
    • writeString(Path, CharSequence, OpenOption...)
    • writeString(Path, CharSequence, Charset, OpenOption...)
  • Новые JEP:
    • JEP 329: ChaCha20 and Poly1305 Cryptographic Algorithms. Если ты не понимаешь, что это, то тебе оно и не нужно 🙂 В целом, RC4 (Rivest Cipher 4) отключили в современных браузерах, потому что он небезопасный, а ChaCha20 пришел ему на замену — таким образом можно идти в ногу с другими криптографическими тулкитами и реализациями TLS;
    • JEP 330: Launch Single-File Source-Code Programs. Можно из командной строки, как скрипт, запускать такие джава-файлы, у которых в заголовке есть shebang (то есть строка вида #!/path/to/java --source version).

Фреймворки

  • Только ленивый на этой неделе не написал, что недавно вышедший Wicket 8 не очень-то умеет в лямбды. Дело в том, что лямбд нет в API, и разработчики объясняют это производительностью и использованием памяти. Но мы-то понимаем. При этом фабрики с поддержкой лямбд для форм, моделей и behavior имеются, в результате разработчик может использовать лямбды там же, где и модели. Раньше вся привязка данных делалась с помощью PropertyModel поиском по строке и выглядела чрезвычайно убого и неподдерживаемо в IDE. Теперь же можно использовать LambdaModel, и это хотя бы позволяет подключить кое-какие рефакторинги.

IDE

  • Вышла IntelliJ IDEA 2018.2 EAP3
    • Улучшилась работа с аннотацией @Contract;
    • Jump outside closing bracket/quote;
    • В отладчике, intentions на брейкпоинтах теперь могут срабатывать или не срабатывать в зависимости от вызывающего метода;
    • В диалоге Git Checkout работает автодополнение тэгов.
  • Обновление статуса Theia.
    • Переход в Eclipse Foundation, лицензия — EPL2 и GPL;
    • Eclipse Che переходит на Theia;
    • Над Theia будут трудиться RedHat, Ericsson и TypeFox. В рамках сотрудничества начата работа над визуальным отладчиком, поддержкой протокола отладки из VSCode и новой моделью и API плагинов, которая делается с учетом возможности поддержки плагинов VSCode.
    • Куча ништяков в визуальной части: шелл переписан для поддержки drag and drop, улучшена интеграция с Git (diff, history, staging), полноценная поддержка поиска текста по проекту (регулярки и т.п).
  • Вышел очередной release candidate для Apache NetBeans 9.0. Качать здесь. Среди улучшений:
    • Module Path в дополнение к classpath;
    • Добавлен новый тип проекта — Java Modular Project, который позволяет разрабатывать несколько Java-модулей внутри одного проекта NetBeans.
    • Для модулей поддерживается полный цикл Edit-Compile-Debug+Profile;
    • Зависимости модуля можно посмотреть прямо в IDE;
    • Поддержка JShell;
    • Улучшения в интерфейсе профилировщика;
    • Всестороннее улучшение поддержки PHP и С++ (это ведь так важно для нас, джавистов? 🙂
  • Вышел Gradle 4.7, список фичей стал еще длинней:
    • Инкрементальная обработка аннотаций;
    • Поддержка рантайма Java 10;
    • Группировка в неинтерактивных консольных логах (там есть rich и plain режимы, и теперь они отображают одинаково хорошо):
    • Перезапуск упавших тестов для более быстрого фидбэка;
    • Kotlin DSL 0.16, в котором появились предкомпилированные скриптовые плагины (после подключения, src/main/kotlin становится доступен как обычный Gradle-плагин).

Eclipse

  • Mike Milinkovich в своем посте сформулировал текущий статус проектов Jakarta EE. Напомню, что ранее был анонс Оракла по поводу фронта предстоящих работ, и вот как он выполнен:
    • Перелицензирование всего в Eclipse — выполнено на 99%. Лицензии — EPL 2 и GPL 2 с classpath exception.
    • Продемонстрировать способность сообщества разработать совместимую реализацию — в процессе. Там нужно хотя бы перенести на инфраструктуру Eclipse целых 39 проектов, и это ой как непросто.
    • Разобраться с брендингом — сделано. Придумано имя и логотип. Решены проблемы с ASF, которые тоже использовали имя Jakarta.
  • Глобальное обновление политики приватности для веб-сайтов Eclipse в соответствии с GDPR.
  • Вышел JBoss Tools 4.6.0.AM2 for Eclipse Photon.0.M7. Полное описание изменений есть на этой странице:
    • Camel Rest DSL from WSDL wizard
    • Camel Editor REST tab
  • Вышел Xtext 2.14. В то время как прошлые релизы фокусировались на повышении стабильности и исправлении багов, в 2.14 добавили множество новой функциональности. В частности:
    • Поддержка Java 9 и 10
    • Поддержка JUnit 5
    • Новые аннотации: @Deprecated, @Final и @Exported;
    • Интеграция с Eclipse:
      • Проверка ошибок конфигурации;
      • Улучшения в Quickfixes;
      • Отмена рефакторингов;
      • Content Type Descriptor;
    • Новые API:
      • EMF Model Manipulation API;
      • Новый Rename Refactoring;
      • Улучшения в Xbase Library (org.eclipse.xtext.xbase.lib);
    • Трейсинг по сгенерированному Java-коду;

    В целом, ситуация с багами в Xtext выглядит как-то так:

Базы данных

  • Hibernate ORM 5.3 только-только вышел, а ему уже завезли багфикс-релиз с двадцатью багами. Ну хоть что-то в этой жизни остается неизменным!
  • Что паровозом потянуло за собой багфикс-релиз для Hibernate Search по трём веткам. Хотя свои собственные баги там тоже есть.
  • Выпущен Hibernate OGM 5.4.0.Beta1. Основные отличия:
    • обновление зависимостей до Hibernate ORM 5.3.0.Final;
    • поддержка Infinispan Remote Queries (native, JPQL);
    • использование cluster counters для локальных кэшей при генерации sequences для Infinispan Embedded.
  • Выпущен MySQL 8.0. С одной стороны, новость не напрямую про Java, но многие у нас все еще используют MySQL. В этом релизе интересно появление документного хранилища, позволяющего внутри одной базы работать как в парадигме SQL, так и NoSQL с применением schema-less JSON. Интересно, как отреагирует на всё это сообщество Hibernate?
  • Рекомендую статью про Redis Streams, которые в начале года-таки добрались до бранча unstable. API ещё не зафиксированы, так что, если вам действительно важна эта фича, ещё можно связаться с разработчиками и повлиять на её дизайн.

DevOps

  • containerd 1.1 ушел в GA. Теперь он поддерживает все фичи Kubernetes. Победное шествие Kubernetes по планете продолжается!

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

Важные обновления

Интересные статьи

  • Get Started With JUnit 5 — толковый мини-курс из семи частей;
  • Database testing with Citrus — если вы еще не пробовали Citrus, то можно посмотреть, как в нем решаются подобные проблемы и стоит ли с ним связываться;
  • Inline unit tests in Clojure — рассказывает об интересной практике в Clojure, когда юнит-тесты пишутся в том же файле, где написана тестируемая функция;
  • TestContainers and Spring Boot — TestContainers набирают популярность, и неплохо иметь готовые рецепты по использованию в современном окружении, чему и посвящена статья.

Разное

  • Вышел openHAB 2.3 — платформа для разработки умного дома, позволяющая интегрировать девайсы и писать автоматизацию на специальном движке правил и запускающаяся на Linux, Raspberi Pi, Docker и куче других платформ. Технически эта штука основана на фреймворке Eclipse SmartHome и работает на OSGi-рантайме (Apache Karaf + Eclipse Equinox), а в качестве веб-интерфейса используется Jetty. Скачать его можно с BinTray.
  • Enterprise Ethereum Alliance (EEA) выпустил Enterprise Ethereum Client Specification 1.0, посвященную открытому, кросс-платформенному, распределенному фреймворку для леджеров. Задача фреймворка — создать основу для разработки энтерпрайзных стандартизированных блокчейнов. Возможно, скоро разработка блокчейнов станет куда более популярной работой для энтерпрайзных джавистов.

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

  • Олег Чирухин (контент, верстка, проверка фактов) и редакция JUG.ru Group.