I have some code that adds messages to a
JMS queue and my listener seems to be receiving them ok. However, when I look
at the server log I am getting some warnings and exceptions:
09:53:37,864
WARN [TCLStack] Attempt to pop empty stack ingored
java.util.EmptyStackException
at java.util.Stack.peek(Stack.java:79)
at java.util.Stack.pop(Stack.java:61)
at org.jboss.util.TCLStack.pop(TCLStack.java:96)
at org.jboss.ejb.plugins.jms.JMSContainerInvoker.invoke(JMSContainerInvoker.java:696)
at org.jboss.ejb.plugins.jms.JMSContainerInvoker$MessageListenerImpl.onMessage(JMSContainerInvoker.java:980)
at org.jboss.jms.asf.StdServerSession.onMessage(StdServerSession.java:238)
at org.jboss.mq.SpyMessageConsumer.sessionConsumerProcessMessage(SpyMessageConsumer.java:561)
at org.jboss.mq.SpyMessageConsumer.addMessage(SpyMessageConsumer.java:377)
at org.jboss.mq.SpySession.run(SpySession.java:252)
at org.jboss.jms.asf.StdServerSession.run(StdServerSession.java:177)
at EDU.oswego.cs.dl.util.concurrent.PooledExecutor$Worker.run(PooledExecutor.java:642)
at java.lang.Thread.run(Thread.java:536)
09:53:37,874
ERROR [StdServerSession] failed to commit/rollback
javax.transaction.xa.XAException
at org.jboss.mq.SpyXAResource.commit(SpyXAResource.java:105)
at org.jboss.jms.asf.StdServerSession.onMessage(StdServerSession.java:289)
at org.jboss.mq.SpyMessageConsumer.sessionConsumerProcessMessage(SpyMessageConsumer.java:561)
at org.jboss.mq.SpyMessageConsumer.addMessage(SpyMessageConsumer.java:377)
at org.jboss.mq.SpySession.run(SpySession.java:252)
at org.jboss.jms.asf.StdServerSession.run(StdServerSession.java:177)
at EDU.oswego.cs.dl.util.concurrent.PooledExecutor$Worker.run(PooledExecutor.java:642)
at java.lang.Thread.run(Thread.java:536)
Any ideas why I am getting this? When I restart the server the messages are
still in the queue and onMessage is called again for each of them, which means
the messages are not being removed from the queue I assume. I am using JBoss
3.0.0 and here are the relevant snippets of code:
//add message to queue
MapMessage msg = qSess.createMapMessage();
msg.setJMSCorrelationID("UploadManager");
qSender.send(msg, javax.jms.DeliveryMode.PERSISTENT, javax.jms.Message.DEFAULT_PRIORITY,
0 );
AND
//get message off of the queue
public void onMessage(Message message) {
if(! (message instanceof MapMessage)){
System.err.println("wrong type of message
received");
return;
}
MapMessage msg = (MapMessage)message;
System.err.println("Got Message: " + msg.toString());
try{
message.acknowledge();
//message processing that seems to work
}catch(JMSException e){
e.printStackTrace(System.err);
}
}
Your help is greatly appreciated,
Emily
|