Slide 1

Slide 1 text

Мигрируй это! Юрий Артамонов

Slide 2

Slide 2 text

Автор ты кто Юрий Артамонов @jreznot ■ Разрабатывал фреймворки и библиотеки для Java на протяжении 9 лет ■ Придумываю новые возможности IDE для ваших любимых JVM фреймворков в IntelliJ IDEA ■ Беспристрастный член ПК конференций Joker/JPoint 2

Slide 3

Slide 3 text

План действий 1. А что там мигрировать 2. Грубая сила 3. Мягкая сила 4. Приручаем IDE 5. Сходим с ума 3

Slide 4

Slide 4 text

История вопроса > 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

Slide 5

Slide 5 text

Ожидания Jakarta EE сможет беспрепятственно использоваться если: ■ Существующие приложения должны продолжить работу без изменений ■ Существующий исходный код должен продолжить работать без изменений ■ Должны быть созданы инструменты для миграции импортов ■ Приложения, использующие новые API должны иметь возможность использовать библиотеки, не получившие обновлений 5

Slide 6

Slide 6 text

Масштаб трагедии ■ Зависимости на 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

Slide 7

Slide 7 text

Что нужно мигрировать ■ Посмотреть пристальным взглядом на зависимости ■ Обновить зависимости в pom.xml ■ Поправить импорты javax.* ■ Заменить пространства имён в XML конфигурации ■ Переименовать свойства javax.* https://www.agilejava.eu/2021/01/22/migration-guide/ 7

Slide 8

Slide 8 text

Модельное приложение Крошечное приложение на Java EE 8: ■ CDI ■ JPA ■ Bean Validation ■ JAX-RS ■ EJB 8

Slide 9

Slide 9 text

Давайте Search-Replace жахнем! Варианты: 1. Replace in Files + Regex 2. Replace Structurally... Многовато будет запусков! 9

Slide 10

Slide 10 text

А что-то не переехало ■ javax.sql.* ■ javax.transaction.xa.* ■ javax.xml.* ■ javax.naming.* ■ javax.swing.* 10

Slide 11

Slide 11 text

Какие есть инструменты ■ Tomcat Migration Tool for Jakarta EE github.com/apache/tomcat-jakartaee-migration (брутальные регулярные выражения) ■ Eclipse Transformer project github.com/eclipse/transformer (байткод процессор) ■ IntelliJ IDEA ! 11

Slide 12

Slide 12 text

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" +

Slide 13

Slide 13 text

Потеря-потерь 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

Slide 14

Slide 14 text

Как создать плагин 14 1. Проверить/включить Plugin DevKit 2. Создать Gradle проект с библиотекой IntelliJ Platform Plugin 3. Объявить и реализовать нужные точки расширения

Slide 15

Slide 15 text

Ключевые внутренности IDE ■ Компоненты и сервисы ■ Виртуальная файловая система (VFS) ■ Поддержка языков (PSI) ■ Редактор кода ■ Инспекции ■ Индексы ■ Фоновые процессы ■ UI библиотека ■ Точки расширения IntelliJ Platform IDEA CE (Java, Groovy, Kotlin) PHP Support Ruby Support IDEA Ultimate PHP Storm RubyMine 15

Slide 16

Slide 16 text

Refactor - Migrate… Стандартная возможность IntelliJ IDEA (CE и Ultimate) Варианты: 1. Вызвать UI, добавить пакеты и классы для миграции 2. Создать конфигурационный файл в плагине 16

Slide 17

Slide 17 text

Internal Mode Специальный режим работы IDE, в котором доступны опции для разработчиков. ■ Internal Actions ■ View PSI / Dump UAST ■ Dumb Mode Switch ■ … Автоматически доступен в режиме отладки плагина. Включить в VM Options своей IDE: -Didea.is.internal=true 17

Slide 18

Slide 18 text

PSI Viewer Tools - View PSI Structure of Current File Позволяет изучить структуру PSI дерева в файле: ■ PSI Tree ■ References ■ Language injections 18

Slide 19

Slide 19 text

Куда копать дальше ■ Исходный код 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

Slide 20

Slide 20 text

Вопросы ? Код: github.com/jreznot/jakartaee-migrator Twitter: @Yuriy_Artamonov