Search in sources :

Example 1 with TopicException

use of com.swiftmq.swiftlet.topic.TopicException in project swiftmq-ce by iitsoftware.

the class TopicManagerImpl method deleteTopic.

public synchronized void deleteTopic(String topicName) throws TopicException {
    if (!isTopicDefined(topicName))
        throw new TopicException("Topic '" + topicName + "' is unknown");
    if (ctx.traceSpace.enabled)
        ctx.traceSpace.trace(getName(), "deleteTopic: deleting topic: " + topicName);
    ctx.logSwiftlet.logInformation(getName(), "delete topic: " + topicName);
    String[] tokenizedName = tokenizeTopicName(topicName, TOPIC_DELIMITER);
    String rootName = TOPIC_PREFIX + tokenizedName[0];
    TopicBroker rootBroker = (TopicBroker) rootBrokers.get(rootName);
    rootBroker.removeTopic(topicName, tokenizedName);
    if (ctx.jndiSwiftlet != null)
        ctx.jndiSwiftlet.deregisterJNDIObject(topicName);
}
Also used : TopicException(com.swiftmq.swiftlet.topic.TopicException)

Example 2 with TopicException

use of com.swiftmq.swiftlet.topic.TopicException in project swiftmq-ce by iitsoftware.

the class TopicManagerImpl method createTopicAdministratively.

private synchronized void createTopicAdministratively(String topicName) throws TopicException {
    if (isTopicDefined(topicName))
        throw new TopicException("Topic '" + topicName + "' is already defined");
    if (ctx.traceSpace.enabled)
        ctx.traceSpace.trace(getName(), "createTopic: creating topic: " + topicName);
    ctx.logSwiftlet.logInformation(getName(), "create topic: " + topicName);
    String[] tokenizedName = tokenizeTopicName(topicName, TOPIC_DELIMITER);
    String rootName = TOPIC_PREFIX + tokenizedName[0];
    TopicBroker rootBroker = (TopicBroker) rootBrokers.get(rootName);
    if (rootBroker == null) {
        try {
            ctx.queueManager.createQueue(rootName, this);
        } catch (Exception e) {
            throw new TopicException(e.getMessage());
        }
        rootBroker = (TopicBroker) rootBrokers.get(rootName);
    }
    rootBroker.addTopic(topicName, tokenizedName);
    if (ctx.jndiSwiftlet != null)
        registerJNDI(topicName, new TopicImpl(topicName));
}
Also used : TopicException(com.swiftmq.swiftlet.topic.TopicException) TopicImpl(com.swiftmq.jms.TopicImpl) InvalidDestinationException(javax.jms.InvalidDestinationException) IOException(java.io.IOException) JMSException(javax.jms.JMSException) SwiftletException(com.swiftmq.swiftlet.SwiftletException) AuthenticationException(com.swiftmq.swiftlet.auth.AuthenticationException) TopicException(com.swiftmq.swiftlet.topic.TopicException)

Example 3 with TopicException

use of com.swiftmq.swiftlet.topic.TopicException in project swiftmq-ce by iitsoftware.

the class SourceLink method verifyLocalAddress.

public void verifyLocalAddress() throws AuthenticationException, QueueException, TopicException, InvalidSelectorException {
    if (!dynamic) {
        // This is for the case of reconnecting to a Durable Subscriber without specifying a Source in the attach frame.
        if (localAddress == null) {
            String topicName = ctx.topicManager.getDurableTopicName(getName(), mySessionHandler.getVersionedConnection().getActiveLogin());
            if (topicName != null)
                localAddress = new AddressString(topicName);
            durability = TerminusDurability.CONFIGURATION;
        }
        super.verifyLocalAddress();
    }
    if (receiver == null) {
        MessageSelector msel = null;
        if (messageSelector != null) {
            msel = new MessageSelector(messageSelector);
            msel.compile();
        }
        if (dynamic) {
            expiryPolicy = TerminusExpiryPolicy.LINK_DETACH;
            durability = TerminusDurability.NONE;
            // sndSettleMode = SenderSettleMode.SETTLED.getValue();       // SETTLED is only possible with temp queues because bulk mode in message proc do not delete from persistent store
            queueName = ctx.queueManager.createTemporaryQueue();
            receiver = ctx.queueManager.createQueueReceiver(queueName, mySessionHandler.getVersionedConnection().getActiveLogin(), msel);
        } else {
            if (isQueue) {
                expiryPolicy = TerminusExpiryPolicy.LINK_DETACH;
                durability = TerminusDurability.CONFIGURATION;
                // sndSettleMode = SenderSettleMode.UNSETTLED.getValue();
                receiver = ctx.queueManager.createQueueReceiver(getLocalAddress().getValueString(), mySessionHandler.getVersionedConnection().getActiveLogin(), msel);
            } else {
                if (durability.getValue() == TerminusDurability.CONFIGURATION.getValue() || durability.getValue() == TerminusDurability.UNSETTLED_STATE.getValue()) {
                    if (!expiryPolicy.getValue().equals(TerminusExpiryPolicy.LINK_DETACH.getValue()))
                        expiryPolicy = TerminusExpiryPolicy.NEVER;
                    durability = TerminusDurability.CONFIGURATION;
                    // sndSettleMode = SenderSettleMode.UNSETTLED.getValue();
                    queueName = ctx.topicManager.subscribeDurable(name, (TopicImpl) getLocalDestination(), msel, noLocal, mySessionHandler.getVersionedConnection().getActiveLogin());
                } else {
                    expiryPolicy = TerminusExpiryPolicy.LINK_DETACH;
                    queueName = ctx.queueManager.createTemporaryQueue();
                    // sndSettleMode = SenderSettleMode.SETTLED.getValue(); // SETTLED is only possible with temp queues because bulk mode in message proc do not delete from persistent store
                    subscriberId = ctx.topicManager.subscribe((TopicImpl) localDestination, msel, noLocal, queueName, mySessionHandler.getVersionedConnection().getActiveLogin());
                }
                receiver = ctx.queueManager.createQueueReceiver(queueName, mySessionHandler.getVersionedConnection().getActiveLogin(), null);
            }
        }
    }
    if (remoteUnsettled != null) {
        final AbstractQueue aq = ctx.queueManager.getQueueForInternalUse(receiver.getQueueName());
        if (ctx.traceSpace.enabled)
            ctx.traceSpace.trace(ctx.amqpSwiftlet.getName(), toString() + "/recovery, abstractQueue=" + aq);
        DataByteArrayInputStream dbis = new DataByteArrayInputStream();
        for (Iterator iter = remoteUnsettled.entrySet().iterator(); iter.hasNext(); ) {
            Map.Entry entry = (Map.Entry) iter.next();
            AMQPBinary deliveryTag = (AMQPBinary) entry.getKey();
            DeliveryStateIF deliveryStateIF = null;
            try {
                deliveryStateIF = DeliveryStateFactory.create((AMQPList) entry.getValue());
            } catch (Exception e) {
                throw new QueueException("Unable to create delivery tag");
            }
            final MessageIndex messageIndex = new MessageIndex();
            dbis.setBuffer(deliveryTag.getValue());
            try {
                messageIndex.readContent(dbis);
            } catch (IOException e) {
                throw new QueueException("Unable to convert delivery tag into a message index");
            }
            if (ctx.traceSpace.enabled)
                ctx.traceSpace.trace(ctx.amqpSwiftlet.getName(), toString() + "/recovery, messageIndex=" + messageIndex + ", deliveryStateIF=" + deliveryStateIF);
            if (deliveryStateIF != null) {
                deliveryStateIF.accept(new DeliveryStateVisitorAdapter() {

                    public void visit(Accepted accepted) {
                        try {
                            if (aq != null) {
                                MessageIndex indexEntry = aq.getIndexEntry(messageIndex);
                                if (indexEntry != null) {
                                    aq.removeMessageByIndex(indexEntry);
                                    if (ctx.traceSpace.enabled)
                                        ctx.traceSpace.trace(ctx.amqpSwiftlet.getName(), toString() + "/recovery, messageIndex=" + indexEntry + ", removed");
                                } else {
                                    if (ctx.traceSpace.enabled)
                                        ctx.traceSpace.trace(ctx.amqpSwiftlet.getName(), toString() + "/recovery, messageIndex=" + messageIndex + ", NOT FOUND!");
                                }
                            }
                        } catch (QueueException e) {
                            e.printStackTrace();
                            if (ctx.traceSpace.enabled)
                                ctx.traceSpace.trace(ctx.amqpSwiftlet.getName(), toString() + "/recovery, messageIndex=" + messageIndex + ", exception=" + e);
                        }
                    }
                });
            }
        }
    }
}
Also used : AddressString(com.swiftmq.amqp.v100.generated.messaging.message_format.AddressString) AddressString(com.swiftmq.amqp.v100.generated.messaging.message_format.AddressString) IOException(java.io.IOException) DataByteArrayInputStream(com.swiftmq.tools.util.DataByteArrayInputStream) IOException(java.io.IOException) AuthenticationException(com.swiftmq.swiftlet.auth.AuthenticationException) InvalidSelectorException(javax.jms.InvalidSelectorException) TopicException(com.swiftmq.swiftlet.topic.TopicException) Iterator(java.util.Iterator) MessageSelector(com.swiftmq.ms.MessageSelector) TopicImpl(com.swiftmq.jms.TopicImpl) HashMap(java.util.HashMap) Map(java.util.Map)

Example 4 with TopicException

use of com.swiftmq.swiftlet.topic.TopicException in project swiftmq-ce by iitsoftware.

the class TopicManagerImpl method subscribeDurable.

private synchronized String subscribeDurable(String durableName, TopicImpl topic, Selector selector, boolean noLocal, ActiveLogin activeLogin, Entity newEntity, boolean verifyAuth) throws AuthenticationException, QueueException, QueueAlreadyDefinedException, UnknownQueueException, TopicException {
    String topicName = null;
    try {
        topicName = topic.getTopicName();
    } catch (JMSException ignored) {
    }
    if (verifyAuth)
        ctx.authSwiftlet.verifyTopicDurableSubscriberCreation(topicName, activeLogin.getLoginId());
    String durableQueueName = DurableSubscription.createDurableQueueName(activeLogin.getClientId(), durableName);
    if (ctx.traceSpace.enabled)
        ctx.traceSpace.trace(getName(), "subscribeDurable: topic = " + topicName + ", durableQueueName = " + durableQueueName);
    DurableSubscription durable = (DurableSubscription) durableSubscriptions.get(durableQueueName);
    if (durable != null && durable.hasChanged(topicName, selector, noLocal)) {
        if (ctx.traceSpace.enabled)
            ctx.traceSpace.trace(getName(), "subscribeDurable: durable has changed, deleting ...");
        unsubscribe(durable.getTopicSubscription().getSubscriberId());
        ctx.queueManager.purgeQueue(durableQueueName);
        ctx.queueManager.deleteQueue(durableQueueName, false);
        durableSubscriptions.remove(durableQueueName);
        try {
            durableStore.deleteDurableStoreEntry(durable.getClientId(), durable.getDurableName());
        } catch (Exception e) {
            if (ctx.traceSpace.enabled)
                ctx.traceSpace.trace(getName(), "subscribeDurable: error deleting durable subscription: " + e);
            throw new TopicException("error deleting durable subscription: " + e);
        }
        durable = null;
        ctx.activeDurableList.removeDynamicEntity(durable);
    }
    if (durable == null) {
        durable = new DurableSubscription(activeLogin.getClientId(), durableName, topicName, selector, noLocal);
        if (ctx.traceSpace.enabled)
            ctx.traceSpace.trace(getName(), "subscribeDurable: creating new durable = " + durable);
        durableSubscriptions.put(durableQueueName, durable);
        try {
            durableStore.insertDurableStoreEntry(durable.getDurableStoreEntry());
        } catch (Exception e) {
            if (ctx.traceSpace.enabled)
                ctx.traceSpace.trace(getName(), "subscribeDurable: error saving durable subscription: " + e);
            throw new TopicException("error saving durable subscription: " + e);
        }
        ctx.queueManager.createQueue(durableQueueName, (ActiveLogin) null);
        int id = subscribe(topic, selector, noLocal, durableQueueName, activeLogin);
        durable.setTopicSubscription((TopicSubscription) topicSubscriptions.get(id));
        try {
            if (newEntity == null) {
                Entity durEntity = ctx.activeDurableList.createEntity();
                durEntity.setName(durableQueueName);
                durEntity.setDynamicObject(durable);
                durEntity.createCommands();
                Property prop = durEntity.getProperty("clientid");
                prop.setValue(activeLogin.getClientId());
                prop.setReadOnly(true);
                prop = durEntity.getProperty("durablename");
                prop.setValue(durableName);
                prop.setReadOnly(true);
                prop = durEntity.getProperty("topic");
                prop.setValue(topicName);
                prop.setReadOnly(true);
                prop = durEntity.getProperty("boundto");
                prop.setValue(durableQueueName);
                prop.setReadOnly(true);
                prop = durEntity.getProperty("nolocal");
                prop.setValue(new Boolean(noLocal));
                prop.setReadOnly(true);
                prop = durEntity.getProperty("selector");
                if (selector != null) {
                    prop.setValue(selector.getConditionString());
                }
                prop.setReadOnly(true);
                programmaticDurableInProgress = true;
                ctx.activeDurableList.addEntity(durEntity);
                programmaticDurableInProgress = false;
            } else {
                newEntity.setDynamicObject(durable);
                Property prop = newEntity.getProperty("boundto");
                prop.setValue(durableQueueName);
                prop.setReadOnly(true);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    return durableQueueName;
}
Also used : TopicException(com.swiftmq.swiftlet.topic.TopicException) JMSException(javax.jms.JMSException) InvalidDestinationException(javax.jms.InvalidDestinationException) IOException(java.io.IOException) JMSException(javax.jms.JMSException) SwiftletException(com.swiftmq.swiftlet.SwiftletException) AuthenticationException(com.swiftmq.swiftlet.auth.AuthenticationException) TopicException(com.swiftmq.swiftlet.topic.TopicException)

Example 5 with TopicException

use of com.swiftmq.swiftlet.topic.TopicException in project swiftmq-ce by iitsoftware.

the class TopicManagerImpl method createTopic.

public synchronized void createTopic(String topicName) throws TopicException {
    if (isTopicDefined(topicName))
        throw new TopicException("Topic '" + topicName + "' is already defined");
    if (ctx.traceSpace.enabled)
        ctx.traceSpace.trace(getName(), "createTopic: creating topic: " + topicName);
    ctx.logSwiftlet.logInformation(getName(), "create topic: " + topicName);
    String[] tokenizedName = tokenizeTopicName(topicName, TOPIC_DELIMITER);
    String rootName = TOPIC_PREFIX + tokenizedName[0];
    TopicBroker rootBroker = (TopicBroker) rootBrokers.get(rootName);
    if (rootBroker == null) {
        try {
            ctx.queueManager.createQueue(rootName, this);
        } catch (Exception e) {
            throw new TopicException(e.getMessage());
        }
        rootBroker = (TopicBroker) rootBrokers.get(rootName);
    }
    rootBroker.addTopic(topicName, tokenizedName);
    if (ctx.jndiSwiftlet != null)
        registerJNDI(topicName, new TopicImpl(topicName));
}
Also used : TopicException(com.swiftmq.swiftlet.topic.TopicException) TopicImpl(com.swiftmq.jms.TopicImpl) InvalidDestinationException(javax.jms.InvalidDestinationException) IOException(java.io.IOException) JMSException(javax.jms.JMSException) SwiftletException(com.swiftmq.swiftlet.SwiftletException) AuthenticationException(com.swiftmq.swiftlet.auth.AuthenticationException) TopicException(com.swiftmq.swiftlet.topic.TopicException)

Aggregations

TopicException (com.swiftmq.swiftlet.topic.TopicException)6 AuthenticationException (com.swiftmq.swiftlet.auth.AuthenticationException)5 IOException (java.io.IOException)5 SwiftletException (com.swiftmq.swiftlet.SwiftletException)4 InvalidDestinationException (javax.jms.InvalidDestinationException)4 JMSException (javax.jms.JMSException)4 TopicImpl (com.swiftmq.jms.TopicImpl)3 AddressString (com.swiftmq.amqp.v100.generated.messaging.message_format.AddressString)1 MessageSelector (com.swiftmq.ms.MessageSelector)1 DataByteArrayInputStream (com.swiftmq.tools.util.DataByteArrayInputStream)1 HashMap (java.util.HashMap)1 Iterator (java.util.Iterator)1 Map (java.util.Map)1 InvalidSelectorException (javax.jms.InvalidSelectorException)1