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 Mon, 19 Jan 2009 09:47:46 GMT
Hi

There is no shutdown in this example (yet). I am working on this by
adding a stop client on the trunk codebase.

ActiveMQ can run Camel embedded. Have you considered running your
application as a AMQ Server.

Camel is usually not run standalone but inside some other server such
as AMQ, SMX or a J2EE Server.



On Mon, Jan 19, 2009 at 10:26 AM, selezovikj <semir.elezovic@gmail.com> wrote:
>
> I am looking at the camel-example-spring-jms example, but I can not see the
> code where the shutting down of Camel + Spring + AMQ is done.
> Can you please tell me how to perform shutdown from within the application
> code ?
>
>
>
> Claus Ibsen-2 wrote:
>>
>> 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/
>>
>>
>
> --
> View this message in context: http://www.nabble.com/ApplicationContext-close-tp21495001s22882p21539401.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