Hi,
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.
View the original post :
http://www.jboss.org/index.html?module=bb&op=viewtopic&p=3866434#3866434
Reply to the post :
http://www.jboss.org/index.html?module=bb&op=posting&mode=reply&p=3866434
-------------------------------------------------------
SF email is sponsored by - The IT Product Guide
Read honest & candid reviews on hundreds of IT Products from real users.
Discover which products truly live up to the hype. Start reading now.
http://ads.osdn.com/?ad_id=6595&alloc_id=14396&op=click
_______________________________________________
JBoss-user mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/jboss-user