Package org.codehaus.activemq.service

Examples of org.codehaus.activemq.service.Subscription


    public Subscription getSubscription(String consumerId) {
        return (Subscription) subscriptions.get(consumerId);
    }

    public Subscription removeSubscription(String consumerId) {
        Subscription subscription = (Subscription) subscriptions.remove(consumerId);
        if (subscription != null) {
            destinationIndex.remove(subscription.getDestination(), subscription);
        }
        return subscription;
    }
View Full Code Here


    public Iterator subscriptionIterator() {
        return subscriptions.values().iterator();
    }

    public Subscription makeSubscription(Dispatcher dispatcher,BrokerClient client, ConsumerInfo info, Filter filter) {
        Subscription subscription = createSubscription(dispatcher, client,info, filter);
        subscriptions.put(info.getConsumerId(), subscription);
        destinationIndex.put(subscription.getDestination(), subscription);
        return subscription;
    }
View Full Code Here

    }

    public void removeMessageConsumer(BrokerClient client, ConsumerInfo info) throws JMSException {
        // we should not remove a durable topic subscription from the subscriptionContainer
        // unless via the deleteSubscription() method
        Subscription sub = (Subscription) activeSubscriptions.remove(info.getConsumerId());
        if (sub != null) {
            sub.setActive(false);
            dispatcher.removeActiveSubscription(client, sub);
        }
    }
View Full Code Here

     * @throws javax.jms.JMSException if the subscriber doesn't exist or is still active
     */
    public void deleteSubscription(String clientId, String subscriberName) throws JMSException {
        boolean subscriptionFound = false;
        for (Iterator i = subscriptionContainer.subscriptionIterator();i.hasNext();) {
            Subscription sub = (Subscription) i.next();
            if (sub.getClientId().equals(clientId) && sub.getSubscriberName().equals(subscriberName)) {
                //only delete if not active
                if (sub.isActive()) {
                    throw new JMSException("The Consummer " + subscriberName + " is still active");
                }
                else {
                    subscriptionContainer.removeSubscription(sub.getConsumerId());
                    sub.clear();
                    subscriptionFound = true;
                }
            }
        }
        if (!subscriptionFound) {
View Full Code Here

            // subscribers as they may come along later
            // plus we don't pre-load subscription information
            container.addMessage(message);
            if (!matchingSubscriptions.isEmpty()) {
                for (Iterator i = matchingSubscriptions.iterator();i.hasNext();) {
                    Subscription sub = (Subscription) i.next();
                    if (sub.isTarget(message)) {
                        sub.addMessage(container, message);
                    }
                }
                updateSendStats(client, message);
            }
        }
View Full Code Here

     * @param ack
     * @throws javax.jms.JMSException
     */
    public void acknowledgeMessage(BrokerClient client, MessageAck ack) throws JMSException {
        if (ack.getDestination().isTopic()) {
            Subscription sub = (Subscription) activeSubscriptions.get(ack.getConsumerId());
            if (sub != null) {
                sub.messageConsumed(ack);
            }
        }
    }
View Full Code Here

        }
    }

    public void acknowledgeTransactedMessage(BrokerClient client, String transactionId, MessageAck ack)
            throws JMSException {
        Subscription sub = (Subscription) activeSubscriptions.get(ack.getConsumerId());
        if (sub != null) {
            sub.onAcknowledgeTransactedMessageBeforeCommit(ack);
        }
    }
View Full Code Here

            sub.onAcknowledgeTransactedMessageBeforeCommit(ack);
        }
    }

    public void redeliverMessage(BrokerClient client, MessageAck ack) throws JMSException {
        Subscription sub = (Subscription) activeSubscriptions.get(ack.getConsumerId());
        if (sub != null) {
            // lets find all the containers that contain this message
            for (Iterator iter = messageContainers.values().iterator();iter.hasNext();) {
                MessageContainer container = (MessageContainer) iter.next();
                if (container.containsMessage(ack.getMessageIdentity())) {
                    sub.redeliverMessage(container, ack);
                    // we only need to redeliver the message from one container
                    break;
                }
            }
        }
View Full Code Here

    protected void doAddMessageConsumer(BrokerClient client, ConsumerInfo info) throws JMSException {
        boolean shouldRecover = false;
        if (info.getConsumerName() != null && info.getClientId() != null) {
            for (Iterator iter = activeSubscriptions.values().iterator();iter.hasNext();) {
                Subscription subscription = (Subscription) iter.next();
                if (subscription.isSameDurableSubscription(info)) {
                    throw new DuplicateDurableSubscriptionException(info);
                }
            }
        }
        Subscription subscription = subscriptionContainer.getSubscription(info.getConsumerId());
        if (subscription != null && subscription.isDurableTopic()) {
            //check the subscription hasn't changed
            if (!subscription.getDestination().equals(subscription.getDestination())
                    || !subscription.getSelector().equals(info.getSelector())) {
                subscriptionContainer.removeSubscription(info.getConsumerId());
                subscription.clear();
                subscription = subscriptionContainer.makeSubscription(dispatcher, client,info, createFilter(info));
            }
        }
        else {
            subscription = subscriptionContainer.makeSubscription(dispatcher, client,info, createFilter(info));
            shouldRecover = true;
        }
        subscription.setActiveConsumer(client,info);
        activeSubscriptions.put(info.getConsumerId(), subscription);
        dispatcher.addActiveSubscription(client, subscription);
        if (subscription.isWildcard()) {
            synchronized (this) {
                if (!loadedMessageContainers) {
                    loadAllMessageContainers();
                    loadedMessageContainers = true;
                }
            }
        }
        else {
            // load the container
            getContainer(subscription.getDestination().getPhysicalName());
        }
        Set containers = destinationMap.get(subscription.getDestination());
        for (Iterator iter = containers.iterator();iter.hasNext();) {
            TopicMessageContainer container = (TopicMessageContainer) iter.next();
            if (container instanceof DurableTopicMessageContainer) {
                ((DurableTopicMessageContainer) container).storeSubscription(info, subscription);
            }
        }
        if (shouldRecover) {
            recoverSubscriptions(subscription);
        }
        // lets not make the subscription active until later
        // as we can't start dispatching until we've sent back the receipt
        // TODO we might wish to register a post-receipt action here
        // to perform the wakeup
        subscription.setActive(true);
        //dispatcher.wakeup(subscription);
    }
View Full Code Here

     * @param client
     * @param info
     * @throws javax.jms.JMSException
     */
    public void removeMessageConsumer(BrokerClient client, ConsumerInfo info) throws JMSException {
        Subscription sub = (Subscription) activeSubscriptions.remove(info.getConsumerId());
        if (sub != null) {
            sub.setActive(false);
            dispatcher.removeActiveSubscription(client, sub);
            subscriptionContainer.removeSubscription(info.getConsumerId());
            sub.clear();
        }
    }
View Full Code Here

TOP

Related Classes of org.codehaus.activemq.service.Subscription

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.