boolean isBlockOnAcknowledge = sessionFactory.getServerLocator().isBlockOnAcknowledge(); int ackBatchSize = sessionFactory.getServerLocator().getAckBatchSize(); if (acknowledgeMode == Session.SESSION_TRANSACTED) { session = sessionFactory.createSession(username, password, isXA, false, false, sessionFactory.getServerLocator().isPreAcknowledge(), transactionBatchSize); } else if (acknowledgeMode == Session.AUTO_ACKNOWLEDGE) { session = sessionFactory.createSession(username, password, isXA, true, true, sessionFactory.getServerLocator().isPreAcknowledge(), 0); } else if (acknowledgeMode == Session.DUPS_OK_ACKNOWLEDGE) { session = sessionFactory.createSession(username, password, isXA, true, true, sessionFactory.getServerLocator().isPreAcknowledge(), dupsOKBatchSize); } else if (acknowledgeMode == Session.CLIENT_ACKNOWLEDGE) { session = sessionFactory.createSession(username, password, isXA, true, false, sessionFactory.getServerLocator().isPreAcknowledge(), isBlockOnAcknowledge ? transactionBatchSize : ackBatchSize); } else if (acknowledgeMode == ActiveMQJMSConstants.INDIVIDUAL_ACKNOWLEDGE) { session = sessionFactory.createSession(username, password, isXA, true, false, false, isBlockOnAcknowledge ? transactionBatchSize : ackBatchSize); } else if (acknowledgeMode == ActiveMQJMSConstants.PRE_ACKNOWLEDGE) { session = sessionFactory.createSession(username, password, isXA, true, false, true, transactionBatchSize); } else { throw new JMSRuntimeException("Invalid ackmode: " + acknowledgeMode); session.addFailureListener(listener); session.addFailoverListener(failoverListener); session.start();
sessionFactory.close(); if (!initialSession.isClosed()) { try { initialSession.deleteQueue(queueName); } catch (ActiveMQException ignore) { initialSession.close();
csf.getConnection().addFailureListener(new FailureListener() {
@Test public void testMulticastRoutingBackwardsCompat() throws Exception { SimpleString sendAddress = new SimpleString("test.address"); List<String> testAddresses = Arrays.asList("test.address", "test.#", "test.*"); for (String consumeAddress : testAddresses) { // For each address, create 2 Queues with the same address, assert both queues receive message Queue q1 = server.createQueue(new SimpleString(consumeAddress), RoutingType.MULTICAST, new SimpleString(consumeAddress + ".1"), null, true, false); Queue q2 = server.createQueue(new SimpleString(consumeAddress), RoutingType.MULTICAST, new SimpleString(consumeAddress + ".2"), null, true, false); ClientSession session = sessionFactory.createSession(); session.start(); ClientConsumer consumer1 = session.createConsumer(q1.getName()); ClientConsumer consumer2 = session.createConsumer(q2.getName()); ClientProducer producer = session.createProducer(sendAddress); ClientMessage m = session.createMessage(ClientMessage.TEXT_TYPE, true); m.getBodyBuffer().writeString("TestMessage"); producer.send(m); assertNotNull(consumer1.receive(2000)); assertNotNull(consumer2.receive(2000)); q1.deleteQueue(); q2.deleteQueue(); } }
@Test public void testBasicPluginAuthorization() throws Exception { server.start(); ClientSessionFactory cf = locator.createSessionFactory(); String name = "queue1"; try { ClientSession session = cf.createSession("first", "secret", false, true, true, false, 0); session.createQueue(SimpleString.toSimpleString(name), SimpleString.toSimpleString(name)); ClientProducer producer = session.createProducer(); producer.send(name, session.createMessage(false)); session.close(); } catch (ActiveMQException e) { e.printStackTrace(); Assert.fail("should not throw exception"); } cf.close(); }
@Test public void testNoCursors() throws Exception { Configuration config = createDefaultInVMConfig().setJournalSyncNonTransactional(false); server = createServer(true, config, PagingTest.PAGE_SIZE, PagingTest.PAGE_MAX); server.start(); ServerLocator locator = createInVMNonHALocator(); ClientSessionFactory sf = locator.createSessionFactory(); ClientSession session = sf.createSession(); session.createQueue(ADDRESS, ADDRESS, true); ClientProducer prod = session.createProducer(ADDRESS); for (int i = 0; i < 100; i++) { Message msg = session.createMessage(true); msg.toCore().getBodyBuffer().writeBytes(new byte[1024]); prod.send(msg); } session.commit(); session.deleteQueue(ADDRESS); session.close(); sf.close(); locator.close(); server.stop(); server.start(); waitForNotPaging(server.getPagingManager().getPageStore(ADDRESS)); server.stop(); }
@Test public void testOrder1() throws Throwable { boolean persistentMessages = true; Configuration config = createDefaultInVMConfig().setJournalSyncNonTransactional(false); ActiveMQServer server = createServer(true, config, PAGE_SIZE, PAGE_MAX, new HashMap<String, AddressSettings>()); server.start(); final int messageSize = 1024; final int numberOfMessages = 500; ServerLocator locator = createInVMNonHALocator().setClientFailureCheckPeriod(1000).setConnectionTTL(2000).setReconnectAttempts(0).setBlockOnNonDurableSend(false).setBlockOnDurableSend(false).setBlockOnAcknowledge(false).setConsumerWindowSize(1024 * 1024); ClientSessionFactory sf = createSessionFactory(locator); ClientSession session = sf.createSession(false, false, false); server.addAddressInfo(new AddressInfo(ADDRESS, RoutingType.ANYCAST)); server.createQueue(ADDRESS, RoutingType.ANYCAST, ADDRESS, null, true, false); ClientProducer producer = session.createProducer(PagingTest.ADDRESS); byte[] body = new byte[messageSize]; ByteBuffer bb = ByteBuffer.wrap(body); for (int j = 1; j <= messageSize; j++) { bb.put(getSamplebyte(j)); } for (int i = 0; i < numberOfMessages; i++) { ClientMessage message = session.createMessage(persistentMessages); ActiveMQBuffer bodyLocal = message.getBodyBuffer(); bodyLocal.writeBytes(body); message.putIntProperty(new SimpleString("id"), i); producer.send(message); } session.commit(); session.close(); }
@Test public void testRollbackOnSend() throws Exception { clearDataRecreateServerDirs(); Configuration config = createDefaultInVMConfig(); server = createServer(true, config, PagingTest.PAGE_SIZE, PagingTest.PAGE_MAX); server.start(); final int numberOfIntegers = 256; final int numberOfMessages = 10; locator.setBlockOnNonDurableSend(true).setBlockOnDurableSend(true).setBlockOnAcknowledge(true); sf = createSessionFactory(locator); ClientSession session = sf.createSession(null, null, false, false, true, false, 0); session.createQueue(PagingTest.ADDRESS, PagingTest.ADDRESS, null, true); ClientProducer producer = session.createProducer(PagingTest.ADDRESS); ClientMessage message = null; for (int i = 0; i < numberOfMessages; i++) { message = session.createMessage(true); ActiveMQBuffer bodyLocal = message.getBodyBuffer(); for (int j = 1; j <= numberOfIntegers; j++) { bodyLocal.writeInt(j); } message.putIntProperty(new SimpleString("id"), i); producer.send(message); } session.rollback(); ClientConsumer consumer = session.createConsumer(PagingTest.ADDRESS); session.start(); Assert.assertNull(consumer.receiveImmediate()); session.close(); }
server.start(); server.getAddressSettingsRepository().getMatch("#").setAddressFullMessagePolicy(AddressFullMessagePolicy.DROP); locator = createInVMNonHALocator().setBlockOnNonDurableSend(true).setBlockOnDurableSend(true).setBlockOnAcknowledge(true); ClientSession session = sf.createSession(false, false, false); session.createQueue(ADDRESS, ADDRESS, null, true); ClientProducer producer = session.createProducer(ADDRESS); message = session.createMessage(true); bodyLocal.writeBytes(body); message.putIntProperty(new SimpleString("id"), i);
@Test public void testFlowControlMessageNotRouted() throws Exception { final SimpleString address = new SimpleString("testaddress"); server = createServer(false, isNetty()); AddressSettings addressSettings = new AddressSettings().setMaxSizeBytes(1024).setAddressFullMessagePolicy(AddressFullMessagePolicy.BLOCK); HierarchicalRepository<AddressSettings> repos = server.getAddressSettingsRepository(); repos.addMatch(address.toString(), addressSettings); server.start(); waitForServerToStart(server); locator.setProducerWindowSize(1024).setConsumerWindowSize(1024).setAckBatchSize(1024); sf = createSessionFactory(locator); session = sf.createSession(false, true, true, true); ClientProducer producer = session.createProducer(address); byte[] bytes = new byte[100]; final int numMessages = 1000; for (int i = 0; i < numMessages; i++) { ClientMessage message = session.createMessage(false); message.getBodyBuffer().writeBytes(bytes); producer.send(message); } }
@Test public void testMessageCounter() throws Exception { locator.setBlockOnNonDurableSend(true).setBlockOnDurableSend(true); ClientSessionFactory sf = createSessionFactory(locator); ClientSession session = sf.createSession(null, null, false, false, false, false, 0); session.createQueue(QUEUE, QUEUE, null, false); ClientProducer producer = session.createProducer(QUEUE); final int numMessages = 100; for (int i = 0; i < numMessages; i++) { ClientMessage message = createTextMessage(session, "m" + i); producer.send(message); } session.commit(); session.start(); Assert.assertEquals(100, getMessageCount(server.getPostOffice(), QUEUE.toString())); ClientConsumer consumer = session.createConsumer(QUEUE, null, false); for (int i = 0; i < numMessages; i++) { ClientMessage message = consumer.receive(1000); Assert.assertNotNull(message); message.acknowledge(); session.commit(); Assert.assertEquals("m" + i, message.getBodyBuffer().readString()); } session.close(); Assert.assertEquals(0, getMessageCount(server.getPostOffice(), QUEUE.toString())); }
@Test public void testDeleteQueue() throws Exception { ClientSession session = createSessionFactory(locator).createSession(false, true, true); session.createQueue(address, queueName, false); Binding binding = server.getPostOffice().getBinding(queueName); Assert.assertNotNull(binding); session.deleteQueue(queueName); binding = server.getPostOffice().getBinding(queueName); Assert.assertNull(binding); session.close(); }
protected void doTestO(final ClientSessionFactory sf, final int threadNum) throws Exception { ClientSession sessCreate = sf.createSession(false, true, true); sessCreate.createQueue(MultiThreadRandomReattachTestBase.ADDRESS, new SimpleString(threadNum + MultiThreadRandomReattachTestBase.ADDRESS.toString()), (SimpleString) null, false); ClientSession sess = sf.createSession(false, true, true); sess.start(); ClientConsumer consumer = sess.createConsumer(new SimpleString(threadNum + MultiThreadRandomReattachTestBase.ADDRESS.toString())); for (int i = 0; i < 100; i++) { Assert.assertNull(consumer.receiveImmediate()); } sess.close(); sessCreate.deleteQueue(new SimpleString(threadNum + MultiThreadRandomReattachTestBase.ADDRESS.toString())); sessCreate.close(); }
public static void crashAndWaitForFailure(ActiveMQServer server, ServerLocator locator) throws Exception { ClientSessionFactory sf = locator.createSessionFactory(); ClientSession session = sf.createSession(); try { crashAndWaitForFailure(server, session); } finally { try { session.close(); sf.close(); } catch (Exception ignored) { } } }
@Test public void testConsumerAckImmediateAutoCommitTrue() throws Exception { ClientSessionFactory sf = createSessionFactory(locator); ClientSession session = sf.createSession(false, true, true, true); ClientProducer producer = session.createProducer(QUEUE); final int numMessages = 100; for (int i = 0; i < numMessages; i++) { ClientMessage message = createTextMessage(session, "m" + i); producer.send(message); } ClientConsumer consumer = session.createConsumer(QUEUE); session.start(); for (int i = 0; i < numMessages; i++) { ClientMessage message2 = consumer.receive(1000); Assert.assertEquals("m" + i, message2.getBodyBuffer().readString()); } // assert that all the messages are there and none have been acked Assert.assertEquals(0, ((Queue) server.getPostOffice().getBinding(QUEUE).getBindable()).getDeliveringCount()); Assert.assertEquals(0, getMessageCount(((Queue) server.getPostOffice().getBinding(QUEUE).getBindable()))); session.close(); }
public void deploy(TopicDeployment topicDeployment) throws Exception { if (!started) { throw new Exception("You must start() this class instance before deploying"); } String queueName = topicDeployment.getName(); boolean defaultDurable; try (ClientSession session = sessionFactory.createSession(false, false, false)) { defaultDurable = topicDeployment.isDurableSend(); ClientSession.AddressQuery query = session.addressQuery(new SimpleString(queueName)); if (!query.isExists()) session.createAddress(SimpleString.toSimpleString(queueName), RoutingType.MULTICAST, true); } destination.createTopicResource(queueName, defaultDurable, topicDeployment.getConsumerSessionTimeoutSeconds(), topicDeployment.isDuplicatesAllowed()); }
@Test public void testPurgeOnNoConsumersFalse() throws Exception { SimpleString address = new SimpleString("test.address"); SimpleString queueName = SimpleString.toSimpleString(UUID.randomUUID().toString()); server.createQueue(address, RoutingType.ANYCAST, queueName, null, null, true, false, false, false, false, 1, false, true); assertNotNull(server.locateQueue(queueName)); ClientSession session = sessionFactory.createSession(); ClientProducer producer = session.createProducer(address); producer.send(session.createMessage(true)); session.createConsumer(queueName).close(); assertNotNull(server.locateQueue(queueName)); assertEquals(1, server.locateQueue(queueName).getMessageCount()); }
private void testConsumerBrowserMessagesArentAcked(final boolean preACK) throws Exception { ClientSessionFactory sf = createSessionFactory(locator); ClientSession session = sf.createSession(null, null, false, true, true, preACK, 0); session.createQueue(QUEUE, QUEUE, null, false); ClientProducer producer = session.createProducer(QUEUE); final int numMessages = 100; for (int i = 0; i < numMessages; i++) { ClientMessage message = createTextMessage(session, "m" + i); producer.send(message); } ClientConsumer consumer = session.createConsumer(QUEUE, null, true); for (int i = 0; i < numMessages; i++) { ClientMessage message2 = consumer.receive(1000); Assert.assertEquals("m" + i, message2.getBodyBuffer().readString()); } // assert that all the messages are there and none have been acked Assert.assertEquals(0, ((Queue) server.getPostOffice().getBinding(QUEUE).getBindable()).getDeliveringCount()); Assert.assertEquals(100, getMessageCount(((Queue) server.getPostOffice().getBinding(QUEUE).getBindable()))); session.close(); }
@Test public void testSimpleSendOnAvoid() throws Exception { ActiveMQServer server = createServer(true, isNetty()); server.start(); ClientSessionFactory sf = createSessionFactory(locator); ClientSession session = addClientSession(sf.createSession(false, true, true)); session.createQueue(ADDRESS, ADDRESS, true); ClientProducer producer = session.createProducer(ADDRESS); int minLargeSize = locator.getMinLargeMessageSize(); TestLargeMessageInputStream input = new TestLargeMessageInputStream(minLargeSize); ClientMessage clientFile = session.createMessage(true); clientFile.setBodyInputStream(input.clone()); producer.send(clientFile); session.start(); //no file should be in the dir as we send it as regular validateNoFilesOnLargeDir(); ClientConsumer consumer = session.createConsumer(ADDRESS); ClientMessage msg1 = consumer.receive(1000); Assert.assertNotNull(msg1); for (int i = 0; i < input.getSize(); i++) { byte b = msg1.getBodyBuffer().readByte(); Assert.assertEquals("incorrect char ", input.getChar(i), b); } msg1.acknowledge(); consumer.close(); session.close(); }