javamelody / grails-melody-plugin

JavaMelody monitoring plugin for Grails, to monitor application performance
https://plugins.grails.org/plugin/grails-melody-plugin
Apache License 2.0
32 stars 31 forks source link

1.70 throws exception in Grails 3.1.12 application #55

Closed beechovsky closed 6 years ago

beechovsky commented 6 years ago

NOTE: The same issue occurs for 1.69.0

Grails 3.1.12 deployed to Tomcat 8.0.

Switching between compile and runtime dependency doesn't affect the outcome.

I'm updating the plugin version from 1.67.0 to 1.70.0 after doing the same with my central collect server. However, I get the following error:

java.lang.NoClassDefFoundError: org/springframework/boot/web/servlet/ServletContextInitializer 
    at java.lang.Class.getDeclaredMethods0(Native Method) 
    at java.lang.Class.privateGetDeclaredMethods(Class.java:2701) 
    at java.lang.Class.getDeclaredMethods(Class.java:1975) 
    at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:612) 
    at org.springframework.util.ReflectionUtils.doWithMethods(ReflectionUtils.java:524) 
    at org.springframework.util.ReflectionUtils.doWithMethods(ReflectionUtils.java:510) 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.determineCandidateConstructors(AutowiredAnnotationBeanPostProcessor.java:241)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.determineConstructorsFromBeanPostProcessors(AbstractAutowireCapableBeanFactory.java:1073)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1046) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:510) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482) 
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306) 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:778) 
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:839) 
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:538) 
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:118) 
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:760) 
    at org.springframework.boot.SpringApplication.createAndRefreshContext(SpringApplication.java:360) 
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:306) 
    at grails.boot.GrailsApp.run(GrailsApp.groovy:55) 
    at org.springframework.boot.context.web.SpringBootServletInitializer.run(SpringBootServletInitializer.java:150) 
    at org.grails.boot.context.web.GrailsAppServletInitializer.createRootApplicationContext(GrailsAppServletInitializer.groovy:57) 
    at org.springframework.boot.context.web.SpringBootServletInitializer.onStartup(SpringBootServletInitializer.java:85) 
    at org.springframework.web.SpringServletContainerInitializer.onStartup(SpringServletContainerInitializer.java:169) 
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5303) 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145) 
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:753) 
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:729) 
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:717) 
    at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:976) 
    at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1853) 
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:266) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) 
    at java.lang.Thread.run(Thread.java:748) 
Caused by: java.lang.ClassNotFoundException: org.springframework.boot.web.servlet.ServletContextInitializer 
    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1339) 
    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1167) 
     ... 39 common frames omitted
sergiomichels commented 6 years ago

@beechovsky Could you please test with latest version?

daltonjorge commented 6 years ago

Same problem here. Grails 3.1.19 in development mode.

sergiomichels commented 6 years ago

I've checked that this is due to #42, so since 1.69.0 Grails 3.2 is required because Spring Boot changed packages.

sergiomichels commented 6 years ago

For Grails 3.1 you can upgrade Melody version by excluding the dependency

compile('org.grails.plugins:grails-melody-plugin:1.69.0') {
    exclude group: 'net.bull.javamelody', module: 'javamelody-core'
}
compile 'net.bull.javamelody:javamelody-core:1.71.0'
beechovsky commented 6 years ago

Hi Sergio, and thanks for the replies!

I tried what you mentioned above, and got the following error:

2018-04-26 17:21:42,290 - ERROR org.springframework.boot.SpringApplication - Application startup failed java.lang.NoClassDefFoundError: org/springframework/boot/web/servlet/ServletContextInitializer at java.lang.Class.getDeclaredMethods0(Native Method) at java.lang.Class.privateGetDeclaredMethods(Class.java:2701) at java.lang.Class.getDeclaredMethods(Class.java:1975) at org.springsource.loaded.ri.ReflectiveInterceptor.jlClassGetDeclaredMethods(ReflectiveInterceptor.java:153) at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:612) at org.springframework.util.ReflectionUtils.doWithMethods(ReflectionUtils.java:524) at org.springframework.util.ReflectionUtils.doWithMethods(ReflectionUtils.java:510) at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.determineCandidateConstructors(AutowiredAnnotationBeanPostProcessor.java:241) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.determineConstructorsFromBeanPostProcessors(AbstractAutowireCapableBeanFactory.java:1073) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1046) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:510) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482) at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:778) at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:839) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:538) at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:118) at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:760) at org.springframework.boot.SpringApplication.createAndRefreshContext(SpringApplication.java:360) at org.springframework.boot.SpringApplication.run(SpringApplication.java:306) at grails.boot.GrailsApp.run(GrailsApp.groovy:55) at grails.boot.GrailsApp.run(GrailsApp.groovy:374) at grails.boot.GrailsApp.run(GrailsApp.groovy:363) at grails.boot.GrailsApp$run.call(Unknown Source) at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48) at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113) at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:133) at edu.stsci.spar.Application.main(Application.groovy:21) Caused by: java.lang.ClassNotFoundException: org.springframework.boot.web.servlet.ServletContextInitializer at java.net.URLClassLoader.findClass(URLClassLoader.java:381) at java.lang.ClassLoader.loadClass(ClassLoader.java:424) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ... 31 common frames omitted

Returning to 1.67 resolves the error.

sergiomichels commented 6 years ago

@beechovsky I've checked again, since 1.69 this plugin requires Grails 3.2, sorry for misleading you. So you need to declare like following:

compile('org.grails.plugins:grails-melody-plugin:1.68.0') {
    exclude group: 'net.bull.javamelody', module: 'javamelody-core'
}
compile 'net.bull.javamelody:javamelody-core:1.72.0'
beechovsky commented 6 years ago

Thanks again, @sergiomichels , for continuing to work on this!

However, 1.68 throws the following error (I don't think it exists):

Error Error initializing classpath: Could not find org.grails.plugins:grails-melody-plugin:1.68.0. Searched in the following locations: file:/Users/me/.m2/repository/org/grails/plugins/grails-melody-plugin/1.68.0/grails-melody-plugin-1.68.0.pom file:/Users/me/.m2/repository/org/grails/plugins/grails-melody-plugin/1.68.0/grails-melody-plugin-1.68.0.jar https://repo.grails.org/grails/core/org/grails/plugins/grails-melody-plugin/1.68.0/grails-melody-plugin-1.68.0.pom https://repo.grails.org/grails/core/org/grails/plugins/grails-melody-plugin/1.68.0/grails-melody-plugin-1.68.0.jar https://repodev.stsci.edu/artifactory/repo/org/grails/plugins/grails-melody-plugin/1.68.0/grails-melody-plugin-1.68.0.pom https://repodev.stsci.edu/artifactory/repo/org/grails/plugins/grails-melody-plugin/1.68.0/grails-melody-plugin-1.68.0.jar

No need to look at this again, we are upgrading our Grails version soon. Thanks!