Новости Java #37

• Вышел JEP 425: Virtual Threads (Preview). Это значит, что проект Loom перешёл в свою финальную стадию и результаты многолетней работы над виртуальными нитями в скором времени станут доступны широкой публике.

Напомним, что о старте проекта Loom было заявлено в ноябре 2017 года вскоре после выхода Java 9, а первый черновик JEP по виртуальным нитям по нему появился лишь спустя 4 года, о чём мы писали в выпуске #32.

Вместе с выходом JEP 425 также вышла новая Early-Access сборка Loom 19-loom+5 с большим количеством изменений по сравнению с предыдущей версией.

• Вышел черновик JEP Pattern matching for switch (Third Preview). Это значит, что паттерн-матчинг для switch стал первой языковой конструкцией, которой не хватило два preview, чтобы стать стабильной.

В этой итерации предлагается внести два изменения относительно предыдущей.

Во-первых, заменить охранные паттерны на условия when:

// Java 18:
switch (obj) {
    case Integer x && x > 0 -> ...;
    default -> ...;
}

// Java 19:
switch (obj) {
    case Integer x when x > 0 -> ...;
    default -> ...;
}

О мотивации заменить && на when можно прочитать тут.

Во-вторых, предлагается изменить поведения матчинга null таким образом, чтобы он матчился только в ветках case null и ни в каких других (даже тотальных):

// Java 18:
Object obj = null;
switch (obj) {
    case Object x -> ...; // matches
}

// Java 19:
Object obj = null;
switch (obj) {
    case Object x -> ...; // NPE
}

Про причины такого изменения можно прочитать тут.

Также вышло ещё два новых черновика JEP: Improved way of obtaining call traces asynchronously for profiling и Optionally Record Thread Context in JFR.

• Вышел Hibernate 6.0 Final. Новая версия фреймворка не является полностью совместимой с предыдущей версией 5.x, но в значительной степени совместимость удалось сохранить. Для тех, кто использует Hibernate исключительно через Jakarta Persistence API, переход должен быть полностью совместимым. Для остальных был написан подробный гид по миграции.

Перечислим некоторые существенные изменения Hibernate 6.0:

  • Базовая версия Java теперь 11.
  • Java Persistence больше не поддерживается. Hibernate 6.0 можно использовать только с пространством имён jakarta.persistence, но не javax.persistence.
  • Теперь используется Read-by-position вместо Read-by-name при чтении из JDBC ResultSet. Это приводит к улучшению производительности, а также к более компактным и читаемым сгенерированным SQL-запросам.

• Вышла Jakarta Persistence 3.1.

• В Spring обнаружена критическая уязвимость, позволяющая злоумышленнику выполнить произвольный код. Уязвимости подвержены приложения при следующих условиях:

  • Приложение запускается на JDK 9 или выше.
  • Используется Apache Tomcat в качестве контейнера сервлетов.
  • Приложение пакуется в WAR, а не JAR.
  • Используются зависимости spring-webmvc или spring-webflux.

К моменту публикации уязвимости уже были выпущены новые версии Spring 5.3.18 и 5.2.20, в которых уязвимость была исправлена. На следующий день Apache Tomcat исправил уязвимость на своей стороне, выпустив версии 10.0.20, 9.0.62 и 8.5.78.

• Eclipse начал переезд на GitHub. Многие проекты на данный момент уже переехали (Platform, Equinox, SWT, JDT и т.д).

• Вышел Java Annotated Monthly за апрель 2022.

• Вышел Helidon 2.5.0.

• Вышел JReleaser 1.0.0.

• Вышел JMH 1.35.

Подписывайтесь на канал в Telegram, чтобы не пропускать новости.

Все материалы на этом сайте выложены под лицензией CC BY-SA 4.0
© Евгений Козлов, 2017-2024
Feed
Table of JEPs