Package org.activemq.service

Examples of org.activemq.service.QueueListEntry


                        if (!subscriptions.isEmpty()) {
                            message = (ActiveMQMessage) queue
                                    .dequeue(sleepTime);
                            if (message != null) {
                                if (!message.isExpired()) {
                                    QueueListEntry entry = subscriptions.getFirstEntry();
                                    while (entry != null) {
                                        TransientQueueSubscription ts = (TransientQueueSubscription) entry.getElement();
                                        if (ts.isTarget(message)) {
                                            targeted = true;
                                            if (message.isMessagePart()) {
                                                TransientQueueSubscription sameTarget = (TransientQueueSubscription) messageParts
                                                        .get(message.getParentMessageID());
View Full Code Here


    }

    private TransientQueueSubscription findMatch(ConsumerInfo info) throws JMSException {
        TransientQueueSubscription result = null;
        synchronized(subscriptionMutex){
            QueueListEntry entry = subscriptions.getFirstEntry();
            while (entry != null) {
                TransientQueueSubscription ts = (TransientQueueSubscription) entry.getElement();
                if (ts.getConsumerInfo().equals(info)) {
                    result = ts;
                    break;
                }
                entry = subscriptions.getNextEntry(entry);
View Full Code Here

     */
    private synchronized void doAdvisoryDispatchMessage(ActiveMQMessage message) {
        try {
            if (message != null && message.isAdvisory() && !message.isExpired()) {
                synchronized (subscriptionMutex) {
                    QueueListEntry entry = subscriptions.getFirstEntry();
                    while (entry != null) {
                        TransientQueueSubscription ts = (TransientQueueSubscription) entry.getElement();
                        if (ts.isTarget(message)) {
                            ts.doDispatch(message);
                            break;
                        }
                        entry = subscriptions.getNextEntry(entry);
View Full Code Here

     * @throws JMSException
     */
    private void doDelete(MessageIdentity messageID) throws JMSException {
        MessageIdentity storedIdentity=null;
        synchronized( this ) {
          QueueListEntry entry = deliveredMessages.getFirstEntry();
          while (entry != null) {
              MessageIdentity identity = (MessageIdentity) entry.getElement();
              if (messageID.equals(identity)) {
                  deliveredMessages.remove(entry);
                  storedIdentity=identity;
                  break;
              }
              entry = deliveredMessages.getNextEntry(entry);
          }
         
          if (storedIdentity==null) {
              // maybe the messages have not been delivered yet
              // as we are recovering from a previous transaction log
              entry = messagesToBeDelivered.getFirstEntry();
              while (entry != null) {
                  MessageIdentity identity = (MessageIdentity) entry.getElement();
                  if (messageID.equals(identity)) {                     
                        messagesToBeDelivered.remove(entry);
                      storedIdentity=identity;
                      break;
                  }
View Full Code Here

     *
     * @throws JMSException
     */
    public void clear() throws JMSException {
        synchronized (lock) {
            QueueListEntry entry = messagePtrs.getFirstEntry();
            while (entry != null) {
                MessagePointer pointer = (MessagePointer) entry.getElement();
                pointer.clear();
                entry = messagePtrs.getNextEntry(entry);
            }
            messagePtrs.clear();
        }
View Full Code Here

     *
     * @throws JMSException
     */
    public void reset() throws JMSException {
        synchronized (lock) {
            QueueListEntry entry = messagePtrs.getFirstEntry();
            while (entry != null) {
                MessagePointer pointer = (MessagePointer) entry.getElement();
                if (pointer.isDispatched() && !pointer.isDeleted()) {
                    pointer.reset();
                    pointer.setRedelivered(true);
                }
                else {
View Full Code Here

    public void messageConsumed(final MessageAck ack) throws JMSException {
        //remove up to this message
        int count = 0;
        boolean found = false;
        synchronized (lock) {
            QueueListEntry entry = messagePtrs.getFirstEntry();
            while (entry != null) {
                final MessagePointer pointer = (MessagePointer) entry.getElement();
                count++;
                // If in transaction: only consume the message acked.
                // If not in transaction: consume all previously delivered messages.
                if (!ack.isPartOfTransaction() || pointer.getMessageIdentity().equals(ack.getMessageIdentity())) {
                    if ((ack.isExpired() || ack.isMessageRead()) && !browser) {
                        pointer.delete(ack);//delete message from the container (if possible)
                    }
                    if (!ack.isMessageRead() && !browser) {
                        // It was a NACK.
                        pointer.reset();
                        pointer.setRedelivered(true);
                    }
                    else {
                        unconsumedMessagesDispatched.decrement();
                        // We may have to undo the delivery..
                        TransactionManager.getContexTransaction().addPostRollbackTask(new TransactionTask() {
                            public void execute() throws Throwable {
                                unconsumedMessagesDispatched.increment();
                                pointer.reset();
                                pointer.setRedelivered(true);
                                dispatch.wakeup(SubscriptionImpl.this);
                            }
                        });
                        final QueueListEntry theEntry = entry;
                        TransactionManager.getContexTransaction().addPostCommitTask(new TransactionTask() {
                            public void execute() throws Throwable {
                                messagePtrs.remove(theEntry);
                                if ((ack.isExpired() || ack.isMessageRead()) && !browser) {
                                    if (ack.isExpired() && !pointer.getContainer().isDeadLetterQueue()) {
View Full Code Here

        if (usePrefetch) {
            return getMessagesWithPrefetch();
        }
        List tmpList = new ArrayList();
        synchronized (lock) {
            QueueListEntry entry = messagePtrs.getFirstEntry();
            while (entry != null) {
                MessagePointer pointer = (MessagePointer) entry.getElement();
                if (!pointer.isDispatched()) {
                    ActiveMQMessage msg = pointer.getContainer().getMessage(pointer.getMessageIdentity());
                    if (msg != null) {
                        if (pointer.isDispatched() || pointer.isRedelivered()) {
                            //already dispatched - so mark as redelivered
                            msg.setJMSRedelivered(true);
                            if (redeliveryPolicy.isBackOffMode()
                                    && msg.getDeliveryCount() < redeliveryPolicy.getMaximumRetryCount()) {
                                long sleepTime = redeliveryPolicy.getInitialRedeliveryTimeout();
                                sleepTime *= (msg.getDeliveryCount() * redeliveryPolicy.getBackOffIncreaseRate());
                                try {
                                    Thread.sleep(sleepTime);
                                }
                                catch (InterruptedException e) {
                                }
                            }
                            //incremenent delivery count
                            msg.incrementDeliveryCount();
                        }
                        if (!pointer.getContainer().isDeadLetterQueue()
                                && (msg.isExpired() || msg.getDeliveryCount() >= redeliveryPolicy
                                        .getMaximumRetryCount())) {
                            if (msg.isExpired()) {
                                log.warn("Message: " + msg + " has expired");
                            }
                            else {
                                log.warn("Message: " + msg + " exceeded retry count: " + msg.getDeliveryCount());
                            }
                            deadLetterPolicy.sendToDeadLetter(msg);
                            QueueListEntry discarded = entry;
                            entry = messagePtrs.getPrevEntry(discarded);
                            messagePtrs.remove(discarded);
                        }
                        else {
                            pointer.setDispatched(true);
                            msg.setDispatchedFromDLQ(pointer.getContainer().isDeadLetterQueue());
                            tmpList.add(msg);
                        }
                    }
                    else {
                        //the message is probably expired
                        log.info("Message probably expired: " + msg);
                        QueueListEntry discarded = entry;
                        entry = messagePtrs.getPrevEntry(discarded);
                        messagePtrs.remove(discarded);
                        if (msg != null) {
                            deadLetterPolicy.sendToDeadLetter(msg);
                        }
View Full Code Here

    protected ActiveMQMessage[] getMessagesWithPrefetch() throws JMSException {
       
        List tmpList = new ArrayList();
        synchronized (lock) {
            QueueListEntry entry = messagePtrs.getFirstEntry();
            int count = 0;
            boolean fragmentedMessages = false;
            int maxNumberToDispatch = prefetchLimit - unconsumedMessagesDispatched.get();
            while (entry != null && (count < maxNumberToDispatch || fragmentedMessages)) {
                MessagePointer pointer = (MessagePointer) entry.getElement();
                if (!pointer.isDispatched()) {
                    ActiveMQMessage msg = pointer.getContainer().getMessage(pointer.getMessageIdentity());
                    if (msg != null && !msg.isExpired()) {
                        if (pointer.isDispatched() || pointer.isRedelivered()) {
                            //already dispatched - so mark as redelivered
                            msg.setJMSRedelivered(true);
                        }
                        pointer.setDispatched(true);
                        tmpList.add(msg);
                        fragmentedMessages = msg.isMessagePart() && !msg.isLastMessagePart();
                        unconsumedMessagesDispatched.increment();
                        count++;
                    }
                    else {
                        //the message is probably expired
                        log.info("Message probably expired: " + msg);
                        QueueListEntry discarded = entry;
                        entry = messagePtrs.getPrevEntry(discarded);
                        messagePtrs.remove(discarded);
                        if (msg != null) {
                            deadLetterPolicy.sendToDeadLetter(msg);
                        }
View Full Code Here

     */
    public MemoryManageable remove(Object id) {
        MemoryManageable result = null;
        for (int i=0; i<10; ++i) {
          //QueueListEntry entry = internalList.getFirstEntry();
          QueueListEntry entry = prioritizedPackets[i].getFirstEntry();
          try {
              while (entry != null) {
                  MemoryManageable p = (MemoryManageable) entry.getElement();
                  if (p.getMemoryId().equals(id)) {
                      result = p;
                      remove(p);
                      break;
                  }
View Full Code Here

TOP

Related Classes of org.activemq.service.QueueListEntry

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.