GithubHelp home page GithubHelp logo

hotswapprojects / hotswapagent Goto Github PK

View Code? Open in Web Editor NEW
2.2K 2.2K 478.0 4.29 MB

Java unlimited redefinition of classes at runtime.

License: GNU General Public License v2.0

Java 99.71% HTML 0.09% Shell 0.20%

hotswapagent's People

Contributors

alpapad avatar artur- avatar atilacamurca avatar beiwei30 avatar brandstaetter avatar cvictory avatar disseminator avatar divijshrivastava avatar edudant avatar erkieh avatar hightower1991 avatar josehmaza avatar lancethomps avatar liuzhengyang avatar mstahv avatar muwaiwai avatar nick-the-uncharted avatar nicklaswallgren avatar philippefichet avatar raymondlam1 avatar ruediste avatar sinanyumak avatar skybber avatar smallfour avatar spelletier avatar theigl avatar tporeba avatar xnike avatar zunpiau avatar zzhlhc avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

hotswapagent's Issues

Ignore IDE files

Let's remove *.iml, .ide, etc. files from VCS and add them to .gitignore.
Right now anytime I open my IntelliJ I get all those files as modified in changelist.

Jboss support

When trying to use with Jboss eap 6.1.0:

17:10:52,604 ERROR [stderr](MSC service thread 1-7) Reported exception:
17:10:52,604 ERROR [stderr](MSC service thread 1-7) java.lang.NoClassDefFoundError: org/hotswap/agent/PluginManager
17:10:52,604 ERROR [stderr](MSC service thread 1-7) at ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:72)
17:10:52,604 ERROR [stderr](MSC service thread 1-7) at ch.qos.logback.classic.util.ContextInitializer.configureByResource(ContextInitializer.java:75)
17:10:52,604 ERROR [stderr](MSC service thread 1-7) at ch.qos.logback.classic.util.ContextInitializer.autoConfig(ContextInitializer.java:148)
17:10:52,604 ERROR [stderr](MSC service thread 1-7) at org.slf4j.impl.StaticLoggerBinder.init(StaticLoggerBinder.java:84)
17:10:52,604 ERROR [stderr](MSC service thread 1-7) at org.slf4j.impl.StaticLoggerBinder.(StaticLoggerBinder.java:54)
17:10:52,605 ERROR [stderr](MSC service thread 1-7) at org.slf4j.LoggerFactory.bind(LoggerFactory.java:128)
17:10:52,605 ERROR [stderr](MSC service thread 1-7) at org.slf4j.LoggerFactory.performInitialization(LoggerFactory.java:107)
17:10:52,605 ERROR [stderr](MSC service thread 1-7) at org.slf4j.LoggerFactory.getILoggerFactory(LoggerFactory.java:295)
17:10:52,605 ERROR [stderr](MSC service thread 1-7) at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:269)
17:10:52,605 ERROR [stderr](MSC service thread 1-7) at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:281)
17:10:52,605 ERROR [stderr](MSC service thread 1-7) at cz.csas.knproxy.localservices.heartbeatservice.v01.HeartbeatServiceImpl.(HeartbeatServiceImpl.java:28)
17:10:52,605 ERROR [stderr](MSC service thread 1-7) at java.lang.Class.forName0(Native Method)
17:10:52,605 ERROR [stderr](MSC service thread 1-7) at java.lang.Class.forName(Class.java:270)
17:10:52,605 ERROR [stderr](MSC service thread 1-7) at org.jboss.invocation.proxy.AbstractProxyFactory.afterClassLoad(AbstractProxyFactory.java:94)
17:10:52,605 ERROR [stderr](MSC service thread 1-7) at org.jboss.invocation.proxy.AbstractClassFactory.defineClass(AbstractClassFactory.java:166)
17:10:52,606 ERROR [stderr](MSC service thread 1-7) at org.jboss.invocation.proxy.AbstractProxyFactory.getCachedMethods(AbstractProxyFactory.java:145)
17:10:52,606 ERROR [stderr](MSC service thread 1-7) at org.jboss.as.ee.component.ViewDescription$DefaultConfigurator.configure(ViewDescription.java:193)
17:10:52,606 ERROR [stderr](MSC service thread 1-7) at org.jboss.as.ee.component.ComponentDescription$DefaultComponentConfigurator.configure(ComponentDescription.java:929)
17:10:52,606 ERROR [stderr](MSC service thread 1-7) at org.jboss.as.ee.component.deployers.EEModuleConfigurationProcessor.deploy(EEModuleConfigurationProcessor.java:80)
17:10:52,606 ERROR [stderr](MSC service thread 1-7) at org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:120)
17:10:52,606 ERROR [stderr](MSC service thread 1-7) at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1811)
17:10:52,606 ERROR [stderr](MSC service thread 1-7) at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1746)
17:10:52,606 ERROR [stderr](MSC service thread 1-7) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
17:10:52,606 ERROR [stderr](MSC service thread 1-7) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
17:10:52,607 ERROR [stderr](MSC service thread 1-7) at java.lang.Thread.run(Thread.java:744)
17:10:52,607 ERROR [stderr](MSC service thread 1-7) Caused by: java.lang.ClassNotFoundException: org.hotswap.agent.PluginManager from [Module "deployment.knproxy-ear-1.0.0-SNAPSHOT.ear.knproxy-war.war:main" from Service Module Loader]
17:10:52,607 ERROR [stderr](MSC service thread 1-7) at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:196)
17:10:52,607 ERROR [stderr](MSC service thread 1-7) at org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:444)
17:10:52,607 ERROR [stderr](MSC service thread 1-7) at org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:432)
17:10:52,608 ERROR [stderr](MSC service thread 1-7) at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:374)
17:10:52,608 ERROR [stderr](MSC service thread 1-7) at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:119)
17:10:52,608 ERROR [stderr](MSC service thread 1-7) ... 25 more

Linkage error in Wildfly because of differences between JasperLoader and ModuleClassLoader.

I don't know how class loaders work. I only have a vague idea. So I'm sorry if I'm not precise with this description. Here I go...

I'm running Wildfly 8.1.0, with JDK 8 Update 05 and HotswapAgent 0.1 Beta 4. I've successfully installed DCEVM 25.5-b02-dcevmlight-58 as an alternative JVM. I've been able to correctly hotswap several classes. However, I've problems when the class that I hotswap is used in a JSP file but has been instantiated from a class stored in WEB-INF/classes/ . Every time that I do that, I got a java.lang.LinkageError.

Testing it is very easy. Create a WAR file with a class that instantiates itself. For example:

package myweb;

public class Test {

private Test () {
}

public static Test create () {
  return new Test ();
}

}

Then write a call to myweb.Test.create () in a JSP file and request such JSP from your browser. It's OK. Now edit the class as you want, submit the changes with your IDE and request the JSP again. It will fail and the server will output:

java.lang.LinkageError: loader constraint violation: when resolving method "myweb.Test.create()Lmyapp/Test;" the class loader (instance of org/apache/jasper/servlet/JasperLoader) of the current class, org/apache/jsp/test_jsp, and the class loader (instance of org/jboss/modules/ModuleClassLoader) for the method's defining class, myapp/Test, have different Class objects for the type myapp/Test used in the signature

It seems that both class loaders, JasperLoader and ModuleClassLoader, keep a different version of the same class. One of them isn't updated properly.

Thank you.

Plugin class org.hotswap.agent.plugin.seam.SeamPlugin is not initialized in classloader ModuleClassLoader for Module "deployment.core-process.ear:main" from Service Module Loader

Hi! I'am using Jboss Eap 6.1, Seam 2.3.1 and Hot-Swap Agent 0.2, but i have this stacktrace:

21:43:22,580 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[default-host].[/]] (ServerService Thread Pool -- 69) JBWEB000287: Exception sending context initialized event to listener instance of class org.jboss.seam.servlet.SeamListener: org.jboss.seam.InstantiationException: Could not instantiate Seam component: org.jboss.seam.el.referenceCache
    at org.jboss.seam.Component.newInstance(Component.java:2208) [jboss-seam.jar:2.3.1.Final]
    at org.jboss.seam.contexts.Contexts.startup(Contexts.java:343) [jboss-seam.jar:2.3.1.Final]
    at org.jboss.seam.contexts.Contexts.startup(Contexts.java:317) [jboss-seam.jar:2.3.1.Final]
    at org.jboss.seam.contexts.ServletLifecycle.endInitialization(ServletLifecycle.java:143) [jboss-seam.jar:2.3.1.Final]
    at org.jboss.seam.init.Initialization.init(Initialization.java:813) [jboss-seam.jar:2.3.1.Final]
    at org.jboss.seam.servlet.SeamListener.contextInitialized(SeamListener.java:36) [jboss-seam.jar:2.3.1.Final]
    at org.apache.catalina.core.StandardContext.contextListenerStart(StandardContext.java:3339) [jbossweb-7.2.0.Final-redhat-1.jar:7.2.0.Final-redhat-1]
    at org.apache.catalina.core.StandardContext.start(StandardContext.java:3777) [jbossweb-7.2.0.Final-redhat-1.jar:7.2.0.Final-redhat-1]
    at org.jboss.as.web.deployment.WebDeploymentService.doStart(WebDeploymentService.java:156) [jboss-as-web-7.2.0.Final-redhat-8.jar:7.2.0.Final-redhat-8]
    at org.jboss.as.web.deployment.WebDeploymentService.access$000(WebDeploymentService.java:60) [jboss-as-web-7.2.0.Final-redhat-8.jar:7.2.0.Final-redhat-8]
    at org.jboss.as.web.deployment.WebDeploymentService$1.run(WebDeploymentService.java:93) [jboss-as-web-7.2.0.Final-redhat-8.jar:7.2.0.Final-redhat-8]
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) [rt.jar:1.7.0_71]
    at java.util.concurrent.FutureTask.run(FutureTask.java:262) [rt.jar:1.7.0_71]
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) [rt.jar:1.7.0_71]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) [rt.jar:1.7.0_71]
    at java.lang.Thread.run(Thread.java:745) [rt.jar:1.7.0_71]
    at org.jboss.threads.JBossThread.run(JBossThread.java:122)
Caused by: java.lang.RuntimeException: exception invoking: start
    at org.jboss.seam.util.Reflections.invokeAndWrap(Reflections.java:154) [jboss-seam.jar:2.3.1.Final]
    at org.jboss.seam.Component.callComponentMethod(Component.java:2313) [jboss-seam.jar:2.3.1.Final]
    at org.jboss.seam.Component.callCreateMethod(Component.java:2236) [jboss-seam.jar:2.3.1.Final]
    at org.jboss.seam.Component.newInstance(Component.java:2196) [jboss-seam.jar:2.3.1.Final]
    ... 16 more
Caused by: java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [rt.jar:1.7.0_71]
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) [rt.jar:1.7.0_71]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) [rt.jar:1.7.0_71]
    at java.lang.reflect.Method.invoke(Method.java:606) [rt.jar:1.7.0_71]
    at org.jboss.seam.util.Reflections.invoke(Reflections.java:22) [jboss-seam.jar:2.3.1.Final]
    at org.jboss.seam.intercept.RootInvocationContext.proceed(RootInvocationContext.java:32) [jboss-seam.jar:2.3.1.Final]
    at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:56) [jboss-seam.jar:2.3.1.Final]
    at org.jboss.seam.transaction.RollbackInterceptor.aroundInvoke(RollbackInterceptor.java:28) [jboss-seam.jar:2.3.1.Final]
    at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:68) [jboss-seam.jar:2.3.1.Final]
    at org.jboss.seam.core.MethodContextInterceptor.aroundInvoke(MethodContextInterceptor.java:44) [jboss-seam.jar:2.3.1.Final]
    at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:68) [jboss-seam.jar:2.3.1.Final]
    at org.jboss.seam.intercept.RootInterceptor.invoke(RootInterceptor.java:107) [jboss-seam.jar:2.3.1.Final]
    at org.jboss.seam.intercept.JavaBeanInterceptor.interceptInvocation(JavaBeanInterceptor.java:196) [jboss-seam.jar:2.3.1.Final]
    at org.jboss.seam.intercept.JavaBeanInterceptor.invoke(JavaBeanInterceptor.java:114) [jboss-seam.jar:2.3.1.Final]
    at org.jboss.seam.el.JBossELReferenceCache_$$_javassist_seam_19.start(JBossELReferenceCache_$$_javassist_seam_19.java) [jboss-seam.jar:2.3.1.Final]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [rt.jar:1.7.0_71]
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) [rt.jar:1.7.0_71]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) [rt.jar:1.7.0_71]
    at java.lang.reflect.Method.invoke(Method.java:606) [rt.jar:1.7.0_71]
    at org.jboss.seam.util.Reflections.invoke(Reflections.java:22) [jboss-seam.jar:2.3.1.Final]
    at org.jboss.seam.util.Reflections.invokeAndWrap(Reflections.java:144) [jboss-seam.jar:2.3.1.Final]
    ... 19 more
Caused by: java.lang.Error: java.lang.IllegalArgumentException: Plugin class org.hotswap.agent.plugin.seam.SeamPlugin is not initialized in classloader ModuleClassLoader for Module "deployment.core-process.ear:main" from Service Module Loader.
    at org.jboss.el.util.ReferenceCache.<init>(ReferenceCache.java:193) [jboss-el-1.0_02.CR6.jar:1.0_02.CR6]
    at org.jboss.el.util.ReferenceCache.<init>(ReferenceCache.java:184) [jboss-el-1.0_02.CR6.jar:1.0_02.CR6]
    at org.jboss.el.util.ReflectionUtil$1.<init>(ReflectionUtil.java:55) [jboss-el-1.0_02.CR6.jar:1.0_02.CR6]
    at org.jboss.el.util.ReflectionUtil.<clinit>(ReflectionUtil.java:55) [jboss-el-1.0_02.CR6.jar:1.0_02.CR6]
    at org.jboss.am.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:68) [jboss-seam.jar:2.3.1.Final]
at org.jboss.seam.intercept.RootInterceptor.invoke(RootInterceptor.java:107) [jboss-seam.jar:2.3.1.Final]
at org.jboss.seam.intercept.JavaBeanInterceptor.interceptInvocation(JavaBeanInterceptor.java:196) [jboss-seam.jar:2.3.1.Final]
at org.jboss.seam.seam.el.JBossELReferenceCache.start(JBossELReferenceCache.java:18) [jboss-seam.jar:2.3.1.Final]
    ... 40 more
Caused by: java.lang.IllegalArgumentException: Plugin class org.hotswap.agent.plugin.seam.SeamPlugin is not initialized in classloader ModuleClassLoader for Module "deployment.core-process.ear:main" from Service Module Loader.
    at org.hotswap.agent.config.PluginRegistry.getPlugin(PluginRegistry.java:195) [hotswap-agent.jar:0.2]
    at org.hotswap.agent.config.PluginManager.getPlugin(PluginManager.java:79) [hotswap-agent.jar:0.2]
    at org.hotswap.agent.config.PluginManager.getPlugin(PluginManager.java:64) [hotswap-agent.jar:0.2]
    ... 45 more

Can you help with it?

What is the error

Jetty + Vraptor + HotswapAgent

[STDOUT] HOTSWAP AGENT: 12:51:31.840 ERROR (org.hotswap.agent.plugin.elresolver.ELResolverPlugin) - Error refreshing Jsf BeanELResolver .
[STDOUT] java.lang.NoSuchMethodException: javax.el.BeanELResolver.purgeBeanClasses(java.lang.ClassLoader)
[STDOUT] at java.lang.Class.getDeclaredMethod(Class.java:2004)
[STDOUT] at org.hotswap.agent.plugin.elresolver.ELResolverPlugin$1.executeCommand(ELResolverPlugin.java:40)
[STDOUT] at org.hotswap.agent.command.impl.CommandExecutor.run(CommandExecutor.java:25)

Tomcat 8 deployment fails with spring

WatchHandler.registerResources() fails with tomcat 8 (everything works fine with tomcat 7). Seems to be a classpath issue. Here is a stacktrace with a spring config file :

at java.lang.Thread.run(Thread.java:745) [?:1.7.0_71]
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'datasyncManagerFactory' defined in URL [jar:file:/D:/tools/apache-tomcat/8.0.3/webapps/arsm-ws/WEB-INF/lib/app-3.2.jar!/spring/app-core-datasource.xml]: Invocation of init method failed; nested exception is java.lang.NullPointerException
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1455) ~[AbstractAutowireCapableBeanFactory.class:3.1.2.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519) ~[AbstractAutowireCapableBeanFactory.class:3.1.2.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456) ~[AbstractAutowireCapableBeanFactory.class:3.1.2.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:294) ~[AbstractBeanFactory$1.class:3.1.2.RELEASE]
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:225) ~[DefaultSingletonBeanRegistry.class:3.1.2.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:291) ~[AbstractBeanFactory.class:3.1.2.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) ~[AbstractBeanFactory.class:3.1.2.RELEASE]
at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeansOfType(DefaultListableBeanFactory.java:424) ~[DefaultListableBeanFactory.class:3.1.2.RELEASE]
at org.springframework.beans.factory.BeanFactoryUtils.beansOfTypeIncludingAncestors(BeanFactoryUtils.java:277) ~[BeanFactoryUtils.class:3.1.2.RELEASE]
at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.detectPersistenceExceptionTranslators(PersistenceExceptionTranslationInterceptor.java:139) ~[PersistenceExceptionTranslationInterceptor.class:3.1.2.RELEASE]
at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.(PersistenceExceptionTranslationInterceptor.java:79) ~[PersistenceExceptionTranslationInterceptor.class:3.1.2.RELEASE]
at org.springframework.dao.annotation.PersistenceExceptionTranslationAdvisor.(PersistenceExceptionTranslationAdvisor.java:70) ~[PersistenceExceptionTranslationAdvisor.class:3.1.2.RELEASE]
at org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor.setBeanFactory(PersistenceExceptionTranslationPostProcessor.java:103) ~[PersistenceExceptionTranslationPostProcessor.class:3.1.2.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeAwareMethods(AbstractAutowireCapableBeanFactory.java:1475) ~[AbstractAutowireCapableBeanFactory.class:3.1.2.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1443) ~[AbstractAutowireCapableBeanFactory.class:3.1.2.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519) ~[AbstractAutowireCapableBeanFactory.class:3.1.2.RELEASE]
... 55 more
Caused by: java.lang.NullPointerException
at org.hotswap.agent.annotation.handler.WatchHandler.registerResources(WatchHandler.java:82) ~[hotswap-agent.jar:0.2]
at org.hotswap.agent.annotation.handler.WatchHandler.initMethod(WatchHandler.java:48) ~[hotswap-agent.jar:0.2]
at org.hotswap.agent.annotation.handler.AnnotationProcessor.processMethodAnnotations(AnnotationProcessor.java:135) ~[hotswap-agent.jar:0.2]
at org.hotswap.agent.annotation.handler.AnnotationProcessor.processAnnotations(AnnotationProcessor.java:102) ~[hotswap-agent.jar:0.2]
at org.hotswap.agent.config.PluginRegistry.initializePlugin(PluginRegistry.java:158) ~[hotswap-agent.jar:0.2]
at org.hotswap.agent.util.PluginManagerInvoker.callInitializePlugin(PluginManagerInvoker.java:26) ~[hotswap-agent.jar:0.2]
at org.hotswap.agent.plugin.hibernate.HibernatePersistenceHelper.initPlugin(HibernatePersistenceHelper.java:77) ~[catalina.jar:0.2]
at org.hotswap.agent.plugin.hibernate.HibernatePersistenceHelper.createContainerEntityManagerFactoryProxy(HibernatePersistenceHelper.java:43) ~[catalina.jar:0.2]
at org.hibernate.jpa.HibernatePersistenceProvider.createContainerEntityManagerFactory(HibernatePersistenceProvider.java) ~[HibernatePersistenceProvider.class:4.3.7.Final]
at org.hibernate.ejb.HibernatePersistence._createContainerEntityManagerFactoryHibernatePersistence(HibernatePersistence.java:67) ~[HibernatePersistence.class:4.3.7.Final]
at org.hibernate.ejb.HibernatePersistence.createContainerEntityManagerFactory(HibernatePersistence.java) ~[HibernatePersistence.class:4.3.7.Final]
at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:268) ~[LocalContainerEntityManagerFactoryBean.class:3.1.2.RELEASE]
at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:310) ~[AbstractEntityManagerFactoryBean.class:3.1.2.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1514) ~[AbstractAutowireCapableBeanFactory.class:3.1.2.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1452) ~[AbstractAutowireCapableBeanFactory.class:3.1.2.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519) ~[AbstractAutowireCapableBeanFactory.class:3.1.2.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456) ~[AbstractAutowireCapableBeanFactory.class:3.1.2.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:294) ~[AbstractBeanFactory$1.class:3.1.2.RELEASE]
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:225) ~[DefaultSingletonBeanRegistry.class:3.1.2.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:291) ~[AbstractBeanFactory.class:3.1.2.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) ~[AbstractBeanFactory.class:3.1.2.RELEASE]
at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeansOfType(DefaultListableBeanFactory.java:424) ~[DefaultListableBeanFactory.class:3.1.2.RELEASE]
at org.springframework.beans.factory.BeanFactoryUtils.beansOfTypeIncludingAncestors(BeanFactoryUtils.java:277) ~[BeanFactoryUtils.class:3.1.2.RELEASE]
at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.detectPersistenceExceptionTranslators(PersistenceExceptionTranslationInterceptor.java:139) ~[PersistenceExceptionTranslationInterceptor.class:3.1.2.RELEASE]
at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.(PersistenceExceptionTranslationInterceptor.java:79) ~[PersistenceExceptionTranslationInterceptor.class:3.1.2.RELEASE]
at org.springframework.dao.annotation.PersistenceExceptionTranslationAdvisor.(PersistenceExceptionTranslationAdvisor.java:70) ~[PersistenceExceptionTranslationAdvisor.class:3.1.2.RELEASE]
at org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor.setBeanFactory(PersistenceExceptionTranslationPostProcessor.java:103) ~[PersistenceExceptionTranslationPostProcessor.class:3.1.2.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeAwareMethods(AbstractAutowireCapableBeanFactory.java:1475) ~[AbstractAutowireCapableBeanFactory.class:3.1.2.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1443) ~[AbstractAutowireCapableBeanFactory.class:3.1.2.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519) ~[AbstractAutowireCapableBeanFactory.class:3.1.2.RELEASE]
... 55 more

HotswapAgent tries to load resource files as classes

Hi, I tried to use HotswapAgent with my project,but I get a lot of errors like this:

HOTSWAP AGENT: 18:25:43.303 ERROR (org.hotswap.agent.annotation.handler.WatchEventCommand) - Unable create CtClass for URI 'file:///Users/mik01aj/code/myProject/someModule/src/main/java/com/example/website/presentation/basepage/dialogs/RegisterVerificationEmailDialog.html'.
java.io.IOException: bad magic number: 3c21444f
    at org.hotswap.agent.javassist.bytecode.ClassFile.read(ClassFile.java:759)
    at org.hotswap.agent.javassist.bytecode.ClassFile.<init>(ClassFile.java:117)
    at org.hotswap.agent.javassist.CtClassType.<init>(CtClassType.java:69)
    at org.hotswap.agent.javassist.ClassPool.makeClass(ClassPool.java:714)
    at org.hotswap.agent.javassist.ClassPool.makeClass(ClassPool.java:693)
    at org.hotswap.agent.annotation.handler.WatchEventCommand.createCtClass(WatchEventCommand.java:191)
    at org.hotswap.agent.annotation.handler.WatchEventCommand.onWatchEvent(WatchEventCommand.java:120)
    at org.hotswap.agent.annotation.handler.WatchEventCommand.executeCommand(WatchEventCommand.java:51)
    at org.hotswap.agent.command.impl.CommandExecutor.run(CommandExecutor.java:25)

The given magic number 3c21444f is the hex for <!DO, the first 4 bytes of the HTML file. Basically, HotswapAgent tries to parse this file as Java bytecode, which, obviously, fails.

This might be because we keep our HTML templates (and some other non-Java resources, e.g. *.properties) in the src/main/java folder, and they go to WEB-INF/classes in the WAR file.

I think it's a HotswapAgent bug, because on original JDK it runs without problems.

If the fix is simple, you could point me to the place where this should be corrected so I could fix it myself and make a pull request.

AddEnhancerMethodProxyTest fails on jdk1.8.0_05

"C:\Program Files\Java\jdk1.8.0_05\jre\bin\java" -ea -XXaltjvm=dcevm -javaagent:j:\HotswapAgent\hotswap-agent-core\target\hotswap-agent-core-0.2.1-SNAPSHOT.jar  ... org.hotswap.agent.plugin.proxy.test.methods.AddEnhancerMethodProxyTest

HOTSWAP AGENT: 21:45:40.085 INFO (org.hotswap.agent.HotswapAgent) - Loading Hotswap agent {0.2.1-SNAPSHOT} - unlimited runtime class redefinition.
HOTSWAP AGENT: 21:45:40.825 ERROR (org.hotswap.agent.plugin.proxy.cglib.CglibProxyTransformer) - main
HOTSWAP AGENT: 21:45:40.826 ERROR (org.hotswap.agent.plugin.proxy.cglib.CglibProxyTransformer) - main
HOTSWAP AGENT: 21:45:40.827 ERROR (org.hotswap.agent.plugin.proxy.cglib.CglibProxyTransformer) - main

#
# A fatal error has been detected by the Java Runtime Environment:
#
#  EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x000000000721900d, pid=14836, tid=2184
#
# JRE version: Java(TM) SE Runtime Environment (8.0_05-b13) (build 1.8.0_05-b13)
# Java VM: Dynamic Code Evolution 64-Bit Server VM (25.5-b02-dcevmlight-36 mixed mode windows-amd64 compressed oops)
# Problematic frame:
# V  [jvm.dll+0xc900d]
#
# Failed to write core dump. Minidumps are not enabled by default on client versions of Windows
#
# If you would like to submit a bug report, please visit:
#   https://github.com/Guidewire/DCEVM/issues
#

---------------  T H R E A D  ---------------

Current thread (0x000000000266d800):  VMThread [stack: 0x0000000004150000,0x0000000004250000] [id=2184]

siginfo: ExceptionCode=0xc0000005, reading address 0x0000000000000010

Registers:
RAX=0x00000000000000ff, RBX=0x0000000000000f00, RCX=0x0000000000000000, RDX=0x0000000000000000
RSP=0x000000000424f270, RBP=0x000000000424f3a0, RSI=0x0000000000000f00, RDI=0x0000000003e5dde0
R8 =0x00000000025fd440, R9 =0x0000000000000003, R10=0x0000000000000003, R11=0x0000000003e5df71
R12=0x000000000424f430, R13=0x000000000424f420, R14=0x0000000000000000, R15=0x0000000000000000
RIP=0x000000000721900d, EFLAGS=0x0000000000010202

Top of Stack: (sp=0x000000000424f270)
0x000000000424f270:   00000000000000b7 000000000424f3a0
0x000000000424f280:   00000000000000b7 0000000002580080
0x000000000424f290:   0000000000000000 00000000072f85b0
0x000000000424f2a0:   0000000000000000 00000000000000b7
0x000000000424f2b0:   0000000000000000 0000000002580080
0x000000000424f2c0:   000000000257c200 0000000002580270
0x000000000424f2d0:   00000000025804a0 0000000000000000
0x000000000424f2e0:   0000000000000030 0000000002570000
0x000000000424f2f0:   0000000000000028 0000000000000028
0x000000000424f300:   0000000077975430 0000000000000000
0x000000000424f310:   0000000000000010 0000000002570000
0x000000000424f320:   0000000000000008 0000000000000008
0x000000000424f330:   0000000002570288 00000000778b3448
0x000000000424f340:   0000000000000000 0000000000000008
0x000000000424f350:   0000079f00250017 0000000002580470
0x000000000424f360:   000000000424f7e8 0000000064c15695 

Instructions: (pc=0x000000000721900d)
0x0000000007218fed:   0f b7 d8 48 63 c3 0f b7 44 c7 50 48 8b 44 c7 50
0x0000000007218ffd:   48 89 44 24 30 f6 d0 48 8b 4c 24 30 a8 01 74 0f
0x000000000721900d:   48 8b 41 10 48 8b 5c 24 38 48 83 c4 20 5f c3 48
0x000000000721901d:   8b 5c 24 38 48 83 e1 fe 48 8b c1 48 83 c4 20 5f 


Register to memory mapping:

RAX=0x00000000000000ff is an unknown value
RBX=0x0000000000000f00 is an unknown value
RCX=0x0000000000000000 is an unknown value
RDX=0x0000000000000000 is an unknown value
RSP=0x000000000424f270 is an unknown value
RBP=0x000000000424f3a0 is an unknown value
RSI=0x0000000000000f00 is an unknown value
RDI=0x0000000003e5dde0 is an unknown value
R8 =0x00000000025fd440 is an unknown value
R9 =0x0000000000000003 is an unknown value
R10=0x0000000000000003 is an unknown value
R11=0x0000000003e5df71 is an unknown value
R12=0x000000000424f430 is an unknown value
R13=0x000000000424f420 is an unknown value
R14=0x0000000000000000 is an unknown value
R15=0x0000000000000000 is an unknown value


Stack: [0x0000000004150000,0x0000000004250000],  sp=0x000000000424f270,  free space=1020k
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
V  [jvm.dll+0xc900d]
V  [jvm.dll+0x1a85b0]
V  [jvm.dll+0x1a9502]
V  [jvm.dll+0x19b9f5]
V  [jvm.dll+0x1a08df]
V  [jvm.dll+0x1a126a]
V  [jvm.dll+0x2140f7]
V  [jvm.dll+0x213352]
V  [jvm.dll+0x2137d1]
V  [jvm.dll+0x2139ee]
V  [jvm.dll+0x25f82a]
C  [msvcr100.dll+0x21d9f]
C  [msvcr100.dll+0x21e3b]
C  [kernel32.dll+0x159ed]
C  [ntdll.dll+0x2c541]

VM_Operation (0x00000000027ddb00): RedefineClasses, mode: safepoint, requested by thread 0x00000000025e8800


---------------  P R O C E S S  ---------------

Java Threads: ( => current thread )
  0x0000000005db9800 JavaThread "Thread-3" [_thread_blocked, id=11292, stack(0x00000000064b0000,0x00000000065b0000)]
  0x0000000005a5a000 JavaThread "Monitor Ctrl-Break" daemon [_thread_in_native, id=2444, stack(0x0000000006300000,0x0000000006400000)]
  0x0000000004932000 JavaThread "Service Thread" daemon [_thread_blocked, id=17380, stack(0x0000000005950000,0x0000000005a50000)]
  0x000000000495c000 JavaThread "C1 CompilerThread3" daemon [_thread_blocked, id=16744, stack(0x0000000005790000,0x0000000005890000)]
  0x000000000495b000 JavaThread "C2 CompilerThread2" daemon [_thread_blocked, id=16256, stack(0x00000000055c0000,0x00000000056c0000)]
  0x000000000495a800 JavaThread "C2 CompilerThread1" daemon [_thread_blocked, id=15796, stack(0x0000000005380000,0x0000000005480000)]
  0x000000000481d800 JavaThread "C2 CompilerThread0" daemon [_thread_blocked, id=14140, stack(0x00000000050f0000,0x00000000051f0000)]
  0x0000000004817800 JavaThread "Thread-2" daemon [_thread_blocked, id=11244, stack(0x0000000004f70000,0x0000000005070000)]
  0x0000000004816800 JavaThread "Thread-1" daemon [_thread_blocked, id=13700, stack(0x0000000004da0000,0x0000000004ea0000)]
  0x00000000047f8000 JavaThread "Thread-0" daemon [_thread_in_native, id=13928, stack(0x0000000004bf0000,0x0000000004cf0000)]
  0x00000000040a1000 JavaThread "Attach Listener" daemon [_thread_blocked, id=6452, stack(0x0000000004570000,0x0000000004670000)]
  0x000000000409d800 JavaThread "Signal Dispatcher" daemon [_thread_blocked, id=14800, stack(0x00000000046c0000,0x00000000047c0000)]
  0x000000000267e000 JavaThread "Finalizer" daemon [_thread_blocked, id=1392, stack(0x0000000004300000,0x0000000004400000)]
  0x0000000002674800 JavaThread "Reference Handler" daemon [_thread_blocked, id=9420, stack(0x0000000004400000,0x0000000004500000)]
  0x00000000025e8800 JavaThread "main" [_thread_blocked, id=2996, stack(0x00000000026e0000,0x00000000027e0000)]

Other Threads:
=>0x000000000266d800 VMThread [stack: 0x0000000004150000,0x0000000004250000] [id=2184]
  0x00000000048ec800 WatcherThread [stack: 0x0000000005250000,0x0000000005350000] [id=8844]

VM state:at safepoint (normal execution)

VM Mutex/Monitor currently owned by a thread:  ([mutex/lock_event])
[0x000000000257e6a0] Threads_lock - owner thread: 0x000000000266d800
[0x000000000257eba0] Heap_lock - owner thread: 0x00000000025e8800

Heap:
 def new generation   total 1152K, used 189K [0x0000000081a00000, 0x0000000081b40000, 0x00000000abc00000)
  eden space 1024K,   6% used [0x0000000081a00000, 0x0000000081a0fc80, 0x0000000081b00000)
  from space 128K,  98% used [0x0000000081b20000, 0x0000000081b3fa90, 0x0000000081b40000)
  to   space 128K,   0% used [0x0000000081b00000, 0x0000000081b00000, 0x0000000081b20000)
 tenured generation   total 129792K, used 3339K [0x00000000abc00000, 0x00000000b3ac0000, 0x0000000100000000)
   the space 129792K,   2% used [0x00000000abc00000, 0x00000000abf42cb0, 0x00000000abf42e00, 0x00000000b3ac0000)
 Metaspace       used 8347K, capacity 8494K, committed 8704K, reserved 1056768K
  class space    used 959K, capacity 1019K, committed 1024K, reserved 1048576K

Card table byte_map: [0x0000000003070000,0x0000000003470000] byte_map_base: 0x0000000002c63000

Polling page: 0x0000000000130000

CodeCache: size=245760Kb used=2685Kb max_used=2687Kb free=243074Kb
 bounds [0x000000000f010000, 0x000000000f2c0000, 0x000000001e010000]
 total_blobs=976 nmethods=646 adapters=244
 compilation: enabled

Compilation events (10 events):
Event: 0.887 Thread 0x000000000495c000  641       1       java.nio.Buffer::limit (5 bytes)
Event: 0.887 Thread 0x000000000495c000 nmethod 641 0x000000000f2add50 code [0x000000000f2adea0, 0x000000000f2adfb0]
Event: 0.887 Thread 0x000000000495c000  643       3       java.nio.CharBuffer::arrayOffset (35 bytes)
Event: 0.888 Thread 0x000000000495c000 nmethod 643 0x000000000f2ad790 code [0x000000000f2ad920, 0x000000000f2adc18]
Event: 0.888 Thread 0x000000000495c000  644       3       java.io.BufferedOutputStream::flushBuffer (29 bytes)
Event: 0.888 Thread 0x000000000495c000 nmethod 644 0x000000000f2ad310 code [0x000000000f2ad480, 0x000000000f2ad6e8]
Event: 0.888 Thread 0x000000000495c000  645       3       java.io.OutputStream::flush (1 bytes)
Event: 0.888 Thread 0x000000000495c000 nmethod 645 0x000000000f2ad010 code [0x000000000f2ad160, 0x000000000f2ad2b0]
Event: 0.888 Thread 0x000000000495c000  646   !   3       java.io.PrintStream::flush (35 bytes)
Event: 0.889 Thread 0x000000000495c000 nmethod 646 0x000000000f2ac690 code [0x000000000f2ac820, 0x000000000f2acd78]

GC Heap History (10 events):
Event: 0.816 GC heap before
{Heap before GC invocations=22 (full 0):
 def new generation   total 1152K, used 1152K [0x0000000081a00000, 0x0000000081b40000, 0x00000000abc00000)
  eden space 1024K, 100% used [0x0000000081a00000, 0x0000000081b00000, 0x0000000081b00000)
  from space 128K, 100% used [0x0000000081b00000, 0x0000000081b20000, 0x0000000081b20000)
  to   space 128K,   0% used [0x0000000081b20000, 0x0000000081b20000, 0x0000000081b40000)
 tenured generation   total 129792K, used 2447K [0x00000000abc00000, 0x00000000b3ac0000, 0x0000000100000000)
   the space 129792K,   1% used [0x00000000abc00000, 0x00000000abe63d10, 0x00000000abe63e00, 0x00000000b3ac0000)
 Metaspace       used 7931K, capacity 8046K, committed 8192K, reserved 1056768K
  class space    used 905K, capacity 955K, committed 1024K, reserved 1048576K
Event: 0.817 GC heap after
Heap after GC invocations=23 (full 0):
 def new generation   total 1152K, used 127K [0x0000000081a00000, 0x0000000081b40000, 0x00000000abc00000)
  eden space 1024K,   0% used [0x0000000081a00000, 0x0000000081a00000, 0x0000000081b00000)
  from space 128K,  99% used [0x0000000081b20000, 0x0000000081b3fff8, 0x0000000081b40000)
  to   space 128K,   0% used [0x0000000081b00000, 0x0000000081b00000, 0x0000000081b20000)
 tenured generation   total 129792K, used 2639K [0x00000000abc00000, 0x00000000b3ac0000, 0x0000000100000000)
   the space 129792K,   2% used [0x00000000abc00000, 0x00000000abe93f10, 0x00000000abe94000, 0x00000000b3ac0000)
 Metaspace       used 7931K, capacity 8046K, committed 8192K, reserved 1056768K
  class space    used 905K, capacity 955K, committed 1024K, reserved 1048576K
}
Event: 0.827 GC heap before
{Heap before GC invocations=23 (full 0):
 def new generation   total 1152K, used 1151K [0x0000000081a00000, 0x0000000081b40000, 0x00000000abc00000)
  eden space 1024K, 100% used [0x0000000081a00000, 0x0000000081b00000, 0x0000000081b00000)
  from space 128K,  99% used [0x0000000081b20000, 0x0000000081b3fff8, 0x0000000081b40000)
  to   space 128K,   0% used [0x0000000081b00000, 0x0000000081b00000, 0x0000000081b20000)
 tenured generation   total 129792K, used 2639K [0x00000000abc00000, 0x00000000b3ac0000, 0x0000000100000000)
   the space 129792K,   2% used [0x00000000abc00000, 0x00000000abe93f10, 0x00000000abe94000, 0x00000000b3ac0000)
 Metaspace       used 7991K, capacity 8110K, committed 8192K, reserved 1056768K
  class space    used 914K, capacity 955K, committed 1024K, reserved 1048576K
Event: 0.828 GC heap after
Heap after GC invocations=24 (full 0):
 def new generation   total 1152K, used 128K [0x0000000081a00000, 0x0000000081b40000, 0x00000000abc00000)
  eden space 1024K,   0% used [0x0000000081a00000, 0x0000000081a00000, 0x0000000081b00000)
  from space 128K, 100% used [0x0000000081b00000, 0x0000000081b20000, 0x0000000081b20000)
  to   space 128K,   0% used [0x0000000081b20000, 0x0000000081b20000, 0x0000000081b40000)
 tenured generation   total 129792K, used 2859K [0x00000000abc00000, 0x00000000b3ac0000, 0x0000000100000000)
   the space 129792K,   2% used [0x00000000abc00000, 0x00000000abecafa0, 0x00000000abecb000, 0x00000000b3ac0000)
 Metaspace       used 7991K, capacity 8110K, committed 8192K, reserved 1056768K
  class space    used 914K, capacity 955K, committed 1024K, reserved 1048576K
}
Event: 0.841 GC heap before
{Heap before GC invocations=24 (full 0):
 def new generation   total 1152K, used 1152K [0x0000000081a00000, 0x0000000081b40000, 0x00000000abc00000)
  eden space 1024K, 100% used [0x0000000081a00000, 0x0000000081b00000, 0x0000000081b00000)
  from space 128K, 100% used [0x0000000081b00000, 0x0000000081b20000, 0x0000000081b20000)
  to   space 128K,   0% used [0x0000000081b20000, 0x0000000081b20000, 0x0000000081b40000)
 tenured generation   total 129792K, used 2859K [0x00000000abc00000, 0x00000000b3ac0000, 0x0000000100000000)
   the space 129792K,   2% used [0x00000000abc00000, 0x00000000abecafa0, 0x00000000abecb000, 0x00000000b3ac0000)
 Metaspace       used 8066K, capacity 8206K, committed 8448K, reserved 1056768K
  class space    used 923K, capacity 987K, committed 1024K, reserved 1048576K
Event: 0.842 GC heap after
Heap after GC invocations=25 (full 0):
 def new generation   total 1152K, used 127K [0x0000000081a00000, 0x0000000081b40000, 0x00000000abc00000)
  eden space 1024K,   0% used [0x0000000081a00000, 0x0000000081a00000, 0x0000000081b00000)
  from space 128K,  99% used [0x0000000081b20000, 0x0000000081b3fff8, 0x0000000081b40000)
  to   space 128K,   0% used [0x0000000081b00000, 0x0000000081b00000, 0x0000000081b20000)
 tenured generation   total 129792K, used 3064K [0x00000000abc00000, 0x00000000b3ac0000, 0x0000000100000000)
   the space 129792K,   2% used [0x00000000abc00000, 0x00000000abefe170, 0x00000000abefe200, 0x00000000b3ac0000)
 Metaspace       used 8066K, capacity 8206K, committed 8448K, reserved 1056768K
  class space    used 923K, capacity 987K, committed 1024K, reserved 1048576K
}
Event: 0.863 GC heap before
{Heap before GC invocations=25 (full 0):
 def new generation   total 1152K, used 1151K [0x0000000081a00000, 0x0000000081b40000, 0x00000000abc00000)
  eden space 1024K, 100% used [0x0000000081a00000, 0x0000000081b00000, 0x0000000081b00000)
  from space 128K,  99% used [0x0000000081b20000, 0x0000000081b3fff8, 0x0000000081b40000)
  to   space 128K,   0% used [0x0000000081b00000, 0x0000000081b00000, 0x0000000081b20000)
 tenured generation   total 129792K, used 3064K [0x00000000abc00000, 0x00000000b3ac0000, 0x0000000100000000)
   the space 129792K,   2% used [0x00000000abc00000, 0x00000000abefe170, 0x00000000abefe200, 0x00000000b3ac0000)
 Metaspace       used 8173K, capacity 8334K, committed 8448K, reserved 1056768K
  class space    used 937K, capacity 987K, committed 1024K, reserved 1048576K
Event: 0.864 GC heap after
Heap after GC invocations=26 (full 0):
 def new generation   total 1152K, used 127K [0x0000000081a00000, 0x0000000081b40000, 0x00000000abc00000)
  eden space 1024K,   0% used [0x0000000081a00000, 0x0000000081a00000, 0x0000000081b00000)
  from space 128K,  99% used [0x0000000081b00000, 0x0000000081b1fff8, 0x0000000081b20000)
  to   space 128K,   0% used [0x0000000081b20000, 0x0000000081b20000, 0x0000000081b40000)
 tenured generation   total 129792K, used 3238K [0x00000000abc00000, 0x00000000b3ac0000, 0x0000000100000000)
   the space 129792K,   2% used [0x00000000abc00000, 0x00000000abf29a68, 0x00000000abf29c00, 0x00000000b3ac0000)
 Metaspace       used 8173K, capacity 8334K, committed 8448K, reserved 1056768K
  class space    used 937K, capacity 987K, committed 1024K, reserved 1048576K
}
Event: 0.890 GC heap before
{Heap before GC invocations=26 (full 0):
 def new generation   total 1152K, used 1151K [0x0000000081a00000, 0x0000000081b40000, 0x00000000abc00000)
  eden space 1024K, 100% used [0x0000000081a00000, 0x0000000081b00000, 0x0000000081b00000)
  from space 128K,  99% used [0x0000000081b00000, 0x0000000081b1fff8, 0x0000000081b20000)
  to   space 128K,   0% used [0x0000000081b20000, 0x0000000081b20000, 0x0000000081b40000)
 tenured generation   total 129792K, used 3238K [0x00000000abc00000, 0x00000000b3ac0000, 0x0000000100000000)
   the space 129792K,   2% used [0x00000000abc00000, 0x00000000abf29a68, 0x00000000abf29c00, 0x00000000b3ac0000)
 Metaspace       used 8331K, capacity 8494K, committed 8704K, reserved 1056768K
  class space    used 957K, capacity 1019K, committed 1024K, reserved 1048576K
Event: 0.891 GC heap after
Heap after GC invocations=27 (full 0):
 def new generation   total 1152K, used 126K [0x0000000081a00000, 0x0000000081b40000, 0x00000000abc00000)
  eden space 1024K,   0% used [0x0000000081a00000, 0x0000000081a00000, 0x0000000081b00000)
  from space 128K,  98% used [0x0000000081b20000, 0x0000000081b3fa90, 0x0000000081b40000)
  to   space 128K,   0% used [0x0000000081b00000, 0x0000000081b00000, 0x0000000081b20000)
 tenured generation   total 129792K, used 3339K [0x00000000abc00000, 0x00000000b3ac0000, 0x0000000100000000)
   the space 129792K,   2% used [0x00000000abc00000, 0x00000000abf42cb0, 0x00000000abf42e00, 0x00000000b3ac0000)
 Metaspace       used 8331K, capacity 8494K, committed 8704K, reserved 1056768K
  class space    used 957K, capacity 1019K, committed 1024K, reserved 1048576K
}

Deoptimization events (10 events):
Event: 0.646 Thread 0x00000000025e8800 Uncommon trap: reason=class_check action=maybe_recompile pc=0x000000000f13a0dc method=java.util.regex.Pattern$CharProperty.match(Ljava/util/regex/Matcher;ILjava/lang/CharSequence;)Z @ 18
Event: 0.647 Thread 0x00000000025e8800 Uncommon trap: reason=class_check action=maybe_recompile pc=0x000000000f13a0dc method=java.util.regex.Pattern$CharProperty.match(Ljava/util/regex/Matcher;ILjava/lang/CharSequence;)Z @ 18
Event: 0.647 Thread 0x00000000025e8800 Uncommon trap: reason=class_check action=maybe_recompile pc=0x000000000f13a0dc method=java.util.regex.Pattern$CharProperty.match(Ljava/util/regex/Matcher;ILjava/lang/CharSequence;)Z @ 18
Event: 0.647 Thread 0x00000000025e8800 Uncommon trap: reason=class_check action=maybe_recompile pc=0x000000000f13a0dc method=java.util.regex.Pattern$CharProperty.match(Ljava/util/regex/Matcher;ILjava/lang/CharSequence;)Z @ 18
Event: 0.709 Thread 0x00000000025e8800 Uncommon trap: reason=unreached action=reinterpret pc=0x000000000f19fd94 method=sun.misc.URLClassPath$JarLoader.ensureOpen()V @ 4
Event: 0.771 Thread 0x00000000025e8800 Uncommon trap: reason=unloaded action=reinterpret pc=0x000000000f20cbfc method=org.hotswap.agent.javassist.bytecode.ConstPool.readOne(Ljava/io/DataInputStream;)I @ 124
Event: 0.831 Thread 0x00000000025e8800 Uncommon trap: reason=class_check action=maybe_recompile pc=0x000000000f218278 method=java.util.regex.Pattern$Curly.match0(Ljava/util/regex/Matcher;IILjava/lang/CharSequence;)Z @ 77
Event: 0.843 Thread 0x00000000025e8800 Uncommon trap: reason=class_check action=maybe_recompile pc=0x000000000f218278 method=java.util.regex.Pattern$Curly.match0(Ljava/util/regex/Matcher;IILjava/lang/CharSequence;)Z @ 77
Event: 0.844 Thread 0x00000000025e8800 Uncommon trap: reason=class_check action=maybe_recompile pc=0x000000000f218278 method=java.util.regex.Pattern$Curly.match0(Ljava/util/regex/Matcher;IILjava/lang/CharSequence;)Z @ 77
Event: 0.845 Thread 0x00000000025e8800 Uncommon trap: reason=class_check action=maybe_recompile pc=0x000000000f218278 method=java.util.regex.Pattern$Curly.match0(Ljava/util/regex/Matcher;IILjava/lang/CharSequence;)Z @ 77

Internal exceptions (10 events):
Event: 0.881 Thread 0x00000000025e8800 Exception <a 'java/security/PrivilegedActionException'> (0x0000000081a9cae0) thrown at [C:\Jenkins\workspace\DCEVM-light-8u05\jdk\JDK1.8.0_05-x64\k\product\oops\compressed\slave\dcevm-win\hotspot\src\share\vm\prims\jvm.cpp, line 1249]
Event: 0.883 Thread 0x00000000025e8800 Exception <a 'java/security/PrivilegedActionException'> (0x0000000081aaf9c0) thrown at [C:\Jenkins\workspace\DCEVM-light-8u05\jdk\JDK1.8.0_05-x64\k\product\oops\compressed\slave\dcevm-win\hotspot\src\share\vm\prims\jvm.cpp, line 1249]
Event: 0.884 Thread 0x00000000025e8800 Exception <a 'java/security/PrivilegedActionException'> (0x0000000081ab5348) thrown at [C:\Jenkins\workspace\DCEVM-light-8u05\jdk\JDK1.8.0_05-x64\k\product\oops\compressed\slave\dcevm-win\hotspot\src\share\vm\prims\jvm.cpp, line 1249]
Event: 0.884 Thread 0x00000000025e8800 Exception <a 'java/security/PrivilegedActionException'> (0x0000000081abbd88) thrown at [C:\Jenkins\workspace\DCEVM-light-8u05\jdk\JDK1.8.0_05-x64\k\product\oops\compressed\slave\dcevm-win\hotspot\src\share\vm\prims\jvm.cpp, line 1249]
Event: 0.885 Thread 0x00000000025e8800 Exception <a 'java/security/PrivilegedActionException'> (0x0000000081ac4f58) thrown at [C:\Jenkins\workspace\DCEVM-light-8u05\jdk\JDK1.8.0_05-x64\k\product\oops\compressed\slave\dcevm-win\hotspot\src\share\vm\prims\jvm.cpp, line 1249]
Event: 0.886 Thread 0x00000000025e8800 Exception <a 'java/security/PrivilegedActionException'> (0x0000000081aca150) thrown at [C:\Jenkins\workspace\DCEVM-light-8u05\jdk\JDK1.8.0_05-x64\k\product\oops\compressed\slave\dcevm-win\hotspot\src\share\vm\prims\jvm.cpp, line 1249]
Event: 0.888 Thread 0x00000000025e8800 Exception <a 'java/security/PrivilegedActionException'> (0x0000000081af6628) thrown at [C:\Jenkins\workspace\DCEVM-light-8u05\jdk\JDK1.8.0_05-x64\k\product\oops\compressed\slave\dcevm-win\hotspot\src\share\vm\prims\jvm.cpp, line 1249]
Event: 0.889 Thread 0x00000000025e8800 Exception <a 'java/security/PrivilegedActionException'> (0x0000000081afad80) thrown at [C:\Jenkins\workspace\DCEVM-light-8u05\jdk\JDK1.8.0_05-x64\k\product\oops\compressed\slave\dcevm-win\hotspot\src\share\vm\prims\jvm.cpp, line 1249]
Event: 0.890 Thread 0x00000000025e8800 Exception <a 'java/security/PrivilegedActionException'> (0x0000000081aff4d0) thrown at [C:\Jenkins\workspace\DCEVM-light-8u05\jdk\JDK1.8.0_05-x64\k\product\oops\compressed\slave\dcevm-win\hotspot\src\share\vm\prims\jvm.cpp, line 1249]
Event: 0.891 Thread 0x00000000025e8800 Exception <a 'java/security/PrivilegedActionException'> (0x0000000081a047a8) thrown at [C:\Jenkins\workspace\DCEVM-light-8u05\jdk\JDK1.8.0_05-x64\k\product\oops\compressed\slave\dcevm-win\hotspot\src\share\vm\prims\jvm.cpp, line 1249]

Events (10 events):
Event: 0.889 loading class org/hotswap/agent/plugin/proxy/TransformationState
Event: 0.889 loading class org/hotswap/agent/plugin/proxy/TransformationState done
Event: 0.890 loading class org/hotswap/agent/plugin/proxy/signature/JavaClassSignature
Event: 0.890 loading class org/hotswap/agent/plugin/proxy/signature/JavaClassSignature done
Event: 0.890 Executing VM operation: GenCollectForAllocation
Event: 0.891 Executing VM operation: GenCollectForAllocation done
Event: 0.891 loading class org/hotswap/agent/plugin/proxy/cglib/CglibProxyTransformer$1
Event: 0.891 loading class org/hotswap/agent/plugin/proxy/cglib/CglibProxyTransformer$1 done
Event: 0.892 Thread 0x0000000005db9800 Thread added: 0x0000000005db9800
Event: 0.892 Executing VM operation: RedefineClasses


Dynamic libraries:
0x000000013f450000 - 0x000000013f484000     C:\Program Files\Java\jdk1.8.0_05\jre\bin\java.exe
0x0000000077860000 - 0x0000000077a09000     C:\Windows\SYSTEM32\ntdll.dll
0x0000000077740000 - 0x000000007785f000     C:\Windows\system32\kernel32.dll
0x000007fefd9d0000 - 0x000007fefda3c000     C:\Windows\system32\KERNELBASE.dll
0x000007feff620000 - 0x000007feff6fb000     C:\Windows\system32\ADVAPI32.dll
0x000007feff3a0000 - 0x000007feff43f000     C:\Windows\system32\msvcrt.dll
0x000007fefe1d0000 - 0x000007fefe1ef000     C:\Windows\SYSTEM32\sechost.dll
0x000007fefddb0000 - 0x000007fefdedd000     C:\Windows\system32\RPCRT4.dll
0x0000000077640000 - 0x000000007773a000     C:\Windows\system32\USER32.dll
0x000007fefe1f0000 - 0x000007fefe257000     C:\Windows\system32\GDI32.dll
0x000007fefdcf0000 - 0x000007fefdcfe000     C:\Windows\system32\LPK.dll
0x000007feff170000 - 0x000007feff239000     C:\Windows\system32\USP10.dll
0x000007fefbfe0000 - 0x000007fefc1d4000     C:\Windows\WinSxS\amd64_microsoft.windows.common-controls_6595b64144ccf1df_6.0.7601.17514_none_fa396087175ac9ac\COMCTL32.dll
0x000007feff320000 - 0x000007feff391000     C:\Windows\system32\SHLWAPI.dll
0x000007feffb40000 - 0x000007feffb6e000     C:\Windows\system32\IMM32.DLL
0x000007fefe260000 - 0x000007fefe369000     C:\Windows\system32\MSCTF.dll
0x000007fefd5d0000 - 0x000007fefd60f000     C:\Windows\system32\nvinitx.dll
0x000000000f000000 - 0x000000000f006000     C:\Program Files\NVIDIA Corporation\CoProcManager\_etoured.dll
0x000007fefa880000 - 0x000007fefa8c5000     C:\Program Files\NVIDIA Corporation\CoProcManager\nvd3d9wrapx.dll
0x000007feff440000 - 0x000007feff617000     C:\Windows\system32\SETUPAPI.dll
0x000007fefd8f0000 - 0x000007fefd926000     C:\Windows\system32\CFGMGR32.dll
0x000007fefdee0000 - 0x000007fefdfb7000     C:\Windows\system32\OLEAUT32.dll
0x000007fefdfc0000 - 0x000007fefe1c3000     C:\Windows\system32\ole32.dll
0x000007fefd9b0000 - 0x000007fefd9ca000     C:\Windows\system32\DEVOBJ.dll
0x000007fefa730000 - 0x000007fefa772000     C:\Program Files\NVIDIA Corporation\CoProcManager\nvdxgiwrapx.dll
0x0000000064bf0000 - 0x0000000064cc2000     C:\Program Files\Java\jdk1.8.0_05\jre\bin\msvcr100.dll
0x0000000007150000 - 0x0000000007945000     C:\Program Files\Java\jdk1.8.0_05\jre\bin\dcevm\jvm.dll
0x000007fef9370000 - 0x000007fef9379000     C:\Windows\system32\WSOCK32.dll
0x000007fefe390000 - 0x000007fefe3dd000     C:\Windows\system32\WS2_32.dll
0x000007fefdda0000 - 0x000007fefdda8000     C:\Windows\system32\NSI.dll
0x000007fefb430000 - 0x000007fefb46b000     C:\Windows\system32\WINMM.dll
0x0000000077a30000 - 0x0000000077a37000     C:\Windows\system32\PSAPI.DLL
0x000000006b820000 - 0x000000006b82f000     C:\Program Files\Java\jdk1.8.0_05\jre\bin\verify.dll
0x000000006b7f0000 - 0x000000006b818000     C:\Program Files\Java\jdk1.8.0_05\jre\bin\java.dll
0x000000006d740000 - 0x000000006d763000     C:\Program Files\Java\jdk1.8.0_05\jre\bin\instrument.dll
0x000000006b7d0000 - 0x000000006b7e6000     C:\Program Files\Java\jdk1.8.0_05\jre\bin\zip.dll
0x000007fefe3e0000 - 0x000007feff168000     C:\Windows\system32\SHELL32.dll
0x000007fefd6a0000 - 0x000007fefd6af000     C:\Windows\system32\profapi.dll
0x000000006b7b0000 - 0x000000006b7ca000     C:\Program Files\Java\jdk1.8.0_05\jre\bin\net.dll
0x000007fefce40000 - 0x000007fefce95000     C:\Windows\system32\mswsock.dll
0x000007fefce30000 - 0x000007fefce37000     C:\Windows\System32\wship6.dll
0x000000006b5a0000 - 0x000000006b5b1000     C:\Program Files\Java\jdk1.8.0_05\jre\bin\nio.dll
0x000007fefaf70000 - 0x000007fefaf80000     C:\Program Files (x86)\JetBrains\IntelliJ IDEA 139.144.2\bin\breakgen64.dll
0x000007fef51e0000 - 0x000007fef5305000     C:\Windows\system32\dbghelp.dll

VM Arguments:
jvm_args: -ea -javaagent:j:\HotswapAgent\hotswap-agent-core\target\hotswap-agent-core-0.2.1-SNAPSHOT.jar -Didea.launcher.port=7532 -Didea.launcher.bin.path=C:\Program Files (x86)\JetBrains\IntelliJ IDEA 139.144.2\bin -Dfile.encoding=UTF-8 
java_command: com.intellij.rt.execution.application.AppMain com.intellij.rt.execution.junit.JUnitStarter -ideVersion5 org.hotswap.agent.plugin.proxy.test.methods.AddEnhancerMethodProxyTest
java_class_path (initial): C:\Program Files (x86)\JetBrains\IntelliJ IDEA 139.144.2\lib\idea_rt.jar;C:\Program Files (x86)\JetBrains\IntelliJ IDEA 139.144.2\plugins\junit\lib\junit-rt.jar;C:\Program Files\Java\jdk1.8.0_05\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_05\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_05\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_05\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_05\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_05\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_05\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_05\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_05\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_05\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_05\jre\lib\rt.jar;C:\Program Files\Java\jdk1.8.0_05\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_05\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_05\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_05\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_05\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_05\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_05\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_05\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_05\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_05\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_05\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_05\jre\lib\ext\zipfs.jar;J:\HotswapAgent\plugin\hotswap-agent-proxy-plugin\target\test-classes;J:\HotswapAgent\plugin\hotswap-agent-proxy-plugin\target\classes;J:\HotswapAgent\hotswap-agent-core\target\classes;C:\Users\bubnik\.m2\repository\asm\asm-all\3.3.1\asm-all-3.3.1.jar;C:\Users\bubnik\.m2\repository\org\springframework\spring-core\4.0.5.RELEASE\spring-core-4.0.5.RELEASE.jar;C:\Users\bubnik\.m2\repository\commons-logging\commons-logging\1.1.3\commons-logging-1.1.3.jar;C:\Users\bubnik\.m2\repository\org\springframework\spring
Launcher Type: SUN_STANDARD

Environment Variables:
JAVA_HOME=c:\java\OpenJDK\jdk1.7.0_45
PATH=C:\ProgramData\Oracle\Java\javapath;c:\java\OpenJDK\jdk1.7.0_45\bin;C:\Program Files (x86)\Microsoft DirectX SDK (April 2006)\Utilities\Bin\x86;c:\apache-maven-3.0.4\bin\;C:\Program Files\Mercurial;C:\app\bubnik\product\11.2.0\client_3\bin;C:\Python33\;C:\oraclexe\app\oracle\product\11.2.0\server\bin;c:\app\bubnik\product\11.2.0\client_1\bin;C:\Program Files\Common Files\Microsoft Shared\Windows Live;C:\Program Files (x86)\Common Files\Microsoft Shared\Windows Live;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files\Intel\WiFi\bin\;C:\Program Files\Common Files\Intel\WirelessCommon\;C:\Program Files (x86)\Windows Live\Shared;C:\Program Files (x86)\Common Files\Roxio Shared\OEM\DLLShared\;C:\Program Files (x86)\Common Files\Roxio Shared\OEM\DLLShared\;C:\Program Files (x86)\Common Files\Roxio Shared\OEM\12.0\DLLShared\;C:\Program Files (x86)\Roxio\OEM\AudioCore\;C:\Program Files\TortoiseSVN\bin;C:/Users/bubnik/AppData/Local/GitHub/PortableGit_8810fd5c2c79c73adcc73fd0825f3b32fdb816e7/bin;C:\Program Files (x86)\Bitvise SSH Client;C:\Program Files (x86)\Git\cmd;C:\Program Files (x86)\Git\bin;C:\Program Files\Calibre2\;C:\Program Files\Microsoft\Web Platform Installer\;C:\Program Files\Microsoft SQL Server\110\Tools\Binn\;C:\Program Files (x86)\Google\Google Apps Sync\;C:\Program Files (x86)\Google\Google Apps Migration\;C:\Program Files\Microsoft Windows Performance Toolkit\;C:\Program Files\TortoiseHg\;C:\Program Files\TortoiseGit\bin;C:\Python33\
USERNAME=bubnik
OS=Windows_NT
PROCESSOR_IDENTIFIER=Intel64 Family 6 Model 42 Stepping 7, GenuineIntel



---------------  S Y S T E M  ---------------

OS: Windows 7 , 64 bit Build 7601 Service Pack 1

CPU:total 8 (4 cores per cpu, 2 threads per core) family 6 model 42 stepping 7, cmov, cx8, fxsr, mmx, sse, sse2, sse3, ssse3, sse4.1, sse4.2, popcnt, avx, aes, clmul, ht, tsc, tscinvbit

Memory: 4k page, physical 8280236k(1181480k free), swap 16558608k(4175348k free)

vm_info: Dynamic Code Evolution 64-Bit Server VM (25.5-b02-dcevmlight-36) for windows-amd64 JRE (1.8.0), built on Apr 28 2014 18:38:12 by "" with MS VC++ 10.0 (VS2010)

time: Sun Nov 09 21:45:40 2014
elapsed time: 0 seconds

extraClasspath, watchResources and autoHotswap should be handled by agent core

Basic hotswap properties are now supported by tomcat/jetty plugin (Tomcat/Jetty classloader bytecode enhanecements). This is not robust enough and should be supported on JVM level without any framework or other preconditions.

New approach is to modify any ClassLoader with hotswap-agent.properties directly. The only presumption it is that it is instance of URLClassLoader and it use URLClassPath ucp property internally. This is true for system classloaders as well as Tomcat/Jetty classloaders.

Spring MVC support (@RequestMapping)

I think HotswapAgent does not support reloading @RequestMapping routes in beans.

I think all that needs to be done is on a bean change with a @RequestMapping annotation is look in the ApplicationContext for all derivations of AbstractUrlHandlerMapping and call initApplicationContext().

You could reload the HandlerMapping beans but you can't just clear the HashMaps in them as the the URLs are only calculated on initialization. You also can't call setApplicationContext as that will think nothing has changed.

I'll look into trying the above unless others have thoughts?

Exceptions when reloading Spring related classes

Hi,

Here are some of the exceptions thrown when I recompile the classes while in debug mode:

Exception in thread "Thread-17" HOTSWAP AGENT: 9:32:13.911 ERROR (org.hotswap.agent.plugin.spring.scanner.ClassPathBeanRefreshCommand) - Error refreshing class com/company/cts/training/domain/TrainingCertification$22 in classLoader ContextLoader@1349563128
java.lang.reflect.InvocationTargetException
    at sun.reflect.GeneratedMethodAccessor109.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.hotswap.agent.plugin.spring.scanner.ClassPathBeanRefreshCommand.executeCommand(ClassPathBeanRefreshCommand.java:73)
    at org.hotswap.agent.command.impl.CommandExecutor.run(CommandExecutor.java:25)
Caused by: java.lang.IllegalArgumentException: Illegal arguments method org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider.isCandidateComponent([interface org.springframework.core.type.classreading.MetadataReader]) on org.springframework.context.annotation.ClassPathBeanDefinitionScanner@3e281ac9, params [org.springframework.core.type.classreading.SimpleMetadataReader@54c8ce83]
    at org.hotswap.agent.util.ReflectionHelper.invoke(ReflectionHelper.java:49)
    at org.hotswap.agent.plugin.spring.scanner.ClassPathBeanDefinitionScannerAgent.isCandidateComponent(ClassPathBeanDefinitionScannerAgent.java:306)
    at org.hotswap.agent.plugin.spring.scanner.ClassPathBeanDefinitionScannerAgent.resolveBeanDefinition(ClassPathBeanDefinitionScannerAgent.java:224)
    at org.hotswap.agent.plugin.spring.scanner.ClassPathBeanDefinitionScannerAgent.refreshClass(ClassPathBeanDefinitionScannerAgent.java:130)
    ... 5 more
Caused by: java.lang.IllegalArgumentException: java.lang.ClassCastException@4d38eed8
    at sun.reflect.GeneratedMethodAccessor133.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.hotswap.agent.util.ReflectionHelper.invoke(ReflectionHelper.java:47)
    ... 8 more

HOTSWAP AGENT: 9:32:13.912 ERROR (org.hotswap.agent.plugin.spring.scanner.ClassPathBeanRefreshCommand) - Error refreshing class com/company/cts/training/controllers/UserTrainingAssignmentController in classLoader ContextLoader@1349563128
java.lang.reflect.InvocationTargetException
    at sun.reflect.GeneratedMethodAccessor109.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.hotswap.agent.plugin.spring.scanner.ClassPathBeanRefreshCommand.executeCommand(ClassPathBeanRefreshCommand.java:73)
    at org.hotswap.agent.command.impl.CommandExecutor.run(CommandExecutor.java:25)
Caused by: java.lang.IllegalArgumentException: Illegal arguments method org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider.isCandidateComponent([interface org.springframework.core.type.classreading.MetadataReader]) on org.springframework.context.annotation.ClassPathBeanDefinitionScanner@3e281ac9, params [org.springframework.core.type.classreading.SimpleMetadataReader@19d71fa8]
    at org.hotswap.agent.util.ReflectionHelper.invoke(ReflectionHelper.java:49)
    at org.hotswap.agent.plugin.spring.scanner.ClassPathBeanDefinitionScannerAgent.isCandidateComponent(ClassPathBeanDefinitionScannerAgent.java:306)
    at org.hotswap.agent.plugin.spring.scanner.ClassPathBeanDefinitionScannerAgent.resolveBeanDefinition(ClassPathBeanDefinitionScannerAgent.java:224)
    at org.hotswap.agent.plugin.spring.scanner.ClassPathBeanDefinitionScannerAgent.refreshClass(ClassPathBeanDefinitionScannerAgent.java:130)
    ... 5 more
Caused by: java.lang.IllegalArgumentException: java.lang.ClassCastException@2a21ef14
    at sun.reflect.GeneratedMethodAccessor133.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.hotswap.agent.util.ReflectionHelper.invoke(ReflectionHelper.java:47)
    ... 8 more

HOTSWAP AGENT: 9:32:13.929 ERROR (org.hotswap.agent.plugin.spring.scanner.ClassPathBeanRefreshCommand) - Error refreshing class com/company/cts/site/domain/UserSiteRole_$$_javassist_48 in classLoader ContextLoader@1349563128
java.lang.reflect.InvocationTargetException
    at sun.reflect.GeneratedMethodAccessor109.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.hotswap.agent.plugin.spring.scanner.ClassPathBeanRefreshCommand.executeCommand(ClassPathBeanRefreshCommand.java:73)
    at org.hotswap.agent.command.impl.CommandExecutor.run(CommandExecutor.java:25)
Caused by: java.lang.IllegalArgumentException: Illegal arguments method org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider.isCandidateComponent([interface org.springframework.core.type.classreading.MetadataReader]) on org.springframework.context.annotation.ClassPathBeanDefinitionScanner@3e281ac9, params [org.springframework.core.type.classreading.SimpleMetadataReader@49e3c6d]
    at org.hotswap.agent.util.ReflectionHelper.invoke(ReflectionHelper.java:49)
    at org.hotswap.agent.plugin.spring.scanner.ClassPathBeanDefinitionScannerAgent.isCandidateComponent(ClassPathBeanDefinitionScannerAgent.java:306)
    at org.hotswap.agent.plugin.spring.scanner.ClassPathBeanDefinitionScannerAgent.resolveBeanDefinition(ClassPathBeanDefinitionScannerAgent.java:224)
    at org.hotswap.agent.plugin.spring.scanner.ClassPathBeanDefinitionScannerAgent.refreshClass(ClassPathBeanDefinitionScannerAgent.java:130)
    ... 5 more
Caused by: java.lang.IllegalArgumentException: java.lang.ClassCastException@23cb7d87
    at sun.reflect.GeneratedMethodAccessor133.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.hotswap.agent.util.ReflectionHelper.invoke(ReflectionHelper.java:47)
    ... 8 more

I am running this jvm:

HOTSWAP AGENT: 10:29:33.958 INFO (org.hotswap.agent.HotswapAgent) - Loading Hotswap agent {0.1-beta4} - unlimited runtime class redefinition.
HOTSWAP AGENT: 10:29:34.795 INFO (org.hotswap.agent.config.PluginRegistry) - Discovered plugins: [Hotswapper, AnonymousClassPatch, WatchResources, Hibernate, Spring, Jersey2, Jetty, Tomcat, ZK, Logback, JSF, Seam, ELResolver]
java version "1.7.0_65"
OpenJDK Runtime Environment (IcedTea 2.5.2) (7u65-2.5.2-3~14.04)
Dynamic Code Evolution 64-Bit Server VM (build 24.51-b03-dcevmfull-3, mixed mode)

Bare in mind that the codebase in this application is big (several mlocs). When I clicked compile in 1 class in debug mode, 450 classes where reloaded. Several had similar exceptions.
I would have to run the test again if you want a full and clean log.

Does this look like something that could be an environment/setup issue or is it a bug in the agent?

Thanks!

Add maven-release-plugin

It looks like releases are done manually, and pom in master still has 0.1-beta3 version, and it should have some snapshot version.

Defining pluginPackages causes NPE on start of application

It seems there is a problem of initialization order of the PluginManager, causing the INSTANCE not being initialized when the custom plugins are initialized:

java.lang.NullPointerException
    at org.hotswap.agent.config.PluginConfiguration.initPluginPackage(PluginConfiguration.java:118)
    at org.hotswap.agent.config.PluginConfiguration.init(PluginConfiguration.java:107)
    at org.hotswap.agent.config.PluginConfiguration.<init>(PluginConfiguration.java:49)
    at org.hotswap.agent.PluginManager.<init>(PluginManager.java:50)
    at org.hotswap.agent.PluginManager.getInstance(PluginManager.java:40)
    at org.hotswap.agent.config.PluginConfiguration.initPluginPackage(PluginConfiguration.java:118)
    at org.hotswap.agent.config.PluginConfiguration.init(PluginConfiguration.java:107)
    at org.hotswap.agent.config.PluginConfiguration.<init>(PluginConfiguration.java:49)
    at org.hotswap.agent.PluginManager.<init>(PluginManager.java:50)
    at org.hotswap.agent.PluginManager.<clinit>(PluginManager.java:34)
    at org.hotswap.agent.HotswapAgent.premain(HotswapAgent.java:24)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at sun.instrument.InstrumentationImpl.loadClassAndStartAgent(InstrumentationImpl.java:382)
    at sun.instrument.InstrumentationImpl.loadClassAndCallPremain(InstrumentationImpl.java:397)

(PluginManager.getInstance() returns null)

Default logging is very verbose

If you're experienced with DCEVM, HotswapAgent is easy to get running.
My only problem with the default is that the logging is a very verbose. I'm having trouble following my own application's logging.

Most of the logging looks like this:

(-1 / -1) (org/hotswap/agent/plugin/jvm/AnonymousClassInfos$AnonymousClassInfoMatcher/org/hotswap/agent/plugin/jvm/AnonymousClassInfos$AnonymousClassInfoMatcher)
{instance class} 
 - klass: {other class}
{instance class} 
 - klass: {other class}

I've tried disabling the logging but it appears my LOGGER=warn in a hotswap-agent.properties in my classpath doesn't seem to be picked up.

(BTW: Thanks for a pretty great alternative to JRebel :))

[jersey] jvm error when I change method signature

When I change a the following method's parameter in the signature with jersey 1.11:

    @POST
    @Consumes("application/json")
    @Produces("application/json")
    @Path("/colors")
    public List<LightColorView> findAllLigthColorsByType(final RequestCriterias criterias) {
        return this.noeudCoordinator.findAllColorsByType(criterias);
    }

I get the following error:

A fatal error has been detected by the Java Runtime Environment:

EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x000000000245eb24, pid=692, tid=3664

JRE version: Java(TM) SE Runtime Environment (7.0_71-b14) (build 1.7.0_71-b14)
Java VM: Dynamic Code Evolution 64-Bit Server VM (24.71-b01-dcevmlight-2 mixed mode windows-md64 compressed oops)
Problematic frame:
j om.capgemini.configurator.spaceo.core.dto.request.RequestCriterias.setNodeType(Ljava/lang/String)V+0

Failed to write core dump. Minidumps are not enabled by default on client versions of Windows

An error report file with more information is saved as:
D:\tools\apache-tomcat\7.0.55\bin\hs_err_pid692.log

If you would like to submit a bug report, please visit:
http://ssw.jku.at/dcevm/bugreport/

Wildfly 8.1 error

When Wildfly 8.1 app server starts, the following error happens:

15:12:02,003 INFO  [stdout] (MSC service thread 1-6) HOTSWAP AGENT: 15:12:2.003 WARNING (org.hotswap.agent.plugin.elresolver.ELResolverPlugin) - Unable to add javax.el.BeanELResolver.purgeBeanClasses() method. Purging will not be available.
15:12:02,003 INFO  [stdout] (MSC service thread 1-6) org.hotswap.agent.javassist.NotFoundException: purgeBeanClasses(..) is not found in javax.el.BeanELResolver
15:12:02,003 INFO  [stdout] (MSC service thread 1-6)    at org.hotswap.agent.javassist.CtClassType.getDeclaredMethod(CtClassType.java:1168)
15:12:02,003 INFO  [stdout] (MSC service thread 1-6)    at org.hotswap.agent.plugin.elresolver.ELResolverPlugin.beanELResolverRegisterVariable(ELResolverPlugin.java:69)
15:12:02,004 INFO  [stdout] (MSC service thread 1-6)    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
15:12:02,004 INFO  [stdout] (MSC service thread 1-6)    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
15:12:02,004 INFO  [stdout] (MSC service thread 1-6)    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
15:12:02,004 INFO  [stdout] (MSC service thread 1-6)    at java.lang.reflect.Method.invoke(Method.java:483)
15:12:02,004 INFO  [stdout] (MSC service thread 1-6)    at org.hotswap.agent.annotation.handler.TransformHandler.transform(TransformHandler.java:162)
15:12:02,004 INFO  [stdout] (MSC service thread 1-6)    at org.hotswap.agent.annotation.handler.TransformHandler$1.transform(TransformHandler.java:73)
15:12:02,004 INFO  [stdout] (MSC service thread 1-6)    at org.hotswap.agent.util.HotswapTransformer.transform(HotswapTransformer.java:129)
15:12:02,005 INFO  [stdout] (MSC service thread 1-6)    at sun.instrument.TransformerManager.transform(TransformerManager.java:188)
15:12:02,005 INFO  [stdout] (MSC service thread 1-6)    at sun.instrument.InstrumentationImpl.transform(InstrumentationImpl.java:428)
15:12:02,005 INFO  [stdout] (MSC service thread 1-6)    at java.lang.ClassLoader.defineClass1(Native Method)
15:12:02,005 INFO  [stdout] (MSC service thread 1-6)    at java.lang.ClassLoader.defineClass(ClassLoader.java:760)
15:12:02,005 INFO  [stdout] (MSC service thread 1-6)    at org.jboss.modules.ModuleClassLoader.doDefineOrLoadClass(ModuleClassLoader.java:361)
15:12:02,005 INFO  [stdout] (MSC service thread 1-6)    at org.jboss.modules.ModuleClassLoader.defineClass(ModuleClassLoader.java:482)
15:12:02,005 INFO  [stdout] (MSC service thread 1-6)    at org.jboss.modules.ModuleClassLoader.loadClassLocal(ModuleClassLoader.java:277)
15:12:02,005 INFO  [stdout] (MSC service thread 1-6)    at org.jboss.modules.ModuleClassLoader$1.loadClassLocal(ModuleClassLoader.java:92)
15:12:02,005 INFO  [stdout] (MSC service thread 1-6)    at org.jboss.modules.Module.loadModuleClass(Module.java:568)
15:12:02,005 INFO  [stdout] (MSC service thread 1-6)    at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:205)
15:12:02,005 INFO  [stdout] (MSC service thread 1-6)    at org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:459)
15:12:02,005 INFO  [stdout] (MSC service thread 1-6)    at org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:408)
15:12:02,006 INFO  [stdout] (MSC service thread 1-6)    at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:389)
15:12:02,006 INFO  [stdout] (MSC service thread 1-6)    at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:134)
15:12:02,006 INFO  [stdout] (MSC service thread 1-6)    at com.sun.faces.application.ApplicationAssociate.initializeELResolverChains(ApplicationAssociate.java:511)
15:12:02,006 INFO  [stdout] (MSC service thread 1-6)    at com.sun.faces.application.ApplicationImpl.performOneTimeELInitialization(ApplicationImpl.java:1324)
15:12:02,006 INFO  [stdout] (MSC service thread 1-6)    at com.sun.faces.application.ApplicationImpl.getELResolver(ApplicationImpl.java:481)
15:12:02,006 INFO  [stdout] (MSC service thread 1-6)    at org.jboss.as.jsf.injection.weld.ForwardingApplication.getELResolver(ForwardingApplication.java:221)
15:12:02,031 INFO  [stdout] (MSC service thread 1-6)    at com.sun.faces.config.ConfigureListener.contextInitialized(ConfigureListener.java:233)
15:12:02,031 INFO  [stdout] (MSC service thread 1-6)    at io.undertow.servlet.core.ApplicationListeners.contextInitialized(ApplicationListeners.java:173)
15:12:02,031 INFO  [stdout] (MSC service thread 1-6)    at io.undertow.servlet.core.DeploymentManagerImpl.deploy(DeploymentManagerImpl.java:190)
15:12:02,031 INFO  [stdout] (MSC service thread 1-6)    at org.wildfly.extension.undertow.deployment.UndertowDeploymentService.startContext(UndertowDeploymentService.java:87)
15:12:02,031 INFO  [stdout] (MSC service thread 1-6)    at org.wildfly.extension.undertow.deployment.UndertowDeploymentService.start(UndertowDeploymentService.java:72)
15:12:02,031 INFO  [stdout] (MSC service thread 1-6)    at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1948)
15:12:02,031 INFO  [stdout] (MSC service thread 1-6)    at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1881)
15:12:02,031 INFO  [stdout] (MSC service thread 1-6)    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
15:12:02,031 INFO  [stdout] (MSC service thread 1-6)    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
15:12:02,031 INFO  [stdout] (MSC service thread 1-6)    at java.lang.Thread.run(Thread.java:745)
15:12:02,032 INFO  [stdout] (MSC service thread 1-6) 
15:12:02,040 INFO  [stdout] (MSC service thread 1-6) HOTSWAP AGENT: 15:12:2.039 INFO (org.hotswap.agent.config.PluginRegistry) - Plugin 'org.hotswap.agent.plugin.elresolver.ELResolverPlugin' initialized in ClassLoader 'ModuleClassLoader for Module "javax.el.api:main" from local module loader @6b2fad11 (finder: local module finder @79698539 (roots: J:\java\servers\wildfly\modules,J:\java\servers\wildfly\modules\system\layers\base))'.

How to use in Maven Project ?

I exported the two settings variable like this :

export MAVEN_OPTS='-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8000 -Xms256m -Xmx1048m -XX:MaxPermSize=512m -XX:NewRatio=6 -XX:+CMSClassUnloadingEnabled -XX:+CMSPermGenSweepingEnabled' -XXaltjvm=dcevm -javaagent:e:\HotswapAgent.jar

and maven gave not a valid identifier error. How to use it in maven webapps ?

mvn tomcat7:run

Glassfish support

Glassfish is based on OSGI.

Currently it does not start at all - error java.lang.NoClassDefFoundError: org/hotswap/agent/PluginManager. This is because of OSGI bundle mechanism, where parent classloader delegation does not work. Look at https://github.com/HotswapProjects/HotswapAgent/blob/master/hotswap-agent-core/src/main/java/org/hotswap/agent/HotswapAgent.java fixJboss7Modules(), this is similar fix for JBoss. On Glassfish, you need to set "org.osgi.framework.bootdelegation" property (see https://blogs.oracle.com/swchan/entry/profiling_glassfish_3_with_jprofiler), but I was unable to do it from HotswapAgent.

Support for hotswap-agent.properties needs to be developed (similar to JettyPlugin, TomcatPlugin).

Test with https://github.com/HotswapProjects/HotswapAgentExamples/blob/master/plain-servlet/run-tests.sh , uncomment Glassfish section.

Use com.sun.nio.file.SensitivityWatchEventModifier to speed up file change event on Mac

Currently, it may take several seconds for the file change event to be fired after a file is changed on Mac.

Improvement:
http://stackoverflow.com/questions/9588737/is-java-7-watchservice-slow-for-anyone-else
http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/7-b147/com/sun/nio/file/SensitivityWatchEventModifier.java

This code is taken from Agent7:

  Modifier get_com_sun_nio_file_SensitivityWatchEventModifier_HIGH() {
    try {
      Class<?> c = Class.forName("com.sun.nio.file.SensitivityWatchEventModifier");
      Field    f = c.getField("HIGH");
      return (Modifier) f.get(c);
    } catch (Exception e) {
      return null;
    }
  }

  void register(Path dir) throws IOException {
    Modifier high = get_com_sun_nio_file_SensitivityWatchEventModifier_HIGH();
    WatchKey key =
      (high == null) ?
      dir.register(watcher, ENTRY_CREATE, ENTRY_MODIFY) :
      dir.register(watcher, new WatchEvent.Kind<?>[]{ENTRY_CREATE, ENTRY_MODIFY}, high);
    keys.put(key, dir);
  }

Invalid URI format on start of the application

I am using embedded tomcat run from main method and set the logback configuration file as follows:

System.setProperty("logback.configurationFile", "file:./src/test/resources/logback.xml");

When the application starts it outputs:

HOTSWAP AGENT: 19:14:11.960 INFO (org.hotswap.agent.HotswapAgent) - Loading Hotswap agent - unlimited runtime class redefinition.
HOTSWAP AGENT: 19:14:12.361 INFO (org.hotswap.agent.PluginRegistry) - Discovered plugins: [org.hotswap.agent.plugin.hotswapper.HotswapperPlugin, org.hotswap.agent.plugin.jvm.AnonymousClassPatchPlugin, org.hotswap.agent.plugin.hibernate.HibernatePlugin, org.hotswap.agent.plugin.spring.SpringPlugin, org.hotswap.agent.plugin.jetty.JettyPlugin, org.hotswap.agent.plugin.tomcat.TomcatPlugin, org.hotswap.agent.plugin.zk.ZkPlugin, org.hotswap.agent.plugin.logback.LogbackPlugin]
HOTSWAP AGENT: 19:14:13.324 INFO (org.hotswap.agent.PluginRegistry) - Plugin 'org.hotswap.agent.plugin.logback.LogbackPlugin' initialized in ClassLoader 'sun.misc.Launcher$AppClassLoader@3a7f1228'.
HOTSWAP AGENT: 19:14:13.329 ERROR (org.hotswap.agent.watch.nio.WatcherNIO2) - Unable to watch path with prefix 'file:./src/test/resources/logback.xml' for changes.
java.io.IOException: Invalid URI format file:./src/test/resources/logback.xml
at org.hotswap.agent.watch.nio.WatcherNIO2.addDirectory(WatcherNIO2.java:111)
at org.hotswap.agent.watch.nio.WatcherNIO2.addEventListener(WatcherNIO2.java:55)
at org.hotswap.agent.plugin.logback.LogbackPlugin.initLogback(LogbackPlugin.java:55)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:72)
at ch.qos.logback.classic.util.ContextInitializer.configureByResource(ContextInitializer.java:75)
at ch.qos.logback.classic.util.ContextInitializer.autoConfig(ContextInitializer.java:148)
at org.slf4j.impl.StaticLoggerBinder.init(StaticLoggerBinder.java:85)
at org.slf4j.impl.StaticLoggerBinder.(StaticLoggerBinder.java:55)
at org.slf4j.LoggerFactory.bind(LoggerFactory.java:128)
at org.slf4j.LoggerFactory.performInitialization(LoggerFactory.java:108)
at org.slf4j.LoggerFactory.getILoggerFactory(LoggerFactory.java:279)
at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:252)
at cz.nisizs.test.StartTomcat.main(StartTomcat.java:17)
Caused by: java.lang.IllegalArgumentException: URI is not hierarchical
at sun.nio.fs.WindowsUriSupport.fromUri(WindowsUriSupport.java:122)
at sun.nio.fs.WindowsFileSystemProvider.getPath(WindowsFileSystemProvider.java:92)
at java.nio.file.Paths.get(Paths.java:138)
at org.hotswap.agent.watch.nio.WatcherNIO2.addDirectory(WatcherNIO2.java:104)
... 16 more

Rename annotations

I would like to make a recommendation to change the annotations to provide a consistent interface and to make their purposes more clear.

Here are some examples of some different names-- adjustments can be made to the names, but I believe this shows how they can be improved:

@OnClassLoaded = @Transform(define=true)
@OnClassUpdated = @Transform(define=false)
@OnClassFileUpdated = @watcher(filter = ".*.class")
@OnResouceFileUpdated = @watcher()

java.lang.reflect.GenericSignatureFormatError after class reload

Hi,
There are cases (which I can't define completely) in which after reloading a class and trying to use it, a java.lang.reflect.GenericSignatureFormatError exception occurs.
Reloading the application obviously fixes the issue, but what's more is that the class is reload-able and usable.

I'm using HotswapAgent 0.4, tomcat-7.0.54, jdk1.7.0_51

HOTSWAP AGENT: 21:31:22.432 RELOAD (org.hotswap.agent.plugin.spring.scanner.ClassPathBeanDefinitionScannerAgent) - Registering Spring bean 'freeMarkerRestController'
2014-07-30 21:31:39,273 WARN net.sf.ehcache.constructs.web.filter.Filter: - Throwable thrown during doFilter on request with URI: /structures-webapp/rest/freeMarker/previewTemplate/693/9332 and Query: nullHandler processing failed; nested exception is java.lang.reflect.GenericSignatureFormatError
org.springframework.web.util.NestedServletException: Handler processing failed; nested exception is java.lang.reflect.GenericSignatureFormatError
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:972)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:852)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882)
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:789)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:646)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at com.modelity.structures.shared.web.AjaxCallsFilter.doFilter(AjaxCallsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at net.sf.ehcache.constructs.web.filter.GzipFilter.doFilter(GzipFilter.java:95)
at net.sf.ehcache.constructs.web.filter.Filter.doFilter(Filter.java:86)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at com.modelity.structures.shared.web.ResponseHeaderFilter.doFilter(ResponseHeaderFilter.java:39)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at com.modelity.structures.shared.web.ResponseHeaderFilter.doFilter(ResponseHeaderFilter.java:39)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at com.modelity.structures.shared.web.ResponseHeaderFilter.doFilter(ResponseHeaderFilter.java:39)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:83)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at com.modelity.shared.authentication.ApplicationBlockerFilter.doFilter(ApplicationBlockerFilter.java:71)
at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346)
at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:259)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330)
at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:118)
at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:84)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:103)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:113)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:54)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:45)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:183)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:105)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:87)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:192)
at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:160)
at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346)
at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:259)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at com.modelity.shared.authentication.HttpsCookieFilter.doFilter(HttpsCookieFilter.java:40)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1040)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607)
at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.doRun(AprEndpoint.java:2442)
at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:2431)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:744)
Caused by: java.lang.reflect.GenericSignatureFormatError
at sun.reflect.generics.parser.SignatureParser.error(SignatureParser.java:126)
at sun.reflect.generics.parser.SignatureParser.parseFieldTypeSignature(SignatureParser.java:299)
at sun.reflect.generics.parser.SignatureParser.parseFieldTypeSignature(SignatureParser.java:285)
at sun.reflect.generics.parser.SignatureParser.parseTypeSignature(SignatureParser.java:487)
at sun.reflect.generics.parser.SignatureParser.parseTypeSig(SignatureParser.java:190)
at sun.reflect.annotation.AnnotationParser.parseSig(AnnotationParser.java:387)
at sun.reflect.annotation.AnnotationParser.parseAnnotation(AnnotationParser.java:200)
at sun.reflect.annotation.AnnotationParser.parseParameterAnnotations2(AnnotationParser.java:152)
at sun.reflect.annotation.AnnotationParser.parseParameterAnnotations(AnnotationParser.java:129)
at java.lang.reflect.Method.getParameterAnnotations(Method.java:772)
at org.springframework.core.MethodParameter.getParameterAnnotations(MethodParameter.java:283)
at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.resolveHandlerArguments(HandlerMethodInvoker.java:257)
at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:171)
at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:436)
at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:424)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:923)
... 84 more
(-1 / -1) (org/hotswap/agent/plugin/jvm/AnonymousClassInfos$AnonymousClassInfoMatcher/org/hotswap/agent/plugin/jvm/AnonymousClassInfos$AnonymousClassInfoMatcher)
{instance class}

  • klass: {other class}
    {instance class}
  • klass: {other class}

Short log output for hotswapped classes

Log level DEBUG writes too much information about hotswapping to output. Info level doesn't write the names of swapped classes. It would be helpful to extend INFO level about short information about hotswapped classes.

Remove dependencies from parent pom

I think that parent POM should contain only dependencyManagement section where versions are defined. Then each module should use only groupId/artifactId in it's dependencies.

InvocationTargetException -> Spring plugin (3.1.0M2)

I get the the following error with spring 3.1.0.M2 (newest hotswap version)
HOTSWAP AGENT: 16:2:42.735 ERROR (org.hotswap.agent.annotation.handler.TransformHandler) - InvocationTargetException in transform method on plugin 'class org.hotswap.agent.plugin.spring.SpringPlugin' class 'org/springframework/beans/factory/support/DefaultListableBeanFactory'.
java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.hotswap.agent.annotation.handler.TransformHandler.transform(TransformHandler.java:162)
at org.hotswap.agent.annotation.handler.TransformHandler$1.transform(TransformHandler.java:73)
at org.hotswap.agent.util.HotswapTransformer.transform(HotswapTransformer.java:116)
at sun.instrument.TransformerManager.transform(TransformerManager.java:188)
at sun.instrument.InstrumentationImpl.transform(InstrumentationImpl.java:424)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:2818)
at org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:1148)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1643)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1521)
at org.springframework.context.support.AbstractRefreshableApplicationContext.createBeanFactory(AbstractRefreshableApplicationContext.java:195)
at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:128)
at org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:522)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:436)
at de.pds.common._internal.support.SpringIOCContainerImpl.(SpringIOCContainerImpl.java:85)
at de.pds.common._internal.support.SpringIOCContainerImpl.(SpringIOCContainerImpl.java:53)
at de.pds.common.support.IOCContainerFactory$ContainerThread.run(IOCContainerFactory.java:303)
Caused by: org.hotswap.agent.javassist.CannotCompileException: [source error] no such class: allBeanNamesByType
at org.hotswap.agent.javassist.CtBehavior.insertBefore(CtBehavior.java:743)
at org.hotswap.agent.javassist.CtBehavior.insertBefore(CtBehavior.java:706)
at org.hotswap.agent.plugin.spring.SpringPlugin.register(SpringPlugin.java:145)
... 23 more
Caused by: compile error: no such class: allBeanNamesByType
at org.hotswap.agent.javassist.compiler.MemberResolver.searchImports(MemberResolver.java:451)
at org.hotswap.agent.javassist.compiler.MemberResolver.lookupClass(MemberResolver.java:395)
at org.hotswap.agent.javassist.compiler.MemberResolver.lookupClassByJvmName(MemberResolver.java:306)
at org.hotswap.agent.javassist.compiler.TypeChecker.atCallExpr(TypeChecker.java:642)
at org.hotswap.agent.javassist.compiler.JvstTypeChecker.atCallExpr(JvstTypeChecker.java:147)
at org.hotswap.agent.javassist.compiler.ast.CallExpr.accept(CallExpr.java:43)
at org.hotswap.agent.javassist.compiler.CodeGen.doTypeCheck(CodeGen.java:241)
at org.hotswap.agent.javassist.compiler.CodeGen.atStmnt(CodeGen.java:333)
at org.hotswap.agent.javassist.compiler.ast.Stmnt.accept(Stmnt.java:51)
at org.hotswap.agent.javassist.compiler.Javac.compileStmnt(Javac.java:533)
at org.hotswap.agent.javassist.CtBehavior.insertBefore(CtBehavior.java:725)
... 25 more

Integration test example

Developing plugin is a pain right now, as I have to build the agent, restart application server, deploy application.

It would be great to have an example showing how to utilize JUnit, even if we'd have to run each test separately.

How to use with Lombok ?

In my eclipse.ini, I have this setting :

-javaagent:E:/eclipse/eclipse/lombok.jar
-Xbootclasspath/a:E:/eclipse/eclipse/lombok.jar

How to put HotswapAgent.jar in such a case ?

WHen using hibernate 3 An error message appears on startup

It would be great if a warning message appear instead of error and start up the application as normal

HOTSWAP AGENT: 16:57:26.997 ERROR (org.hotswap.agent.annotation.handler.OnClassLoadedHandler) - InvocationTargetException in transform method on plugin 'class org.hotswap.agent.plugin.hibernate.HibernatePlugin' class 'org/hibernate/cfg/Configuration'.
java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)

test failures in PluginManagerTest

While trying to build a release, I encountered some test failures.

[INFO] Running org.hotswap.agent.PluginManagerTest
[INFO] HOTSWAP AGENT: 10:28:11.227 INFO (org.hotswap.agent.PluginRegistry) - Discovered plugins: [org.hotswap.agent.testData.SimplePlugin]
[INFO] Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0.159 sec <<< FAILURE! - in org.hotswap.agent.PluginManagerTest
[INFO] testInit(org.hotswap.agent.PluginManagerTest)  Time elapsed: 0.041 sec  <<< ERROR!
[INFO] org.jmock.api.ExpectationError: unexpected invocation
[INFO]  at org.jmock.api.ExpectationError.unexpected(ExpectationError.java:23)
[INFO]  at org.jmock.internal.InvocationDispatcher.dispatch(InvocationDispatcher.java:85)
[INFO]  at org.jmock.Mockery.dispatch(Mockery.java:231)
[INFO]  at org.jmock.Mockery.access$100(Mockery.java:29)
[INFO]  at org.jmock.Mockery$MockObject.invoke(Mockery.java:271)
[INFO]  at org.jmock.internal.InvocationDiverter.invoke(InvocationDiverter.java:27)
[INFO]  at org.jmock.internal.FakeObjectMethods.invoke(FakeObjectMethods.java:38)
[INFO]  at org.jmock.internal.SingleThreadedPolicy$1.invoke(SingleThreadedPolicy.java:21)
[INFO]  at org.jmock.lib.legacy.ClassImposteriser$4.invoke(ClassImposteriser.java:129)
[INFO]  at org.hotswap.agent.annotation.handler.AnnotationProcessor$$EnhancerByCGLIB$$b45334fc.processAnnotations(<generated>)
[INFO]  at org.hotswap.agent.PluginRegistry.scanPlugins(PluginRegistry.java:97)
[INFO]  at org.hotswap.agent.PluginManager.init(PluginManager.java:109)
[INFO]  at org.hotswap.agent.PluginManagerTest.testInit(PluginManagerTest.java:46)

...

[INFO] Tests in error: 
[INFO]   PluginManagerTest.testInit:46 » Expectation unexpected invocation

InvocationTargetException in transform method on Spring plugin

I am using embedded tomcat run from the main method. The application uses Spring version 3.1.4

When the application starts, there is the following exception:

II 27, 2014 7:14:35 ODP. org.apache.catalina.core.ApplicationContext log
INFO: No Spring WebApplicationInitializer types detected on classpath
II 27, 2014 7:14:35 ODP. org.apache.catalina.core.ApplicationContext log
INFO: No Spring WebApplicationInitializer types detected on classpath
II 27, 2014 7:14:35 ODP. org.apache.catalina.core.ApplicationContext log
INFO: Initializing Spring root WebApplicationContext
2014-02-27 19:14:35.780 [localhost-startStop-1] INFO o.s.web.context.ContextLoader - Root WebApplicationContext: initialization started
2014-02-27 19:14:35.879 [localhost-startStop-1] INFO o.s.w.c.support.XmlWebApplicationContext - Refreshing Root WebApplicationContext: startup date [Thu Feb 27 19:14:35 CET 2014]; root of context hierarchy
HOTSWAP AGENT: 19:14:35.931 ERROR (org.hotswap.agent.annotation.handler.TransformHandler) - InvocationTargetException in transform method on plugin 'class org.hotswap.agent.plugin.spring.SpringPlugin' class 'org/springframework/beans/factory/support/DefaultListableBeanFactory'.
java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.hotswap.agent.annotation.handler.TransformHandler.transform(TransformHandler.java:162)
at org.hotswap.agent.annotation.handler.TransformHandler$1.transform(TransformHandler.java:73)
at org.hotswap.agent.util.HotswapTransformer.transform(HotswapTransformer.java:116)
at sun.instrument.TransformerManager.transform(TransformerManager.java:188)
at sun.instrument.InstrumentationImpl.transform(InstrumentationImpl.java:424)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
at org.springframework.context.support.AbstractRefreshableApplicationContext.createBeanFactory(AbstractRefreshableApplicationContext.java:195)
at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:128)
at org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:530)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:444)
at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:388)
at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:293)
at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:111)
at org.jboss.resteasy.plugins.spring.SpringContextLoaderListener.contextInitialized(SpringContextLoaderListener.java:44)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4939)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5434)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549)
at java.util.concurrent.FutureTask.run(FutureTask.java:262)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:744)
Caused by: org.hotswap.agent.javassist.CannotCompileException: [source error] no such class: allBeanNamesByType
at org.hotswap.agent.javassist.CtBehavior.insertBefore(CtBehavior.java:743)
at org.hotswap.agent.javassist.CtBehavior.insertBefore(CtBehavior.java:706)
at org.hotswap.agent.plugin.spring.SpringPlugin.register(SpringPlugin.java:145)
... 38 more
Caused by: compile error: no such class: allBeanNamesByType
at org.hotswap.agent.javassist.compiler.MemberResolver.searchImports(MemberResolver.java:451)
at org.hotswap.agent.javassist.compiler.MemberResolver.lookupClass(MemberResolver.java:395)
at org.hotswap.agent.javassist.compiler.MemberResolver.lookupClassByJvmName(MemberResolver.java:306)
at org.hotswap.agent.javassist.compiler.TypeChecker.atCallExpr(TypeChecker.java:642)
at org.hotswap.agent.javassist.compiler.JvstTypeChecker.atCallExpr(JvstTypeChecker.java:147)
at org.hotswap.agent.javassist.compiler.ast.CallExpr.accept(CallExpr.java:43)
at org.hotswap.agent.javassist.compiler.CodeGen.doTypeCheck(CodeGen.java:241)
at org.hotswap.agent.javassist.compiler.CodeGen.atStmnt(CodeGen.java:333)
at org.hotswap.agent.javassist.compiler.ast.Stmnt.accept(Stmnt.java:51)
at org.hotswap.agent.javassist.compiler.Javac.compileStmnt(Javac.java:533)
at org.hotswap.agent.javassist.CtBehavior.insertBefore(CtBehavior.java:725)
... 40 more

HotSwap with DCEVM configured, started but not reloading changes during app execution ( Maven +JFX )

I'm using Netbeans 8 to write sample application based on Maven and Java FX. I want to set up HotSwap with DCEVM and check if it's working with my project.

Sample application
public class FXMLController implements Initializable {

@FXML
private Label label;

@FXML
private void handleButtonAction(ActionEvent event) {
    System.out.println("You clicked me!");        
}

@Override
public void initialize(URL url, ResourceBundle rb) {
// TODO
}    

}
I've installed and configured DCEVM and HotSwap agent.This is my running configuration:

runfx.args=-Xdebug -Xrunjdwp:transport=dt_socket,server=n,address=${jpda.address} -jar "${project.build.directory}/${project.build.finalName}.jar"
jpda.listen=true
Env.MAVEN_OPTS=-XXaltjvm=dcevm -javaagent:c:\TEST\hotswap-agent.jar=autoHotswap=true
I've also cliked "Compile on save" option in netbeans.

This is log from console during app start.

NetBeans: JPDA Listening Start...
JPDA Address: MC0WKJ3C:50469
Port:50469
cd C:\dev\java\MavenFxHotSwap; "MAVEN_OPTS=-XXaltjvm=dcevm -javaagent:c:\TEST\hotswap-agent.jar=autoHotswap=true" JAVA_HOME=C:\TEST\Java\jdk1.8.0_05 cmd /c """C:\Program Files\NetBeans 8.0.2\java\maven\bin\mvn.bat" -Drunfx.args="-Xdebug -Xrunjdwp:transport=dt_socket,server=n,address=50469 -jar \"${project.build.directory}/${project.build.finalName}.jar\" " -Djpda.listen=true -Djpda.address=50469 -Dmaven.ext.class.path="C:\Program Files\NetBeans 8.0.2\java\maven-nblib\netbeans-eventspy.jar" -Dfile.encoding=UTF-8 org.codehaus.mojo:exec-maven-plugin:1.2.1:exec""
Running NetBeans Compile On Save execution. Phase execution is skipped and output directories of dependency projects (with Compile on Save turned on) will be used instead of their jar artifacts.
HOTSWAP AGENT: 11:43:17.728 INFO (org.hotswap.agent.HotswapAgent) - Loading Hotswap agent {0.2} - unlimited runtime class redefinition.
HOTSWAP AGENT: 11:43:18.085 INFO (org.hotswap.agent.config.PluginRegistry) - Plugin 'org.hotswap.agent.plugin.hotswapper.HotswapperPlugin' initialized in ClassLoader 'sun.misc.Launcher$AppClassLoader@58644d46'.
HOTSWAP AGENT: 11:43:18.124 INFO (org.hotswap.agent.config.PluginRegistry) - Discovered plugins: [Hotswapper, AnonymousClassPatch, WatchResources, Hibernate, Spring, Jersey2, Jetty, Tomcat, ZK, Logback, JSF, Seam, ELResolver, OsgiEquinox]
HOTSWAP AGENT: 11:43:19.472 INFO (org.hotswap.agent.config.PluginRegistry) - Plugin 'org.hotswap.agent.plugin.hotswapper.HotswapperPlugin' initialized in ClassLoader 'ClassRealm[plexus.core, parent: null]'.
Scanning for projects...


Building MavenFxHotSwap 1.0-SNAPSHOT

HOTSWAP AGENT: 11:43:20.164 INFO (org.hotswap.agent.config.PluginRegistry) - Plugin 'org.hotswap.agent.plugin.hotswapper.HotswapperPlugin' initialized in ClassLoader 'ClassRealm[maven.ext, parent: ClassRealm[plexus.core, parent: null]]'.

--- exec-maven-plugin:1.2.1:exec (default-cli) @ MavenFxHotSwap ---
HOTSWAP AGENT: 11:43:21.068 INFO (org.hotswap.agent.config.PluginRegistry) - Plugin 'org.hotswap.agent.plugin.hotswapper.HotswapperPlugin' initialized in ClassLoader 'ClassRealm[maven.ext, parent: ClassRealm[plexus.core, parent: null]]'.
HOTSWAP AGENT: 11:43:21.563 INFO (org.hotswap.agent.config.PluginRegistry) - Plugin 'org.hotswap.agent.plugin.hotswapper.HotswapperPlugin' initialized in ClassLoader 'ClassRealm[plugin>org.codehaus.mojo:exec-maven-plugin:1.2.1, parent: sun.misc.Launcher$AppClassLoader@58644d46]'.
When I'm debuging code and making some changes adding method or something no changes are made. I can apply changes via netbeasn interface but no log from HotswapperPlugin is visible. Is there is any way to make it work? Am I doing something wrong?

Spring plugin - ProxyReplacer dependency

PluginClass must not contain dependencies to any framework specific classes. If launched in multiple classloader envorinment (servlet container), an error occures:
java.lang.NoClassDefFoundError: net/sf/cglib/proxy/Callback

Framework specific code should be run:

  • using java reflection with correct classloader
  • or via invocation from modified class inside application classloader.

See http://www.hotswapagent.org/how-does-it-work/hotswap-agent-implementation for more information.

There is example project for plain servlet and with spring and hibernate.

ExtraPathResourceClassLoaderTest fails (jdk1.7.0_67 on mac)

I downloaded the project, modified the run-tests.sh to point to my local Java installation (/Library/Java/JavaVirtualMachines/jdk1.7.0_67.jdk/Contents/Home). The result is:

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
objc[6005]: Class JavaLaunchHelper is implemented in both /Library/Java/JavaVirtualMachines/jdk1.7.0_67.jdk/Contents/Home/jre/bin/java and /Library/Java/JavaVirtualMachines/jdk1.7.0_67.jdk/Contents/Home/jre/lib/libinstrument.dylib. One of the two will be used. Which one is undefined.
HOTSWAP AGENT: 12:0:46.895 INFO (org.hotswap.agent.HotswapAgent) - Loading Hotswap agent {0.2.1-SNAPSHOT} - unlimited runtime class redefinition.
Running org.hotswap.agent.plugin.jetty.ExtraPathResourceClassLoaderTest
Tests run: 1, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 1.278 sec <<< FAILURE! - in org.hotswap.agent.plugin.jetty.ExtraPathResourceClassLoaderTest
testGetResource(org.hotswap.agent.plugin.jetty.ExtraPathResourceClassLoaderTest)  Time elapsed: 1.225 sec  <<< FAILURE!
java.lang.AssertionError: Returned after modification
    at org.junit.Assert.fail(Assert.java:88)

The offending line is:

assertNotNull("Returned after modification", classLoader.getResource(tempFile.getName()));

I can provide more information if needed.

[spring] Refresh @Autowired field

Hi

when I add a new attribute annotated with Autowired, the value stills null after refresh. The spring plugin is enable because I see outputs when the bean is reloaded.

Did I miss something or this kind of support is not already provided by the agent?

Thanks!

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.