Nick Drew
2008-10-08 04:53:22 UTC
2 Issues I've discovered playing with pico today:
Pico 2.5
Pico web 2.0.1
Tomcat 5.5.27
I'm using Reslet 1.1 so can't borrow behaviour from webwork or struts.
We're using the WebComposer pattern
I've overridden the base Pico servlet listener to do some static
initialisation not possible in the composer, but I don;t think this
has any effect.
First issue:
008-10-08 12:58:21,974 [main] ERROR
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/
SunCentral-portal-web-1.0.0] - Exception sending context destroyed
event to listener instance
of class portal.PortalListener
java.lang.IllegalStateException: Cannot stop. Current container state
was: CONSTRUCTED
at
org
.picocontainer
.lifecycle.DefaultLifecycleState.stopping(DefaultLifecycleState.java:62)
at
org.picocontainer.DefaultPicoContainer.stop(DefaultPicoContainer.java:
658)
at org.picocontainer.web.PicoServletContainerListener.contextDestroyed
(PicoServletContainerListener.java:190)
at
org
.apache
.catalina.core.StandardContext.listenerStop(StandardContext.java:3805)
at
org.apache.catalina.core.StandardContext.stop(StandardContext.java:4364)
at
org.apache.catalina.core.StandardContext.start(StandardContext.java:
4246)
at
org
.apache
.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:760)
at
org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:740)
at
org.apache.catalina.core.StandardHost.addChild(StandardHost.java:544)
at
org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:831)
at
org.apache.catalina.startup.HostConfig.deployWARs(HostConfig.java:720)
at
org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:490)
at
org.apache.catalina.startup.HostConfig.start(HostConfig.java:1150)
at
org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:
311)
at
org
.apache
.catalina
.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:120)
at
org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1022)
at
org.apache.catalina.core.StandardHost.start(StandardHost.java:736)
at
org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1014)
at
org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
at
org.apache.catalina.core.StandardService.start(StandardService.java:448)
at
org.apache.catalina.core.StandardServer.start(StandardServer.java:700)
at org.apache.catalina.startup.Catalina.start(Catalina.java:
552)
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:585)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:
295)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:
433)
Second issue:
We want to put a instance at thread local with a POJO copy of the
user's credentials
e.g.
doFilter( request ){
getRequestContainer().addComponent( getUserCredentialsFrom(request) )
}
this works fine on the first thread, but not on the second:
2008-10-08 15:34:34,978 [http-8080-Processor24] ERROR
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/
SunCentral-portal-web-1.0.0].[RestletServlet] - Servlet.service() for
servlet
RestletServlet threw exception
org.picocontainer.PicoCompositionException: Duplicate Keys not
allowed. Duplicate for 'class portal.UserCredentials'
at
org
.picocontainer
.DefaultPicoContainer.addAdapterInternal(DefaultPicoContainer.java:350)
at
org
.picocontainer
.DefaultPicoContainer.addAdapter(DefaultPicoContainer.java:370)
at
org
.picocontainer
.DefaultPicoContainer.addAdapter(DefaultPicoContainer.java:363)
at portal.CredentialsInjector.inject(CredentialsInjector.java:
18)
at
portal
.CredentialsInjectionFilter.doFilter(CredentialsInjectionFilter.java:15)
at
org
.apache
.catalina
.core
.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:
215)
at
org
.apache
.catalina
.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at
org
.picocontainer
.web
.PicoServletContainerFilter.doFilter(PicoServletContainerFilter.java:74)
at
org
.apache
.catalina
.core
.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:
215)
at
org
.apache
.catalina
.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
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:
174)
at
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:
875)
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:613)
I suspect I don;t quite understand the relationship between
threadlocal, storage, containers.
What next?
Cheers
Nick Drew
nick.s.drew-***@public.gmane.org
---------------------------------------------------------------------
To unsubscribe from this list, please visit:
http://xircles.codehaus.org/manage_email
Pico 2.5
Pico web 2.0.1
Tomcat 5.5.27
I'm using Reslet 1.1 so can't borrow behaviour from webwork or struts.
We're using the WebComposer pattern
I've overridden the base Pico servlet listener to do some static
initialisation not possible in the composer, but I don;t think this
has any effect.
First issue:
008-10-08 12:58:21,974 [main] ERROR
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/
SunCentral-portal-web-1.0.0] - Exception sending context destroyed
event to listener instance
of class portal.PortalListener
java.lang.IllegalStateException: Cannot stop. Current container state
was: CONSTRUCTED
at
org
.picocontainer
.lifecycle.DefaultLifecycleState.stopping(DefaultLifecycleState.java:62)
at
org.picocontainer.DefaultPicoContainer.stop(DefaultPicoContainer.java:
658)
at org.picocontainer.web.PicoServletContainerListener.contextDestroyed
(PicoServletContainerListener.java:190)
at
org
.apache
.catalina.core.StandardContext.listenerStop(StandardContext.java:3805)
at
org.apache.catalina.core.StandardContext.stop(StandardContext.java:4364)
at
org.apache.catalina.core.StandardContext.start(StandardContext.java:
4246)
at
org
.apache
.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:760)
at
org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:740)
at
org.apache.catalina.core.StandardHost.addChild(StandardHost.java:544)
at
org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:831)
at
org.apache.catalina.startup.HostConfig.deployWARs(HostConfig.java:720)
at
org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:490)
at
org.apache.catalina.startup.HostConfig.start(HostConfig.java:1150)
at
org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:
311)
at
org
.apache
.catalina
.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:120)
at
org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1022)
at
org.apache.catalina.core.StandardHost.start(StandardHost.java:736)
at
org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1014)
at
org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
at
org.apache.catalina.core.StandardService.start(StandardService.java:448)
at
org.apache.catalina.core.StandardServer.start(StandardServer.java:700)
at org.apache.catalina.startup.Catalina.start(Catalina.java:
552)
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:585)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:
295)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:
433)
Second issue:
We want to put a instance at thread local with a POJO copy of the
user's credentials
e.g.
doFilter( request ){
getRequestContainer().addComponent( getUserCredentialsFrom(request) )
}
this works fine on the first thread, but not on the second:
2008-10-08 15:34:34,978 [http-8080-Processor24] ERROR
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/
SunCentral-portal-web-1.0.0].[RestletServlet] - Servlet.service() for
servlet
RestletServlet threw exception
org.picocontainer.PicoCompositionException: Duplicate Keys not
allowed. Duplicate for 'class portal.UserCredentials'
at
org
.picocontainer
.DefaultPicoContainer.addAdapterInternal(DefaultPicoContainer.java:350)
at
org
.picocontainer
.DefaultPicoContainer.addAdapter(DefaultPicoContainer.java:370)
at
org
.picocontainer
.DefaultPicoContainer.addAdapter(DefaultPicoContainer.java:363)
at portal.CredentialsInjector.inject(CredentialsInjector.java:
18)
at
portal
.CredentialsInjectionFilter.doFilter(CredentialsInjectionFilter.java:15)
at
org
.apache
.catalina
.core
.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:
215)
at
org
.apache
.catalina
.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at
org
.picocontainer
.web
.PicoServletContainerFilter.doFilter(PicoServletContainerFilter.java:74)
at
org
.apache
.catalina
.core
.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:
215)
at
org
.apache
.catalina
.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
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:
174)
at
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:
875)
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:613)
I suspect I don;t quite understand the relationship between
threadlocal, storage, containers.
What next?
Cheers
Nick Drew
nick.s.drew-***@public.gmane.org
---------------------------------------------------------------------
To unsubscribe from this list, please visit:
http://xircles.codehaus.org/manage_email