Доклад

Патчим байт-код сторонних библиотек в рантайме

Зал 3
  • На русском языке

При использовании сторонних библиотек иногда возникает необходимость в доработке их исходного кода. В таких случаях, как правило, делается форк исходной библиотеки, в который вносятся нужные модификации. Но что делать, если такой возможности у нас нет? Например, библиотека с закрытым исходным кодом либо есть иные ограничения на добавление модифицированной библиотеки к основному проекту.

В докладе расскажу о способе, который мы разработали для патчинга Apache Spark в рантайме через хук на classloader c помощью JVM-функции javaagent и библиотеки Javassist, позволяющей манипулировать байт-кодом JVM на высоком уровне. Сначала объясню, как мы пришли к этому способу, вдохновившись технологией monkey patching в Python. Затем покажу, как можно поставить хук на classloader, используя javaagent.

В основной части доклада обсудим, как можно изменять байт-код на высоком уровне абстракции, и рассмотрим библиотеки, позволяющие это делать. Затем покажу четыре разных способа, которые мы придумали для патчинга исходных классов библиотеки, и как мы их реализовали с использованием библиотеки Javaassist.

В заключение немного порассуждаем о том, насколько этот способ удобен и надежен и как тестировать патченные классы.

Спикеры

Приглашенные эксперты

Расписание