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

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

Платформа Java

Жизнь замечательных компаний

  • Новая политика по оплате саппорта Oracle для Java. Основной смысл в том, что минимальная стоимость будет 25 баксов за CPU в месяц.
  • Годовая выручка Oracle выросла на 6%, до 39.8 миллиардов долларов. Однако не всё так просто, так как по расчётам co-CEO Oracle, Safra Catz, важнейшее направление облаков (SaaS + PaaS + IaaS) упало с 18% в третьем квартале до 15% в текущем;
  • Новая информация об роспуске команды Java Mission Control в Oracle. Портал InfoQ расспросил бывшего сотрудника о судьбе проекта. Коротко: похоже, JMC не умрет, но работать там будет на полставки кто-то из Индии. Портал попробовал узнать что-нибудь у официальных представителей Oracle, но они отвечать наотрез отказались;
  • RedHat тоже поделилась циферками. Eric Shander, исполнительный вице-президент RedHat, прокомментировал это так: «We are focused on building our strategic partnerships within our mid-market customers. In Q1, our mid-market deals greater than $250,000 increased 138% year-over-year from 21 deals to 50 deals, with notable growth in Ansible and OpenShift». К сожалению, Ansible — это Python, а OpenShift — Golang и Angular.js, какая недоработка для джавистов.
  • Teradata обвинила SAP Hana в том, что они в конце 2000х украли у них какие-то суперважные секреты о базах данных. Запасаемся попкорном! (При чем тут Java? Ну например, HANA — это, по сути, еще и веб-сервер, и ее XS Advanced Engine поддерживает только Java и Node.js)

IDE

PVS-Studio Java

Это новый статический анализатор от PVS-Studio.

  • Для получения синтаксического дерева и семантической модели используется Spoon:
    • Является не просто парсером, а целой экосистемой — предоставляет не только дерево разбора, но и возможности для семантического анализа, например, позволяет получить информацию о типах переменных, перейти к объявлению переменной, получить информацию о родительском классе и так далее;
    • Основывается на Eclipse JDT и умеет компилировать код;
    • Поддерживает последнюю версию Java и постоянно обновляется;
    • Неплохая документация и понятный API.
  • Основной механизм — Data-Flow анализ;
    • Переполнения;
    • Выход за границу массива;
    • Доступ по нулевой или потенциально нулевой ссылке;
    • Бессмысленные условия (always true/false);
    • Утечки памяти и ресурсов;
    • Деление на 0;
    • И некоторые другие.
  • Инкрементальный анализ;
  • Плагины;
  • Механизмы и аннотации диагностических правил (по сути, визиторы с перегруженными методами, в которых обходятся интересующие элементы):

    Например, так выглядит каркас диагностики V6004:

    class V6004 extends PvsStudioRule
    {
      ....
      @Override
      public void visitCtIf(CtIf ifElement)
      {
        // if ifElement.thenStatement statement is equivalent to
        //    ifElement.elseStatement statement => add warning V6004
      }
    }
    

IntelliJ IDEA

  • В официальном блоге JB выпущена статья про поддержку Java 11. Например, если у вас прописаны классы в параметрах лямбды, то теперь есть квикфикс, который заменяет их на var:
  • 2018.1.5
    • The IDE can keep on track after using or canceling navigation pop-ups or menus (IDEA-191839);
    • No more errors when navigating to class with Ctrl+N or cmd+O (IDEA-191860);
    • Projects can store .iml externally without a compile fail (IDEA-191328);
    • No more duplicate changelists if parts of the files are submitted to a Perforce changelist (IDEA-191521);
    • Expressions can be evaluated in the lambda body now (IDEA-191797);
  • 2018.2 EAP 5
    • Darkula еще темнее!Preferences | Appearance & Behavior | Appearance and enable the Use dark window headers
    • Если встать курсором на break или continue, подсветится соответствующий цикл;
    • Команда Browse Repository at Revision появилась при просмотре лога VCS;
    • Репозитории Git и Mercurial регистрируются автоматически, сообщения «unregistered roots detected» больше не будет;
    • Плагин Kotlin обновлён до 1.2.50 и добавилась поддержка scratch-файлов;
    • Release notes. Проведена большая работа по 42 подсистемам;
  • 2018.2 EAP 6
      • Улучшения в поддержке Docker, например, добавлено поле «Context folder» (это место, откуда будет запускаться docker build)

     

  • Добавлена возможность делать глобальные file watchers

Eclipse IDE

  • Сообщество не забывает Eclipse Theia, и недавно на сайте EclipseSource опубликовали обзор о том, что это такое и как у них дела. Вкратце, это фреймворк для создания IDE, написанный на TypeScript. Там есть Node.js-бэкенд, браузерный фронтенд (или можно сделать десктопное приложение с использованием Electron), JSON-RPC между ними, и собственный легкий фреймворк для dependency injection;
  • Выпущены JBoss Tools 4.6.0.AM3 для Eclipse Photon.0.RC3.
    • Camel URI completion with XML DSL;

    • Поддержка JAX-RS 2.1 (JavaEE8. Server-side events. Благодаря аннотации @Context, Sse и SseEventSink можно инжектить в аргументы методов);

Языки JVM

  • Два месяца прошло с выпуска Kotlin 1.2.40, и вот выходит 1.2.50. Несмотря на то, что циферка поменялась только на третьей позиции, изменений множество, включая, но не ограничиваясь:
    • Улучшенной поддержкой в Eclipse IDE и IntelliJ IDEA (в Идее можно теперь создавать котлинские scratch-файлы );
    • Новые функции в стандартной библиотеке (common и JS);
    • Поддержка JUnit 5 в kotlin.test;
    • Улучшенная поддержка скриптования (например, можно передавать в скрипт переменные внешним образом, и они будут восприниматься как глобальные);
    • @JvmDefault научилась в бинарную совместимость;
    • И многое другое, о чем можно почитать в официальном описании релиза или множестве статей в блогах.

Spring

  • Josh Long объявил об окончании 4 сезона Spring Tips. Архив есть по ссылке. Напоминаю, Spring Tips — это набор скринкастов о разработке на Spring, который в первом сезоне начал Pieter Humphrey и продолжил Josh Long;
  • Spring Cloud Finchley.RELEASE Release Train. Один самых больших релизов за последнее время.
  • Хорошая статья The Road to Reactive Spring Cloud в блоге Spring Engineering;
  • Spring IO Platform
  • Две новые CVE опубликованы и исправлены в свежих версиях (нужно обязательно обновиться):

Веб-разработка

  • Вышел Vaadin 10. Суть в том, что раньше это был фреймворк на основе GWT, а сейчас он вырос в целую платформу. Все компоненты разрабатываются как Web Components, можно повыбирать между Angular, React или Vue.js на фронте и так далее. Имеется свой фреймворк Flow, который, по сути, сервер-сайд коннектор до веб-компонентов с использованием Java API. Версии Vaadin 7 и 8 будут поддерживаться до конца 2019, 9 — до конца 2022.
  • Значительная часть фулстек Java-разработчиков завязана на веб-фреймворки, поэтому вот очередная новость про Ангуляр: началась бета 6.1.0 и команда уже смотрит, что бы выпустить в версии 7. Список фичей можно посмотреть в статье On the road to Angular v7: 6.1.0 beta.1 is here. Также про это можно прочитать у Brad Green, который сейчас работает Angular platform engineering director в Google.

Базы данных

  • Второй maintainance-релиз Hibernate Search 5.10:
    • Шесть мажорных багов;
    • Огромное количество минорных задачек;
    • Важное улучшение — возможность устанавливать минимальное количество should для матчинга булевых предикатов в QueryDSL:

      Query luceneQuery = queryBuilder.bool()
      .minimumShouldMatchNumber( 2 ) // This is new

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

Статьи

  • Calling Custom Java Code in Karate API Tests — вводная статья про Karate Framework, фреймворку, который заявляет одной из основных своих фич «no coding», но что, если все-таки нужно дергать кастомный Java-код?
  • Scatter Assertions — статья про JUnit 5 и то, как правильно записывать несколько проверок относительно одного и того же объекта;
  • WireMock Tutorial: Request Matching, Part Two — рассказывает про то, как записывать проверки на куки, заголовки HTTP и параметры запросов.

Обновление зависимостей

Разбор Полётов

События