package com.exteso.lab.pf.config.reload; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.context.ConfigurableApplicationContext; import org.springframework.core.env.Environment; 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.jar -noverify -Dspringloaded=plugins=com.mycompany.myapp.config.reload.instrument.JHipsterLoadtimeInstrumentationPlugin" * </p> */ public class JHipsterPluginManagerReloadPlugin implements ReloadEventProcessorPlugin { private final Logger log = LoggerFactory.getLogger(JHipsterPluginManagerReloadPlugin.class); private static JHipsterReloaderThread jHipsterReloaderThread; @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.exteso.lab.pf")) { log.trace("This class is not in the application package, nothing to do"); return; } if (typename.contains("$$EnhancerBy") || typename.contains("$$FastClassBy")) { log.trace("This is a CGLIB proxy, nothing to do"); return; } jHipsterReloaderThread.reloadEvent(typename, clazz); } public static void register(ConfigurableApplicationContext ctx, ClassLoader classLoader) { Environment env = ctx.getEnvironment(); if (env.getProperty("hotReload.enabled", Boolean.class, false)) { jHipsterReloaderThread = new JHipsterReloaderThread(ctx); JHipsterReloaderThread.register(jHipsterReloaderThread); JHipsterFileSystemWatcher.register(classLoader, ctx); Plugins.registerGlobalPlugin(new JHipsterPluginManagerReloadPlugin()); } } }