RejectedExecutionException after restarting camel context
---------------------------------------------------------

                 Key: CAMEL-2292
                 URL: https://issues.apache.org/activemq/browse/CAMEL-2292
             Project: Apache Camel
          Issue Type: Bug
    Affects Versions: 2.1.0
            Reporter: Hadrian Zbarcea


User reported over the #camel channel the following exception trying to send a 
message after the context was stopped and restarted

 "Failed to create Producer for endpoint:". Thats the exception I'm getting
Reason: java.util.concurrent.RejectedExecutionException

{code}
Exception in thread "core" org.apache.camel.FailedToCreateProducerException: 
Failed to create Producer for endpoint: 
Endpoint[activemq://queue:request.lavaOrderProducer.powerTraderServer]. Reason: 
java.util.concurrent.RejectedExecutionException
        at 
org.apache.camel.component.jms.JmsProducer.testAndSetRequestor(JmsProducer.java:116)
        at 
org.apache.camel.component.jms.JmsProducer.processInOut(JmsProducer.java:175)
        at 
org.apache.camel.component.jms.JmsProducer.process(JmsProducer.java:147)
        at 
org.apache.camel.impl.ProducerCache$1.doInProducer(ProducerCache.java:179)
        at 
org.apache.camel.impl.ProducerCache$1.doInProducer(ProducerCache.java:161)
        at 
org.apache.camel.impl.ProducerCache.doInProducer(ProducerCache.java:146)
        at 
org.apache.camel.impl.ProducerCache.sendExchange(ProducerCache.java:160)
        at org.apache.camel.impl.ProducerCache.send(ProducerCache.java:98)
        at 
org.apache.camel.impl.DefaultProducerTemplate.send(DefaultProducerTemplate.java:97)
        at 
com.wjb.producer.lavaData.dispatcher.ServerRequestDispatcher.requestSymbolSectorArray(ServerRequestDispatcher.java:122)
        at 
com.wjb.producer.core.LavaDataManager.initialize(LavaDataManager.java:64)
        at com.wjb.producer.core.ProducerCore.run(ProducerCore.java:98)
        at java.lang.Thread.run(Thread.java:619)
Caused by: java.util.concurrent.RejectedExecutionException
        at 
java.util.concurrent.ThreadPoolExecutor$AbortPolicy.rejectedExecution(ThreadPoolExecutor.java:1760)
        at 
java.util.concurrent.ThreadPoolExecutor.reject(ThreadPoolExecutor.java:767)
        at 
java.util.concurrent.ScheduledThreadPoolExecutor.delayedExecute(ScheduledThreadPoolExecutor.java:216)
        at 
java.util.concurrent.ScheduledThreadPoolExecutor.schedule(ScheduledThreadPoolExecutor.java:366)
        at 
org.apache.camel.util.DefaultTimeoutMap.schedulePoll(DefaultTimeoutMap.java:156)
        at 
org.apache.camel.util.DefaultTimeoutMap.<init>(DefaultTimeoutMap.java:52)
        at 
org.apache.camel.component.jms.requestor.Requestor.<init>(Requestor.java:68)
        at 
org.apache.camel.component.jms.JmsProducer.testAndSetRequestor(JmsProducer.java:107)
{code}

The following unit tests seems to reproduce the problem:
{code}
ublic final class StartStopTest 
{
        private final GenericApplicationContext applicationContext = new 
GenericApplicationContext();
        private final int testCount = 3;
        
        @Test
        public void test() throws Exception 
        {               
                //Initialize
                final File propertiesFile = new 
File(Constants.RESOURCE_DIRECTORY_NAME, Constants.PROPERTIES_FILE_NAME);
                PropertyConfigurator.configure(propertiesFile.getPath());
                
                final File applicationContextFile = new 
File(Constants.RESOURCE_DIRECTORY_NAME, Constants.CONTEXT_FILE_NAME);   
                final Resource applicationContextResource = new 
FileSystemResource(applicationContextFile);
                                
                final AbstractBeanDefinitionReader beanDefinitionReader = new 
XmlBeanDefinitionReader(this.applicationContext);
                
                
beanDefinitionReader.loadBeanDefinitions(applicationContextResource);
                this.applicationContext.refresh();      
                
                //Begin Testing
                for (int i = 0; i < this.testCount; i++)
                {                       
                        this.startSendStop();
                    Thread.sleep(3000);
                }               
        }
        
        private void startSendStop() throws Exception
        {
                final SpringCamelContext springCamelContext = 
(SpringCamelContext)this.applicationContext.getBean(Constants.CAMEL_CONTEXT_NAME);
                final ProducerTemplate producerTemplate;
                final Endpoint serverRequestQueue;
                
                springCamelContext.start();
                
                producerTemplate = springCamelContext.createProducerTemplate();
                serverRequestQueue = 
springCamelContext.getEndpoint("serverRequestQueue");
                
                final Exchange exchange = 
producerTemplate.send(serverRequestQueue, new Processor()
                {
                        public void process(final Exchange exchange) throws 
Exception 
                        {                               
                                exchange.setPattern(ExchangePattern.InOut);     
                                
exchange.getIn().setHeader(ServerJmsServices.REQUEST, 
ServerJmsServices.GET_SYMBOL_INFO);
                                exchange.getIn().setBody("");
                        }                       
                });
                final String responseString = 
(String)exchange.getOut().getBody();
                
                Assert.assertTrue(responseString.length() > 0);
                
                springCamelContext.stop();
        }
}


<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"; 
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
       xmlns:camel="http://camel.apache.org/schema/spring";
       xsi:schemaLocation="http://www.springframework.org/schema/beans 
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
                           http://camel.apache.org/schema/spring 
http://camel.apache.org/schema/spring/camel-spring.xsd";>
        
    <!-- ActiveMQ component for Camel to use -->   
    <bean id="activemq" 
class="org.apache.activemq.camel.component.ActiveMQComponent" > 
        <property name="connectionFactory"> 
            <bean class="org.apache.activemq.ActiveMQConnectionFactory"> 
                <property name="brokerURL" 
value="tcp://192.168.5.10:61616?daemon=true" />
            </bean> 
        </property> 
    </bean> 
           
    <!-- Camel Context -->
    <camelContext id="camelContext" 
xmlns="http://camel.apache.org/schema/spring"; autoStartup="false">          
        <camel:endpoint id="serverRequestQueue" 
uri="activemq:queue:request.lavaOrderProducer.powerTraderServer" />     
    </camelContext>
</beans>
{code}


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

Reply via email to