/** * Constructor for the ClientRequestor. * * The implementation expects a ClientSession with automatic commits of sends and acknowledgements * * @param session a ClientSession uses to handle requests and replies * @param requestAddress the address to send request messages to * @throws Exception */ public ClientRequestor(final ClientSession session, final SimpleString requestAddress) throws Exception { queueSession = session; requestProducer = queueSession.createProducer(requestAddress); replyQueue = new SimpleString(requestAddress + "." + UUID.randomUUID().toString()); queueSession.createTemporaryQueue(replyQueue, replyQueue); replyConsumer = queueSession.createConsumer(replyQueue); }
private void createTemporaryQueue(ActiveMQDestination destination, RoutingType routingType, SimpleString queueName, SimpleString filter, int maxConsumers, boolean purgeOnNoConsumers, Boolean exclusive, Boolean lastValue) throws ActiveMQException { QueueAttributes queueAttributes = destination.getQueueAttributes(); if (queueAttributes == null) { session.createTemporaryQueue(destination.getSimpleAddress(), routingType, queueName, filter, maxConsumers, purgeOnNoConsumers, exclusive, lastValue); } else { session.createTemporaryQueue( destination.getSimpleAddress(), routingType, queueName, filter, queueAttributes.getMaxConsumers() == null ? maxConsumers : queueAttributes.getMaxConsumers(), queueAttributes.getPurgeOnNoConsumers() == null ? purgeOnNoConsumers : queueAttributes.getPurgeOnNoConsumers(), queueAttributes.getExclusive() == null ? exclusive : queueAttributes.getExclusive(), queueAttributes.getLastValue() == null ? lastValue : queueAttributes.getLastValue() ); } }
@Override public TemporaryQueue createTemporaryQueue() throws JMSException { // As per spec. section 4.11 if (sessionType == ActiveMQSession.TYPE_TOPIC_SESSION) { throw new IllegalStateException("Cannot create a temporary queue using a TopicSession"); } try { final ActiveMQTemporaryQueue queue; if (enable1xPrefixes) { queue = ActiveMQDestination.createTemporaryQueue(this, PacketImpl.OLD_TEMP_QUEUE_PREFIX.toString()); } else { queue = ActiveMQDestination.createTemporaryQueue(this); } SimpleString simpleAddress = queue.getSimpleAddress(); session.createTemporaryQueue(simpleAddress, RoutingType.ANYCAST, simpleAddress); connection.addTemporaryQueue(simpleAddress); return queue; } catch (ActiveMQException e) { throw JMSExceptionHelper.convertFromActiveMQException(e); } }
@Override public TemporaryTopic createTemporaryTopic() throws JMSException { // As per spec. section 4.11 if (sessionType == ActiveMQSession.TYPE_QUEUE_SESSION) { throw new IllegalStateException("Cannot create a temporary topic on a QueueSession"); } try { final ActiveMQTemporaryTopic topic; if (enable1xPrefixes) { topic = ActiveMQDestination.createTemporaryTopic(this, PacketImpl.OLD_TEMP_TOPIC_PREFIX.toString()); } else { topic = ActiveMQDestination.createTemporaryTopic(this); } SimpleString simpleAddress = topic.getSimpleAddress(); // We create a dummy subscription on the topic, that never receives messages - this is so we can perform JMS // checks when routing messages to a topic that // does not exist - otherwise we would not be able to distinguish from a non existent topic and one with no // subscriptions - core has no notion of a topic session.createTemporaryQueue(simpleAddress, simpleAddress, ActiveMQSession.REJECTING_FILTER); connection.addTemporaryQueue(simpleAddress); return topic; } catch (ActiveMQException e) { throw JMSExceptionHelper.convertFromActiveMQException(e); } }
if (destination.isTemporary()) { clientSession.createTemporaryQueue(address, RoutingType.ANYCAST, address); } else { createQueue(destination, RoutingType.ANYCAST, address, null, true, true, query.getDefaultMaxConsumers(), query.isDefaultPurgeOnNoConsumers(), query.isDefaultExclusive(), query.isDefaultLastValueQueue()); } else if (destination.isQueue() && query.isAutoCreateQueues()) { if (destination.isTemporary()) { clientSession.createTemporaryQueue(address, RoutingType.ANYCAST, address); } else { createQueue(destination, RoutingType.ANYCAST, address, null, true, true, query.getDefaultMaxConsumers(), query.isDefaultPurgeOnNoConsumers(), query.isDefaultExclusive(), query.isDefaultLastValueQueue());
public ClientSession createSubscription(String subscriptionName, boolean durable) { ClientSession session = null; try { session = sessionFactory.createSession(); if (durable) { session.createQueue(destination, subscriptionName, true); } else { session.createTemporaryQueue(destination, subscriptionName); } return session; } catch (ActiveMQException e) { throw new RuntimeException(e); } }
public ClientSession createSubscription(String subscriptionName, boolean durable) { ClientSession session = null; try { session = sessionFactory.createSession(); if (durable) { session.createQueue(destination, subscriptionName, true); } else { session.createTemporaryQueue(destination, subscriptionName); } return session; } catch (ActiveMQException e) { throw new RuntimeException(e); } }
/** * Constructor for the ClientRequestor. * * The implementation expects a ClientSession with automatic commits of sends and acknowledgements * * @param session a ClientSession uses to handle requests and replies * @param requestAddress the address to send request messages to * @throws Exception */ public ClientRequestor(final ClientSession session, final SimpleString requestAddress) throws Exception { queueSession = session; requestProducer = queueSession.createProducer(requestAddress); replyQueue = new SimpleString(requestAddress + "." + UUID.randomUUID().toString()); queueSession.createTemporaryQueue(replyQueue, replyQueue); replyConsumer = queueSession.createConsumer(replyQueue); }
/** * Constructor for the ClientRequestor. * * The implementation expects a ClientSession with automatic commits of sends and acknowledgements * * @param session a ClientSession uses to handle requests and replies * @param requestAddress the address to send request messages to * @throws Exception */ public ClientRequestor(final ClientSession session, final SimpleString requestAddress) throws Exception { queueSession = session; requestProducer = queueSession.createProducer(requestAddress); replyQueue = new SimpleString(requestAddress + "." + UUID.randomUUID().toString()); queueSession.createTemporaryQueue(replyQueue, replyQueue); replyConsumer = queueSession.createConsumer(replyQueue); }
/** * Constructor for the ClientRequestor. * * The implementation expects a ClientSession with automatic commits of sends and acknowledgements * * @param session a ClientSession uses to handle requests and replies * @param requestAddress the address to send request messages to * @throws Exception */ public ClientRequestor(final ClientSession session, final SimpleString requestAddress) throws Exception { queueSession = session; requestProducer = queueSession.createProducer(requestAddress); replyQueue = new SimpleString(requestAddress + "." + UUID.randomUUID().toString()); queueSession.createTemporaryQueue(replyQueue, replyQueue); replyConsumer = queueSession.createConsumer(replyQueue); }
/** * Constructor for the ClientRequestor. * * The implementation expects a ClientSession with automatic commits of sends and acknowledgements * * @param session a ClientSession uses to handle requests and replies * @param requestAddress the address to send request messages to * @throws Exception */ public ClientRequestor(final ClientSession session, final SimpleString requestAddress) throws Exception { queueSession = session; requestProducer = queueSession.createProducer(requestAddress); replyQueue = new SimpleString(requestAddress + "." + UUID.randomUUID().toString()); queueSession.createTemporaryQueue(replyQueue, replyQueue); replyConsumer = queueSession.createConsumer(replyQueue); }
@Test public void testQueueWithWildcard3() throws Exception { session.createQueue("a.b", RoutingType.MULTICAST, "queue1"); session.createTemporaryQueue("a.#", RoutingType.MULTICAST, "queue2"); session.createTemporaryQueue("a.#", RoutingType.MULTICAST, "queue2.1"); session.deleteQueue("queue2"); }
void createTemporaryQueue(ActiveMQDestination destination, RoutingType routingType, SimpleString queueName, SimpleString filter, ClientSession.AddressQuery addressQuery) throws ActiveMQException { QueueAttributes queueAttributes = destination.getQueueAttributes() == null ? new QueueAttributes() : destination.getQueueAttributes(); setRequiredQueueAttributesIfNotSet(queueAttributes, addressQuery, routingType, filter, false); session.createTemporaryQueue( destination.getSimpleAddress(), queueName, queueAttributes ); }
void createTemporaryQueue(ActiveMQDestination destination, RoutingType routingType, SimpleString queueName, SimpleString filter, ClientSession.AddressQuery addressQuery) throws ActiveMQException { QueueAttributes queueAttributes = destination.getQueueAttributes() == null ? new QueueAttributes() : destination.getQueueAttributes(); setRequiredQueueAttributesIfNotSet(queueAttributes, addressQuery, routingType, filter, false); session.createTemporaryQueue( destination.getSimpleAddress(), queueName, queueAttributes ); }
@Override public void run() throws ActiveMQException { session.createTemporaryQueue(RandomUtil.randomSimpleString(), RandomUtil.randomSimpleString()); } });
private void createTemporaryQueue(ActiveMQDestination destination, RoutingType routingType, SimpleString queueName, SimpleString filter, int maxConsumers, boolean purgeOnNoConsumers, Boolean exclusive, Boolean lastValue) throws ActiveMQException { QueueAttributes queueAttributes = destination.getQueueAttributes(); if (queueAttributes == null) { session.createTemporaryQueue(destination.getSimpleAddress(), routingType, queueName, filter, maxConsumers, purgeOnNoConsumers, exclusive, lastValue); } else { session.createTemporaryQueue( destination.getSimpleAddress(), routingType, queueName, filter, queueAttributes.getMaxConsumers() == null ? maxConsumers : queueAttributes.getMaxConsumers(), queueAttributes.getPurgeOnNoConsumers() == null ? purgeOnNoConsumers : queueAttributes.getPurgeOnNoConsumers(), queueAttributes.getExclusive() == null ? exclusive : queueAttributes.getExclusive(), queueAttributes.getLastValue() == null ? lastValue : queueAttributes.getLastValue() ); } }
@Test public void testTemporaryTrue() throws Exception { ClientSession session = createSessionFactory(locator).createSession(false, true, true); session.createTemporaryQueue(address, queueName); Binding binding = server.getPostOffice().getBinding(queueName); Queue q = (Queue) binding.getBindable(); Assert.assertTrue(q.isTemporary()); session.close(); }
@Test public void testMemoryLeakOnAddressSettingForTemporaryQueue() throws Exception { for (int i = 0; i < 1000; i++) { SimpleString queue = RandomUtil.randomSimpleString(); SimpleString address = RandomUtil.randomSimpleString(); session.createTemporaryQueue(address, queue); session.close(); session = sf.createSession(); } session.close(); sf.close(); System.out.println("size = " + server.getAddressSettingsRepository().getCacheSize()); assertTrue(server.getAddressSettingsRepository().getCacheSize() < 10); }
@Test public void testDeleteTemporaryQueueAfterConnectionIsClosed_2() throws Exception { SimpleString queue = RandomUtil.randomSimpleString(); SimpleString address = RandomUtil.randomSimpleString(); session.createTemporaryQueue(address, queue); assertEquals(1, server.getConnectionCount()); // we create a second session. the temp queue must be present // even after we closed the session which created it ClientSession session2 = sf.createSession(false, true, true); session.close(); // let some time for the server to clean the connections // Thread.sleep(1000); session2.start(); session2.createConsumer(queue); session2.close(); }
@Test public void testConsumeFromTemporaryQueueCreatedByOtherSession() throws Exception { SimpleString queue = RandomUtil.randomSimpleString(); SimpleString address = RandomUtil.randomSimpleString(); session.createTemporaryQueue(address, queue); ClientProducer producer = session.createProducer(address); producer.send(session.createMessage(false)); ClientSession session2 = sf.createSession(false, true, true); session2.start(); ClientConsumer consumer = session2.createConsumer(queue); ClientMessage message = consumer.receive(500); assertNotNull(message); session2.close(); session.close(); }