Package org.activemq.service.impl

Source Code of org.activemq.service.impl.DurableTopicMessageContainer

/**
*
* Copyright 2004 Protique Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
**/
package org.activemq.service.impl;

import javax.jms.JMSException;

import org.activemq.message.ActiveMQMessage;
import org.activemq.message.ConsumerInfo;
import org.activemq.message.MessageAck;
import org.activemq.service.MessageContainerAdmin;
import org.activemq.service.MessageIdentity;
import org.activemq.service.Subscription;
import org.activemq.service.TopicMessageContainer;
import org.activemq.store.RecoveryListener;
import org.activemq.store.TopicMessageStore;

/**
* A default implementation of a Durable Topic based
* {@link org.activemq.service.MessageContainer}
* which acts as an adapter between the {@link org.activemq.service.MessageContainerManager}
* requirements and those of the persistent {@link TopicMessageStore} implementations.
*
* @version $Revision: 1.1.1.1 $
*/
public class DurableTopicMessageContainer implements TopicMessageContainer, MessageContainerAdmin {

    private TopicMessageStore messageStore;
    private String destinationName;
    private MessageIdentity lastMessageIdentity;

    public DurableTopicMessageContainer(TopicMessageStore messageStore, String destinationName) {
        this.messageStore = messageStore;
        this.destinationName = destinationName;
    }

    public String getDestinationName() {
        return destinationName;
    }

    public void addMessage(ActiveMQMessage message) throws JMSException {
        messageStore.addMessage(message);
        lastMessageIdentity = message.getJMSMessageIdentity();
    }

    public void delete(MessageIdentity messageID, MessageAck ack) throws JMSException {
        // only called in MessagePointer and so shouldn't really delete
        //messageStore.removeMessage(new MessageIdentity(messageID));
    }

    public boolean containsMessage(MessageIdentity messageIdentity) throws JMSException {
        /** TODO: make more optimal implementation */
        return getMessage(messageIdentity) != null;
    }

    public ActiveMQMessage getMessage(MessageIdentity messageID) throws JMSException {
        return messageStore.getMessage(messageID);
    }

    public void registerMessageInterest(MessageIdentity messageIdentity) throws JMSException {
        messageStore.incrementMessageCount(messageIdentity);
    }

    public void unregisterMessageInterest(MessageIdentity ack) throws JMSException {
        messageStore.decrementMessageCountAndMaybeDelete(ack);
    }


    public void setLastAcknowledgedMessageID(Subscription subscription, MessageIdentity messageIdentity) throws JMSException {
        messageStore.setLastAcknowledgedMessageIdentity(subscription.getPersistentKey(), messageIdentity);
    }

    public void recoverSubscription(final Subscription subscription) throws JMSException {
        messageStore.recoverSubscription(subscription.getPersistentKey(), lastMessageIdentity, new RecoveryListener() {
            public void recoverMessage(MessageIdentity messageIdentity) throws JMSException {
                subscription.addMessage(DurableTopicMessageContainer.this, getMessage(messageIdentity));
            }
        });
    }

    public void storeSubscription(ConsumerInfo info, Subscription subscription) throws JMSException {
        messageStore.setSubscriberEntry(info, subscription.getSubscriptionEntry());
    }

    public void start() throws JMSException {
        lastMessageIdentity = messageStore.getLastestMessageIdentity();
        messageStore.start();
    }

    public void stop() throws JMSException {
        messageStore.stop();
    }

    /**
     * @see org.activemq.service.MessageContainer#getMessageContainerAdmin()
     */
    public MessageContainerAdmin getMessageContainerAdmin() {
        return this;
    }

    /**
     * @see org.activemq.service.MessageContainerAdmin#empty()
     */
    public void empty() throws JMSException {
        messageStore.removeAllMessages();
    }

    /**
     * @see org.activemq.service.MessageContainer#isDeadLetterQueue()
     */
    public boolean isDeadLetterQueue() {
        return false;
    }

    public void deleteSubscription(String sub) throws JMSException {
        messageStore.deleteSubscription(sub);     
    }
}
TOP

Related Classes of org.activemq.service.impl.DurableTopicMessageContainer

TOP
Copyright © 2018 www.massapi.com. 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.