Платформа Java
Внезапно до многих дошло, что в Java больше не будет major releases: что во-первых, этот термин можно считать устаревшим и замененным feature releases, а во-вторых, что отсутствие long term support для Java 9 — это не шутка. По сети прокатилось множество статей и блогпостов, посвященных этой теме, эмоциональный настрой которых варьируется от радостной эйфории до дремучей депрессии.
Greg Luck, CEO/CTO в Hazelcast, высказал ожидания, что большая часть пользователей останется на Java 8 и подождет финального решения Oracle по этому вопросу. Также он наблюдает улучшения в бизнесе компаний, которые собираются оказывать самостоятельную поддержку Java (и это, например, Azul).
Markus Eisele, Head of Developer Advocacy в Lightbend отмечает, что проблема не столько в энтерпрайзах, сколько в Open Source библиотеках, которым нужно начать поддерживать куда больше конфигураций.
- JavaFX (точнее, OpenJFX) стал доступен как отдельная сборка, скачать можно здесь, запускать надо с помощью Java 10 или 11. Johan Vos (коммитер OpenJFX, член экспертной группы OSGi, итп) кратко выразил эту мысль так: «Ядро OpenJDK — чудесное место, разработанное талантливыми инженерами. Чтобы гарантировать качество ядра, особенно в связи с быстрыми релизными циклами, нужно все компоненты, для которых это вообще возможно, выпускать и поддерживать отдельно от ядра.»
- Три новых JEP для OpenJDK:
- JEP 324: Key Agreement With Curve25519 and Curve448. Curve25519 — это 128-битная кривая для Диффи-Хеллмана, одна из быстрейших ECC, которая не заблокирована никакими патентами;
- JEP 327: Unicode 10
- JEP 328: Flight Recorder (высокоэффетивный фреймворк для сборка данных и отладки приложений, выполняющихся на HotSpot)
- В рассылочке холиворят на тему появления
Predicate::not
(а баг лежит тут). Смысл примерно в следующем: сейчас нет способа быстро отрицнуть лямбду, не оборачивая ее в предикат:List<String> list = bufferedReader .lines() .filter(((Predicate<String>)String::isEmpty).negate()) .collect(toList());
Поэтому некисло бы иметь статический
not
, который возьмет обычную незавернутую лямбду и отрицнёт её:import static java.util.function.Predicate.not; List<String> list = bufferedReader .lines() .filter(not(String::isEmpty)) .collect(toList());
Несмотря на всю очевидность данного решения, есть и другие мнения. Например, Гёц считает, что default-методы на функциональных интерфейсах, используемые вместе с сабтайпингом, ведут к головной боли. А что думаете вы?
IntelliJ IDEA
- Выпущена версия 2018.1.3:
- Имя run/debug configuration полностью отображается, если его длина до 80 символов, потом — обрезается;
- При импорте настроек из предыдущей версии, проверяется версия плагина Kotlin;
- Ускорение работы Spring diagrams;
- Горячие клавиши на Find in Path теперь работают в окне предпросмотра и диалоговом окне Find in Path;
- Поддержка озвучивания интерфейса (screen readers) теперь делается с помощью JVM-опции
-Dide.support.screenreaders.enabled=true
в файлеidea.properties
; - Новая версия встроенного JRE с исправлением проблем:
- Следом за ней вышла IntelliJ IDEA 2018.1.4.
$MODULE_DIR$
теперь deprecated от греха подальше. Вместо этого теперь есть$MODULE_WORKING_DIR$
для содержимого модуля и$MODULE_IML_DIR$
для директории с .iml-файлом;- Поддержка Spring Boot Relaxed Binding 2.0;
- Поправлена проблема с попапом Enter file name;
- Для SVN починили проблемы, связанные с пробелами и специмальными символами в урле: IDEA-108912, IDEA-190790;
- Поправили проблему с размерами окна, перетягиваемого между двумя мониторами с разным DPI;
- Открыта 2018.2 Early Access Program. В частности,
- появилась поддержка тачбара в MacBook (включая кастомизацию!). Очень, очень няшно;
- улучшилась отладка Gradle;
- улучшилась поддержка Maven (версия 3.7.0, опция release, новые быстрофиксы и подсветка динамических свойств);
- серьезно улучшилась работа со Spring и Spring Boot;
- Сразу же за первой сборкой подтянулась вторая, IntelliJ IDEA 2018.2 EAP2:
- Улучшения в отладчике, в том числе интеншены:
- stop only in class;
- do not stop in class;
- stop only in the current object;
- Появилась новая панель предпросмотра для рефакторинга Extract Method. Может оказаться полезным для рефакторинга кода, содержащего копипасту;
- Плагин Maven может распарсить даже такой POM, у которого в объявлении корневого пома используется property placeholder;
- Подробное описание релиза можно прочитать по ссылке.
- Улучшения в отладчике, в том числе интеншены:
Проекты Eclipse
- Eclipse Photon немного задерживается и будет где-нибудь в конце июня, а пока у нас есть Eclipse Photon M7. Подробности развития проекта есть в обширном ченжлоге с картинками, но в целом, можно сказать направление развития: не столько непрерывное добавление новой функциональности как раньше, сколько улучшение удобства использования и увеличение производительности. Идет работа над эргономикой, улучшением тёмной темы, высокого DPI (особенно в Windows), и так далее. Поддержку Windows XP выбросили из плана. Поддержка новых версий Java в JDT запилена полностью, Photon на 100% поддерживает Java 10.
- Со времен последнего анонса Eclipse JDT Language Server прошел год, и сейчас в Eclipse подготовили обзор событий, произошедших за год. JDT Language Server коротко называют
jdt.ls
, и это Open Source реализация Language Server Protocol для языка Java.Language Server Protocol — это протокол между неким инструментом (клиентом) и источником информации о языке (сервером), используемый для реализации таких фичей как автодополнение, переход к объявлению переменной, поиску всех ссылок на объект языка, и так далее, которые хочет реализовать у себя инструмент (например, IDE).За год вjdt.ls
была проведена большая работа:- уменьшен размер дистрибутива;
- ускорен запуск;
- быстрей собирается диагностика;
- реализована поддержка Java 9;
- произведены улучшения в рефакторинге «organize imports» (любимые импорты, порядок импортов, запуск рефакторинга при сохранении);
- добавлено можество quick fixes;
- появилась возможность выключать автоматическую сборку, или напротив, требовать инкрементальную или полную сборку по запросу;
- починена правильная изоляция тестового classpath (тесты больше не утекают в основной релизный classpath);
- улучшили поиск символов (типов);
- вроде как работает поддержка нескольких корней у кода;
- частично реализован рефактринг переименования (до сих пор нельзя переименовать файл);
- добавлена поддержка внешних расширений (отладчики, декомпиляторы, новые команды).
- Вышел Ditto 0.3.0-M1 — новый IoT фреймворк в Eclipse. Исходники есть на Github.
Frameworks
- На седьмой Greach, конференции про Groovy и Grails, в испанском Мадриде, Graeme Rocher, лидер Grails, представил новый Micronaut framework. Основные преимущества:
- Невероятно быстрый стартап;
- Занимает очень мало в оперативной памяти;
- Очень маленькие JAR-файлы;
- Нет зависимостей;
- 12 factor.
Код выглядит как-то так:
@Controller class HelloController { @Get("/hello/{name}") String hello(String name) { return "Hello $name!" } } // Клиент, генерируемый во время сборки приложения @Client("/") interface HelloClient { @Get("/hello/{name}") String hello(String name) }
Кроме того, там есть еще вагон фич, например:
- Service Discovery;
- Circuit Breaker / Retry;
- Configuration Sharing;
- Client Side Load Balancing;
- Serverless computing, AWS Lambda.
Фичи видны напрямую из кода:
@CircuitBreaker(attempts = '10', delay = '10ms', reset = '600ms') public List<User> findUsers() { ... }
- Apache Wicket 8.0.0. Хотите ли вы того или нет, но Wicket все еще жив, и даже обзавелся новой большой версией. Миссия Wicket в том, чтобы писать веб с использованием нормальных Java-идиом, касающихся наследования и расширения компонентов, в основном на языке Java (получается ли это у него — замнем для ясности). Среди значимых исправлений:
- Нужна Java 8 и выше;
- Нужны Servlet 3.1;
- Component databinding (
IModel
) теперь превратилась в Functional Interface; - Добавилась нативная поддержка JSR 310 Date/Time;
- Optional теперь используется в правильных местах;
- Удалена куча deprecated фич и кода.
- Netflix выложили в open source Zuul 2. Zuul 2 позиционируется как cloud gateway, и предназначен для того, чтобы улучшать архитектуру систем, предоставляя фичи для управления, роутинга и защиты облачных систем. В Netflix он работает более чем на 80 кластерах и шлет трафик на более чем 100 бэкенд-кластеров, выдерживая более миллиона запросов в секунду. Детальное объяснение работы платформы выложено на Medium.
Spring
Выпущены:
- Отчет об уязвимостях Spring (Framework, Security, Data, Integration). Интересно, что только выпущенные версии Spring Framework как раз исправляют старый CVE про DDoS;
- Release trains Spring Data Ingalls SR12 и Kay SR7 (если пройти по ссылкам, можно увидеть, что там происходило). Конечно, они будут в Spring Boot 2.0.2 и 1.5.13;
- Spring Framework 4.3.17 — 15 исправлений багов и улучшений;
- Spring Framework 5.0.6 — тут исправлений и улучшений уже более 40 штук;
- Spring Boot 1.5.13. 22 изменения, которые можно посмотреть на GitHub. В основном, обновления зависимостей, но есть и исправленные баги, типа DevTools, сломавшихся на Java 6;
- Spring Boot 2.0.2. Здесь изменений целых 84 штуки, посмотреть как всегда можно на GitHub. Огромное количество багфиксов, обновлений документации и зависимостей;
- Spring Security 5.0.5 и 4.2.6. В 4.2.6 поправлен всего один баг, все остальное — улучшения и бэкпорты. В 5.0.6 поправлена и улучшена куча вещей, включая обновление до свежих Framework и Kay;
- Spring Security 5.1.0.M1. Этот релиз чинит аж 81 тикет!
- Spring Security OAuth версий 2.3.3, 2.2.2, 2.1.2, 2.0.15. Рассматривать в дайджесте все эти ченжлоги — это слишком погружение, поэтому вам придется пройти по ссылкам и сделать это самостоятельно;
- Сначала Spring Cloud Data Flow 1.5 RC1, а потом и полноценный 1.5.0 — тулкит для создания интеграций и пайплайнов данных в реальном времени.
Hibernate
Выпущены:
- Hibernate ORM 5.3.0 CR2, а сразу за ней и полноценная 5.3.0.Final. Насколько понимаю, там движуха идет вокруг верификации относительно JPA 2.2 TCK (которая, в основном, делается силами WildFly, ибо им нужно пройти полный EE TCK). Из фичей интересны repeating annotations (
@java.lang.annotation.Repeatable
, включая добавление@TableGenerators
и@SequenceGenerators
), query result streaming (Query#getStream
как дляjavax.persistence.Query
, так и дляorg.hibernate.query.Query
), поддержку «новых» Java 8 Date and Time API, включение и выключение кэширования на любом уровне иерархии, и совместимость с JPA (когда Hibernate по историческим причинам делал что-то отличное от JPA, смотрите джавадок наorg.hibernate.jpa.JpaCompliance
); - Hibernate ORM 5.2.17 и 5.1.14.Final. В 5.2 все как всегда — чертово количество багов. 5.1 не отстает.
- Hibernate Search 5.10.0.CR1. Обновление зависимостей на Hibernate ORM, прямой доступ к клиенту Elasticsearch, починенная бинарная совместимость с Hibernate Search 5.5 (так что его можно теперь положить в новый релиз WildFly), и так далее.
- Hibernate Validator 6.0.10.Final:
- починены три бага:
- регрессия в 6.0.3.Final, JPATraversableResolver падает с ошибкой IllegalAccessException;
- проблемы с CDI и
@WithAnnotations
; - невозможность сделать более 1 вложенного параметра на типизированном контейнере;
- поддержка Java 10;
- голландская локализация;
- полный ченжлог есть здесь.
- починены три бага:
Java EE & Jakarta EE
- OmniFaces провело очередное исследование с вопросами из следующих категорий:
- Версии Java EE;
- Сервлет-контейнеры;
- Используемые API;
- Будущее Java EE / Jakarta EE.
Если вкратце,
- 81% разработчиков используют JEE 7;
- Пользуются больше всего WildFly (и GlassFish с большим отставанием), любят — Payara Server, а ненавидят — WebSphere;
- Контейнеры — Tomcat, Jetty и Undertow;
- Самое популярное API — JPA, а самое безвестное — JACC;
- Из библиотек чаще всего используют Hibernate, Mojarra и Jersey;
- Из специфичных JEE библиотек люди яростно используют PrimeFaces и DeltaFaces, с сильным отставанием — DeltaSpike;
- Почти никто не использовал MicroProfile, но кто использовал — делал это на Wildfly Swarm для Config, Health и Metrics;
- Больше всего люди ждут обновления JPA, CDI, JAX-RS и JEE Security.
В целом, исследование интересное, рекомендую взглянуть на него самостоятельно. На что стоит обратить внимание — на то, какие доработки опрошенные считают приоритетными.
Тестирование
- Вышел AssertJ Guava assertions 3.2.0 — можно обновляться. Guava 21+ с поддержкой Java 8 (подключена как provided), совместимость с assertj-core 3.9.1+, улучшения в джавадоке;
- Вышел JUnit 5.2: работа длиной два года подоша к концу. В поставке есть три основных модуля: JUnit Platform, JUnit Jupiter, and JUnit Vintage.
- Прочитать про него можно в статье: What’s New in JUnit 5.2.
- Если еще не убежал с предыдущей версии, поможет статья Introduction to JUnit 4 Test Runners, помогающая понять, чем занимаются test runners, как создавать свои раннеры и делать сьюиты с помощью раннера
Categories
; - A practical introduction to Spring Cloud Contract — хороший начальный туториал по Spring Cloud Contract;
- Если кто-то все еще думает, что Gradle тормозит, его разработчики написали отличную статью про их тестовую инфраструктуру: Performance testing at Gradle;