company_banner

Java-дайджест за 6 марта



    • Вышел очередной выпуск подкаста «Битовая Каска» с Антоном Архиповым (@antonarhipov). Антона, наверное, представлять не нужно, но всё-таки: Java-чемпион, менеджер по продукту в команде Kotlin, раньше работал в ZeroTurnaround. Подкаст помогает вести Кирилл Толкачёв, в остальном ведет стандартный состав.
    • Кстати, к нам приехал Kotlin 1.3.70. В комплекте — новые функции и классы в коллекциях стандартной библиотеки (например, kotlin.collections.ArrayDeque), улучшения в Kotlin-плагине в IntelliJ IDEA, компилятор Kotlin/JVM генерит type annotations в байткоде 8 джавы и выше, ускорилась сборка Kotlin Native и так далее.
    • Драйвера Oracle JDBC отныне лежат на Maven Central. Не только для свежей базы, а для всех: 19.3.0.0, 18.3.0.0, 12.2.0.1, 11.2.0.4. Все остальные артефакты, относящиеся к базе данных, теперь сгруппированы в com.oracle.database.* в Maven. Подробности здесь. Мы пережили все эти годы мучений с подсовыванием джарок в разные странные места, давайте же выпьем за славную победу!


    • Вышла библиотека eo-yaml 3.0.0. В ней интересно, что она родилась после прочтения книги «Elegant Objects» Егора Бугаенко. Не так грозен Егор, как его последователи: теперь у нас есть простой парсер YAML, который умеет работать с простыми случаями, пригодными для чтения YAML-конфигов. Более сложные штуки вроде стимов и алиасов ещё не реализованы.
    • Кстати, тот же самый товарищ пилит RESTful API для Docker, внутри там (судя по pom.xml) находится Glassfish. Только что вышла версия 0.0.11. Ясно, что использовать это не стоит, но можно посмотреть за ходом мысли. Ведь она по-настоящему объектно-ориентированная, если вы понимаете, о чём я.
    • Если уж на то пошло, держите еще одну мелкую библиотеку: update4j, только что вышла версия 1.4.5. Эта штука полезна для написания инфраструктуры, которая будет автоматически обновлять ваше приложение. Это именно библиотека, а не фреймворк — предполагается, что ты влезешь туда своими грязными руками и придумаешь собственный lifecycle приложения, а update4j будет только помогать. Есть документация. Присутствует 251 коммит, 338 звездочки и 29 форков на GitHub.
    • Модераторы удалили пост «какая IDE вам больше нравится» из r/java на Reddit. Пост про Project Loom, в котором автор требовал показать применения на проде, тоже удалили. Вот поэтому на Реддите ничего и нету. Всё нужно писать на Хабр — здесь бы это сразу улетело на главную :-)
    • Confluent анонсировали Confluent Cloud на Microsoft Azure Marketplace. А до этого, напоминаю, они появились в Google Cloud Platform (GCP) Marketplace. Добро пожаловать в мир managed Kafka!
    • Вышел GitLab 12.8.2. Этот релиз посвящен исключительно безопасности и касается бага, который с помощью directory traversal позволял прочитать произвольный файл. Забавно, что атаку на directory traversal чинили на этой неделе и в Spring Cloud, но между собой они не имеют ничего общего.
    • Обновился JEP 373: «Reimplement the Legacy DatagramSocket API». (Сделаю перевод на Хабр для коллекции ASAP).
    • Вышел Apache NetBeans 11.3. Кто-то им, видать, еще пользуется, потому что они запилили поддержку JSF 2.3 в автодополнении и даже реализовали поддержку рекордов согласно JEP 359.
    • Непреклонные пользователи экосистемы Eclipse оценят выход очередной версии Eclipse Communication Framework 3.14.7. Кроме багфиксов пополнился список проектов на GitHub, посвященных Remote Services Development.
    • Пользователи JBoss Tools в новом релизе 4.14.0.AM1 увидят чудо чудное — Quarkus Tools! Можно генерить новые проекты (на основе code.quarkus.io), в application.properties работает автодополнение и подсветка кое-каких ошибок, ну и конечно, приложение Quarkus можно штатно запускать в Run/Debug mode.

    Spring


    • Джош Лонг (Josh Long) сделал Bootiful Podcast c организатором Spring I/O и известным Spring-консультантом по имени Сержи Алмар (Sergi Almar).
    • А ещё Джош выпустил очередной эпизод «This Week in Spring». Текста мало, ссылок на статьи много.
    • Зарелизился Spring Cloud Hoxton Service Release 3 (SR3) с исправленным CVE-2020-5405. Прошлые версии могли обрабатывать произвольные конфиги через spring-cloud-config-server, что дает хакеру возможность устроить атаку обходом директорий. Чего можно добиться такой атакой — непонятно, но возможно и чтения произвольного файла, так что фикс лучше бы накатить.
    • Зарелизился Spring Security 5.3. В него вошли суммарно более 200 закрытых тикетов.
    • Зарелизились Spring Session Dragonfruit-RC1, Corn-SR2 and Bean-SR10. Можно заглянуть в Dragonfruit и увидеть, что они просто обновили всё до самой свежей версии и впилили тему GitHub для документации.

    Статьи, стримы, подкасты


    • В официальном блоге Oracle подробно обсосали тему перехода с Java EE на Jakarta EE. Там есть несколько ироничная табличка, в которой авторы переводят c русского на русский термины Java EE в термины/спецификации Jakarta EE. Например, JASPIC — это Jakarta Authentication, если вам вдруг почему-то было это интересно. Там же есть новые артефакты для Maven и таймлайн разработки спецификаций Jakarta EE. А ещё забавно, как он аккуратно обошёл вопрос существования EJB 2 :-)
    • Там же, в Java Magazine, стоит отметить статью «Java Flight Recorder and JFR Event Streaming in Java 14». А вот статья «Java 14 Arrives with a Host of New Features» оказалась очередным переливанием из пустого в порожнее с перечислением все тех же JEP-ов для Java 14.
    • В блоге WiX Engineering приведен отличный пример, как довольно непривычная в джава-мире оптимизация ручного разворачивания циклов может в два раза ускорить эффективность и так уже эффективного алгоритма. Ну и как всегда в таких статьях, пара слов о GraalVM.
    • Жирный лонгрид на сайте Uber про то, как тюнить память JVM для больших данных, держа в голове какой-нибудь HDFS. Много экспериментов, настроек, графиков. В целом, статья выглядит примерно как любая статья такого рода — брейндамп о том, чего они там крутили и что на что повлияло.
    • В блоге Helidon на Medium опубликовали статью о том, что Helidon полностью поддерживает JPA 2.2, и это намного больше, чем тот упрощенный Java Persistence API, который вы обычно используете в Java SE, запуская Persistence.createEntityManagerFactory() и как-то управляя транзакциями. Тут всё как во взрослом Java EE application server, но только куда быстрее, легче и удобней.
    • Там же, в блоге Helidon на Medium появилась статья про Helidon DB Client — универсальный реактивный API для работы с базами данных в неблокирующем стиле. Он реализован как уровень абстракции поверх JDBC и MongoDB Reactive Streams Java Driver, поэтому с ним заработают любые базы данных, имеющие в JDBC-драйвер, ну или MongoDB (если вам не страшно). Отвечая на невысказанный вопрос: да, оно работает с блокирующим JDBC, оборачивая его в executor service, а наружу всё это выглядит неблокирующе. Присутствует observability, backpressure и все другие слова, которые вы так любите.
    • Адам Бьен (Adam Bien) на стриме измеряет количество памяти, которую сожрало приложение Helidon/MicroProfile по сравнению с чистым свежеустановленным Jetty. В другом стриме он смотрел на ответы HTTP JAX-RS, отличающиеся от HTTP 200 и микрофреймворки (quarkus and helidon, pippo, spincast). В еще одном стриме он сравнивал количество запросов в секунду в формате Quarkus vs WildFly.
    • Свежая статья от Лукаса Эдера (Lucas Eder) «Using Java 13+ Text Blocks for Plain SQL with jOOQ». Жук жив! Лукас рассказывает, как можно использовать Жук, если его DSL нам не нужен. Думайте о нём, как о продвинутом JDBC, которому очень помогает возможность свежих Java клеить строки блоками.
    • Очередной выпуск Java Weekly под номером 323 от Baeldung с чертовой свалкой ссылок на разные статьи без объяснения содержания.




    Дайджест публикуется при поддержке JUG Ru Group и конференции JPoint.

    JUG Ru Group
    Конференции для программистов и сочувствующих. 18+

    Комментарии 26

      –5
      А нельзя было технологически нейтрально описать события? Без негативной оценки тех продуктов которые лично Вы по каким то причинам не используете? Я вот про это:

      «Кто-то им, видать, еще пользуется»
      «если вам вдруг почему-то было это интересно»
        +6

        То, что NetBeans сейчас мало кто пользуется — это известная проблема. Если о ней не говорить, лучше не станет. Даже наоборот, станет хуже. Самое главное, что сейчас может помочь NetBeans — это известность. Желательно — какими-то новыми хипстерскими фичами. Кстати, разрабы Eclipse это очень хорошо понимают, потому что Quarkus в свежих JBoss Tools — это уууу оооо крутотень (даже если в реальности никто этим не будет пользоваться, ну это же смешно — генератор проектов), а JSF 2.3 — это ну так себе (даже если это решает насущную проблему большого количества людей).


        если вам вдруг почему-то было это интересно

        Да, мне кажется, что JASPIC — это ужасная аббревиатура, как и все подобные аббревиатуры. Новости про JavaEE всегда выглядят и читаются как: «Breaking news, предоставлены отчеты секретарей ЛГК ВЛКСМ в ЦК ВЛКСМ и в ЛГК ВКП(б) о выполнении постановлений ЦК и ЛГК ВЛКСМ». Wat?

          0
          мне кажется, что JASPIC — это ужасная аббревиатура
          — тут я соглашусь, однако я писал о другом, о негативной коннотации которую автор добавил в эту новость. Выходит что это уже не новость, а агитация против технологии (мне кажется, что неофиты это воспримут именно так).

          NetBeans сейчас мало кто пользуется
          — чем чаще говорить в таком ключе, тем хуже для продукта. Чтобы было понятно что такое негативная коннотация, пример: разработчики конторы, где я работаю, не хотят платить денег за Intellij IDEA и используют только ломаную версию. Я сейчас сказал правду, но для кого то это выглядит как агитация не платить за продукт.
            +4

            Ну блин, если тебе хочется эмоционально-нейтрального чего-то, то можешь запилить свой дайджест. Я с детства любил творчество Артемия Лебедева, его "ководства" и "бизнес-линча", и это нанесло непоправимую пользу во всю мою коммуникацию.


            Не надо стыдиться выражать свое мнение. По крайней мере, если достаточно часто и без веской причины сдаваться, то получится из тебя не человек, а тряпка. Я пока не настолько тряпка, чтобы впрягаться за NetBeans там, где это не имеет смысла.


            По сабжу, попробуйте Eclipse. В последних версиях он стал гораздо лучше.

              0
              Я пока не настолько тряпка… попробуйте Eclipse
              — спасибо за, надеюсь искренний, совет, но… Лебедев известен в основном тем что не желает выражать свои мысли без мата (тут Вы что то очконули — правила Хабра сделали из Вас «тряпку»?) и тем что считает себя умнее других (в том числе поучает что и как кто должен делать — тут Вы похожи). Лично я работал и в энерпрайз версии IDEA, и в комьюнити версии, и в Eclipse (в разных версиях), и в NetBeans. И у меня нет потребности в советах на данную тему, так как опыта достаточно для выбора инструмента «по вкусу», а также для того чтобы не зависеть от инструмента.
              +3

              а могли бы сидеть на EAP и, тем самым, "бесплатно" помогать улучшать продукт ;)


              А Олег всегда так доносит новости — через свою призму. "Сухие" новости — это не к нему...

            +1
            Слог же. Стиль. Ну чтоб скучно не было.
            +1

            Жаль конечно что рекорды так странно сделали. Неужели нельзя было взять синтаксис полей. А то конечно для трех инт переменных x y z выглядит красиво, но десяток полей с классами в спринг стиле будут смотреться достаточно громоздко.

              +2

              Может быть, это специально так сделано именно для того, чтобы у людей не было желания использовать это с десятком полей в спринг-стиле? Они ж там очень opinionated, они придумали какие-то кейсы, в которых это должно помогать, и вот в этих случаях использовать надо, иначе — нет.


              Вообще, сюда бы lany, нести ответ за братьев по разуму :) А то у нас в треде нет diversity, два спринголога в конце треда в конце концов всегда придут к выводу, что из джавы нужно сделать спринг

                +1

                Не очень понял сути вопроса, если честно. Приведите пример ожидаемого поведения и реального.

                  +1

                  Почему декларирование полей в рекорде сделано после имени в скобках, а не в виде полей.
                  Например:
                  record MyRecord {
                  Int x
                  String str
                  }

                    +3

                    Потому что это не поля, а компоненты рекорда. Поля генерируются по ним. Ещё по ним генерируются, например, параметры конструктора и геттеры. У компонентов могут быть особые аннотации, доступные через reflection. В общем, это новая конструкция языка. Странно делать её синтаксически такой же как другая конструкция. А разве большая разница как скобки ставить?

                      +1

                      Ещё такой момент. Компоненты рекорда — абсолютно важная часть его интерфейса, важнее всего остального. Поэтому они сверху, чтобы глядя на определение рекорда было ясно, что к чему. Поля же можно объявлять в любом месте класса, хоть после методов. Но они и не так важны.

                +3
                «Битовая каска» — огонь!
                  0

                  Спасибо, мы стараемся, правда.


                  Самая большая проблема — время. В смысле, все это нужно организовывать, обрабатывать и выкладывать, это занимает кучу времени. Иначе мы бы интервью вели хоть каждый день.

                  +2
                  После работы «джуниор сприг круд девелопером» пытаюсь въехать во все эти стандарты и нюансы Джавы ЕЕ и дело идёт очень медленно. Новости «Мы смигрировали с Джавы ЕЕ на Джокарту ЕЕ» этому не помогают. Зачем смигрировали, что это даёт? Всё пропало, теперь Джавой ЕЕ нельзя пользоваться? Теперь её будут разрабатывать другие люди? Что вообще происходит, зачем оно всё было?
                    0
                    Мигрируют на Jakarta EE потому что она будет развиваться дальше и быстрее. Конечно не факт, но очень хотелось бы.

                    А сам процесс миграции — как минимум заменить либы, переписать импорты, и переписать использование некоторых API.
                      0

                      Главное, чтобы в названия пакетов и классов не изменялись. А имена библиотек дело десятое.

                        0

                        На сколько я знаю — названия пакетов как раз меняются.

                          0

                          Для эксперимента поменял зависимость


                          <dependency>
                                <groupId>javax.servlet</groupId>
                                <artifactId>javax.servlet-api</artifactId>
                                <version>4.0.1</version>
                              <scope>provided</scope>
                          </dependency>

                          на


                          <!-- https://mvnrepository.com/artifact/jakarta.servlet/jakarta.servlet-api -->
                          <dependency>
                              <groupId>jakarta.servlet</groupId>
                              <artifactId>jakarta.servlet-api</artifactId>
                              <version>4.0.3</version>
                              <scope>provided</scope>
                          </dependency>

                          Все осталось в рабочем состоянии, корректировать код не потребовалось


                          Заглянул во внутрь файла jakarta.servlet-api-4.0.3.jar, отличий не увидел. Имена пакетов не изменяются.

                            0

                            Я не говорил что меняются имена всех пакетов.
                            Например, утилита tomcat-jakartaee-migration в ходе своей работы меняет имена пакетов с javax.* на jakarta.* и делает это явно не просто так.


                            Хотя в спецификации Jakarta EE все пакеты относятся к javax.*, так что возможно у меня просто сложилось не верное впечатление.

                              0

                              По сути пакеты javax.* это спецификации (декларация интерфейсов и "базовых" классов). Менять названия этих пакетов полная глупость. Это же нарушение совместимости, нужно все продукты править, в которых используются реализации этих спецификаций.

                      0

                      Потому что JavaEE умерла (точнее, убита славной компанией Oracle) и переродилась в JakartaEE начиная с Java 11. Так что если вы живете на экосистеме свежих Java, вам по любому нужно двигаться дальше. "Зачем нам нужна новая джава и зачем вообще обновляться, все и так работает" — это уже вообще отдельный вопрос

                      0
                      > внутри там (судя по pom.xml) находится Glassfish

                      Там внутри не стеклорыба, а крохотная json-либа. И почему вам «ясно», что использовать это не стоит, мне, например, не ясно. На фоне других проектов docker-api этот выглядит божественно.
                        0

                        ¯_(ツ)_/¯ Потому что это либа, написанная одним, ну может быть двумя (как считать) людьми, о четырехста коммитах. Будет там несколько десятков реальных контрибуторов, пять лет от старта и понимание состояния секурити — можно будет подумать. Ну это для широкой публики. Понятно, что я в своих хэлловорлдах это использовать буду, но рекомендовать это серьезным людям в серьезных ынтерпрайзах рука не поднимется.

                          +1
                          через 5 лет от старта и докера, может, уже не будет :)

                          я видел, многие серьёзные компании используют либу от спотифая, видимо тоже глядя на количество звёзд на гитхабе, но к ней у меня куда больше вопросов.

                      Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                      Самое читаемое