JMSExpiration
fburlet Feb 14, 2005 6:20 AMHi,
I modified a bit the JMSSenderBean from the doc to support JMSExpiration. I just added an extra argument which is the value of the time to live and do before sending the message: msg.setJMSExpiration(timeToLive);.
I made a simple test case which creates a queue, posts a message with a timeToLive of 5 seconds, makes the thread sleep and gets the message from the queue. When I check the content of the queue through the JMX Console after the message being posted, I see that the JMSExpiration properties of the message is set to 0 whereas I set it to 5 sec !?
I'm using jboss 3.2.4 with j2sdk 1.4.2_05.
What could be wrong ?
Code for the test
// Create a queue JmsSenderLocal sender = JmsSenderUtil.getLocalHome().create(); Queue queue = JmsQueueManagerUtil.getLocalHome().create().getQueue("dummyQueue_0"); // Post a message sender.send(new TextMessageCreator("dummyMessage_0"), queue, null, 5000); // Sleep for at least 10 seconds sleep(10); // Get the message from the queue JmsReceiverLocal receiver = JmsReceiverUtil.getLocalHome().create(); assertNull(receiver.receive(queue));
Sleep is a method calling thread.sleep()
The modified send method
public void send(MessageCreator messageCreator, Queue queue, Date deliveryDate, long timeToLive) throws JMSException { if (logger.isDebugEnabled()) { logger.debug("Sending message [" + messageCreator + "] to queue [" + queue.getQueueName() + "]"); } QueueConnection connection = null; QueueSession session = null; QueueSender sender = null; try { connection = openQueueConnection(); session = connection.createQueueSession(false, QueueSession.AUTO_ACKNOWLEDGE); sender = session.createSender(queue); Message msg = messageCreator.getMessage(session); if (deliveryDate != null) { logger.debug("Message will be delivered on ["+deliveryDate+"]"); msg.setLongProperty("JMS_JBOSS_SCHEDULED_DELIVERY", deliveryDate.getTime()); } if (timeToLive >= 0) { msg.setJMSExpiration(System.currentTimeMillis() + timeToLive); } sender.send(msg); } finally { closeQueueSender(sender); closeSession(session); closeConnection(connection); } }
The message
SpyTextMessage { Header { jmsDestination : QUEUE.dummyQueue_0 jmsDeliveryMode : 2 jmsExpiration : 0 jmsPriority : 4 jmsMessageID : ID:8-11083781808063 jmsTimeStamp : 1108378180806 jmsCorrelationID: null jmsReplyTo : null jmsType : null jmsRedelivered : false jmsProperties : {} jmsPropReadWrite: true msgReadOnly : false producerClientId: ID:8 } Body { text :dummyMessage_0 } }
If you need the log in trace mode just tell me and I will post it.
Regards,
Fred.