@Override // Get the jms session belonging to the thread publishing this event public void run() { MessageProducer messageProducer = null; try { Session session = sessionManager.get(); Destination destination = createDestination(session, destinationName); messageProducer = session.createProducer(destination); TextMessage textMessage = getEventMarshaller().marshallEvent(descriptor, event, session); messageProducer.send(textMessage, textMessage.getJMSDeliveryMode(), textMessage.getJMSPriority(), textMessage.getJMSExpiration()); success = true; } catch (CougarFrameworkException cfe) { // Catch possible exception thrown from session creation success = false; error = cfe; } catch (JMSException ex) { // Catch any other exception thrown during message publication success = false; error = ex; } finally { if (messageProducer != null) { try { messageProducer.close(); } catch (JMSException e) { LOGGER.warn("Failed to close message producer", e); } } unlock(); } } }
@Test public void testReceivePersistent() throws Exception { Connection producerConnection = null; Connection consumerConnection = null; try { producerConnection = createConnection(); consumerConnection = createConnection(); Session producerSession = producerConnection.createSession(false, Session.AUTO_ACKNOWLEDGE); Session consumerSession = consumerConnection.createSession(false, Session.AUTO_ACKNOWLEDGE); MessageProducer queueProducer = producerSession.createProducer(queue1); MessageConsumer queueConsumer = consumerSession.createConsumer(queue1); // start consumer connection before the message is submitted consumerConnection.start(); TextMessage tm = producerSession.createTextMessage("someText"); ProxyAssertSupport.assertEquals(DeliveryMode.PERSISTENT, tm.getJMSDeliveryMode()); queueProducer.send(tm); TextMessage m = (TextMessage) queueConsumer.receive(); ProxyAssertSupport.assertEquals(tm.getText(), m.getText()); } finally { if (producerConnection != null) { producerConnection.close(); } if (consumerConnection != null) { consumerConnection.close(); } } }
@Override public JmsRecord mapMessage(Message message) throws Exception { TextMessage textMessage = (TextMessage) message; Map<String, Object> properties = new HashMap<>(); @SuppressWarnings("rawtypes") Enumeration propertyNames = textMessage.getPropertyNames(); while (propertyNames.hasMoreElements()) { String propertyName = (String) propertyNames.nextElement(); properties.put(propertyName, textMessage.getObjectProperty(propertyName)); } JmsRecord jmsRecord = new JmsRecord( textMessage.getJMSMessageID(), textMessage.getJMSTimestamp(), textMessage.getJMSCorrelationID(), textMessage.getJMSReplyTo(), textMessage.getJMSDestination(), textMessage.getJMSDeliveryMode(), textMessage.getJMSRedelivered(), textMessage.getJMSType(), textMessage.getJMSExpiration(), textMessage.getJMSPriority(), properties, textMessage.getText()); return jmsRecord; } })
ProxyAssertSupport.assertEquals(DeliveryMode.PERSISTENT, msg.getJMSDeliveryMode()); ProxyAssertSupport.assertEquals("Persistent", msg.getText()); ProxyAssertSupport.assertEquals(DeliveryMode.NON_PERSISTENT, msg.getJMSDeliveryMode()); } finally { if (conn != null) {
assertTrue("No message was received", msg != null); assertEquals(DeliveryMode.PERSISTENT, msg.getJMSDeliveryMode()); assertEquals("testJMSDeliveryModeInSelector:2", msg.getText());
@Test public void testSendMessageWithDeliveryTime() throws Exception { MessageConsumer consumer = session.createConsumer(queue); conn.connect(defUser, defPass); ClientStompFrame frame = conn.createFrame(Stomp.Commands.SEND) .addHeader(Stomp.Headers.Send.DESTINATION, getQueuePrefix() + getQueueName()) .addHeader("foo", "abc") .addHeader("bar", "123") .addHeader("correlation-id", "c123") .addHeader("persistent", "true") .addHeader("type", "t345") .addHeader("JMSXGroupID", "abc") .addHeader("priority", "3") .addHeader("AMQ_SCHEDULED_TIME", Long.toString(System.currentTimeMillis() + 2000)) .setBody("Hello World"); conn.sendFrame(frame); assertNull("Should not receive message yet", consumer.receive(1000)); TextMessage message = (TextMessage) consumer.receive(4000); Assert.assertNotNull(message); Assert.assertEquals("Hello World", message.getText()); Assert.assertEquals("JMSCorrelationID", "c123", message.getJMSCorrelationID()); Assert.assertEquals("getJMSType", "t345", message.getJMSType()); Assert.assertEquals("getJMSPriority", 3, message.getJMSPriority()); Assert.assertEquals(javax.jms.DeliveryMode.PERSISTENT, message.getJMSDeliveryMode()); Assert.assertEquals("foo", "abc", message.getStringProperty("foo")); Assert.assertEquals("JMSXGroupID", "abc", message.getStringProperty("JMSXGroupID")); }
Assert.assertEquals("getJMSType", "t345", message.getJMSType()); Assert.assertEquals("getJMSPriority", 3, message.getJMSPriority()); Assert.assertEquals(javax.jms.DeliveryMode.PERSISTENT, message.getJMSDeliveryMode()); Assert.assertEquals("foo", "abc", message.getStringProperty("foo")); Assert.assertEquals("longHeader", 2048, message.getStringProperty("longHeader").length());
@Test public void testDeliveryMode() throws Exception { JMSProducer producer = context.createProducer(); JMSConsumer consumer = context.createConsumer(queue1); producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT); String strRandom = newXID().toString(); producer.send(queue1, context.createTextMessage(strRandom)); TextMessage msg = (TextMessage) consumer.receiveNoWait(); assertNotNull(msg); assertEquals(DeliveryMode.NON_PERSISTENT, msg.getJMSDeliveryMode()); }
Assert.assertEquals("getJMSType", "t345", message.getJMSType()); Assert.assertEquals("getJMSPriority", 3, message.getJMSPriority()); Assert.assertEquals(javax.jms.DeliveryMode.PERSISTENT, message.getJMSDeliveryMode()); Assert.assertEquals("foo", "abc", message.getStringProperty("foo")); Assert.assertEquals("very-very-long-stomp-message-header", 2048, message.getStringProperty("very-very-long-stomp-message-header").length());
Assert.assertEquals("getJMSType", "t345", message.getJMSType()); Assert.assertEquals("getJMSPriority", 3, message.getJMSPriority()); Assert.assertEquals(javax.jms.DeliveryMode.PERSISTENT, message.getJMSDeliveryMode()); Assert.assertEquals("foo", "abc", message.getStringProperty("foo")); Assert.assertEquals("longHeader", 1024, message.getStringProperty("longHeader")
@Test public void testSendMessageWithDelay() throws Exception { MessageConsumer consumer = session.createConsumer(queue); conn.connect(defUser, defPass); ClientStompFrame frame = conn.createFrame(Stomp.Commands.SEND) .addHeader(Stomp.Headers.Send.DESTINATION, getQueuePrefix() + getQueueName()) .addHeader("foo", "abc") .addHeader("bar", "123") .addHeader("correlation-id", "c123") .addHeader("persistent", "true") .addHeader("type", "t345") .addHeader("JMSXGroupID", "abc") .addHeader("priority", "3") .addHeader("AMQ_SCHEDULED_DELAY", "2000") .setBody("Hello World"); conn.sendFrame(frame); assertNull("Should not receive message yet", consumer.receive(1000)); TextMessage message = (TextMessage) consumer.receive(4000); Assert.assertNotNull(message); Assert.assertEquals("Hello World", message.getText()); Assert.assertEquals("JMSCorrelationID", "c123", message.getJMSCorrelationID()); Assert.assertEquals("getJMSType", "t345", message.getJMSType()); Assert.assertEquals("getJMSPriority", 3, message.getJMSPriority()); Assert.assertEquals(javax.jms.DeliveryMode.PERSISTENT, message.getJMSDeliveryMode()); Assert.assertEquals("foo", "abc", message.getStringProperty("foo")); Assert.assertEquals("JMSXGroupID", "abc", message.getStringProperty("JMSXGroupID")); }
/** * Test that the JMS property <code>JMSDeliveryMode</code> is treated as having the values <code>'PERSISTENT'</code> * or <code>'NON_PERSISTENT'</code> when used in a message selector (chapter 3.8.1.3). */ @Test public void testJMSDeliveryModeInSelector() throws Exception { if (receiver != null) { receiver.close(); } receiver = receiverSession.createReceiver(receiverQueue, "JMSDeliveryMode = 'PERSISTENT'"); TextMessage dummyMessage = senderSession.createTextMessage(); dummyMessage.setText("testJMSDeliveryModeInSelector:1"); // send a dummy message in *non persistent* mode sender.send(dummyMessage, DeliveryMode.NON_PERSISTENT, sender.getPriority(), sender.getTimeToLive()); TextMessage message = senderSession.createTextMessage(); message.setText("testJMSDeliveryModeInSelector:2"); // send a message in *persistent* sender.send(message, DeliveryMode.PERSISTENT, sender.getPriority(), sender.getTimeToLive()); TextMessage msg = (TextMessage) receiver.receive(TestConfig.TIMEOUT); Assert.assertTrue("No message was received", msg != null); // only the message sent in persistent mode should be received. Assert.assertEquals(DeliveryMode.PERSISTENT, msg.getJMSDeliveryMode()); Assert.assertEquals("testJMSDeliveryModeInSelector:2", msg.getText()); }
@Test public void testSendMessageWithStandardHeaders() throws Exception { MessageConsumer consumer = session.createConsumer(queue); conn.connect(defUser, defPass); ClientStompFrame frame = conn.createFrame(Stomp.Commands.SEND) .addHeader(Stomp.Headers.Subscribe.DESTINATION, getQueuePrefix() + getQueueName()) .addHeader("correlation-id", "c123") .addHeader("persistent", "true") .addHeader("priority", "3") .addHeader(Stomp.Headers.Message.TYPE, "t345") .addHeader("JMSXGroupID", "abc") .addHeader("foo", "abc") .addHeader("bar", "123") .setBody("Hello World"); conn.sendFrame(frame); TextMessage message = (TextMessage) consumer.receive(1000); Assert.assertNotNull(message); Assert.assertEquals("Hello World", message.getText()); Assert.assertEquals("JMSCorrelationID", "c123", message.getJMSCorrelationID()); Assert.assertEquals("getJMSType", "t345", message.getJMSType()); Assert.assertEquals("getJMSPriority", 3, message.getJMSPriority()); Assert.assertEquals(javax.jms.DeliveryMode.PERSISTENT, message.getJMSDeliveryMode()); Assert.assertEquals("foo", "abc", message.getStringProperty("foo")); Assert.assertEquals("bar", "123", message.getStringProperty("bar")); Assert.assertEquals("JMSXGroupID", "abc", message.getStringProperty("JMSXGroupID")); conn.disconnect(); }
@Test public void testSendMessageWithStandardHeaders() throws Exception { MessageConsumer consumer = session.createConsumer(queue); conn.connect(defUser, defPass); ClientStompFrame frame = conn.createFrame(Stomp.Commands.SEND) .addHeader(Stomp.Headers.Send.DESTINATION, getQueuePrefix() + getQueueName()) .addHeader("foo", "abc") .addHeader("bar", "123") .addHeader("correlation-id", "c123") .addHeader("persistent", "true") .addHeader("type", "t345") .addHeader("JMSXGroupID", "abc") .addHeader("priority", "3") .setBody("Hello World"); conn.sendFrame(frame); TextMessage message = (TextMessage) consumer.receive(1000); Assert.assertNotNull(message); Assert.assertEquals("Hello World", message.getText()); Assert.assertEquals("JMSCorrelationID", "c123", message.getJMSCorrelationID()); Assert.assertEquals("getJMSType", "t345", message.getJMSType()); Assert.assertEquals("getJMSPriority", 3, message.getJMSPriority()); Assert.assertEquals(javax.jms.DeliveryMode.PERSISTENT, message.getJMSDeliveryMode()); Assert.assertEquals("foo", "abc", message.getStringProperty("foo")); Assert.assertEquals("bar", "123", message.getStringProperty("bar")); Assert.assertEquals("JMSXGroupID", "abc", message.getStringProperty("JMSXGroupID")); // FIXME do we support it? // Assert.assertEquals("GroupID", "abc", amqMessage.getGroupID()); }
@Test public void testSendMessageWithStandardHeaders() throws Exception { MessageConsumer consumer = session.createConsumer(queue); conn.connect(defUser, defPass); ClientStompFrame frame = conn.createFrame(Stomp.Commands.SEND) .addHeader(Stomp.Headers.Send.DESTINATION, getQueuePrefix() + getQueueName()) .addHeader(Stomp.Headers.Message.CORRELATION_ID, "c123") .addHeader(Stomp.Headers.Message.PERSISTENT, "true") .addHeader(Stomp.Headers.Message.PRIORITY, "3") .addHeader(Stomp.Headers.Message.TYPE, "t345") .addHeader("JMSXGroupID", "abc") .addHeader("foo", "abc") .addHeader("bar", "123") .setBody("Hello World"); frame = conn.sendFrame(frame); TextMessage message = (TextMessage) consumer.receive(1000); Assert.assertNotNull(message); Assert.assertEquals("Hello World", message.getText()); Assert.assertEquals("JMSCorrelationID", "c123", message.getJMSCorrelationID()); Assert.assertEquals("getJMSType", "t345", message.getJMSType()); Assert.assertEquals("getJMSPriority", 3, message.getJMSPriority()); Assert.assertEquals(javax.jms.DeliveryMode.PERSISTENT, message.getJMSDeliveryMode()); Assert.assertEquals("foo", "abc", message.getStringProperty("foo")); Assert.assertEquals("bar", "123", message.getStringProperty("bar")); Assert.assertEquals("JMSXGroupID", "abc", message.getStringProperty("JMSXGroupID")); conn.disconnect(); }