/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.activemq.artemis.tests.integration.jms.client; import javax.jms.Connection; import javax.jms.ConnectionFactory; import javax.jms.Destination; import javax.jms.JMSException; import javax.jms.MessageConsumer; import javax.jms.MessageProducer; import javax.jms.Session; import javax.naming.NamingException; import java.util.ArrayList; import java.util.List; import org.apache.activemq.artemis.api.core.TransportConfiguration; import org.apache.activemq.artemis.jms.server.config.impl.ConnectionFactoryConfigurationImpl; import org.apache.activemq.artemis.tests.util.JMSTestBase; import org.junit.Test; public class StoreConfigTest extends JMSTestBase { @Override protected boolean usePersistence() { return true; } @Test public void testCreateCF() throws Exception { server.getConfiguration().getConnectorConfigurations().put("tst", new TransportConfiguration(INVM_CONNECTOR_FACTORY)); server.getConfiguration().getConnectorConfigurations().put("np", new TransportConfiguration(INVM_CONNECTOR_FACTORY)); List<String> transportConfigurations = new ArrayList<>(); transportConfigurations.add("tst"); ConnectionFactoryConfigurationImpl factCFG = (ConnectionFactoryConfigurationImpl) new ConnectionFactoryConfigurationImpl().setName("tst").setConnectorNames(transportConfigurations); jmsServer.createConnectionFactory(true, factCFG, "/someCF", "/someCF2"); ConnectionFactoryConfigurationImpl nonPersisted = (ConnectionFactoryConfigurationImpl) new ConnectionFactoryConfigurationImpl().setName("np").setConnectorNames(transportConfigurations); jmsServer.createConnectionFactory(false, nonPersisted, "/nonPersisted"); try { jmsServer.addConnectionFactoryToBindingRegistry("np", "/someCF"); fail("Failure expected and the API let duplicates"); } catch (NamingException expected) { // expected } openCon("/someCF"); openCon("/someCF2"); openCon("/nonPersisted"); jmsServer.stop(); jmsServer.start(); openCon("/someCF"); openCon("/someCF2"); assertNullJNDI("/nonPersisted"); jmsServer.stop(); jmsServer.start(); jmsServer.addConnectionFactoryToBindingRegistry("tst", "/newJNDI"); try { jmsServer.addConnectionFactoryToBindingRegistry("tst", "/newJNDI"); fail("Failure expected and the API let duplicates"); } catch (NamingException expected) { // expected } openCon("/someCF"); openCon("/someCF2"); openCon("/newJNDI"); assertNullJNDI("/nonPersisted"); jmsServer.stop(); assertNullJNDI("/newJNDI"); jmsServer.start(); openCon("/someCF"); openCon("/someCF2"); openCon("/newJNDI"); } @Test public void testCreateTopic() throws Exception { server.getConfiguration().getConnectorConfigurations().put("tst", new TransportConfiguration(INVM_CONNECTOR_FACTORY)); server.getConfiguration().getConnectorConfigurations().put("np", new TransportConfiguration(INVM_CONNECTOR_FACTORY)); List<String> transportConfigurations = new ArrayList<>(); transportConfigurations.add("tst"); ConnectionFactoryConfigurationImpl factCFG = (ConnectionFactoryConfigurationImpl) new ConnectionFactoryConfigurationImpl().setName("tst").setConnectorNames(transportConfigurations); jmsServer.createConnectionFactory(true, factCFG, "/someCF"); assertTrue(jmsServer.createTopic(true, "topicOne", "/t1", "/t.1")); assertTrue(jmsServer.createTopic(false, "topicTwo", "/t2", "/t.2")); assertFalse(jmsServer.createTopic(false, "topicOne", "/z1", "z2")); assertNullJNDI("/z1"); assertNullJNDI("/z2"); checkDestination("/t1"); checkDestination("/t.1"); checkDestination("/t2"); checkDestination("/t.2"); jmsServer.stop(); assertNullJNDI("/t1"); assertNullJNDI("/t.1"); assertNullJNDI("/t2"); assertNullJNDI("/t.2"); jmsServer.start(); checkDestination("/t1"); checkDestination("/t.1"); assertNullJNDI("/t2"); assertNullJNDI("/t.2"); jmsServer.addTopicToBindingRegistry("topicOne", "/tI"); jmsServer.stop(); jmsServer.start(); checkDestination("/tI"); checkDestination("/t1"); checkDestination("/t.1"); assertNullJNDI("/t2"); assertNullJNDI("/t.2"); assertTrue(jmsServer.removeTopicFromBindingRegistry("topicOne", "/tI")); assertFalse(jmsServer.removeTopicFromBindingRegistry("topicOne", "nothing")); assertFalse(jmsServer.removeTopicFromBindingRegistry("nothing", "nothing")); assertFalse(jmsServer.removeTopicFromBindingRegistry("nothing")); assertNullJNDI("/tI"); checkDestination("/t1"); checkDestination("/t.1"); jmsServer.stop(); jmsServer.start(); assertNullJNDI("/tI"); checkDestination("/t1"); checkDestination("/t.1"); jmsServer.removeTopicFromBindingRegistry("topicOne"); assertTrue(jmsServer.createTopic(true, "topicOne", "/topicx.1", "/topicx.2")); jmsServer.stop(); jmsServer.start(); checkDestination("/topicx.1"); checkDestination("/topicx.2"); } private void checkDestination(String name) throws Exception { ConnectionFactory cf = (ConnectionFactory) namingContext.lookup("/someCF"); Connection conn = cf.createConnection(); Session sess = conn.createSession(false, Session.AUTO_ACKNOWLEDGE); Destination dest = (Destination) namingContext.lookup(name); conn.start(); MessageConsumer cons = sess.createConsumer(dest); MessageProducer prod = sess.createProducer(dest); prod.send(sess.createMessage()); assertNotNull(cons.receiveNoWait()); conn.close(); } @Test public void testCreateQueue() throws Exception { server.getConfiguration().getConnectorConfigurations().put("tst", new TransportConfiguration(INVM_CONNECTOR_FACTORY)); // server.getConfiguration().getConnectorConfigurations().put("np", new TransportConfiguration(INVM_CONNECTOR_FACTORY)); List<String> transportConfigurations = new ArrayList<>(); transportConfigurations.add("tst"); ConnectionFactoryConfigurationImpl factCFG = (ConnectionFactoryConfigurationImpl) new ConnectionFactoryConfigurationImpl().setName("tst").setConnectorNames(transportConfigurations); jmsServer.createConnectionFactory(true, factCFG, "/someCF"); assertTrue(jmsServer.createQueue(true, "queue1", null, true, "/q1", "/q.1")); assertFalse(jmsServer.createQueue(true, "queue1", "someWeirdThing", true, "/qx", "/qz")); assertNullJNDI("/qx"); assertNullJNDI("/qz"); assertTrue(jmsServer.createQueue(false, "queue2", null, true, "/q2", "/q.2")); checkDestination("/q1"); checkDestination("/q.1"); checkDestination("/q2"); checkDestination("/q.2"); jmsServer.stop(); assertNullJNDI("/q1"); assertNullJNDI("/q1.1"); assertNullJNDI("/qI"); assertNullJNDI("/q2"); assertNullJNDI("/q.2"); jmsServer.start(); checkDestination("/q1"); checkDestination("/q.1"); assertNullJNDI("/q2"); assertNullJNDI("/q.2"); jmsServer.addQueueToBindingRegistry("queue1", "/qI"); jmsServer.stop(); jmsServer.start(); checkDestination("/qI"); checkDestination("/q1"); checkDestination("/q.1"); assertNullJNDI("/q2"); assertNullJNDI("/q.2"); assertTrue(jmsServer.removeQueueFromBindingRegistry("queue1", "/q1")); assertFalse(jmsServer.removeQueueFromBindingRegistry("queue1", "nothing")); assertNullJNDI("/q1"); checkDestination("/q.1"); checkDestination("/qI"); jmsServer.stop(); jmsServer.start(); assertNullJNDI("/q1"); checkDestination("/q.1"); checkDestination("/qI"); jmsServer.removeQueueFromBindingRegistry("queue1"); assertTrue(jmsServer.createQueue(true, "queue1", null, true, "/newq1", "/newq.1")); assertNullJNDI("/q1"); assertNullJNDI("/q.1"); assertNullJNDI("/qI"); checkDestination("/newq1"); checkDestination("newq.1"); jmsServer.stop(); } /** * */ private void assertNullJNDI(String name) { Object obj = null; try { obj = namingContext.lookup(name); } catch (Exception expected) { } assertNull(obj); } /** * @throws NamingException * @throws JMSException */ private void openCon(String name) throws NamingException, JMSException { ConnectionFactory cf = (ConnectionFactory) namingContext.lookup(name); Connection conn = cf.createConnection(); conn.createSession(false, Session.AUTO_ACKNOWLEDGE); conn.close(); } // Package protected --------------------------------------------- // Protected ----------------------------------------------------- // Private ------------------------------------------------------- // Inner classes ------------------------------------------------- }