Инструмент Java: HotswapaAent не удалось перезагрузить определение класса - PullRequest
0 голосов
/ 18 февраля 2012

Я пытаюсь реализовать механизм горячей замены для статического Java-шаблонизатора.Я следую тому же подходу, который используется в Play! Framework для перезагрузки классов приложений.Однако я всегда получаю следующую ошибку:

Caused by: java.lang.UnsupportedOperationException: class redefinition failed: attempted to change the schema (add/remove fields)
        at sun.instrument.InstrumentationImpl.redefineClasses0(Native Method)
        at sun.instrument.InstrumentationImpl.redefineClasses(InstrumentationImpl.java:150)
        at play.classloading.HotswapAgent.reload(HotswapAgent.java:21)
        at com.greenlaw110.rythm.play.RythmPlugin$5.reload(RythmPlugin.java:226)
        at com.greenlaw110.rythm.internal.compiler.TemplateClassLoader.detectChange(TemplateClassLoader.java:335)
        ... 19 more

Кто-нибудь знает, как игра может пережить эту проблему?

1 Ответ

1 голос
/ 18 февраля 2012

Мне кажется, я понимаю, что происходит. Загрузчик классов приложений Play на самом деле НЕ МОЖЕТ пережить такого рода ошибки. Что он делает, так это перезапускает Play при ошибке, в результате которой процесс play создаст новый экземпляр загрузчика класса приложения. Я следовал тому же процессу, и он доказал свою эффективность.

...