1

Local Environment:

  • Grails v2.4.2
  • Java v1.8.0_66
  • Tomcat v7.0.53
  • Windows 10

Server Environment:

  • Grails v2.4.2
  • Java v1.8.0_66
  • Glassfish v4.1.1
  • Ubuntu v14.4.01

Issue Description:

I recently migrated my grails app from a very old Debian Linux server to a Docker container. It all worked flawlessly. I built the app with Java 1.8.0_66 and deployed the it to a Glassfish container, and also linked it with a MySQL container. The Docker image I used was glassfish/server from Docker hub. This image uses Glassfish 4.1.1 and Java 1.8.0_66.

Locally, though, I cannot use run-app or test-app. This is the stacktrace:

Mär 04, 2016 2:04:41 PM org.springsource.loaded.jvm.JVM copyMethod
SCHWERWIEGEND: Problems copying method. Incompatible JVM?
java.lang.reflect.InvocationTargetException
    at sun.reflect.GeneratedMethodAccessor72.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
    at org.springsource.loaded.jvm.JVM.copyMethod(JVM.java:134)
    at org.springsource.loaded.ri.JavaMethodInvoker.createJavaMethod(JavaMethodInvoker.java:48)
    at org.springsource.loaded.ri.ReflectiveInterceptor.jlClassGetMethods(ReflectiveInterceptor.java:168)
    at sun.reflect.GeneratedMethodAccessor5.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
    at java.beans.Introspector.__sljlcgms(Introspector.java)
    at java.beans.Introspector.getPublicDeclaredMethods(Introspector.java:1336)
    at java.beans.Introspector.getTargetMethodInfo(Introspector.java:1197)
    at java.beans.Introspector.getBeanInfo(Introspector.java:426)
    at java.beans.Introspector.getBeanInfo(Introspector.java:173)
    at groovy.lang.MetaClassImpl$15.run(MetaClassImpl.java:3065)
    at java.security.AccessController.doPrivileged(Native Method)
    at groovy.lang.MetaClassImpl.addProperties(MetaClassImpl.java:3063)
    at groovy.lang.MetaClassImpl.initialize(MetaClassImpl.java:3046)
    at groovy.lang.ExpandoMetaClass.initialize(ExpandoMetaClass.java:483)
    at org.codehaus.groovy.reflection.ClassInfo.getMetaClassUnderLock(ClassInfo.java:210)
    at org.codehaus.groovy.reflection.ClassInfo.getMetaClass(ClassInfo.java:241)
    at org.codehaus.groovy.runtime.metaclass.MetaClassRegistryImpl.getMetaClass(MetaClassRegistryImpl.java:255)
    at org.codehaus.groovy.runtime.InvokerHelper.getMetaClass(InvokerHelper.java:859)
    at groovy.lang.GroovyObjectSupport.<init>(GroovyObjectSupport.java:32)
    at groovy.lang.Closure.<init>(Closure.java:219)
    at Config$_run_closure4.<init>(Config.groovy)
    at Config.run(Config.groovy:120)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
    at org.springsource.loaded.ri.ReflectiveInterceptor.jlrMethodInvoke(ReflectiveInterceptor.java:1270)
    at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:90)
    at org.codehaus.groovy.reflection.CachedMethod$invoke.call(Unknown Source)
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:45)
    at org.codehaus.groovy.reflection.CachedMethod$invoke.call(Unknown Source)
    at groovy.util.ConfigSlurper$_parse_closure5.doCall(ConfigSlurper.groovy:266)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
    at org.springsource.loaded.ri.ReflectiveInterceptor.jlrMethodInvoke(ReflectiveInterceptor.java:1270)
    at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:90)
    at org.codehaus.groovy.runtime.metaclass.ClosureMetaMethod.invoke(ClosureMetaMethod.java:80)
    at groovy.lang.ExpandoMetaClass.invokeMethod(ExpandoMetaClass.java:1108)
    at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:909)
    at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.call(PogoMetaClassSite.java:39)
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:45)
    at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.call(PogoMetaClassSite.java:54)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:112)
    at groovy.util.ConfigSlurper.parse(ConfigSlurper.groovy:284)
    at groovy.util.ConfigSlurper$parse.callCurrent(Unknown Source)
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallCurrent(CallSiteArray.java:49)
    at groovy.util.ConfigSlurper$parse.callCurrent(Unknown Source)
    at groovy.util.ConfigSlurper.parse(ConfigSlurper.groovy:158)
    at groovy.util.ConfigSlurper$parse$0.callCurrent(Unknown Source)
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallCurrent(CallSiteArray.java:49)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:133)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:141)
    at groovy.util.ConfigSlurper.parse(ConfigSlurper.groovy:148)
    at org.codehaus.groovy.grails.project.packaging.GrailsProjectPackager.createConfig(GrailsProjectPackager.groovy:345)
    at org.codehaus.groovy.grails.project.packaging.GrailsProjectPackager.packageApplication(GrailsProjectPackager.groovy:274)
    at org.codehaus.groovy.grails.project.packaging.GrailsProjectPackager$packageApplication.call(Unknown Source)
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:45)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:108)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:112)
    at org.codehaus.groovy.grails.cli.fork.testing.ForkedGrailsTestRunner.runInstance(ForkedGrailsTestRunner.groovy:127)
    at org.codehaus.groovy.grails.cli.fork.ForkedGrailsProjectClassExecutor.run(ForkedGrailsProjectClassExecutor.groovy:74)
    at org.codehaus.groovy.grails.cli.fork.testing.ForkedGrailsTestRunner.main(ForkedGrailsTestRunner.groovy:75)
Caused by: java.lang.IllegalArgumentException: Can not copy a non-root Method
    at java.lang.reflect.Method.copy(Method.java:151)
    ... 69 more

Using Glassfish locally with the same VM works without any problems. I reckon this is a Tomcat issue. This question helped me to figure out that Java > 1.8.0_31 doesn't work well with Grails. However, I was surprised that it worked without any Issues on Glassfish and even more surprised that it didn't work with Tomcat, especially since Grails is mostly used with Tomcat.

Is there any workaround to use the run-app and test-app command with Java > 1.8.0_31 locally for development? Or, if not, any other convenient way to run all or specific Spock-Unit-Tests without the integrated Tomcat environment?

Community
  • 1
  • 1
nst1nctz
  • 333
  • 3
  • 23

0 Answers0