Rebecca created CAMEL-18089:
-------------------------------

             Summary: IllegalThreadStateException when trying to resume 
suspended Camel context
                 Key: CAMEL-18089
                 URL: https://issues.apache.org/jira/browse/CAMEL-18089
             Project: Camel
          Issue Type: Bug
    Affects Versions: 3.16.0, 3.7.1
            Reporter: Rebecca


Resuming a suspended camel context results in an IllegalThreadStateException. 

When all routes and the context are started, calling camelContext.suspend(); or 
clicking 'Suspend' in hawtio will suspend the context and the routes, showing 
them as 'Suspended' in hawtio.

Then, calling camelContext.resume(); or clicking 'Start' on the Context in 
hawtio, will throw an IllegalThreadStateException and afterwards the context is 
in state 'stopped'. There seems to be no way to restart the context other than 
restarting the whole application. 

Tried this with our actual application:
 * Java 14.0.2
 * Camel 3.7.1
 * Spring Boot 2.4.2
 * Jolokia 1.6.2
 * hawtio 2.13.3

And also with a little test application with different dependency versions and 
only a simple test route, the result was the same.
 * Java 17.0.1 (also tried with 11.0.6 and 14.0.2, same result)
 * Camel 3.16.0
 * Spring Boot 2.6.6
 * Jolokia 1.7.1
 * hawtio 2.14.5

Stacktrace:

 
{code:java}
o.a.camel.support.service.BaseService    : Error while resuming service: 
SpringCamelContext(CamelTestContext) with spring id 
applicationjava.lang.IllegalThreadStateException: null
    at java.base/java.lang.Thread.start(Thread.java:793) ~[na:na]
    at 
org.apache.camel.spring.boot.CamelMainRunController.start(CamelMainRunController.java:40)
 ~[camel-spring-boot-3.16.0.jar:3.16.0]
    at 
org.apache.camel.spring.boot.CamelSpringBootApplicationListener$1.onCamelContextStarted(CamelSpringBootApplicationListener.java:148)
 ~[camel-spring-boot-3.16.0.jar:3.16.0]
    at 
org.apache.camel.impl.engine.InternalRouteStartupManager.safelyStartRouteServices(InternalRouteStartupManager.java:196)
 ~[camel-base-engine-3.16.0.jar:3.16.0]
    at 
org.apache.camel.impl.engine.InternalRouteStartupManager.doStartOrResumeRoutes(InternalRouteStartupManager.java:147)
 ~[camel-base-engine-3.16.0.jar:3.16.0]
    at 
org.apache.camel.impl.engine.AbstractCamelContext.doResume(AbstractCamelContext.java:2585)
 ~[camel-base-engine-3.16.0.jar:3.16.0]
    at 
org.apache.camel.support.service.BaseService.resume(BaseService.java:214) 
~[camel-api-3.16.0.jar:3.16.0]
    at 
org.apache.camel.management.mbean.ManagedCamelContext.start(ManagedCamelContext.java:292)
 ~[camel-management-3.16.0.jar:3.16.0]
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native 
Method) ~[na:na]
    at 
java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
 ~[na:na]
    at 
java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
 ~[na:na]
    at java.base/java.lang.reflect.Method.invoke(Method.java:568) ~[na:na]
    at sun.reflect.misc.Trampoline.invoke(MethodUtil.java:72) ~[na:na]
    at jdk.internal.reflect.GeneratedMethodAccessor43.invoke(Unknown Source) 
~[na:na]
    at 
java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
 ~[na:na]
    at java.base/java.lang.reflect.Method.invoke(Method.java:568) ~[na:na]
    at java.base/sun.reflect.misc.MethodUtil.invoke(MethodUtil.java:262) 
~[na:na]
    at 
java.management/javax.management.modelmbean.RequiredModelMBean$4.run(RequiredModelMBean.java:1178)
 ~[na:na]
    at 
java.base/java.security.AccessController.doPrivileged(AccessController.java:399)
 ~[na:na]
    at 
java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86)
 ~[na:na]
    at 
java.management/javax.management.modelmbean.RequiredModelMBean.invokeMethod(RequiredModelMBean.java:1172)
 ~[na:na]
    at 
java.management/javax.management.modelmbean.RequiredModelMBean.invoke(RequiredModelMBean.java:1016)
 ~[na:na]
    at 
org.apache.camel.support.management.MixinRequiredModelMBean.invoke(MixinRequiredModelMBean.java:72)
 ~[camel-support-3.16.0.jar:3.16.0]
    at 
java.management/com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:814)
 ~[na:na]
    at 
java.management/com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:802)
 ~[na:na]
    at org.jolokia.handler.ExecHandler.doHandleRequest(ExecHandler.java:98) 
~[jolokia-core-1.7.1.jar:na]
    at org.jolokia.handler.ExecHandler.doHandleRequest(ExecHandler.java:40) 
~[jolokia-core-1.7.1.jar:na]
    at 
org.jolokia.handler.JsonRequestHandler.handleRequest(JsonRequestHandler.java:89)
 ~[jolokia-core-1.7.1.jar:na]
    at 
org.jolokia.backend.MBeanServerExecutorLocal.handleRequest(MBeanServerExecutorLocal.java:109)
 ~[jolokia-core-1.7.1.jar:na]
    at 
org.jolokia.backend.MBeanServerHandler.dispatchRequest(MBeanServerHandler.java:161)
 ~[jolokia-core-1.7.1.jar:na]
    at 
org.jolokia.backend.LocalRequestDispatcher.dispatchRequest(LocalRequestDispatcher.java:99)
 ~[jolokia-core-1.7.1.jar:na]
    at 
org.jolokia.backend.BackendManager.callRequestDispatcher(BackendManager.java:429)
 ~[jolokia-core-1.7.1.jar:na]
    at 
org.jolokia.backend.BackendManager.handleRequest(BackendManager.java:158) 
~[jolokia-core-1.7.1.jar:na]
    at 
org.jolokia.http.HttpRequestHandler.executeRequest(HttpRequestHandler.java:197) 
~[jolokia-core-1.7.1.jar:na]
    at 
org.jolokia.http.HttpRequestHandler.handlePostRequest(HttpRequestHandler.java:131)
 ~[jolokia-core-1.7.1.jar:na]
    at org.jolokia.http.AgentServlet$3.handleRequest(AgentServlet.java:493) 
~[jolokia-core-1.7.1.jar:na]
    at org.jolokia.http.AgentServlet.handleSecurely(AgentServlet.java:383) 
~[jolokia-core-1.7.1.jar:na]
    at org.jolokia.http.AgentServlet.handle(AgentServlet.java:354) 
~[jolokia-core-1.7.1.jar:na]
    at org.jolokia.http.AgentServlet.doPost(AgentServlet.java:317) 
~[jolokia-core-1.7.1.jar:na]
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:681) 
~[tomcat-embed-core-9.0.60.jar:4.0.FR]
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:764) 
~[tomcat-embed-core-9.0.60.jar:4.0.FR]
    at 
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227)
 ~[tomcat-embed-core-9.0.60.jar:9.0.60]
    at 
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
 ~[tomcat-embed-core-9.0.60.jar:9.0.60]
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) 
~[tomcat-embed-websocket-9.0.60.jar:9.0.60]
    at 
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
 ~[tomcat-embed-core-9.0.60.jar:9.0.60]
    at 
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
 ~[tomcat-embed-core-9.0.60.jar:9.0.60]
    at 
org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)
 ~[spring-web-5.3.18.jar:5.3.18]
    at 
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)
 ~[spring-web-5.3.18.jar:5.3.18]
    at 
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
 ~[tomcat-embed-core-9.0.60.jar:9.0.60]
    at 
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
 ~[tomcat-embed-core-9.0.60.jar:9.0.60]
    at 
org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)
 ~[spring-web-5.3.18.jar:5.3.18]
    at 
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)
 ~[spring-web-5.3.18.jar:5.3.18]
    at 
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
 ~[tomcat-embed-core-9.0.60.jar:9.0.60]
    at 
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
 ~[tomcat-embed-core-9.0.60.jar:9.0.60]
    at 
org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:96)
 ~[spring-boot-actuator-2.6.6.jar:2.6.6]
    at 
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)
 ~[spring-web-5.3.18.jar:5.3.18]
    at 
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
 ~[tomcat-embed-core-9.0.60.jar:9.0.60]
    at 
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
 ~[tomcat-embed-core-9.0.60.jar:9.0.60]
    at 
org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)
 ~[spring-web-5.3.18.jar:5.3.18]
    at 
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)
 ~[spring-web-5.3.18.jar:5.3.18]
    at 
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
 ~[tomcat-embed-core-9.0.60.jar:9.0.60]
    at 
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
 ~[tomcat-embed-core-9.0.60.jar:9.0.60]
    at 
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:197)
 ~[tomcat-embed-core-9.0.60.jar:9.0.60]
    at 
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)
 ~[tomcat-embed-core-9.0.60.jar:9.0.60]
    at 
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541)
 ~[tomcat-embed-core-9.0.60.jar:9.0.60]
    at 
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135) 
~[tomcat-embed-core-9.0.60.jar:9.0.60]
    at 
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) 
~[tomcat-embed-core-9.0.60.jar:9.0.60]
    at 
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)
 ~[tomcat-embed-core-9.0.60.jar:9.0.60]
    at 
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:360) 
~[tomcat-embed-core-9.0.60.jar:9.0.60]
    at 
org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:399) 
~[tomcat-embed-core-9.0.60.jar:9.0.60]
    at 
org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
 ~[tomcat-embed-core-9.0.60.jar:9.0.60]
    at 
org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:889)
 ~[tomcat-embed-core-9.0.60.jar:9.0.60]
    at 
org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1743)
 ~[tomcat-embed-core-9.0.60.jar:9.0.60]
    at 
org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) 
~[tomcat-embed-core-9.0.60.jar:9.0.60]
    at 
org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)
 ~[tomcat-embed-core-9.0.60.jar:9.0.60]
    at 
org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
 ~[tomcat-embed-core-9.0.60.jar:9.0.60]
    at 
org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
 ~[tomcat-embed-core-9.0.60.jar:9.0.60]
    at java.base/java.lang.Thread.run(Thread.java:833) ~[na:na] {code}
Dependencies:

 
{code:java}
<properties>
    <java.version>17</java.version>
    <jolokia-core.version>1.7.1</jolokia-core.version>
    <camel-version>3.16.0</camel-version>
</properties>
<dependencies>
    <dependency>
        <groupId>org.apache.camel.springboot</groupId>
        <artifactId>camel-spring-boot-starter</artifactId>
        <version>3.16.0</version>
    </dependency>    
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>    
    <dependency>
        <groupId>org.apache.camel.springboot</groupId>
        <artifactId>camel-file-starter</artifactId>
        <version>${camel-version}</version>
    </dependency>
    <dependency>
        <groupId>org.apache.camel</groupId>
        <artifactId>camel-management</artifactId>
        <version>${camel-version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
    <dependency>
        <groupId>org.jolokia</groupId>
        <artifactId>jolokia-core</artifactId>
        <version>${jolokia-core.version}</version>
    </dependency>
</dependencies> {code}
The test route:

 
{code:java}
public class MyRouteBuilder extends RouteBuilder {    
    @Override
    public void configure() throws Exception {
        from("file:src/data?noop=true")
                .routeId("ROUTE1")
                .log(LoggingLevel.INFO, "ROUTE1 entered")
                .to("file://target/test");
    }
} {code}



--
This message was sent by Atlassian Jira
(v8.20.7#820007)

Reply via email to