You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@camel.apache.org by "Willem Jiang (JIRA)" <ji...@apache.org> on 2010/07/14 03:31:52 UTC

[jira] Commented: (CAMEL-2942) CamelHttpTransportServlet.destroy causes java.lang.IllegalArgumentException: Cannot find the deployed servlet

    [ https://issues.apache.org/activemq/browse/CAMEL-2942?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=60639#action_60639 ] 

Willem Jiang commented on CAMEL-2942:
-------------------------------------

Yeah, we need to remove the the ServletMap after the application context is stopped.
Thanks for pointing that out, I will commit the fix shortly.


> CamelHttpTransportServlet.destroy causes java.lang.IllegalArgumentException: Cannot find the deployed servlet
> -------------------------------------------------------------------------------------------------------------
>
>                 Key: CAMEL-2942
>                 URL: https://issues.apache.org/activemq/browse/CAMEL-2942
>             Project: Apache Camel
>          Issue Type: Bug
>          Components: camel-servlet
>    Affects Versions: 2.3.0
>            Reporter: Brian Stiles
>            Assignee: Willem Jiang
>
> CamelHttpTransportServlet.destroy removes the servlet from a static map named CAMEL_SERVLET_MAP prior to stopping its associated Spring application context.  If that context defines a route using a servletEndpoint, the route is shutdown AFTER the servlet is removed from the map.  The shutdown code then looks for the servlet in the map by calling CamelHttpTransportServlet.getCamelServlet.  The servlet can't be found, and the ensuing exception is logged (copied below).
> It seems to me that CamelHttpTransportServlet.destroy should be defined like this:
>     
>     public void destroy() {
>         // Removal was here
>         if (applicationContext != null) {
>             applicationContext.stop();
>         }
>         // Moved the removal to here
>         CAMEL_SERVLET_MAP.remove(servletName);
>     }
> so that the servlet is removed from the map after the context is stopped.
> I know for sure that removal of the servlet from the map before the context is stopped causes this problem when my route is shutdown.  I DON'T know for sure that my overall configuration is correct, though I think it is valid.
> If the above change is not obviously correct, or if there are further questions, please let me know, and I'll work up a sample that demonstrates the problem to help answer any questions.
> --
> 2010-07-13 09:06:23,918 [Camel Thread 0 - ShutdownTask] WARN  org.apache.camel.impl.DefaultShutdownStrategy at org.apache.camel.impl.DefaultShutdownStrategy.shutdownNow(DefaultShutdownStrategy.java:219)
>          Error occurred while shutting down route: Consumer[/relay]. This exception will be ignored.
> java.lang.IllegalArgumentException: Cannot find the deployed servlet, please configure the ServletComponent or configure a org.apache.camel.component.servlet.CamelHttpTransportServlet servlet in web.xml 
> 	at org.apache.camel.component.servlet.ServletComponent.getCamelServlet(ServletComponent.java:55)
> 	at org.apache.camel.component.servlet.ServletComponent.disconnect(ServletComponent.java:116)
> 	at org.apache.camel.component.http.HttpEndpoint.disconnect(HttpEndpoint.java:152)
> 	at org.apache.camel.component.http.HttpConsumer.doStop(HttpConsumer.java:56)
> 	at org.apache.camel.impl.ServiceSupport.stop(ServiceSupport.java:86)
> 	at org.apache.camel.impl.ServiceSupport.stop(ServiceSupport.java:107)
> 	at org.apache.camel.util.ServiceHelper.stopService(ServiceHelper.java:100)
> 	at org.apache.camel.impl.DefaultShutdownStrategy.shutdownNow(DefaultShutdownStrategy.java:217)
> 	at org.apache.camel.impl.DefaultShutdownStrategy$ShutdownTask.run(DefaultShutdownStrategy.java:413)
> 	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
> 	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
> 	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
> 	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
> 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
> 	at java.lang.Thread.run(Thread.java:637)

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.