Support for Apache FreeMarker. Clear the class introspection cache when classes are redefined
Implementation notes
- Plugin initialization is triggered after FreeMarkerServer.init() in servlet classloader
- FreeMarker 2.3.28 has a typo in method ‘clearClassIntrospecitonCache’, used method name as-is
- Any class redefinition triggers the introspection cache to be cleared. events within 500ms are merged
TODO
- Improve performance by only removing the changed classes from the cache. Code snippet:
Object classIntrospector = ReflectionHelper.get(objectWrapper, "classIntrospector"); Object cacheClassNames = ReflectionHelper.get(classIntrospector, "cacheClassNames"); Boolean inCache = (Boolean)ReflectionHelper.invoke(cacheClassNames, cacheClassNames.getClass(), "contains",new Class[] {Object.class}, ctClass.getName()); if(inCache) { ReflectionHelper.invoke(classIntrospector, classIntrospector.getClass(), "remove", new Class[] {Class.class}, appClassLoader.loadClass(ctClass.getName())); }