package com.mycompany.cevent.config.reload; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.context.ConfigurableApplicationContext; import org.springsource.loaded.Plugins; import org.springsource.loaded.ReloadEventProcessorPlugin; /** * Automatically re-configures classes when Spring Loaded triggers a hot reload event. * * <p> * Supported technologies are * <ul> * <li>Spring: dependency injection and the post-construct hook are triggered</li> * <li>Jackson: the serializer and deserializer caches are invalidated on JPA beans and DTOs</li> * </ul> * </p> * <p> * To have Spring Loaded working, run your Application class with these VM options: * "-javaagent:spring_loaded/springloaded-1.1.5-dev.jar -noverify" * </p> */ public class JHipsterPluginManagerReloadPlugin implements ReloadEventProcessorPlugin { private static final Logger log = LoggerFactory.getLogger(JHipsterPluginManagerReloadPlugin.class); private static SpringReloader springReloader; private static JacksonReloader jacksonReloader; @Override public boolean shouldRerunStaticInitializer(String typename, Class<?> aClass, String encodedTimestamp) { return true; } public void reloadEvent(String typename, Class<?> clazz, String encodedTimestamp) { if (!typename.startsWith("com.mycompany.cevent")) { log.trace("This class is not in the application package, nothing to do"); return; } if (typename.contains("$$EnhancerByCGLIB$$") || typename.contains("$$FastClassByCGLIB$$")) { log.trace("This is a CGLIB proxy, nothing to do"); return; } springReloader.reloadEvent(typename, clazz); jacksonReloader.reloadEvent(typename, clazz); } public static void register(ConfigurableApplicationContext ctx) { log.trace("Registering JHipster hot reloading plugin"); springReloader = new SpringReloader(ctx); jacksonReloader = new JacksonReloader(ctx); Plugins.registerGlobalPlugin(new JHipsterPluginManagerReloadPlugin()); } }