Java-дайджест (05 — 27 ноября)

  • Facebook описали принцип работы Getafix, который сам ищет в Java-коде баги, и потом в виде гуя предлагает поправить их разработчику. Похоже, это пока только описание принципов работы, а исходников нету. Опять же судя по описанию, инструмент в основном ищет пропущенные проверки на null и их последствия 🙂

  • Появился новый метод в JDK, Files.mismatch(Path,Path), JDK-8202302. Проверяет файлы на соответствие по контенту.
  • Amazon анонсировала своё Corretto, очередной OpenJDK с поддержкой от Amazon, который будет доступен на Amazon Linux 2 как дистрибутив по умолчанию (докер, отдельно). Скачать отдельно тоже можно.
  • 14 ноября зарелизился драфт Eclipse Specification Process v1.0. Ахтунг: документ в Google Docs заморожен, его не только нельзя изменять, но даже копипастить. Поэтому я нарисовал вам вкратце вручную:

  • Вышла бета RHEL 8. Подробности.
    • Application Streams (компоненты userspace теперь могут обновляться чаще, чем основные пакеты ОС, т.е. это можно делать, не дожидаясь выхода новой версии операционной системы);
    • IPVLAN и новый стек TCP/IP с механизмом отслеживания перегрузок Bandwidth and Round-trip propagation time (BBR);
    • OpenSSL 1.1.1, TLS 1.3, System-wide Cryptographic Policies;
    • Buildah (сборка контейнеров), Podman (запуск контейнеров) и Skopeo (поиск и совместная использование контейнеров);
    • Composer и Yum4;
    • Stratis — файловая система, ориентированная на управление томами. Есть снапшоты и LUKSv2 для шифрования данных на диске в сочетании Network-Bound Disk Encryption (NBDE).
  • Издательство Питер переводит очередную книгу: «Microservices Patterns. With examples in Java»

  • Вышла книжка JHipster Mini-Book 5.0. С сайта бесплатно качаются pdf и epub, а для ценителей — можно даже заказать печатную версию на Lulu.
  • Вышел очередной релиз Espresso, который показывает, что проект понемногу живет. Сейчас в нем всего 32 коммита. Идея в том, чтобы передрать лучшие стороны Ring (Clojure), Iron (Rust) и WSGI (Python). То есть, выбросить Servlet API, которое они на оффсайте покрывают кучей нехороших слов, и превратить во что-то интересное.

Обычное использование:

import io.github.espresso4j.espresso.*;
var app = (req) -> Response.of(200).body("<h1>It works</h1>");

Асинхронное:

var app = (req, sender, raiser) ->
        sender.accept(Response.of(200).body("<h1>It works</h1>"));;
  • Google выложил исходники J2CL, о котором они говорили с 2015 года. Это транскомпилятор Java -> JS, довольно хорошо сделанный. Работают Java-библиотеки типа Guava и Dagger, работает сборка через Bazel с поддержкой live reload, все это используется в GSuite в проде. Нормальное описание есть на Хабре. Основная проблема — непрозрачная разработка со стороны Google.
  • В Cassandra впилили LDAP-аутентификатор. Написан на Java, работает по JNDI, отвечает на запросу LDAP-серверу, есть не просит. Подробности.
  • Вышли IntelliJ IDEA 2018.2.6, 2018.3.6 и 2018.1.7. В основном там одни багфиксы.
  • JetBrains релизнули DataLore — клаудную IDE для data scientists (что характерно, одновременно с релизом JupyterLab).
  • В VSCode расширили на Java работу так называемого IntelliCode (Microsoft’s AI-assisted IntelliSense extension). Попутно прокачали поддержку Java, например, добавили поддержку в отладчик Code Lens из «настоящей» Visual Studio, запилили поддержку Tomcat, улучшили Maven, и так далее. Java 9/10/11 теперь поддерживается чуть лучше (например, можно конвертить var в тип и наоборот).

  • Зарелизился Sourcetrail 2018.4 — визуализатор исходников для Java и C/C++. В полтора раза ускорили индексацию и пожирание оперативки, починили навигацию по дженерикам, обновили до LLVM/Clang 7.0.0. Запилили нормальные табы в UI:

  • В GitHub Desktop 1.5 все-таки добавили нормальную мерджилку конфликтов. Собранных бинарников для GNU/Linux все так же нет, хотя в комментариях к ишшуе пишут, что оно билдится и работает на Node 11 под Ubuntu 18.04, хоть и сыпет ошибками, то есть миссия выполнима.
  • Гугл анонсировал Managed Cron Service: Google Cloud Scheduler
    • Reliable delivery;
    • Fault-tolerant execution;
    • Unified management experience: UI, CLI, API.

  • Анонсирован новый проект Eclipse Sprotty для встраивания диаграмм в веб-приложения. Несмотря на то, что он написан не на Java, а на TypeScript, кажется, что это чудесная штука для Java-разработчиков, которым нужно визуализировать все наши бесконечные зависимости в проектах. Из коробки у нас таких штук нет в JavaFX, но можно ведь запустить Шпроты во встроенном браузере! Демки работы:
    • https://www.youtube.com/watch?v=Wc7SEVOOtA8
    • https://www.youtube.com/watch?v=-k9w5ecQ-7c
  • Eclipse Foundation анонсировали Eclipse Tahu. Это проект, который занимается применением MQTT к системам, использующим легаси SCADA/DCS/ICS протоколы. MQTT — это machine-to-machine (M2M)/»Internet of Things» connectivity protocol. SCADA — это системы для Supervisory Control and Data Acquisition. В рамках проекта подразумевается и написание спецификации, и реализация в виде кода (C, Java, JS, Python), и создание референсных приложений, которые будут эти библиотеки использовать. Чтобы понять, что вообще происходит, следует читать их анонс и смотреть гитхаб.

  • Eclipse Ditto (проект по управлению Digital Twins) продвигается и дожил до Milestone 0.8.0-M3. Улучшение перформанса индексатора, улучшенная интеграция с Eclipse Hono.


  • Появилась бета-версия Eclipse Timekeeper 2.0 — расширения для расширения Mylyn Tasks для Eclipse IDE. Возможность выбрать базу данных для хранения (включая файловую систему), новый экранчик с activities, отчётики по HTML-шаблону, и так далее.

  • В официальном блоге на eclipse.org появилась интересная статья The Busy RCP Developer’s Guide to Eclipse Theia. Часто задаваемые ответы про новую клаудную IDE от Eclipse.
  • Вышел Elasticsearch 6.5.0 с поддержкой JDK 11 и упором на оптимизацию под G1 GC. Есть еще пачка фич, вроде кросскластерной репликации, но они не про джаву, и поэтому лучше читать в ченжлоге.
  • Вышел Apache TomEE 7.1. Java EE 7, MicroProfile 1.2. Добавление MicroProfile 1.2 потянуло за собой апгрейд до Java 8 (раньше была 7), ибо большинство API для него уже реализованы именно на Java 8.
  • Apache TomEE 8.0 дожил до первого milestone. Поддержка Java EE 8 и Jakarta EE (JSON-B, JEE Security API, и разное другое), MicroProfile 1.3.
  • Вышел Apache Spark 2.4. Кроме всего прочего, заявлена экспериментальная поддержка Scala 2.12.
  • Вышли стабильные Spring Vault 2.1.1, 2.0.3 и 1.1.3, если это кому-нибудь интересно. Spring Vault — это набор абстракций для работы с secrets (выдача, хранение, отмена) в основном предназначенное для интеграции с HashiCorp Vault (менеджер для работы со статическими и динамическими секретами поверх разных баз данных, в том числе на AWS).
  • Spring Cloud Function 2.0.0.RC2. Мелкиеу улучшения и багфиксы. Если все будет хорошо, в течение нескольких недель будет окончательный релиз.
  • Spring Session 1.3.4
  • В Spring Cloud Pipelines внезапно поняли, что они не относятся к Spring Cloud никак, поэтому решили отделиться в отдельную организацию Cloud Pipelines. И по этому случаю они теперь относятся к другой Github Organization, и адовейше двигают репозитории — теперь каждый компонент лежит в своём отдельном репозитории.
  • Hibernate ORM 5.4.0.CR1
final EntityGraph eg1 = org.hibernate.graph.EntityGraphs.parse( Person.class, "spouse", entityManager );
final EntityGraph eg2 = org.hibernate.graph.EntityGraphs.parse( Person.class, "spouse(age, dob)", entityManager );
final EntityGraph combinedGraph = org.hibernate.graph.EntityGraphs.merge( entityManager, Person.class, eg1, eg2 )

final Person personAndSpouse = entityManager.find( Person.class, 1,
    Collections.singletonMap( "javax.persistence.fetchgraph", combinedGraph );

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

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