2012-02-17 118 views
0

我想实现一个静态Java类型模板引擎的热插拔机制。我遵循Play!Framework使用的相同方法来重新加载应用程序类。但我总是得到以下错误:Java仪器:HotswapaAent无法重新加载类定义

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

我想我明白发生了什么事情。 Play的应用程序类加载器实际上无法幸免于这种错误。它所做的是在出现错误时重新启动Play,其中进程播放将创建应用程序类加载器的新实例。我遵循了同样的过程,事实证明它是可行的。