Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Мигрируй это!

Мигрируй это!

Платформа Java Enterprise эволюционирует, меняется, и уже скоро Jakarta EE придёт в существующие проекты, которым потребуется миграция на новый API. Мы поговорим о предстоящих изменениях в коде, о том как их можно сделать вручную и о том, как этого избежать. Посмотрим на IntelliJ IDEA как на фреймворк для автоматического рефакторинга, напишем плагин для IDE и заставим роботов делать скучную работу вместо нас.

Avatar for Yuriy Artamonov

Yuriy Artamonov

March 31, 2021
Tweet

More Decks by Yuriy Artamonov

Other Decks in Programming

Transcript

  1. Автор ты кто Юрий Артамонов @jreznot ▪ Разрабатывал фреймворки и

    библиотеки для Java на протяжении 9 лет ▪ Придумываю новые возможности IDE для ваших любимых JVM фреймворков в IntelliJ IDEA ▪ Беспристрастный член ПК конференций Joker/JPoint 2
  2. План действий 1. А что там мигрировать 2. Грубая сила

    3. Мягкая сила 4. Приручаем IDE 5. Сходим с ума 3
  3. История вопроса > At JavaOne 2017 Oracle announced that they

    would start the difficult process of moving Java EE to the Eclipse Software Foundation. <…> Mike Milinkovich from Eclipse informed that Eclipse and Oracle could not come to an agreement that would allow Jakarta EE to evolve using the existing javax package prefix. https://www.eclipse.org/community/eclipse_newsletter/201 9/november/7.php 4
  4. Ожидания Jakarta EE сможет беспрепятственно использоваться если: ▪ Существующие приложения

    должны продолжить работу без изменений ▪ Существующий исходный код должен продолжить работать без изменений ▪ Должны быть созданы инструменты для миграции импортов ▪ Приложения, использующие новые API должны иметь возможность использовать библиотеки, не получившие обновлений 5
  5. Масштаб трагедии ▪ Зависимости на javax.inject, javax.persistence, javax.ws.rs… ▪ Популярные

    библиотеки: Jersey, REST Easy, Hibernate, Weld, ActiveMQ, RabbitMQ… ▪ Spring Framework - 2545 Java EE imports ▪ Application Servers: Tomcat, Jetty, GlassFish, WebLogic, Wilfly, OpenLiberty ▪ Cloud APIs совместимые с JMS 6
  6. Что нужно мигрировать ▪ Посмотреть пристальным взглядом на зависимости ▪

    Обновить зависимости в pom.xml ▪ Поправить импорты javax.* ▪ Заменить пространства имён в XML конфигурации ▪ Переименовать свойства javax.* https://www.agilejava.eu/2021/01/22/migration-guide/ 7
  7. Давайте Search-Replace жахнем! Варианты: 1. Replace in Files + Regex

    2. Replace Structurally... Многовато будет запусков! 9
  8. Какие есть инструменты ▪ Tomcat Migration Tool for Jakarta EE

    github.com/apache/tomcat-jakartaee-migration (брутальные регулярные выражения) ▪ Eclipse Transformer project github.com/eclipse/transformer (байткод процессор) ▪ IntelliJ IDEA ! 11
  9. Tomcat Migration Tool - EESpecProfile 12 public enum EESpecProfile {

    TOMCAT("javax([/\\.](annotation(?![/ \\.]processing)" + "|ejb" + "|el" + "|mail" + "|persistence" + "|security[/\\.]auth[/\\.]message" + "|servlet" + "|transaction(?![/ \\.]xa)" + "|websocket))" ), EE("javax([/\\.](activation" + "|annotation(?![/ \\.]processing)" + "|batch" + "|decorator" + "|ejb" + "|el" + "|enterprise" + "|faces" +
  10. Потеря-потерь Specifications Pruned in Jakarta EE 9: ▪ Jakarta XML

    Registries ▪ Jakarta XML RPC ▪ Jakarta Deployment ▪ Jakarta Management eclipse-ee4j.github.io/jakartaee-platform/jakartaee9/JakartaEE9ReleasePlan 13
  11. Как создать плагин 14 1. Проверить/включить Plugin DevKit 2. Создать

    Gradle проект с библиотекой IntelliJ Platform Plugin 3. Объявить и реализовать нужные точки расширения
  12. Ключевые внутренности IDE ▪ Компоненты и сервисы ▪ Виртуальная файловая

    система (VFS) ▪ Поддержка языков (PSI) ▪ Редактор кода ▪ Инспекции ▪ Индексы ▪ Фоновые процессы ▪ UI библиотека ▪ Точки расширения IntelliJ Platform IDEA CE (Java, Groovy, Kotlin) PHP Support Ruby Support IDEA Ultimate PHP Storm RubyMine 15
  13. Refactor - Migrate… Стандартная возможность IntelliJ IDEA (CE и Ultimate)

    Варианты: 1. Вызвать UI, добавить пакеты и классы для миграции 2. Создать конфигурационный файл в плагине 16 <migrationMap> <name value="Java EE 8 to Jakarta EE 9" /> <entry oldName="javax.inject" newName="jakarta.inject" type="package" recursive="true" /> <entry oldName="javax.ws.rs" newName="jakarta.ws.rs" type="package" recursive="true" /> <entry oldName="javax.enterprise" newName="jakarta.enterprise" type="package" recursive="true" /> <entry oldName="javax.persistence" newName="jakarta.persistence" type="package" recursive="true" /> </migrationMap>
  14. Internal Mode Специальный режим работы IDE, в котором доступны опции

    для разработчиков. ▪ Internal Actions ▪ View PSI / Dump UAST ▪ Dumb Mode Switch ▪ … Автоматически доступен в режиме отладки плагина. Включить в VM Options своей IDE: -Didea.is.internal=true 17
  15. PSI Viewer Tools - View PSI Structure of Current File

    Позволяет изучить структуру PSI дерева в файле: ▪ PSI Tree ▪ References ▪ Language injections 18
  16. Куда копать дальше ▪ Исходный код IntelliJ IDEA CE: github.com/JetBrains/intellij-community

    ▪ Документация Plugin DevKit: jetbrains.org/intellij/sdk/docs/basics.html ▪ Slack: jetbrains-platform NEW! https://plugins.jetbrains.com/slack 19