Could not initialize class org.codehaus.groovy.ast.ClassHelper

Installation Forum (Inactive)
Could not initialize class org.codehaus.groovy.ast.ClassHelper Brian Pratt  2009-06-22 17:45
Status: Closed
 
I understand that you're planning to phase out the use of groovy, but for the moment using the 9.1 tarball I'm hitting this error in a freshly installed Labkey Server (on Ubuntu 8.04 on Amazon EC2). I'm kinda stumped, any ideas? The tomcat logs don't add anything (as in, grep on "groovy" and nothing comes up).

Thanks,

Brian

----------------

An unexpected error occurred
Could not initialize class org.codehaus.groovy.ast.ClassHelper

[Show more details]

java.lang.NoClassDefFoundError: Could not initialize class org.codehaus.groovy.ast.ClassHelper
       at org.codehaus.groovy.antlr.AntlrParserPlugin.importDef(AntlrParserPlugin.java:271)
       at org.codehaus.groovy.antlr.AntlrParserPlugin.convertGroovy(AntlrParserPlugin.java:200)
       at org.codehaus.groovy.antlr.AntlrParserPlugin.buildAST(AntlrParserPlugin.java:180)
       at org.codehaus.groovy.control.SourceUnit.convert(SourceUnit.java:317)
       at org.codehaus.groovy.control.CompilationUnit$6.call(CompilationUnit.java:606)
       at org.codehaus.groovy.control.CompilationUnit.applyToSourceUnits(CompilationUnit.java:833)
       at org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:480)
       at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:306)
       at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:275)
       at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:270)
       at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:242)
       at org.labkey.api.view.GroovyView.getGroovyClass(GroovyView.java:160)
       at org.labkey.api.view.GroovyView.<init>(GroovyView.java:101)
       at org.labkey.api.view.GroovyView.<init>(GroovyView.java:70)
       at org.labkey.wiki.model.BaseWikiView.<init>(BaseWikiView.java:45)
       at org.labkey.wiki.model.WikiWebPart.<init>(WikiWebPart.java:37)
       at org.labkey.wiki.WikiWebPartFactory.getWebPartView(WikiWebPartFactory.java:45)
       at org.labkey.api.view.Portal.getWebPartViewSafe(Portal.java:690)
       at org.labkey.api.view.Portal.populatePortalView(Portal.java:515)
       at org.labkey.api.view.Portal.populatePortalView(Portal.java:489)
       at org.labkey.portal.ProjectController$BeginAction.getView(ProjectController.java:185)
       at org.labkey.api.action.SimpleViewAction.handleRequest(SimpleViewAction.java:61)
       at org.labkey.api.action.BaseViewAction.handleRequestInternal(BaseViewAction.java:162)
       at org.springframework.web.servlet.mvc.AbstractController.handleRequest(AbstractController.java:153)
       at org.labkey.api.action.SpringActionController.handleRequest(SpringActionController.java:336)
       at org.labkey.api.module.DefaultModule.dispatch(DefaultModule.java:689)
       at org.labkey.api.view.ViewServlet.service(ViewServlet.java:139)
       at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
       at sun.reflect.GeneratedMethodAccessor73.invoke(Unknown Source)
       at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
       at java.lang.reflect.Method.invoke(Method.java:597)
       at org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:244)
       at java.security.AccessController.doPrivileged(Native Method)
       at javax.security.auth.Subject.doAsPrivileged(Subject.java:517)
       at org.apache.catalina.security.SecurityUtil.execute(SecurityUtil.java:276)
       at org.apache.catalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:162)
       at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:262)
       at org.apache.catalina.core.ApplicationFilterChain.access$0(ApplicationFilterChain.java:192)
       at org.apache.catalina.core.ApplicationFilterChain$1.run(ApplicationFilterChain.java:171)
       at java.security.AccessController.doPrivileged(Native Method)
       at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:167)
       at org.labkey.api.data.TransactionFilter.doFilter(TransactionFilter.java:36)
       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
       at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
       at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
       at java.lang.reflect.Method.invoke(Method.java:597)
       at org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:244)
       at java.security.AccessController.doPrivileged(Native Method)
       at javax.security.auth.Subject.doAsPrivileged(Subject.java:517)
       at org.apache.catalina.security.SecurityUtil.execute(SecurityUtil.java:276)
       at org.apache.catalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:218)
       at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:210)
       at org.apache.catalina.core.ApplicationFilterChain.access$0(ApplicationFilterChain.java:192)
       at org.apache.catalina.core.ApplicationFilterChain$1.run(ApplicationFilterChain.java:171)
       at java.security.AccessController.doPrivileged(Native Method)
       at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:167)
       at org.labkey.core.filters.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:124)
       at sun.reflect.GeneratedMethodAccessor75.invoke(Unknown Source)
       at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
       at java.lang.reflect.Method.invoke(Method.java:597)
       at org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:244)
       at java.security.AccessController.doPrivileged(Native Method)
       at javax.security.auth.Subject.doAsPrivileged(Subject.java:517)
       at org.apache.catalina.security.SecurityUtil.execute(SecurityUtil.java:276)
       at org.apache.catalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:218)
       at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:210)
       at org.apache.catalina.core.ApplicationFilterChain.access$0(ApplicationFilterChain.java:192)
       at org.apache.catalina.core.ApplicationFilterChain$1.run(ApplicationFilterChain.java:171)
       at java.security.AccessController.doPrivileged(Native Method)
       at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:167)
       at org.labkey.api.module.ModuleLoader.doFilter(ModuleLoader.java:647)
       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
       at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
       at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
       at java.lang.reflect.Method.invoke(Method.java:597)
       at org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:244)
       at java.security.AccessController.doPrivileged(Native Method)
       at javax.security.auth.Subject.doAsPrivileged(Subject.java:517)
       at org.apache.catalina.security.SecurityUtil.execute(SecurityUtil.java:276)
       at org.apache.catalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:218)
       at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:210)
       at org.apache.catalina.core.ApplicationFilterChain.access$0(ApplicationFilterChain.java:192)
       at org.apache.catalina.core.ApplicationFilterChain$1.run(ApplicationFilterChain.java:171)
       at java.security.AccessController.doPrivileged(Native Method)
       at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:167)
       at org.labkey.api.security.AuthFilter.doFilter(AuthFilter.java:101)
       at sun.reflect.GeneratedMethodAccessor74.invoke(Unknown Source)
       at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
       at java.lang.reflect.Method.invoke(Method.java:597)
       at org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:244)
       at java.security.AccessController.doPrivileged(Native Method)
       at javax.security.auth.Subject.doAsPrivileged(Subject.java:517)
       at org.apache.catalina.security.SecurityUtil.execute(SecurityUtil.java:276)
       at org.apache.catalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:218)
       at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:210)
       at org.apache.catalina.core.ApplicationFilterChain.access$0(ApplicationFilterChain.java:192)
       at org.apache.catalina.core.ApplicationFilterChain$1.run(ApplicationFilterChain.java:171)
       at java.security.AccessController.doPrivileged(Native Method)
       at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:167)
       at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
       at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:172)
       at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
       at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
       at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
       at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151)
       at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:874)
       at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
       at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
       at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
       at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
       at java.lang.Thread.run(Thread.java:619)

request attributes
WebPartView.frame = DIV
LABKEY.StartTime = 1245716729102
LABKEY.container = /home
LABKEY.action = begin
LABKEY.RequestURL = /labkey/project/home/begin.view?
LABKEY.controller = project
LABKEY.OriginalURL = http://ec2-174-129-156-250.compute-1.amazonaws.com/labkey/project/home/begin.view?

core schema database configuration
Server URL    jdbc:postgresql://localhost/labkey
Product Name    PostgreSQL
Product Version    8.3.7
Driver Name    PostgreSQL Native Driver
Driver Version    PostgreSQL 8.3 JDBC3 with SSL (build 604)
 
 
jeckels responded:  2009-06-23 09:27
Hi Brian,

You're correct - we've removed Groovy completely in 9.2.

In 9.1, though, it should be coming from groovy-all-1.0-RC-01.jar. Can you verify that it's in the WEB-INF/lib directory?

If so, you might try running the VM with the -verbose:gc argument to see where all the other classes are being loaded from, which can often be helpful for problems like this.

Thanks,
Josh
 
Brian Pratt responded:  2009-06-23 10:23
Hi Josh,

Yeah, I'd already investigated classpath issues - the weirdness here is that as you can see from the call stack the groovy jar is in play, and indeed if I remove it from the classpath (that is, rename it) the wheels come completely off as you'd expect for a missing jar file.

But adding the VM debug arg does change the info content a bit:

An unexpected error occurred
[Show more details]
java.lang.ExceptionInInitializerError
       at java.lang.Class.forName0(Native Method)
       at java.lang.Class.forName(Class.java:169)
       at org.codehaus.groovy.ast.ClassHelper.class$(ClassHelper.java:79)
       at org.codehaus.groovy.ast.ClassHelper.<clinit>(ClassHelper.java:74)
       at org.codehaus.groovy.antlr.AntlrParserPlugin.importDef(AntlrParserPlugin.java:271)
       at org.codehaus.groovy.antlr.AntlrParserPlugin.convertGroovy(AntlrParserPlugin.java:200)
       at org.codehaus.groovy.antlr.AntlrParserPlugin.buildAST(AntlrParserPlugin.java:180)
(etc, same as original error stack from here)
So it's something failing during initialization, rather than jar file not found.

Given that you've moved on from Groovy perhaps I should just skip forward to 9.2 take my chances there? Presumably this is the sort of thing that's driven you away from Groovy?

Thanks,

Brian
 
jeckels responded:  2009-06-23 14:49
Hi Brian,

I don't think that we've seen this particular issue before, but Groovy has been the source of a number of memory leaks and other problems.

That stack trace points to this code in Groovy's ClassHelper:

    private static String[] names = new String[] {
        boolean.class.getName(), char.class.getName(),
        byte.class.getName(), short.class.getName(),
        int.class.getName(), long.class.getName(),
        double.class.getName(), float.class.getName(),
        Object.class.getName(), Void.TYPE.getName(),
        Closure.class.getName(), GString.class.getName(),
        List.class.getName(), Map.class.getName(),
        Range.class.getName(), Pattern.class.getName(),
        Script.class.getName(), String.class.getName(),
        Boolean.class.getName(), Character.class.getName(),
        Byte.class.getName(), Short.class.getName(),
        Integer.class.getName(), Long.class.getName(),
        Double.class.getName(), Float.class.getName(),
        BigDecimal.class.getName(), BigInteger.class.getName(),
        Void.class.getName(), Reference.class.getName(),
        Class.class.getName(), MetaClass.class.getName()
    };

but it's not clear which is causing the problem - it seems like the underlying exception is being swallowed somewhere.

Moving to 9.2 will definitely get rid of this error. We're still in the middle of stabilization so you'll probably hit some other bumps, but we're starting to ramp down.

Thanks,
Josh
 
Brian Pratt responded:  2009-06-23 16:54
OK, onward and upward.

Currently my config scripts are written in terms of downloading Labkey-blessed release tarballs ("wget http://www.labkey.com/download/$LABKEY_VER/LabKey$LABKEY_VER-$LABKEY_TAG-bin.tar.gz") - does the 9.2 automated build and test process create any public facing release candidate artifacts like that?

Thanks,

Brian
 
adam responded:  2009-06-23 17:31
Unfortunately, no.
 
Brian Pratt responded:  2009-06-24 09:09
Bummer. How hard to add this? Beyond my own convenience, one can make a case for the goodness of making the release artifact creation and installation a more testable action. (But mostly I'm thinking about my own convenience...)
 
jeckels responded:  2009-06-24 09:48
Hi Brian,

It's on our list of things to add, but is behind other build automation work like setting up a nightly set of tests, adding additional database versions to our test suite, and a few other items.

I could post a prerelease 9.2 build for download, but it wouldn't be automatically updated. Let me know if that would be helpful.

Thanks,
Josh
 
jeckels responded:  2009-06-24 10:00
Hi Brian,

An update: TeamCity, our automated test and build system, may already be producing something that you can use. Try this URL:

http://teamcity.labkey.org:8080/viewLog.html?tab=artifacts&buildTypeId=bt2&buildId=lastSuccessful

It should show the build artifacts from the last successful build (which may not have passed the test suites).

The LabKey<VERSION>-<SVN_REVISION>-test-build.tar.gz will probably contain everything you need. It will likely include a few extra modules, like the one that we use to collect exception reports from other servers.

Thanks,
Josh