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.