[ 
https://issues.apache.org/jira/browse/ARTEMIS-1236?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Dmitry updated ARTEMIS-1236:
----------------------------
    Description: 
When diverts are created dynamically they are lost after server restart.
{code}
package ru.roborox.messaging.broker.configuration;

import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertNull;

import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;

import org.apache.activemq.artemis.api.core.TransportConfiguration;
import org.apache.activemq.artemis.core.config.Configuration;
import org.apache.activemq.artemis.core.config.DivertConfiguration;
import org.apache.activemq.artemis.core.config.impl.ConfigurationImpl;
import 
org.apache.activemq.artemis.core.remoting.impl.netty.NettyAcceptorFactory;
import 
org.apache.activemq.artemis.core.remoting.impl.netty.NettyConnectorFactory;
import org.apache.activemq.artemis.core.remoting.impl.netty.TransportConstants;
import org.apache.activemq.artemis.core.settings.impl.AddressFullMessagePolicy;
import org.apache.activemq.artemis.core.settings.impl.AddressSettings;
import org.apache.activemq.artemis.jms.client.ActiveMQConnectionFactory;
import org.apache.activemq.artemis.jms.server.config.JMSConfiguration;
import org.apache.activemq.artemis.jms.server.config.impl.JMSConfigurationImpl;
import 
org.apache.activemq.artemis.jms.server.config.impl.JMSQueueConfigurationImpl;
import org.apache.activemq.artemis.jms.server.embedded.EmbeddedJMS;
import org.springframework.jms.core.JmsTemplate;
import org.testng.annotations.Test;

public class RestartTest {

        @Test
        public void divertsReloaded() throws Exception {
                File tempDirectory = Files.createTempDirectory("").toFile();
                tempDirectory.deleteOnExit();
                String path = tempDirectory.getAbsolutePath();
                EmbeddedJMS jms = createServer(path);
                
                DivertConfiguration divert = new DivertConfiguration();
                divert.setAddress("from");
                divert.setForwardingAddress("to");
                divert.setName("divert");
                divert.setExclusive(true);
                jms.getActiveMQServer().deployDivert(divert);
                
                JmsTemplate template = queueTemplate();
                
                template.convertAndSend("from", "test");
                String received = (String) template.receiveAndConvert("to");
                assertEquals(received, "test");
                assertNull(template.receiveAndConvert("from"));
                jms.stop();
                Thread.sleep(1000);
                
                jms = createServer(path);
                
                template.convertAndSend("from", "test");
                received = (String) template.receiveAndConvert("to");
                assertEquals(received, "test");
                received = (String) template.receiveAndConvert("from");
                assertNull(received);
        }

        private EmbeddedJMS createServer(String path) throws IOException, 
Exception {
                EmbeddedJMS jms = new EmbeddedJMS();
                Configuration configuration = new ConfigurationImpl();
                HashSet<TransportConfiguration> transports = new 
HashSet<TransportConfiguration>();
                Map<String, Object> transportConfig = new HashMap<String, 
Object>();
                transportConfig.put(TransportConstants.HOST_PROP_NAME, 
"127.0.0.1");
                transportConfig.put(TransportConstants.PORT_PROP_NAME, 61616);
                transports.add(new 
TransportConfiguration(NettyAcceptorFactory.class.getName(), transportConfig));
                configuration.addConnectorConfiguration("self", new 
TransportConfiguration(NettyConnectorFactory.class.getName(), transportConfig));
                configuration.setAcceptorConfigurations(transports);
                
                configuration.setPagingDirectory(path + "/data/paging");
                configuration.setBindingsDirectory(path + "/data/bindings");
                configuration.setJournalDirectory(path + "/data/journal");
                configuration.setLargeMessagesDirectory(path + 
"/data/large-messages");
                configuration.setPersistenceEnabled(true);
                configuration.setSecurityEnabled(false);
                AddressSettings defaultAddressSettings = new AddressSettings();
                defaultAddressSettings
                        
.setAddressFullMessagePolicy(AddressFullMessagePolicy.PAGE)
                        .setMaxDeliveryAttempts(-1)
                        .setRedeliveryDelay(0)
                        .setRedistributionDelay(0)
                        .setAutoCreateAddresses(false)
                        .setAutoCreateQueues(false)
                        .setAutoDeleteAddresses(false)
                        .setAutoDeleteQueues(false)
                        .setMaxSizeBytes(10L * 1024 * 1024)
                        .setPageSizeBytes(5L * 1024 * 1024);
                configuration.addAddressesSetting("#", new 
AddressSettings(defaultAddressSettings));
                
                JMSConfiguration jmsConfiguration = new JMSConfigurationImpl();
                JMSQueueConfigurationImpl queue1 = new 
JMSQueueConfigurationImpl();
                queue1.setName("from");
                queue1.setDurable(true);
                JMSQueueConfigurationImpl queue2 = new 
JMSQueueConfigurationImpl();
                queue2.setName("to");
                queue2.setDurable(true);
                jmsConfiguration.setQueueConfigurations(Arrays.asList(queue1, 
queue2));
                jms.setJmsConfiguration(jmsConfiguration);
                jms.setConfiguration(configuration);
                
                jms.start();
                return jms;
        }
        
        private ActiveMQConnectionFactory jmsConnectionFactory() {
                Map<String, Object> params = new HashMap<String, Object>();
                params.put(TransportConstants.HOST_PROP_NAME, "127.0.0.1");
                params.put(TransportConstants.PORT_PROP_NAME, 61616);
                TransportConfiguration transportConfiguration = new 
TransportConfiguration(
                                NettyConnectorFactory.class.getName(), params);
                ActiveMQConnectionFactory connectionFactory = new 
ActiveMQConnectionFactory(false, transportConfiguration);
                connectionFactory.setBlockOnAcknowledge(false);
                connectionFactory.setBlockOnDurableSend(false);
                connectionFactory.setBlockOnNonDurableSend(false);
                return connectionFactory;
        }
        
        private JmsTemplate queueTemplate() {
                JmsTemplate jmsTemplate = new JmsTemplate();
                jmsTemplate.setConnectionFactory(jmsConnectionFactory());
                jmsTemplate.setReceiveTimeout(1000);
                return jmsTemplate;
        }
}
{code}

  was:When diverts are created dynamically they are lost after server restart.


> Diverts are not reloaded on server restart
> ------------------------------------------
>
>                 Key: ARTEMIS-1236
>                 URL: https://issues.apache.org/jira/browse/ARTEMIS-1236
>             Project: ActiveMQ Artemis
>          Issue Type: Bug
>          Components: Broker
>    Affects Versions: 2.1.0
>            Reporter: Dmitry
>
> When diverts are created dynamically they are lost after server restart.
> {code}
> package ru.roborox.messaging.broker.configuration;
> import static org.testng.Assert.assertEquals;
> import static org.testng.Assert.assertNull;
> import java.io.File;
> import java.io.IOException;
> import java.nio.file.Files;
> import java.util.Arrays;
> import java.util.HashMap;
> import java.util.HashSet;
> import java.util.Map;
> import org.apache.activemq.artemis.api.core.TransportConfiguration;
> import org.apache.activemq.artemis.core.config.Configuration;
> import org.apache.activemq.artemis.core.config.DivertConfiguration;
> import org.apache.activemq.artemis.core.config.impl.ConfigurationImpl;
> import 
> org.apache.activemq.artemis.core.remoting.impl.netty.NettyAcceptorFactory;
> import 
> org.apache.activemq.artemis.core.remoting.impl.netty.NettyConnectorFactory;
> import 
> org.apache.activemq.artemis.core.remoting.impl.netty.TransportConstants;
> import 
> org.apache.activemq.artemis.core.settings.impl.AddressFullMessagePolicy;
> import org.apache.activemq.artemis.core.settings.impl.AddressSettings;
> import org.apache.activemq.artemis.jms.client.ActiveMQConnectionFactory;
> import org.apache.activemq.artemis.jms.server.config.JMSConfiguration;
> import 
> org.apache.activemq.artemis.jms.server.config.impl.JMSConfigurationImpl;
> import 
> org.apache.activemq.artemis.jms.server.config.impl.JMSQueueConfigurationImpl;
> import org.apache.activemq.artemis.jms.server.embedded.EmbeddedJMS;
> import org.springframework.jms.core.JmsTemplate;
> import org.testng.annotations.Test;
> public class RestartTest {
>       @Test
>       public void divertsReloaded() throws Exception {
>               File tempDirectory = Files.createTempDirectory("").toFile();
>               tempDirectory.deleteOnExit();
>               String path = tempDirectory.getAbsolutePath();
>               EmbeddedJMS jms = createServer(path);
>               
>               DivertConfiguration divert = new DivertConfiguration();
>               divert.setAddress("from");
>               divert.setForwardingAddress("to");
>               divert.setName("divert");
>               divert.setExclusive(true);
>               jms.getActiveMQServer().deployDivert(divert);
>               
>               JmsTemplate template = queueTemplate();
>               
>               template.convertAndSend("from", "test");
>               String received = (String) template.receiveAndConvert("to");
>               assertEquals(received, "test");
>               assertNull(template.receiveAndConvert("from"));
>               jms.stop();
>               Thread.sleep(1000);
>               
>               jms = createServer(path);
>               
>               template.convertAndSend("from", "test");
>               received = (String) template.receiveAndConvert("to");
>               assertEquals(received, "test");
>               received = (String) template.receiveAndConvert("from");
>               assertNull(received);
>       }
>       private EmbeddedJMS createServer(String path) throws IOException, 
> Exception {
>               EmbeddedJMS jms = new EmbeddedJMS();
>               Configuration configuration = new ConfigurationImpl();
>               HashSet<TransportConfiguration> transports = new 
> HashSet<TransportConfiguration>();
>               Map<String, Object> transportConfig = new HashMap<String, 
> Object>();
>               transportConfig.put(TransportConstants.HOST_PROP_NAME, 
> "127.0.0.1");
>               transportConfig.put(TransportConstants.PORT_PROP_NAME, 61616);
>               transports.add(new 
> TransportConfiguration(NettyAcceptorFactory.class.getName(), 
> transportConfig));
>               configuration.addConnectorConfiguration("self", new 
> TransportConfiguration(NettyConnectorFactory.class.getName(), 
> transportConfig));
>               configuration.setAcceptorConfigurations(transports);
>               
>               configuration.setPagingDirectory(path + "/data/paging");
>               configuration.setBindingsDirectory(path + "/data/bindings");
>               configuration.setJournalDirectory(path + "/data/journal");
>               configuration.setLargeMessagesDirectory(path + 
> "/data/large-messages");
>               configuration.setPersistenceEnabled(true);
>               configuration.setSecurityEnabled(false);
>               AddressSettings defaultAddressSettings = new AddressSettings();
>               defaultAddressSettings
>                       
> .setAddressFullMessagePolicy(AddressFullMessagePolicy.PAGE)
>                       .setMaxDeliveryAttempts(-1)
>                       .setRedeliveryDelay(0)
>                       .setRedistributionDelay(0)
>                       .setAutoCreateAddresses(false)
>                       .setAutoCreateQueues(false)
>                       .setAutoDeleteAddresses(false)
>                       .setAutoDeleteQueues(false)
>                       .setMaxSizeBytes(10L * 1024 * 1024)
>                       .setPageSizeBytes(5L * 1024 * 1024);
>               configuration.addAddressesSetting("#", new 
> AddressSettings(defaultAddressSettings));
>               
>               JMSConfiguration jmsConfiguration = new JMSConfigurationImpl();
>               JMSQueueConfigurationImpl queue1 = new 
> JMSQueueConfigurationImpl();
>               queue1.setName("from");
>               queue1.setDurable(true);
>               JMSQueueConfigurationImpl queue2 = new 
> JMSQueueConfigurationImpl();
>               queue2.setName("to");
>               queue2.setDurable(true);
>               jmsConfiguration.setQueueConfigurations(Arrays.asList(queue1, 
> queue2));
>               jms.setJmsConfiguration(jmsConfiguration);
>               jms.setConfiguration(configuration);
>               
>               jms.start();
>               return jms;
>       }
>       
>       private ActiveMQConnectionFactory jmsConnectionFactory() {
>               Map<String, Object> params = new HashMap<String, Object>();
>               params.put(TransportConstants.HOST_PROP_NAME, "127.0.0.1");
>               params.put(TransportConstants.PORT_PROP_NAME, 61616);
>               TransportConfiguration transportConfiguration = new 
> TransportConfiguration(
>                               NettyConnectorFactory.class.getName(), params);
>               ActiveMQConnectionFactory connectionFactory = new 
> ActiveMQConnectionFactory(false, transportConfiguration);
>               connectionFactory.setBlockOnAcknowledge(false);
>               connectionFactory.setBlockOnDurableSend(false);
>               connectionFactory.setBlockOnNonDurableSend(false);
>               return connectionFactory;
>       }
>       
>       private JmsTemplate queueTemplate() {
>               JmsTemplate jmsTemplate = new JmsTemplate();
>               jmsTemplate.setConnectionFactory(jmsConnectionFactory());
>               jmsTemplate.setReceiveTimeout(1000);
>               return jmsTemplate;
>       }
> }
> {code}



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

Reply via email to