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.elezo...@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.elezo...@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.