[jira] Commented: (NANO-39) groovy scripted nanocontainer fails in servlet context

jira-yCVjj/[email protected] Sat, 14 Feb 2004 16:42:27 -0500 (EST)
Newsgroups gmane.comp.java.nanocontainer.devel
Message-ID <[email protected]>
The following comment has been added to this issue:

     Author: Jacob Kjome
    Created: Sat, 14 Feb 2004 4:41 PM
       Body:
Ok, I've got a little more info.  I put the following in GroovyContainerBuilder.createContainer()...

System.out.println("Groovy class is: " + groovyClass.getName());
            System.out.println("Groovy script reader hash is: " + script);

I wanted to make sure that the class name was the same each time and that the stored script (actually a StringReader containing the contexts of the script) was the same each time.  The script was the same (same hashcode every time), but the name of the class was different.

Here's the result the first time (and buildContainer() in "DemoBuilder" is found and called properly....

Groovy class is: DemoBuilder
Groovy script reader hash is: java.io.StringReader-m3r8v5rf/[email protected]

Here's the result any time after the first time above (and I get exceptions from Groovy saying buildContainer() in "nanocontainer" can't be found)....

Groovy class is: nanocontainer
Groovy script reader hash is: java.io.StringReader-m3r8v5rf/[email protected]


I can't quite figure out how that could be?  How could the same script result in different class names?  And not only that, but also (every time after the first call to createContainer()) in a generated Java class which doesn't contain the appropriate buildContainer(parent, compositionScope) signature????

I'm not sure if this is the fault of Groovy or something in Nanocontainer, but now I'm leaning more toward Groovy itself.

Thoughts?

Jake
---------------------------------------------------------------------
View this comment:
  http://jira.codehaus.org/secure/ViewIssue.jspa?key=NANO-39&page=comments#action_16750

---------------------------------------------------------------------
View the issue:
  http://jira.codehaus.org/secure/ViewIssue.jspa?key=NANO-39

Here is an overview of the issue:
---------------------------------------------------------------------
        Key: NANO-39
    Summary: groovy scripted nanocontainer fails in servlet context
       Type: Bug

     Status: Unassigned
   Priority: Major

 Original Estimate: Unknown
 Time Spent: Unknown
  Remaining: Unknown

    Project: NanoContainer
 Components: 
             Core
   Versions:
             1.0-beta-1

   Assignee: 
   Reporter: Jacob Kjome

    Created: Fri, 13 Feb 2004 1:51 AM
    Updated: Sat, 14 Feb 2004 4:41 PM
Environment: servlet container, scripting of nanocontainer done with Groovy

Description:
When setting up the nanocontainer servlet in web.xml using the context-param "nanocontainer.groovy", it only seems to work for the first container that is configured, or, the first compositionScope.  If any other scope is provided such as a ServletRequest or HttpSession, it fails with the following message...

"Caused by: groovy.lang.MissingMethodException: No such method: buildContainer for class: nanocontainer with arguments: [org.picocontainer.defaults.DefaultPicoContainer-Le89R2mpRr8@public.gmane.org, org.apache.coyote.tomcat5.CoyoteRequestFacade@952905]"

I know it is working the for the first container (in the ServletContext compositionScope) because I print out the compositionScope as soon as the "buildContainer" method is entered and it says...

"compositionScope is: org.apache.catalina.core.ApplicationContextFacade-m6hyCi5e6VU@public.gmane.org"

Here is the script...

class DemoBuilder {
    buildContainer(parent, compositionScope) {
        System.out.println("compositionScope is: " + compositionScope);
        pico = new org.picocontainer.defaults.DefaultPicoContainer(parent)
        if (compositionScope instanceof javax.servlet.ServletRequest) {
            System.out.println("I got here to register a component in the servlet request scope!!!!")
            pico.registerComponentImplementation("util", SomeRequestUtil.class)
        }
        else if (compositionScope instanceof javax.servlet.http.HttpSession) {
            System.out.println("I got here to register a component in the servlet session scope!!!!")
            pico.registerComponentImplementation("counter", SomeCounter.class)
        }
        else if (compositionScope instanceof javax.servlet.ServletContext) {
            //nothing to do for now
        }
        else {
            //nothing to do for now
        }
        return pico
    }
}


Here's the full stack trace....


org.nanocontainer.integrationkit.PicoCompositionException
	at org.nanocontainer.script.groovy.GroovyContainerBuilder.createContainer(GroovyContainerBuilder.java:57)
	at org.nanocontainer.integrationkit.LifecycleContainerBuilder.buildContainer(LifecycleContainerBuilder.java:25)
	at org.nanocontainer.servlet.ServletRequestContainerLauncher.startContainer(ServletRequestContainerLauncher.java:48)
	at org.nanocontainer.servlet.ServletRequestContainerFilter.doFilter(ServletRequestContainerFilter.java:36)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:233)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:204)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:257)
	at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:151)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:564)
	at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:245)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:199)
	at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:151)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:564)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:195)
	at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:151)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:164)
	at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:149)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:564)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:156)
	at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:151)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:564)
	at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:972)
	at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:206)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:828)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:700)
	at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:584)
	at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683)
	at java.lang.Thread.run(Thread.java:534)
Caused by: groovy.lang.MissingMethodException: No such method: buildContainer for class: nanocontainer with arguments: [org.picocontainer.defaults.DefaultPicoContainer-Le89R2mpRr8@public.gmane.org, org.apache.coyote.tomcat5.CoyoteRequestFacade@952905]
	at groovy.lang.MetaClass.invokeStaticMethod(MetaClass.java:291)
	at groovy.lang.MetaClass.invokeMethod(MetaClass.java:247)
	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:324)
	at groovy.lang.MetaClass.doMethodInvoke(MetaClass.java:765)
	at groovy.lang.MetaClass.invokeMethod(MetaClass.java:214)
	at org.codehaus.groovy.runtime.Invoker.invokeMethod(Invoker.java:130)
	at org.codehaus.groovy.runtime.InvokerHelper.invokeMethod(InvokerHelper.java:98)
	at nanocontainer.invokeMethod(nanocontainer.groovy)
	at org.nanocontainer.script.groovy.GroovyContainerBuilder.createContainer(GroovyContainerBuilder.java:55)
	... 27 more


Jake


---------------------------------------------------------------------
JIRA INFORMATION:
This message is automatically generated by JIRA.

If you think it was sent incorrectly contact one of the administrators:
   http://jira.codehaus.org/secure/Administrators.jspa

If you want more information on JIRA, or have a bug to report see:
   http://www.atlassian.com/software/jira