package org.jboss.mq.server;
import java.util.ArrayList;
import javax.jms.JMSException;
import org.jboss.mq.SpyDestination;
import org.jboss.mq.SpyMessage;
import org.jboss.mq.Subscription;
public class JMSQueue extends JMSDestination
{
public BasicQueue queue;
public JMSQueue(SpyDestination dest, ClientConsumer temporary, JMSDestinationManager server, BasicQueueParameters parameters) throws JMSException
{
super(dest, temporary, server, parameters);
if (temporaryDestination == null)
{
queue = new PersistentQueue(server, dest, parameters);
server.getPersistenceManager().restoreQueue(this, dest);
}
else
{
queue = new BasicQueue(server, destination.toString(), parameters);
}
queue.createMessageCounter(dest.getName(), null, false, false, parameters.messageCounterHistoryDayLimit);
}
public void addSubscriber(Subscription sub) throws JMSException
{
queue.addSubscriber(sub);
}
public void removeSubscriber(Subscription sub)
{
queue.removeSubscriber(sub);
}
public void nackMessages(Subscription sub)
{
queue.nackMessages(sub);
}
public void addReceiver(Subscription sub) throws JMSException
{
queue.addReceiver(sub);
}
public void removeReceiver(Subscription sub)
{
queue.removeReceiver(sub);
}
public void restoreMessage(MessageReference messageRef)
{
try
{
SpyMessage spyMessage = messageRef.getMessage();
updateNextMessageId(spyMessage);
messageRef.queue = queue;
queue.restoreMessage(messageRef);
}
catch (JMSException e)
{
cat.error("Could not restore message:", e);
}
}
public void restoreMessage(SpyMessage message)
{
try
{
updateNextMessageId(message);
MessageReference messageRef = server.getMessageCache().add(message, queue, MessageReference.STORED);
queue.restoreMessage(messageRef);
}
catch (JMSException e)
{
cat.error("Could not restore message:", e);
}
}
public SpyMessage[] browse(String selector) throws JMSException
{
return queue.browse(selector);
}
public String toString()
{
return "JMSDestination:" + destination;
}
public void acknowledge(org.jboss.mq.AcknowledgementRequest req, Subscription sub, org.jboss.mq.pm.Tx txId)
throws JMSException
{
queue.acknowledge(req, txId);
}
public void addMessage(SpyMessage mes, org.jboss.mq.pm.Tx txId) throws JMSException
{
mes.header.messageId = nextMessageId();
MessageReference message = server.getMessageCache().add(mes, queue, MessageReference.NOT_STORED);
queue.addMessage(message, txId);
}
public org.jboss.mq.SpyMessage receive(org.jboss.mq.Subscription sub, boolean wait) throws javax.jms.JMSException
{
return queue.receive(sub, wait);
}
public boolean isInUse()
{
return queue.isInUse();
}
public void close() throws JMSException
{
queue.stop();
server.getPersistenceManager().closeQueue(this, getSpyDestination());
}
public void removeAllMessages() throws JMSException
{
queue.removeAllMessages();
}
public MessageCounter[] getMessageCounter()
{
ArrayList array = new ArrayList();
MessageCounter counter = queue.getMessageCounter();
if (counter != null)
array.add(counter);
return (MessageCounter[]) array.toArray(new MessageCounter[0]);
}
}