You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@activemq.apache.org by Geoffrey Arnold <ge...@geoffreyarnold.com> on 2010/04/02 23:16:44 UTC

Programmatically stopping and restarting network connector

Hi All!

During upgrades we would like to be able to stop and restart the network connector between embedded brokers running in separate VMs.

In the embedded broker of the producer VM we have a network connector pointing to the transport connector of an embedded broker in the consumer VM.  I have attempted to use JMX to stop and restart the network connector in the producer VM, however the connection does not appear to be reestablished.  

What is the correct way to stop and restart this connection?

Thanks,
Geoff.

Re: Programmatically stopping and restarting network connector

Posted by Geoffrey Arnold <ge...@geoffreyarnold.com>.
No problem, thanks Dejan!

On May 10, 2010, at 8:17 AM, Dejan Bosanac wrote:

> Hi Geoff,
> 
> I meant everything OK in the Jira. I still didn't managed to look at the
> test. Sorry for confusion.
> 
> Cheers
> --
> Dejan Bosanac - http://twitter.com/dejanb
> 
> Open Source Integration - http://fusesource.com/
> ActiveMQ in Action - http://www.manning.com/snyder/
> Blog - http://www.nighttale.net
> 
> 
> On Mon, May 10, 2010 at 2:07 PM, Geoffrey Arnold <
> geoffrey@geoffreyarnold.com> wrote:
> 
>> Hi Dejan,
>> 
>> If you run the test, the second assertion (right before the finally block)
>> fails.  Could you clarify what you mean by "everything is ok"?
>> 
>> Thanks,
>> Geoff.
>> 
>> On May 10, 2010, at 3:08 AM, Dejan Bosanac wrote:
>> 
>>> Hi,
>>> 
>>> I see your test case attached to the issues. Seems like everything is OK.
>>> 
>>> Cheers
>>> --
>>> Dejan Bosanac - http://twitter.com/dejanb
>>> 
>>> Open Source Integration - http://fusesource.com/
>>> ActiveMQ in Action - http://www.manning.com/snyder/
>>> Blog - http://www.nighttale.net
>>> 
>>> 
>>> On Sat, May 8, 2010 at 4:05 PM, Geoffrey Arnold <
>> geoffrey@geoffreyarnold.com
>>>> wrote:
>>> 
>>>> Looks like the attachment didn't come through... inlining test case
>> here.
>>>> Any thoughts?
>>>> 
>>>> 
>>>> 
>> ///////////////////////////////////////////////////////////////////////////////////
>>>> package org.activemq;
>>>> 
>>>> import org.apache.activemq.ActiveMQConnectionFactory;
>>>> import org.apache.activemq.broker.BrokerService;
>>>> import org.apache.activemq.network.NetworkConnector;
>>>> import org.junit.Test;
>>>> import org.springframework.jms.core.JmsOperations;
>>>> import org.springframework.jms.core.JmsTemplate;
>>>> import org.springframework.jms.core.MessageCreator;
>>>> 
>>>> import javax.jms.ConnectionFactory;
>>>> import javax.jms.JMSException;
>>>> import javax.jms.Message;
>>>> import javax.jms.Session;
>>>> import javax.management.MBeanServer;
>>>> import java.lang.management.ManagementFactory;
>>>> import java.net.URI;
>>>> 
>>>> import static org.junit.Assert.assertNotNull;
>>>> 
>>>> public class NetworkOfBrokersTest {
>>>> 
>>>>  private static final MBeanServer PLATFORM_MBEAN_SERVER =
>>>> ManagementFactory.getPlatformMBeanServer();
>>>>  private static final String QUEUE_NAME = "testQueue";
>>>> 
>>>>  @Test
>>>>  public void testNetworkOfBrokersHandlesRestartOfNetworkConnector()
>>>> throws Exception {
>>>>      // create consumer broker
>>>>      BrokerService consumerBrokerService =
>>>> createBrokerService("consumerBrokerService");
>>>>      consumerBrokerService.addConnector("tcp://localhost:61616");
>>>>      consumerBrokerService.start();
>>>> 
>>>>      JmsOperations consumerJmsOperations =
>>>> 
>>>> 
>> createJmsOperations(createConnectionFactory(consumerBrokerService.getVmConnectorURI()));
>>>> 
>>>>      // create producer broker in "network-of-brokers" configuration
>>>>      BrokerService producerBrokerService =
>>>> createBrokerService("producerBrokerService");
>>>>      NetworkConnector networkConnector =
>>>> 
>> producerBrokerService.addNetworkConnector("static:(tcp://localhost:61616)");
>>>>      producerBrokerService.start();
>>>> 
>>>>      JmsOperations producerJmsOperations =
>>>> 
>>>> 
>> createJmsOperations(createConnectionFactory(producerBrokerService.getVmConnectorURI()));
>>>> 
>>>>      try {
>>>>          // assert "network-of-brokers" configuration is working
>>>> 
>>>> assertMessageSentByProducerIsReceivedByConsumer(consumerJmsOperations,
>>>> producerJmsOperations);
>>>> 
>>>>          // restart network connector via JMX
>>>>          PLATFORM_MBEAN_SERVER.invoke(networkConnector.getObjectName(),
>>>> "stop", new Object[0], new String[0]);
>>>>          PLATFORM_MBEAN_SERVER.invoke(networkConnector.getObjectName(),
>>>> "start", new Object[0], new String[0]);
>>>> 
>>>>          // assert "network-of-brokers" configuration is working
>>>> 
>>>> assertMessageSentByProducerIsReceivedByConsumer(consumerJmsOperations,
>>>> producerJmsOperations);
>>>>      }
>>>>      finally {
>>>>          consumerBrokerService.stop();
>>>>          producerBrokerService.stop();
>>>>      }
>>>>  }
>>>> 
>>>>  private static BrokerService createBrokerService(String brokerName) {
>>>>      BrokerService brokerService = new BrokerService();
>>>>      brokerService.getManagementContext().setCreateConnector(false);
>>>>      brokerService.setBrokerName(brokerName);
>>>>      brokerService.setPersistent(false);
>>>>      brokerService.setTempDataStore(null);
>>>>      brokerService.setUseJmx(true);
>>>>      brokerService.setUseShutdownHook(false);
>>>> 
>>>>      return brokerService;
>>>>  }
>>>> 
>>>>  private static ConnectionFactory createConnectionFactory(URI
>> brokerUrl)
>>>> {
>>>>      ActiveMQConnectionFactory connectionFactory = new
>>>> ActiveMQConnectionFactory();
>>>>      connectionFactory.getPrefetchPolicy().setAll(1);
>>>>      connectionFactory.setBrokerURL(brokerUrl.toString());
>>>>      connectionFactory.setDispatchAsync(false);
>>>>      connectionFactory.setUseAsyncSend(false);
>>>> 
>>>>      return connectionFactory;
>>>>  }
>>>> 
>>>>  private static JmsOperations createJmsOperations(ConnectionFactory
>>>> connectionFactory) {
>>>>      JmsTemplate jmsTemplate = new JmsTemplate();
>>>>      jmsTemplate.setConnectionFactory(connectionFactory);
>>>>      jmsTemplate.setDefaultDestinationName(QUEUE_NAME);
>>>>      jmsTemplate.setDeliveryPersistent(false);
>>>>      jmsTemplate.setReceiveTimeout(1000);
>>>> 
>>>>      return jmsTemplate;
>>>>  }
>>>> 
>>>>  private static void assertMessageSentByProducerIsReceivedByConsumer(
>>>>          JmsOperations consumerJmsOperations, JmsOperations
>>>> producerJmsOperations) {
>>>> 
>>>>      producerJmsOperations.send(
>>>>              new MessageCreator() {
>>>>                  @Override
>>>>                  public Message createMessage(Session session) throws
>>>> JMSException {
>>>>                      return session.createTextMessage();
>>>>                  }
>>>>              });
>>>>      assertNotNull(consumerJmsOperations.receive());
>>>>   }
>>>> }
>>>> 
>>>> On May 5, 2010, at 12:42 PM, Geoffrey Arnold wrote:
>>>> 
>>>>> Issued opened with failing test:
>>>>> 
>>>>>     https://issues.apache.org/activemq/browse/AMQ-2722
>>>>> 
>>>>> Attaching JUnit test here too:
>>>>> 
>>>>> <NetworkOfBrokersTest.java>
>>>>> 
>>>>> On Apr 6, 2010, at 5:10 AM, Dejan Bosanac wrote:
>>>>> 
>>>>>> Hi,
>>>>>> 
>>>>>> can you raise a Jira for this (ideally with a test case that
>>>> demonstrates
>>>>>> the problem).
>>>>>> 
>>>>>> Cheers
>>>>>> --
>>>>>> Dejan Bosanac - http://twitter.com/dejanb
>>>>>> 
>>>>>> Open Source Integration - http://fusesource.com/
>>>>>> ActiveMQ in Action - http://www.manning.com/snyder/
>>>>>> Blog - http://www.nighttale.net
>>>>>> 
>>>>>> 
>>>>>> On Fri, Apr 2, 2010 at 11:16 PM, Geoffrey Arnold <
>>>>>> geoffrey@geoffreyarnold.com> wrote:
>>>>>> 
>>>>>>> Hi All!
>>>>>>> 
>>>>>>> During upgrades we would like to be able to stop and restart the
>>>> network
>>>>>>> connector between embedded brokers running in separate VMs.
>>>>>>> 
>>>>>>> In the embedded broker of the producer VM we have a network connector
>>>>>>> pointing to the transport connector of an embedded broker in the
>>>> consumer
>>>>>>> VM.  I have attempted to use JMX to stop and restart the network
>>>> connector
>>>>>>> in the producer VM, however the connection does not appear to be
>>>>>>> reestablished.
>>>>>>> 
>>>>>>> What is the correct way to stop and restart this connection?
>>>>>>> 
>>>>>>> Thanks,
>>>>>>> Geoff.
>>>>> 
>>>> 
>>>> 
>> 
>> 


Re: Programmatically stopping and restarting network connector

Posted by Dejan Bosanac <de...@nighttale.net>.
Hi Geoff,

I meant everything OK in the Jira. I still didn't managed to look at the
test. Sorry for confusion.

Cheers
--
Dejan Bosanac - http://twitter.com/dejanb

Open Source Integration - http://fusesource.com/
ActiveMQ in Action - http://www.manning.com/snyder/
Blog - http://www.nighttale.net


On Mon, May 10, 2010 at 2:07 PM, Geoffrey Arnold <
geoffrey@geoffreyarnold.com> wrote:

> Hi Dejan,
>
> If you run the test, the second assertion (right before the finally block)
> fails.  Could you clarify what you mean by "everything is ok"?
>
> Thanks,
> Geoff.
>
> On May 10, 2010, at 3:08 AM, Dejan Bosanac wrote:
>
> > Hi,
> >
> > I see your test case attached to the issues. Seems like everything is OK.
> >
> > Cheers
> > --
> > Dejan Bosanac - http://twitter.com/dejanb
> >
> > Open Source Integration - http://fusesource.com/
> > ActiveMQ in Action - http://www.manning.com/snyder/
> > Blog - http://www.nighttale.net
> >
> >
> > On Sat, May 8, 2010 at 4:05 PM, Geoffrey Arnold <
> geoffrey@geoffreyarnold.com
> >> wrote:
> >
> >> Looks like the attachment didn't come through... inlining test case
> here.
> >> Any thoughts?
> >>
> >>
> >>
> ///////////////////////////////////////////////////////////////////////////////////
> >> package org.activemq;
> >>
> >> import org.apache.activemq.ActiveMQConnectionFactory;
> >> import org.apache.activemq.broker.BrokerService;
> >> import org.apache.activemq.network.NetworkConnector;
> >> import org.junit.Test;
> >> import org.springframework.jms.core.JmsOperations;
> >> import org.springframework.jms.core.JmsTemplate;
> >> import org.springframework.jms.core.MessageCreator;
> >>
> >> import javax.jms.ConnectionFactory;
> >> import javax.jms.JMSException;
> >> import javax.jms.Message;
> >> import javax.jms.Session;
> >> import javax.management.MBeanServer;
> >> import java.lang.management.ManagementFactory;
> >> import java.net.URI;
> >>
> >> import static org.junit.Assert.assertNotNull;
> >>
> >> public class NetworkOfBrokersTest {
> >>
> >>   private static final MBeanServer PLATFORM_MBEAN_SERVER =
> >> ManagementFactory.getPlatformMBeanServer();
> >>   private static final String QUEUE_NAME = "testQueue";
> >>
> >>   @Test
> >>   public void testNetworkOfBrokersHandlesRestartOfNetworkConnector()
> >> throws Exception {
> >>       // create consumer broker
> >>       BrokerService consumerBrokerService =
> >> createBrokerService("consumerBrokerService");
> >>       consumerBrokerService.addConnector("tcp://localhost:61616");
> >>       consumerBrokerService.start();
> >>
> >>       JmsOperations consumerJmsOperations =
> >>
> >>
> createJmsOperations(createConnectionFactory(consumerBrokerService.getVmConnectorURI()));
> >>
> >>       // create producer broker in "network-of-brokers" configuration
> >>       BrokerService producerBrokerService =
> >> createBrokerService("producerBrokerService");
> >>       NetworkConnector networkConnector =
> >>
> producerBrokerService.addNetworkConnector("static:(tcp://localhost:61616)");
> >>       producerBrokerService.start();
> >>
> >>       JmsOperations producerJmsOperations =
> >>
> >>
> createJmsOperations(createConnectionFactory(producerBrokerService.getVmConnectorURI()));
> >>
> >>       try {
> >>           // assert "network-of-brokers" configuration is working
> >>
> >> assertMessageSentByProducerIsReceivedByConsumer(consumerJmsOperations,
> >> producerJmsOperations);
> >>
> >>           // restart network connector via JMX
> >>           PLATFORM_MBEAN_SERVER.invoke(networkConnector.getObjectName(),
> >> "stop", new Object[0], new String[0]);
> >>           PLATFORM_MBEAN_SERVER.invoke(networkConnector.getObjectName(),
> >> "start", new Object[0], new String[0]);
> >>
> >>           // assert "network-of-brokers" configuration is working
> >>
> >> assertMessageSentByProducerIsReceivedByConsumer(consumerJmsOperations,
> >> producerJmsOperations);
> >>       }
> >>       finally {
> >>           consumerBrokerService.stop();
> >>           producerBrokerService.stop();
> >>       }
> >>   }
> >>
> >>   private static BrokerService createBrokerService(String brokerName) {
> >>       BrokerService brokerService = new BrokerService();
> >>       brokerService.getManagementContext().setCreateConnector(false);
> >>       brokerService.setBrokerName(brokerName);
> >>       brokerService.setPersistent(false);
> >>       brokerService.setTempDataStore(null);
> >>       brokerService.setUseJmx(true);
> >>       brokerService.setUseShutdownHook(false);
> >>
> >>       return brokerService;
> >>   }
> >>
> >>   private static ConnectionFactory createConnectionFactory(URI
> brokerUrl)
> >> {
> >>       ActiveMQConnectionFactory connectionFactory = new
> >> ActiveMQConnectionFactory();
> >>       connectionFactory.getPrefetchPolicy().setAll(1);
> >>       connectionFactory.setBrokerURL(brokerUrl.toString());
> >>       connectionFactory.setDispatchAsync(false);
> >>       connectionFactory.setUseAsyncSend(false);
> >>
> >>       return connectionFactory;
> >>   }
> >>
> >>   private static JmsOperations createJmsOperations(ConnectionFactory
> >> connectionFactory) {
> >>       JmsTemplate jmsTemplate = new JmsTemplate();
> >>       jmsTemplate.setConnectionFactory(connectionFactory);
> >>       jmsTemplate.setDefaultDestinationName(QUEUE_NAME);
> >>       jmsTemplate.setDeliveryPersistent(false);
> >>       jmsTemplate.setReceiveTimeout(1000);
> >>
> >>       return jmsTemplate;
> >>   }
> >>
> >>   private static void assertMessageSentByProducerIsReceivedByConsumer(
> >>           JmsOperations consumerJmsOperations, JmsOperations
> >> producerJmsOperations) {
> >>
> >>       producerJmsOperations.send(
> >>               new MessageCreator() {
> >>                   @Override
> >>                   public Message createMessage(Session session) throws
> >> JMSException {
> >>                       return session.createTextMessage();
> >>                   }
> >>               });
> >>       assertNotNull(consumerJmsOperations.receive());
> >>    }
> >> }
> >>
> >> On May 5, 2010, at 12:42 PM, Geoffrey Arnold wrote:
> >>
> >>> Issued opened with failing test:
> >>>
> >>>      https://issues.apache.org/activemq/browse/AMQ-2722
> >>>
> >>> Attaching JUnit test here too:
> >>>
> >>> <NetworkOfBrokersTest.java>
> >>>
> >>> On Apr 6, 2010, at 5:10 AM, Dejan Bosanac wrote:
> >>>
> >>>> Hi,
> >>>>
> >>>> can you raise a Jira for this (ideally with a test case that
> >> demonstrates
> >>>> the problem).
> >>>>
> >>>> Cheers
> >>>> --
> >>>> Dejan Bosanac - http://twitter.com/dejanb
> >>>>
> >>>> Open Source Integration - http://fusesource.com/
> >>>> ActiveMQ in Action - http://www.manning.com/snyder/
> >>>> Blog - http://www.nighttale.net
> >>>>
> >>>>
> >>>> On Fri, Apr 2, 2010 at 11:16 PM, Geoffrey Arnold <
> >>>> geoffrey@geoffreyarnold.com> wrote:
> >>>>
> >>>>> Hi All!
> >>>>>
> >>>>> During upgrades we would like to be able to stop and restart the
> >> network
> >>>>> connector between embedded brokers running in separate VMs.
> >>>>>
> >>>>> In the embedded broker of the producer VM we have a network connector
> >>>>> pointing to the transport connector of an embedded broker in the
> >> consumer
> >>>>> VM.  I have attempted to use JMX to stop and restart the network
> >> connector
> >>>>> in the producer VM, however the connection does not appear to be
> >>>>> reestablished.
> >>>>>
> >>>>> What is the correct way to stop and restart this connection?
> >>>>>
> >>>>> Thanks,
> >>>>> Geoff.
> >>>
> >>
> >>
>
>

Re: Programmatically stopping and restarting network connector

Posted by Geoffrey Arnold <ge...@geoffreyarnold.com>.
Hi Dejan,

If you run the test, the second assertion (right before the finally block) fails.  Could you clarify what you mean by "everything is ok"?

Thanks,
Geoff.

On May 10, 2010, at 3:08 AM, Dejan Bosanac wrote:

> Hi,
> 
> I see your test case attached to the issues. Seems like everything is OK.
> 
> Cheers
> --
> Dejan Bosanac - http://twitter.com/dejanb
> 
> Open Source Integration - http://fusesource.com/
> ActiveMQ in Action - http://www.manning.com/snyder/
> Blog - http://www.nighttale.net
> 
> 
> On Sat, May 8, 2010 at 4:05 PM, Geoffrey Arnold <geoffrey@geoffreyarnold.com
>> wrote:
> 
>> Looks like the attachment didn't come through... inlining test case here.
>> Any thoughts?
>> 
>> 
>> ///////////////////////////////////////////////////////////////////////////////////
>> package org.activemq;
>> 
>> import org.apache.activemq.ActiveMQConnectionFactory;
>> import org.apache.activemq.broker.BrokerService;
>> import org.apache.activemq.network.NetworkConnector;
>> import org.junit.Test;
>> import org.springframework.jms.core.JmsOperations;
>> import org.springframework.jms.core.JmsTemplate;
>> import org.springframework.jms.core.MessageCreator;
>> 
>> import javax.jms.ConnectionFactory;
>> import javax.jms.JMSException;
>> import javax.jms.Message;
>> import javax.jms.Session;
>> import javax.management.MBeanServer;
>> import java.lang.management.ManagementFactory;
>> import java.net.URI;
>> 
>> import static org.junit.Assert.assertNotNull;
>> 
>> public class NetworkOfBrokersTest {
>> 
>>   private static final MBeanServer PLATFORM_MBEAN_SERVER =
>> ManagementFactory.getPlatformMBeanServer();
>>   private static final String QUEUE_NAME = "testQueue";
>> 
>>   @Test
>>   public void testNetworkOfBrokersHandlesRestartOfNetworkConnector()
>> throws Exception {
>>       // create consumer broker
>>       BrokerService consumerBrokerService =
>> createBrokerService("consumerBrokerService");
>>       consumerBrokerService.addConnector("tcp://localhost:61616");
>>       consumerBrokerService.start();
>> 
>>       JmsOperations consumerJmsOperations =
>> 
>> createJmsOperations(createConnectionFactory(consumerBrokerService.getVmConnectorURI()));
>> 
>>       // create producer broker in "network-of-brokers" configuration
>>       BrokerService producerBrokerService =
>> createBrokerService("producerBrokerService");
>>       NetworkConnector networkConnector =
>> producerBrokerService.addNetworkConnector("static:(tcp://localhost:61616)");
>>       producerBrokerService.start();
>> 
>>       JmsOperations producerJmsOperations =
>> 
>> createJmsOperations(createConnectionFactory(producerBrokerService.getVmConnectorURI()));
>> 
>>       try {
>>           // assert "network-of-brokers" configuration is working
>> 
>> assertMessageSentByProducerIsReceivedByConsumer(consumerJmsOperations,
>> producerJmsOperations);
>> 
>>           // restart network connector via JMX
>>           PLATFORM_MBEAN_SERVER.invoke(networkConnector.getObjectName(),
>> "stop", new Object[0], new String[0]);
>>           PLATFORM_MBEAN_SERVER.invoke(networkConnector.getObjectName(),
>> "start", new Object[0], new String[0]);
>> 
>>           // assert "network-of-brokers" configuration is working
>> 
>> assertMessageSentByProducerIsReceivedByConsumer(consumerJmsOperations,
>> producerJmsOperations);
>>       }
>>       finally {
>>           consumerBrokerService.stop();
>>           producerBrokerService.stop();
>>       }
>>   }
>> 
>>   private static BrokerService createBrokerService(String brokerName) {
>>       BrokerService brokerService = new BrokerService();
>>       brokerService.getManagementContext().setCreateConnector(false);
>>       brokerService.setBrokerName(brokerName);
>>       brokerService.setPersistent(false);
>>       brokerService.setTempDataStore(null);
>>       brokerService.setUseJmx(true);
>>       brokerService.setUseShutdownHook(false);
>> 
>>       return brokerService;
>>   }
>> 
>>   private static ConnectionFactory createConnectionFactory(URI brokerUrl)
>> {
>>       ActiveMQConnectionFactory connectionFactory = new
>> ActiveMQConnectionFactory();
>>       connectionFactory.getPrefetchPolicy().setAll(1);
>>       connectionFactory.setBrokerURL(brokerUrl.toString());
>>       connectionFactory.setDispatchAsync(false);
>>       connectionFactory.setUseAsyncSend(false);
>> 
>>       return connectionFactory;
>>   }
>> 
>>   private static JmsOperations createJmsOperations(ConnectionFactory
>> connectionFactory) {
>>       JmsTemplate jmsTemplate = new JmsTemplate();
>>       jmsTemplate.setConnectionFactory(connectionFactory);
>>       jmsTemplate.setDefaultDestinationName(QUEUE_NAME);
>>       jmsTemplate.setDeliveryPersistent(false);
>>       jmsTemplate.setReceiveTimeout(1000);
>> 
>>       return jmsTemplate;
>>   }
>> 
>>   private static void assertMessageSentByProducerIsReceivedByConsumer(
>>           JmsOperations consumerJmsOperations, JmsOperations
>> producerJmsOperations) {
>> 
>>       producerJmsOperations.send(
>>               new MessageCreator() {
>>                   @Override
>>                   public Message createMessage(Session session) throws
>> JMSException {
>>                       return session.createTextMessage();
>>                   }
>>               });
>>       assertNotNull(consumerJmsOperations.receive());
>>    }
>> }
>> 
>> On May 5, 2010, at 12:42 PM, Geoffrey Arnold wrote:
>> 
>>> Issued opened with failing test:
>>> 
>>>      https://issues.apache.org/activemq/browse/AMQ-2722
>>> 
>>> Attaching JUnit test here too:
>>> 
>>> <NetworkOfBrokersTest.java>
>>> 
>>> On Apr 6, 2010, at 5:10 AM, Dejan Bosanac wrote:
>>> 
>>>> Hi,
>>>> 
>>>> can you raise a Jira for this (ideally with a test case that
>> demonstrates
>>>> the problem).
>>>> 
>>>> Cheers
>>>> --
>>>> Dejan Bosanac - http://twitter.com/dejanb
>>>> 
>>>> Open Source Integration - http://fusesource.com/
>>>> ActiveMQ in Action - http://www.manning.com/snyder/
>>>> Blog - http://www.nighttale.net
>>>> 
>>>> 
>>>> On Fri, Apr 2, 2010 at 11:16 PM, Geoffrey Arnold <
>>>> geoffrey@geoffreyarnold.com> wrote:
>>>> 
>>>>> Hi All!
>>>>> 
>>>>> During upgrades we would like to be able to stop and restart the
>> network
>>>>> connector between embedded brokers running in separate VMs.
>>>>> 
>>>>> In the embedded broker of the producer VM we have a network connector
>>>>> pointing to the transport connector of an embedded broker in the
>> consumer
>>>>> VM.  I have attempted to use JMX to stop and restart the network
>> connector
>>>>> in the producer VM, however the connection does not appear to be
>>>>> reestablished.
>>>>> 
>>>>> What is the correct way to stop and restart this connection?
>>>>> 
>>>>> Thanks,
>>>>> Geoff.
>>> 
>> 
>> 


Re: Programmatically stopping and restarting network connector

Posted by Dejan Bosanac <de...@nighttale.net>.
Hi,

I see your test case attached to the issues. Seems like everything is OK.

Cheers
--
Dejan Bosanac - http://twitter.com/dejanb

Open Source Integration - http://fusesource.com/
ActiveMQ in Action - http://www.manning.com/snyder/
Blog - http://www.nighttale.net


On Sat, May 8, 2010 at 4:05 PM, Geoffrey Arnold <geoffrey@geoffreyarnold.com
> wrote:

> Looks like the attachment didn't come through... inlining test case here.
>  Any thoughts?
>
>
> ///////////////////////////////////////////////////////////////////////////////////
> package org.activemq;
>
> import org.apache.activemq.ActiveMQConnectionFactory;
> import org.apache.activemq.broker.BrokerService;
> import org.apache.activemq.network.NetworkConnector;
> import org.junit.Test;
> import org.springframework.jms.core.JmsOperations;
> import org.springframework.jms.core.JmsTemplate;
> import org.springframework.jms.core.MessageCreator;
>
> import javax.jms.ConnectionFactory;
> import javax.jms.JMSException;
> import javax.jms.Message;
> import javax.jms.Session;
> import javax.management.MBeanServer;
> import java.lang.management.ManagementFactory;
> import java.net.URI;
>
> import static org.junit.Assert.assertNotNull;
>
> public class NetworkOfBrokersTest {
>
>    private static final MBeanServer PLATFORM_MBEAN_SERVER =
> ManagementFactory.getPlatformMBeanServer();
>    private static final String QUEUE_NAME = "testQueue";
>
>    @Test
>    public void testNetworkOfBrokersHandlesRestartOfNetworkConnector()
> throws Exception {
>        // create consumer broker
>        BrokerService consumerBrokerService =
> createBrokerService("consumerBrokerService");
>        consumerBrokerService.addConnector("tcp://localhost:61616");
>        consumerBrokerService.start();
>
>        JmsOperations consumerJmsOperations =
>
>  createJmsOperations(createConnectionFactory(consumerBrokerService.getVmConnectorURI()));
>
>        // create producer broker in "network-of-brokers" configuration
>        BrokerService producerBrokerService =
> createBrokerService("producerBrokerService");
>        NetworkConnector networkConnector =
> producerBrokerService.addNetworkConnector("static:(tcp://localhost:61616)");
>        producerBrokerService.start();
>
>        JmsOperations producerJmsOperations =
>
>  createJmsOperations(createConnectionFactory(producerBrokerService.getVmConnectorURI()));
>
>        try {
>            // assert "network-of-brokers" configuration is working
>
>  assertMessageSentByProducerIsReceivedByConsumer(consumerJmsOperations,
> producerJmsOperations);
>
>            // restart network connector via JMX
>            PLATFORM_MBEAN_SERVER.invoke(networkConnector.getObjectName(),
> "stop", new Object[0], new String[0]);
>            PLATFORM_MBEAN_SERVER.invoke(networkConnector.getObjectName(),
> "start", new Object[0], new String[0]);
>
>            // assert "network-of-brokers" configuration is working
>
>  assertMessageSentByProducerIsReceivedByConsumer(consumerJmsOperations,
> producerJmsOperations);
>        }
>        finally {
>            consumerBrokerService.stop();
>            producerBrokerService.stop();
>        }
>    }
>
>    private static BrokerService createBrokerService(String brokerName) {
>        BrokerService brokerService = new BrokerService();
>        brokerService.getManagementContext().setCreateConnector(false);
>        brokerService.setBrokerName(brokerName);
>        brokerService.setPersistent(false);
>        brokerService.setTempDataStore(null);
>        brokerService.setUseJmx(true);
>        brokerService.setUseShutdownHook(false);
>
>        return brokerService;
>    }
>
>    private static ConnectionFactory createConnectionFactory(URI brokerUrl)
> {
>        ActiveMQConnectionFactory connectionFactory = new
> ActiveMQConnectionFactory();
>        connectionFactory.getPrefetchPolicy().setAll(1);
>        connectionFactory.setBrokerURL(brokerUrl.toString());
>        connectionFactory.setDispatchAsync(false);
>        connectionFactory.setUseAsyncSend(false);
>
>        return connectionFactory;
>    }
>
>    private static JmsOperations createJmsOperations(ConnectionFactory
> connectionFactory) {
>        JmsTemplate jmsTemplate = new JmsTemplate();
>        jmsTemplate.setConnectionFactory(connectionFactory);
>        jmsTemplate.setDefaultDestinationName(QUEUE_NAME);
>        jmsTemplate.setDeliveryPersistent(false);
>        jmsTemplate.setReceiveTimeout(1000);
>
>        return jmsTemplate;
>    }
>
>    private static void assertMessageSentByProducerIsReceivedByConsumer(
>            JmsOperations consumerJmsOperations, JmsOperations
> producerJmsOperations) {
>
>        producerJmsOperations.send(
>                new MessageCreator() {
>                    @Override
>                    public Message createMessage(Session session) throws
> JMSException {
>                        return session.createTextMessage();
>                    }
>                });
>        assertNotNull(consumerJmsOperations.receive());
>     }
> }
>
> On May 5, 2010, at 12:42 PM, Geoffrey Arnold wrote:
>
> > Issued opened with failing test:
> >
> >       https://issues.apache.org/activemq/browse/AMQ-2722
> >
> > Attaching JUnit test here too:
> >
> > <NetworkOfBrokersTest.java>
> >
> > On Apr 6, 2010, at 5:10 AM, Dejan Bosanac wrote:
> >
> >> Hi,
> >>
> >> can you raise a Jira for this (ideally with a test case that
> demonstrates
> >> the problem).
> >>
> >> Cheers
> >> --
> >> Dejan Bosanac - http://twitter.com/dejanb
> >>
> >> Open Source Integration - http://fusesource.com/
> >> ActiveMQ in Action - http://www.manning.com/snyder/
> >> Blog - http://www.nighttale.net
> >>
> >>
> >> On Fri, Apr 2, 2010 at 11:16 PM, Geoffrey Arnold <
> >> geoffrey@geoffreyarnold.com> wrote:
> >>
> >>> Hi All!
> >>>
> >>> During upgrades we would like to be able to stop and restart the
> network
> >>> connector between embedded brokers running in separate VMs.
> >>>
> >>> In the embedded broker of the producer VM we have a network connector
> >>> pointing to the transport connector of an embedded broker in the
> consumer
> >>> VM.  I have attempted to use JMX to stop and restart the network
> connector
> >>> in the producer VM, however the connection does not appear to be
> >>> reestablished.
> >>>
> >>> What is the correct way to stop and restart this connection?
> >>>
> >>> Thanks,
> >>> Geoff.
> >
>
>

Re: Programmatically stopping and restarting network connector

Posted by Geoffrey Arnold <ge...@geoffreyarnold.com>.
Looks like the attachment didn't come through... inlining test case here.  Any thoughts?

///////////////////////////////////////////////////////////////////////////////////
package org.activemq;

import org.apache.activemq.ActiveMQConnectionFactory;
import org.apache.activemq.broker.BrokerService;
import org.apache.activemq.network.NetworkConnector;
import org.junit.Test;
import org.springframework.jms.core.JmsOperations;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.jms.core.MessageCreator;

import javax.jms.ConnectionFactory;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.Session;
import javax.management.MBeanServer;
import java.lang.management.ManagementFactory;
import java.net.URI;

import static org.junit.Assert.assertNotNull;

public class NetworkOfBrokersTest {

    private static final MBeanServer PLATFORM_MBEAN_SERVER = ManagementFactory.getPlatformMBeanServer();
    private static final String QUEUE_NAME = "testQueue";

    @Test
    public void testNetworkOfBrokersHandlesRestartOfNetworkConnector() throws Exception {
        // create consumer broker
        BrokerService consumerBrokerService = createBrokerService("consumerBrokerService");
        consumerBrokerService.addConnector("tcp://localhost:61616");
        consumerBrokerService.start();

        JmsOperations consumerJmsOperations =
                createJmsOperations(createConnectionFactory(consumerBrokerService.getVmConnectorURI()));

        // create producer broker in "network-of-brokers" configuration
        BrokerService producerBrokerService = createBrokerService("producerBrokerService");
        NetworkConnector networkConnector = producerBrokerService.addNetworkConnector("static:(tcp://localhost:61616)");
        producerBrokerService.start();

        JmsOperations producerJmsOperations =
                createJmsOperations(createConnectionFactory(producerBrokerService.getVmConnectorURI()));

        try {
            // assert "network-of-brokers" configuration is working
            assertMessageSentByProducerIsReceivedByConsumer(consumerJmsOperations, producerJmsOperations);

            // restart network connector via JMX
            PLATFORM_MBEAN_SERVER.invoke(networkConnector.getObjectName(), "stop", new Object[0], new String[0]);
            PLATFORM_MBEAN_SERVER.invoke(networkConnector.getObjectName(), "start", new Object[0], new String[0]);

            // assert "network-of-brokers" configuration is working
            assertMessageSentByProducerIsReceivedByConsumer(consumerJmsOperations, producerJmsOperations);
        }
        finally {
            consumerBrokerService.stop();
            producerBrokerService.stop();
        }
    }

    private static BrokerService createBrokerService(String brokerName) {
        BrokerService brokerService = new BrokerService();
        brokerService.getManagementContext().setCreateConnector(false);
        brokerService.setBrokerName(brokerName);
        brokerService.setPersistent(false);
        brokerService.setTempDataStore(null);
        brokerService.setUseJmx(true);
        brokerService.setUseShutdownHook(false);

        return brokerService;
    }

    private static ConnectionFactory createConnectionFactory(URI brokerUrl) {
        ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory();
        connectionFactory.getPrefetchPolicy().setAll(1);
        connectionFactory.setBrokerURL(brokerUrl.toString());
        connectionFactory.setDispatchAsync(false);
        connectionFactory.setUseAsyncSend(false);

        return connectionFactory;
    }

    private static JmsOperations createJmsOperations(ConnectionFactory connectionFactory) {
        JmsTemplate jmsTemplate = new JmsTemplate();
        jmsTemplate.setConnectionFactory(connectionFactory);
        jmsTemplate.setDefaultDestinationName(QUEUE_NAME);
        jmsTemplate.setDeliveryPersistent(false);
        jmsTemplate.setReceiveTimeout(1000);

        return jmsTemplate;
    }

    private static void assertMessageSentByProducerIsReceivedByConsumer(
            JmsOperations consumerJmsOperations, JmsOperations producerJmsOperations) {

        producerJmsOperations.send(
                new MessageCreator() {
                    @Override
                    public Message createMessage(Session session) throws JMSException {
                        return session.createTextMessage();
                    }
                });
        assertNotNull(consumerJmsOperations.receive());
    }
}

On May 5, 2010, at 12:42 PM, Geoffrey Arnold wrote:

> Issued opened with failing test:
> 
> 	https://issues.apache.org/activemq/browse/AMQ-2722
> 
> Attaching JUnit test here too:
> 
> <NetworkOfBrokersTest.java>
> 
> On Apr 6, 2010, at 5:10 AM, Dejan Bosanac wrote:
> 
>> Hi,
>> 
>> can you raise a Jira for this (ideally with a test case that demonstrates
>> the problem).
>> 
>> Cheers
>> --
>> Dejan Bosanac - http://twitter.com/dejanb
>> 
>> Open Source Integration - http://fusesource.com/
>> ActiveMQ in Action - http://www.manning.com/snyder/
>> Blog - http://www.nighttale.net
>> 
>> 
>> On Fri, Apr 2, 2010 at 11:16 PM, Geoffrey Arnold <
>> geoffrey@geoffreyarnold.com> wrote:
>> 
>>> Hi All!
>>> 
>>> During upgrades we would like to be able to stop and restart the network
>>> connector between embedded brokers running in separate VMs.
>>> 
>>> In the embedded broker of the producer VM we have a network connector
>>> pointing to the transport connector of an embedded broker in the consumer
>>> VM.  I have attempted to use JMX to stop and restart the network connector
>>> in the producer VM, however the connection does not appear to be
>>> reestablished.
>>> 
>>> What is the correct way to stop and restart this connection?
>>> 
>>> Thanks,
>>> Geoff.
> 


Re: Programmatically stopping and restarting network connector

Posted by Geoffrey Arnold <ge...@geoffreyarnold.com>.
Issued opened with failing test:

	https://issues.apache.org/activemq/browse/AMQ-2722

Attaching JUnit test here too:


Re: Programmatically stopping and restarting network connector

Posted by Dejan Bosanac <de...@nighttale.net>.
Hi,

can you raise a Jira for this (ideally with a test case that demonstrates
the problem).

Cheers
--
Dejan Bosanac - http://twitter.com/dejanb

Open Source Integration - http://fusesource.com/
ActiveMQ in Action - http://www.manning.com/snyder/
Blog - http://www.nighttale.net


On Fri, Apr 2, 2010 at 11:16 PM, Geoffrey Arnold <
geoffrey@geoffreyarnold.com> wrote:

> Hi All!
>
> During upgrades we would like to be able to stop and restart the network
> connector between embedded brokers running in separate VMs.
>
> In the embedded broker of the producer VM we have a network connector
> pointing to the transport connector of an embedded broker in the consumer
> VM.  I have attempted to use JMX to stop and restart the network connector
> in the producer VM, however the connection does not appear to be
> reestablished.
>
> What is the correct way to stop and restart this connection?
>
> Thanks,
> Geoff.