camel-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Claus Ibsen <claus.ib...@gmail.com>
Subject Re: ApplicationContext close
Date Fri, 16 Jan 2009 16:47:54 GMT
It should be Spring that shutsdon the ActiveMQ broker and not Camel.
AMQ is defined in spring. So if you can get Spring to shutdown nicely
then it should also shutdown all its beans.

We run AMQ embedded in many unit tests in Camel and when we stop the
unit test we stop the camel context, and spring application context
and it nicely shuts down AMQ as well.

Since Camel is a spring bean itself you should be able to just get
Spring shutting down then it should shutdown all its bean and thus
also Camel and AMQ.

What's in the log when you stop?

Have you tried looking at the camel-example-jms that is in the Camel
distribution. Its started using Main and can start/shutdown
Camel+Spring+AMQ.


On Fri, Jan 16, 2009 at 10:49 AM, selezovikj <semir.elezovic@gmail.com> wrote:
>
> I have a server which loads the application context with the parameter -ac
> camel-server.xml:
>
> <broker:broker useJmx="false" persistent="false" brokerName="localhost">
>                <broker:transportConnectors>
>                        <broker:transportConnector name="tcp" uri="tcp://localhost:61616"/>
>                </broker:transportConnectors>
>        </broker:broker>
>
>        <!-- Connection factory for ActiveMQ endpoints -->
>        <bean id="connectionFactoryActiveMQ"
>                class="org.apache.activemq.ActiveMQConnectionFactory">
>                <property name="brokerURL" value="vm://localhost"/>
>        </bean>
>
> <!---------->
>
> <bean id="inOutQueue" class="org.apache.activemq.command.ActiveMQQueue">
>                <constructor-arg value="inOutQueue"/>
>        </bean>
>
> <bean id="checkinServices"
>                class="org.springframework.jms.remoting.JmsInvokerServiceExporter">
>                <property name="serviceInterface"
>                        value="MyManager"/>
>                <property name="service">
>                        <bean class="MyManagerImpl"/>
>                </property>
>        </bean>
>
>
> <bean
>                class="org.springframework.jms.listener.DefaultMessageListenerContainer">
>                <property name="connectionFactory" ref="connectionFactoryActiveMQ"/>
>                <property name="destination" ref="inOutQueue"/>
>                <property name="maxConcurrentConsumers" value="5"/>
>                <property name="concurrentConsumers" value="5"/>
>                <property name="messageListener" ref="checkinServices"/>
>        </bean>
>
> Then I have a camel-client.xml file which I start up from my Java code.
> AbstractApplicationContext context =  new
> ClassPathXmlApplicationContext("camel-client.xml");
>
> myManager = (MyManager) context.getBean("checkinServices");
> myManager.shutdown();
>
>
> ---------------------
>
> So when the client sends a message to a queue defined in camel-client.xml on
> an activemq broker which was fired up by camel-server.xml, the server side
> processes the message with the services defined to listen on the respective
> queue.
>
> In the shutdown method I do the following:
>
> public void shutdown() throws Exception
>        Main main = Main.getInstance();
>        if(main != null) {
>            if(main.getApplicationContext() != null){
>
>                main.getApplicationContext().close();
>                // main.getApplicationContext().registerShutdownHook();
>            }
>        }
>    }
>
>
> I expect that in the shutdown method I am going to get the instance of Main
> that started the camel-server.xml applicatoin context and when I close it
> the active mq broker will be closed as well.
>
> Hope you can follow this through.
> Semir
>
>
>
>
>
>
> Claus Ibsen-2 wrote:
>>
>> Hi
>>
>> I would assume the AMQ is also shutting down the the
>> applicationContext is closed, so Spring is shutting down and thus
>> shuts down all the bean that is handling the lifecycle for.
>>
>> If you run the camel-jms example in Camel then the AMQ broker is also
>> stopping when you stop the example.
>>
>> We have lately patched the Main with a JVM shutdown hook so when you
>> press CLTR + C to stop it then it will also call doStop() so its
>> gracefully shutting down it all.
>>
>> Can you show the applicationContext and what you do to stop the Main?
>> And which version of Camel and AMQ are you using?
>>
>>
>> On Fri, Jan 16, 2009 at 10:00 AM, selezovikj <semir.elezovic@gmail.com>
>> wrote:
>>>
>>> I am using org.apache.camel.spring.Main -ac file.xml to start up Camel.
>>> In the xml file I have configuration for starting an ActiveMq broker on
>>> host
>>> 61616, defined queues, and also beans responsible for handling messages
>>> which are sent on the request/response queues.
>>>
>>> Now I want a way to gracefully shutdown the camel service.
>>> I see that in the doStop() method of the Main class the
>>> AbstractApplicationContext is closed.
>>> When this is closed, the activeMq broker which we fired up is still
>>> running.
>>>
>>> Can someone please explain me what precisely is going on when the
>>> applicationContext is closed ?
>>> Also how to gracefully stop the instance of Main that fired up the
>>> activeMq
>>> broker and that loads the xml configuration file ?
>>>
>>> Any help will be greatly appreciated
>>>
>>>
>>>
>>>
>>> --
>>> View this message in context:
>>> http://www.nabble.com/ApplicationContext-close-tp21495001s22882p21495001.html
>>> Sent from the Camel - Users mailing list archive at Nabble.com.
>>>
>>>
>>
>>
>>
>> --
>> -------
>> Claus Ibsen
>> Apache Camel Committer
>>
>> Open Source Integration: http://fusesource.com
>> Blog: http://davsclaus.blogspot.com/
>>
>>
>
> --
> View this message in context: http://www.nabble.com/ApplicationContext-close-tp21495001s22882p21495886.html
> Sent from the Camel - Users mailing list archive at Nabble.com.
>
>



-- 
-------
Claus Ibsen
Apache Camel Committer

Open Source Integration: http://fusesource.com
Blog: http://davsclaus.blogspot.com/

Mime
View raw message