secondbreakfast
secondbreakfast

Reputation: 4372

Tomcat fails to start using Eclipse, JRebel, and Spring Boot

I am building a Spring Boot application in Eclipse running JRebel and Tomcat 9. I have added JRebel nature to my project, and confirmed that the generated rebel.xml is correct. When I deploy my application to Tomcat and start it, I am greeted by this error stack.

2016-10-12 09:55:10.689 ERROR [8] [SDK-CBP] Class 'org.springframework.jmx.export.MBeanExporter' could not be processed by org.zeroturnaround.javarebel.integration.spring.beans.cbp.MBeanExporterCBP@org.apache.catalina.loader.WebappClassLoader@35310f27: org.zeroturnaround.bundled.javassist.CannotCompileException: [source error] setRegistrationBehavior(int) not found in org.springframework.jmx.export.MBeanExporter
    at org.zeroturnaround.bundled.javassist.CtNewMethod.make(SourceFile:79)
    at org.zeroturnaround.bundled.javassist.CtNewMethod.make(SourceFile:45)
    at org.zeroturnaround.javarebel.integration.spring.beans.cbp.MBeanExporterCBP.process(MBeanExporterCBP.java:40)
    at org.zeroturnaround.javarebel.integration.support.JavassistClassBytecodeProcessor.process(SourceFile:117)
    at com.zeroturnaround.javarebel.rx.a(SourceFile:365)
    at com.zeroturnaround.javarebel.rx.a(SourceFile:354)
    at com.zeroturnaround.javarebel.rx.a(SourceFile:322)
    at com.zeroturnaround.javarebel.SDKIntegrationImpl.runBytecodeProcessors(SourceFile:33)
    at com.zeroturnaround.javarebel.px.transform(SourceFile:94)
    at java.lang.ClassLoader.defineClass(ClassLoader.java)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
    at org.apache.catalina.loader.WebappClassLoaderBase.findClassInternal(WebappClassLoaderBase.java:2452)
    at org.apache.catalina.loader.WebappClassLoaderBase.findClass(WebappClassLoaderBase.java:854)
    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1264)
    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1147)
    at org.springframework.util.ClassUtils.forName(ClassUtils.java:250)
    at org.springframework.util.ClassUtils.isPresent(ClassUtils.java:327)
    at org.springframework.boot.autoconfigure.condition.OnClassCondition$MatchType$2.matches(OnClassCondition.java:123)
    at org.springframework.boot.autoconfigure.condition.OnClassCondition.getMatchingClasses(OnClassCondition.java:93)
    at org.springframework.boot.autoconfigure.condition.OnClassCondition.getMatchOutcome(OnClassCondition.java:50)
    at org.springframework.boot.autoconfigure.condition.SpringBootCondition.matches(SpringBootCondition.java:47)
    at org.springframework.context.annotation.ConditionEvaluator.shouldSkip(ConditionEvaluator.java:102)
    at org.springframework.context.annotation.ConfigurationClassParser.processConfigurationClass(ConfigurationClassParser.java:209)
    at org.springframework.context.annotation.ConfigurationClassParser.processImports(ConfigurationClassParser.java:539)
    at org.springframework.context.annotation.ConfigurationClassParser.processDeferredImportSelectors(ConfigurationClassParser.java:482)
    at org.springframework.context.annotation.ConfigurationClassParser.parse(ConfigurationClassParser.java:191)
    at org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:324)
    at org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:246)
    at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanDefinitionRegistryPostProcessors(PostProcessorRegistrationDelegate.java:273)
    at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:98)
    at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:681)
    at org.springframework.context.support.AbstractApplicationContext.__refresh(AbstractApplicationContext.java:523)
    at org.springframework.context.support.AbstractApplicationContext.jrLockAndRefresh(AbstractApplicationContext.java)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java)
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:122)
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:736)
    at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:369)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:313)
    at org.springframework.boot.web.support.SpringBootServletInitializer.run(SpringBootServletInitializer.java:151)
    at org.springframework.boot.web.support.SpringBootServletInitializer.createRootApplicationContext(SpringBootServletInitializer.java:131)
    at org.springframework.boot.web.support.SpringBootServletInitializer.onStartup(SpringBootServletInitializer.java:86)
    at org.springframework.web.SpringServletContainerInitializer.onStartup(SpringServletContainerInitializer.java:171)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5185)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1409)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1399)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
Caused by: compile error: setRegistrationBehavior(int) not found in org.springframework.jmx.export.MBeanExporter
    at org.zeroturnaround.bundled.javassist.compiler.TypeChecker.atMethodCallCore(SourceFile:749)
    at org.zeroturnaround.bundled.javassist.compiler.TypeChecker.atCallExpr(SourceFile:695)
    at org.zeroturnaround.bundled.javassist.compiler.JvstTypeChecker.atCallExpr(SourceFile:157)
    at org.zeroturnaround.bundled.javassist.compiler.ast.CallExpr.accept(SourceFile:46)
    at org.zeroturnaround.bundled.javassist.compiler.CodeGen.doTypeCheck(SourceFile:242)
    at org.zeroturnaround.bundled.javassist.compiler.CodeGen.atStmnt(SourceFile:330)
    at org.zeroturnaround.bundled.javassist.compiler.ast.Stmnt.accept(SourceFile:50)
    at org.zeroturnaround.bundled.javassist.compiler.CodeGen.atStmnt(SourceFile:351)
    at org.zeroturnaround.bundled.javassist.compiler.ast.Stmnt.accept(SourceFile:50)
    at org.zeroturnaround.bundled.javassist.compiler.MemberCodeGen.atTryStmnt(SourceFile:204)
    at org.zeroturnaround.bundled.javassist.compiler.CodeGen.atStmnt(SourceFile:367)
    at org.zeroturnaround.bundled.javassist.compiler.ast.Stmnt.accept(SourceFile:50)
    at org.zeroturnaround.bundled.javassist.compiler.CodeGen.atStmnt(SourceFile:351)
    at org.zeroturnaround.bundled.javassist.compiler.ast.Stmnt.accept(SourceFile:50)
    at org.zeroturnaround.bundled.javassist.compiler.CodeGen.atIfStmnt(SourceFile:398)
    at org.zeroturnaround.bundled.javassist.compiler.CodeGen.atStmnt(SourceFile:355)
    at org.zeroturnaround.bundled.javassist.compiler.ast.Stmnt.accept(SourceFile:50)
    at org.zeroturnaround.bundled.javassist.compiler.CodeGen.atStmnt(SourceFile:351)
    at org.zeroturnaround.bundled.javassist.compiler.ast.Stmnt.accept(SourceFile:50)
    at org.zeroturnaround.bundled.javassist.compiler.MemberCodeGen.atTryStmnt(SourceFile:204)
    at org.zeroturnaround.bundled.javassist.compiler.CodeGen.atStmnt(SourceFile:367)
    at org.zeroturnaround.bundled.javassist.compiler.ast.Stmnt.accept(SourceFile:50)
    at org.zeroturnaround.bundled.javassist.compiler.CodeGen.atStmnt(SourceFile:351)
    at org.zeroturnaround.bundled.javassist.compiler.ast.Stmnt.accept(SourceFile:50)
    at org.zeroturnaround.bundled.javassist.compiler.CodeGen.atMethodBody(SourceFile:292)
    at org.zeroturnaround.bundled.javassist.compiler.CodeGen.atMethodDecl(SourceFile:274)
    at org.zeroturnaround.bundled.javassist.compiler.ast.MethodDecl.accept(SourceFile:44)
    at org.zeroturnaround.bundled.javassist.compiler.Javac.compileMethod(SourceFile:169)
    at org.zeroturnaround.bundled.javassist.compiler.Javac.compile(SourceFile:95)
    at org.zeroturnaround.bundled.javassist.CtNewMethod.make(SourceFile:74)
    ... 49 more

edit: I am using JRebel for Eclipse plugin 6.5.1, and Spring Boot 2.0.0.BUILD-SNAPSHOT

Upvotes: 1

Views: 842

Answers (1)

Viktor
Viktor

Reputation: 442

JRebel cannot instrument class because MBeanRegistrationSupport#setRegistrationBehavior method was removed by b5db5d commit on spring-framework development branch.

We have updated our Spring integration and JRebel Nighly build (choose standalone jar) should work fine.

Fix will be included in JRebel 6.5.2 which we plan to release next week.

Thank you for bug report, if you have any questions/issue please write to [email protected].

Upvotes: 3

Related Questions