У меня есть приложение, которое нуждается в возможности обновлять части себя (по одному классу за раз) без остановки и перезапуска. С API JavaCompiler легко создавать модифицированный исходный код класса, перекомпилировать, загружать и создавать экземпляр класса. Я могу сделать это все в памяти (без файлов, считанных с диска или сети).Динамическое обновление программы, компиляция времени выполнения и загрузчики классов
Приложение никогда не создаст экземпляр более чем одного объекта такого класса. Там будет только две или три ссылки на этот объект. Когда модифицированный класс загружается и создается экземпляр, все эти ссылки будут изменены на новый объект. Я также могу, вероятно, гарантировать, что ни один метод в затронутом классе не работает в другом потоке при загрузке измененного класса.
Мой вопрос заключается в следующем: у моего загрузчика классов возникнут проблемы с загрузкой модифицированного класса с тем же именем, что и ранее загруженный класс?
Если я не реализую кэш загруженных классов в загрузчике классов, это бы избежать проблем? Или делегирование загрузчика родительского класса по-прежнему вызывает проблему?
Надеюсь использовать один экземпляр моего загрузчика классов, но при необходимости я могу создать новый экземпляр при каждом обновлении класса.
Примечание: Я посмотрел на OSGI, и, похоже, это немного больше, чем мне нужно.
У меня есть что-то очень похожее на это. Вам нужно будет указать использование JDK для его компиляции, иначе вы получите ошибки с возвратом JavaCompiler. –