Discussion:
Fun with tomcat and pico
Nick Drew
2008-10-08 04:53:22 UTC
Permalink
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
Mauro Talevi
2008-10-08 18:59:18 UTC
Permalink
Post by Nick Drew
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.
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)
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) )
}
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?
It would be of great help if you could open a new jira issue and attach
a sample project that reproduces the problem along the lines of pico web
examples (ideally in mvn so it does not contain any external jars).

Please keep it to the bare minimum required to reproduce the problem.

We'd be happy to add a restlet example to our codebase.

Cheers


---------------------------------------------------------------------
To unsubscribe from this list, please visit:

http://xircles.codehaus.org/manage_email
Paul Hammant
2008-10-08 19:46:12 UTC
Permalink
Hey Mauro, sorry for not saying but I'm helping Nick off the list :-)

Regards,

- Paul
Post by Mauro Talevi
Post by Nick Drew
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.
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
62) at
org
658)
at org.picocontainer.web.PicoServletContainerListener.contextDestroyed
(PicoServletContainerListener.java:190) at
org
.apache
3805) at
4364)
at
4246)
at
org
.apache
760) at
740)
at
org.apache.catalina.core.StandardHost.addChild(StandardHost.java:544)
at
org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:831)
at
720)
at
490)
at
org.apache.catalina.startup.HostConfig.start(HostConfig.java:1150)
at
org
311)
at
org
.apache
.catalina
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
443)
at
448)
at
700)
552)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun
.reflect
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)
433)
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) )
}
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
350) at
org
.picocontainer
370) at
org
.picocontainer
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
188) at org.picocontainer.web.PicoServletContainerFilter.doFilter
(PicoServletContainerFilter.java:74) at
org
.apache
.catalina
.core
.ApplicationFilterChain
.internalDoFilter(ApplicationFilterChain.java:215) at
org
.apache
.catalina
188) at
org
.apache
.catalina
213) at
org
.apache
.catalina
172) at
org
.apache
127) at
org
.apache
117) at
org
.apache
108) at
org
174)
at
org
875)
at org.apache.coyote.http11.Http11BaseProtocol
665) at
org
.apache
528) at
org
.apache
.tomcat
.util
.net
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?
It would be of great help if you could open a new jira issue and
attach a sample project that reproduces the problem along the lines
of pico web examples (ideally in mvn so it does not contain any
external jars).
Please keep it to the bare minimum required to reproduce the problem.
We'd be happy to add a restlet example to our codebase.
Cheers
---------------------------------------------------------------------
http://xircles.codehaus.org/manage_email
---------------------------------------------------------------------
To unsubscribe from this list, please visit:

http://xircles.codehaus.org/manage_email
Mauro Talevi
2008-10-08 20:28:41 UTC
Permalink
Post by Paul Hammant
Hey Mauro, sorry for not saying but I'm helping Nick off the list :-)
No probs, but it would still be useful to have a restlet example.

Cheers


---------------------------------------------------------------------
To unsubscribe from this list, please visit:

http://xircles.codehaus.org/manage_email
Nick Drew
2008-10-08 21:39:39 UTC
Permalink
I've sent Paul a bunch of stuff for now.

Regarding the Restlet example - it's actually very similar to the
servlet example, in that restlet is running as a servlet, so we have
the same filters, etc.

If there's any call to use restlet's builtin server, then we'd need to
write a different Finder class - that's all.

Cheers
Post by Mauro Talevi
Post by Paul Hammant
Hey Mauro, sorry for not saying but I'm helping Nick off the
list :-)
No probs, but it would still be useful to have a restlet example.
Cheers
---------------------------------------------------------------------
http://xircles.codehaus.org/manage_email
---------------------------------------------------------------------
To unsubscribe from this list, please visit:

http://xircles.codehaus.org/manage_email

Continue reading on narkive:
Loading...