ClassSignatureComparerHelper does not find super class (NotFoundException - Error reading siganture)

228 views
Skip to first unread message

Timo Deuschle

unread,
Apr 18, 2017, 8:18:20 AM4/18/17
to HotswapAgent
Hi there,

I'm using HotswapAgent in a Spring application (SAP hybris) on Tomcat 7.0.
Every time I change something, I get an exception on console that the superclass of modified class is not found (even if it is in the same package, not a library or something). The hotswapping seems to work, I can see changes I made in the code directly.

Technology:
- Java 8u112 with corresponding DCE VM (DCEVM-light-8u112)
- hotswap-agent 1.0
- Hybris 5.7
- Spring 4.1.7.RELEASE
- Tomcat 7.0.59.0
- IntelliJ IDEA with remote debugger

Java Hierarchy:
Two classes, AbstractCMSComponentController and DefaultCMSComponentController, both in the same package. Changes made to DefaultCMSComponentController and recompile triggered in IntelliJ.

Exception:
HOTSWAP AGENT: 13:58:53.550 ERROR (org.hotswap.agent.util.signature.ClassSignatureComparerHelper) - Error reading siganture
org
.hotswap.agent.javassist.NotFoundException: my.package.storefront.controllers.cms.AbstractCMSComponentController
        at org
.hotswap.agent.javassist.ClassPool.get(ClassPool.java:445)
        at org
.hotswap.agent.javassist.CtClassType.getSuperclass(CtClassType.java:669)
        at org
.hotswap.agent.util.signature.CtClassSignature.getValue(CtClassSignature.java:69)
        at org
.hotswap.agent.util.signature.ClassSignatureComparerHelper.getCtClassSignature(ClassSignatureComparerHelper.java:21)
        at org
.hotswap.agent.util.signature.ClassSignatureComparerHelper.isDifferent(ClassSignatureComparerHelper.java:37)
        at org
.hotswap.agent.util.signature.ClassSignatureComparerHelper.isPoolClassDifferent(ClassSignatureComparerHelper.java:64)
        at org
.hotswap.agent.plugin.spring.signature.ClassSignatureComparer.isPoolClassDifferent(ClassSignatureComparer.java:31)
        at org
.hotswap.agent.plugin.spring.SpringChangesAnalyzer.classChangeNeedsReload(SpringChangesAnalyzer.java:43)
        at org
.hotswap.agent.plugin.spring.SpringChangesAnalyzer.isReloadNeeded(SpringChangesAnalyzer.java:36)
        at org
.hotswap.agent.plugin.spring.SpringPlugin$1.transform(SpringPlugin.java:80)
        at org
.hotswap.agent.util.HotswapTransformer.transform(HotswapTransformer.java:177)
        at sun
.instrument.TransformerManager.transform(TransformerManager.java:188)
        at sun
.instrument.InstrumentationImpl.transform(InstrumentationImpl.java:428)


Tomcat debug config:
dcevm.hotswap=-XXaltjvm=dcevm -javaagent:${HYBRIS_BIN_DIR}/../tools/hotswap-agent/hotswap-agent.jar=disablePlugin=Hibernate,disablePlugin=Jersey2,disablePlugin=Jetty,disablePlugin=ZK,disablePlugin=Logback,disablePlugin=Seam,disablePlugin=ELResolver,disablePlugin=OsgiEquinox,disablePlugin=WebObjects,disablePlugin=Weld,disablePlugin=JBossModules,disablePlugin=Resteasy,disablePlugin=Gae

tomcat
.debugjavaoptions=-Xverify:none ${dcevm.hotswap} -DsourceRoot=${HYBRIS_BIN_DIR} -Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,server=y,address=8000,suspend=n

No other configuration done, just using hotswap agent defaults. Setup basically copied from here. Any ideas how to get rid of that?

Thanks in advance!

vladimir dvorak

unread,
Apr 18, 2017, 10:34:18 AM4/18/17
to HotswapAgent
Try to upgrade to hotswap-agent-1.1.0-SNAPSHOT

https://github.com/HotswapProjects/HotswapAgent/releases/tag/1.1.0-SNAPSHOT

the snapshot release should be stable with enough.

Timo Deuschle

unread,
Apr 18, 2017, 12:16:22 PM4/18/17
to HotswapAgent
I tried the snapshot, the exception is still there.

These lines from the log look suspicious:
HOTSWAP AGENT: 17:43:54.292 INFO (org.hotswap.agent.plugin.spring.SpringPlugin) - Spring plugin initialized - Spring core version '4.1.7.RELEASE'
HOTSWAP AGENT
: 17:43:55.446 INFO (org.hotswap.agent.plugin.spring.SpringPlugin) - Registering basePackage my.package.storefront
[...]
HOTSWAP AGENT: 17:45:56.513 ERROR (org.hotswap.agent.util.signature.ClassSignatureComparerHelper) - Error reading siganture
org.hotswap.agent.javassist.NotFoundException: my.package.storefront.controllers.cms.AbstractCMSComponentController
HOTSWAP AGENT: 17:45:57.738 ERROR (org.hotswap.agent.plugin.spring.scanner.ClassPathBeanDefinitionScannerAgent) - basePackage 'my.package.storefront' not associated with any scannerAgent

Package is registered, but afterwards it's not associated. How could that happen? I don't use a properties file to configure the agent, so no extraClasspath or similar is set.

vladimir dvorak

unread,
Apr 18, 2017, 1:34:43 PM4/18/17
to HotswapAgent
I'm not expert on Hybris at all. May be there is some custom classloading mechanism, since it works for plain tomcat/spring. Could you create some minimalistic example to reproduce this bug?

Matt Ashley

unread,
Jun 22, 2017, 9:29:06 AM6/22/17
to HotswapAgent
Hi all,

I'm evaluating this as a replacement for JRebel. Getting the same error as listed above:

HOTSWAP AGENT: 08:21:29.353 RELOAD (org.hotswap.agent.plugin.jvm.AnonymousClassPatchPlugin) - Class 'com/foo/bar/formpanels/DashboardPanel' has been enhanced with anonymous classes for hotswap.
HOTSWAP AGENT: 08:21:29.397 ERROR (org.hotswap.agent.util.signature.ClassSignatureComparerHelper) - Error reading siganture
org.hotswap.agent.javassist.NotFoundException: com.foo.bar.components.listview.Abstract806ListView
at org.hotswap.agent.javassist.ClassPool.get(ClassPool.java:445)
at org.hotswap.agent.javassist.bytecode.Descriptor.toCtClass(Descriptor.java:577)
at org.hotswap.agent.javassist.bytecode.Descriptor.getReturnType(Descriptor.java:479)
at org.hotswap.agent.javassist.CtBehavior.getReturnType0(CtBehavior.java:294)
at org.hotswap.agent.javassist.CtMethod.getReturnType(CtMethod.java:210)
at org.hotswap.agent.util.signature.CtClassSignature.getMethodString(CtClassSignature.java:117)
at org.hotswap.agent.util.signature.CtClassSignature.getValue(CtClassSignature.java:45)
at org.hotswap.agent.util.signature.ClassSignatureComparerHelper.getCtClassSignature(ClassSignatureComparerHelper.java:21)
at org.hotswap.agent.util.signature.ClassSignatureComparerHelper.isDifferent(ClassSignatureComparerHelper.java:37)
at org.hotswap.agent.util.signature.ClassSignatureComparerHelper.isPoolClassDifferent(ClassSignatureComparerHelper.java:64)
at org.hotswap.agent.plugin.spring.signature.ClassSignatureComparer.isPoolClassDifferent(ClassSignatureComparer.java:31)
at org.hotswap.agent.plugin.spring.SpringChangesAnalyzer.classChangeNeedsReload(SpringChangesAnalyzer.java:43)
at org.hotswap.agent.plugin.spring.SpringChangesAnalyzer.isReloadNeeded(SpringChangesAnalyzer.java:36)
at org.hotswap.agent.plugin.spring.SpringPlugin$1.transform(SpringPlugin.java:80)
at org.hotswap.agent.util.HotswapTransformer.transform(HotswapTransformer.java:177)
at sun.instrument.TransformerManager.transform(TransformerManager.java:188)
at sun.instrument.InstrumentationImpl.transform(InstrumentationImpl.java:428)

HOTSWAP AGENT: 08:21:29.407 ERROR (org.hotswap.agent.util.signature.ClassSignatureComparerHelper) - Error reading siganture
org.hotswap.agent.javassist.NotFoundException: com.foo.bar.formpanels.DashboardPanel
at org.hotswap.agent.javassist.ClassPool.get(ClassPool.java:445)
at org.hotswap.agent.javassist.bytecode.Descriptor.toCtClass(Descriptor.java:577)
at org.hotswap.agent.javassist.bytecode.Descriptor.getParameterTypes(Descriptor.java:430)
at org.hotswap.agent.javassist.CtBehavior.getParameterTypes(CtBehavior.java:286)
at org.hotswap.agent.util.signature.CtClassSignature.getConstructorString(CtClassSignature.java:103)
at org.hotswap.agent.util.signature.CtClassSignature.getValue(CtClassSignature.java:54)
at org.hotswap.agent.util.signature.ClassSignatureComparerHelper.getCtClassSignature(ClassSignatureComparerHelper.java:21)
at org.hotswap.agent.util.signature.ClassSignatureComparerHelper.isDifferent(ClassSignatureComparerHelper.java:37)
at org.hotswap.agent.util.signature.ClassSignatureComparerHelper.isPoolClassDifferent(ClassSignatureComparerHelper.java:64)
at org.hotswap.agent.plugin.spring.signature.ClassSignatureComparer.isPoolClassDifferent(ClassSignatureComparer.java:31)
at org.hotswap.agent.plugin.spring.SpringChangesAnalyzer.classChangeNeedsReload(SpringChangesAnalyzer.java:43)
at org.hotswap.agent.plugin.spring.SpringChangesAnalyzer.isReloadNeeded(SpringChangesAnalyzer.java:36)
at org.hotswap.agent.plugin.spring.SpringPlugin$1.transform(SpringPlugin.java:80)
at org.hotswap.agent.util.HotswapTransformer.transform(HotswapTransformer.java:177)
at sun.instrument.TransformerManager.transform(TransformerManager.java:188)
at sun.instrument.InstrumentationImpl.transform(InstrumentationImpl.java:428)

Class changes seem to work, but any change produces a similar error above. Tried both currently release and 1.1 snapshot.

Thanks,
Matt
Reply all
Reply to author
Forward
0 new messages