Search in sources :

Example 11 with QueuePullTransaction

use of com.swiftmq.swiftlet.queue.QueuePullTransaction in project swiftmq-ce by iitsoftware.

the class Session method visitDeliveryItem.

public void visitDeliveryItem(DeliveryItem item) {
    if (closed || recoveryInProgress || item.request.getRecoveryEpoche() != recoveryEpoche)
        return;
    if (ctx.traceSpace.enabled)
        ctx.traceSpace.trace("sys$jms", ctx.tracePrefix + "/visitDeliveryItem, item= " + item);
    QueuePullTransaction rt = (QueuePullTransaction) item.consumer.getReadTransaction();
    QueuePullTransaction t = (QueuePullTransaction) item.consumer.getTransaction();
    try {
        item.request.setMessageEntry(item.messageEntry);
        ctx.connectionOutboundQueue.enqueue(item.request);
    } catch (Exception e) {
        if (!closed) {
            e.printStackTrace();
            if (ctx.traceSpace.enabled)
                ctx.traceSpace.trace("sys$jms", ctx.tracePrefix + "/handleDelivery, exception= " + e);
        }
    }
}
Also used : QueuePullTransaction(com.swiftmq.swiftlet.queue.QueuePullTransaction)

Example 12 with QueuePullTransaction

use of com.swiftmq.swiftlet.queue.QueuePullTransaction in project swiftmq-ce by iitsoftware.

the class Session method visitStartConsumerRequest.

public void visitStartConsumerRequest(StartConsumerRequest req) {
    if (closed)
        return;
    if (ctx.traceSpace.enabled)
        ctx.traceSpace.trace("sys$jms", ctx.tracePrefix + "/visitStartConsumerRequest");
    int qcId = req.getQueueConsumerId();
    Consumer consumer = (Consumer) consumerList.get(qcId);
    if (consumer == null)
        return;
    int clientDispatchId = req.getClientDispatchId();
    int clientListenerId = req.getClientListenerId();
    try {
        MessageProcessor mp = consumer.getMessageProcessor();
        if (mp == null) {
            mp = new AsyncMessageProcessor(this, ctx, consumer, req.getConsumerCacheSize(), recoveryEpoche);
            consumer.setMessageListener(clientDispatchId, clientListenerId, mp);
        }
        QueuePullTransaction t = consumer.getReadTransaction();
        if (t != null && !t.isClosed())
            t.registerMessageProcessor(mp);
    } catch (Exception e) {
        e.printStackTrace();
    }
}
Also used : MessageProcessor(com.swiftmq.swiftlet.queue.MessageProcessor) QueuePullTransaction(com.swiftmq.swiftlet.queue.QueuePullTransaction)

Example 13 with QueuePullTransaction

use of com.swiftmq.swiftlet.queue.QueuePullTransaction in project swiftmq-ce by iitsoftware.

the class Session method visitDeliveryItem.

public void visitDeliveryItem(DeliveryItem item) {
    if (closed || recoveryInProgress || item.request.getRecoveryEpoche() != recoveryEpoche)
        return;
    if (ctx.traceSpace.enabled)
        ctx.traceSpace.trace("sys$jms", ctx.tracePrefix + "/visitDeliveryItem, item= " + item);
    QueuePullTransaction rt = (QueuePullTransaction) item.consumer.getReadTransaction();
    QueuePullTransaction t = (QueuePullTransaction) item.consumer.getTransaction();
    try {
        item.request.setMessageEntry(item.messageEntry);
        ctx.connectionOutboundQueue.enqueue(item.request);
    } catch (Exception e) {
        if (!closed) {
            e.printStackTrace();
            if (ctx.traceSpace.enabled)
                ctx.traceSpace.trace("sys$jms", ctx.tracePrefix + "/handleDelivery, exception= " + e);
        }
    }
}
Also used : QueuePullTransaction(com.swiftmq.swiftlet.queue.QueuePullTransaction)

Example 14 with QueuePullTransaction

use of com.swiftmq.swiftlet.queue.QueuePullTransaction in project swiftmq-ce by iitsoftware.

the class NontransactedSession method visit.

public void visit(AcknowledgeMessageRequest req) {
    if (closed)
        return;
    if (ctx.traceSpace.enabled)
        ctx.traceSpace.trace("sys$jms", ctx.tracePrefix + "/visitAcknowledgeMessageRequest");
    AcknowledgeMessageReply reply = null;
    if (req.isReplyRequired()) {
        reply = (AcknowledgeMessageReply) req.createReply();
        reply.setOk(true);
    }
    if (ctx.ackMode == javax.jms.Session.CLIENT_ACKNOWLEDGE) {
        Map ackConsumers = new HashMap();
        for (Iterator iter = deliveredList.iterator(); iter.hasNext(); ) {
            MessageDeliveredRequest request = (MessageDeliveredRequest) iter.next();
            Consumer consumer = (Consumer) consumerList.get(request.getQueueConsumerId());
            MessageIndex actIndex = request.getMessageIndex();
            QueuePullTransaction t = consumer.getTransaction();
            ConsumerAckEntry ackEntry = (ConsumerAckEntry) ackConsumers.get(consumer);
            if (ackEntry == null) {
                ackEntry = new ConsumerAckEntry(t);
                ackConsumers.put(consumer, ackEntry);
            }
            ackEntry.ackList.add(actIndex);
        }
        deliveredList.clear();
        boolean callbackRegistered = false;
        MultiAckJoin join = new MultiAckJoin(reply);
        for (Iterator iter = ackConsumers.entrySet().iterator(); iter.hasNext(); ) {
            Map.Entry entry = (Map.Entry) iter.next();
            Consumer consumer = (Consumer) entry.getKey();
            ConsumerAckEntry ackEntry = (ConsumerAckEntry) entry.getValue();
            try {
                join.incNumberCallbacks();
                ackEntry.transaction.acknowledgeMessages(ackEntry.ackList, new MultiAckCallback(join, consumer, ackEntry.ackList.size()));
                callbackRegistered = true;
            } catch (QueueTransactionClosedException e) {
            }
        }
        join.setBlocked(false);
        if (!callbackRegistered && reply != null)
            reply.send();
    } else {
        MessageIndex ackIndex = req.getMessageIndex();
        Consumer consumer = (Consumer) consumerList.get(req.getQueueConsumerId());
        ackSingleMessage(reply, ackIndex, consumer);
    }
}
Also used : MessageIndex(com.swiftmq.swiftlet.queue.MessageIndex) QueueTransactionClosedException(com.swiftmq.swiftlet.queue.QueueTransactionClosedException) QueuePullTransaction(com.swiftmq.swiftlet.queue.QueuePullTransaction)

Example 15 with QueuePullTransaction

use of com.swiftmq.swiftlet.queue.QueuePullTransaction in project swiftmq-ce by iitsoftware.

the class NontransactedSession method visit.

public void visit(AcknowledgeMessageRequest req) {
    if (closed)
        return;
    if (ctx.traceSpace.enabled)
        ctx.traceSpace.trace("sys$jms", ctx.tracePrefix + "/visitAcknowledgeMessageRequest");
    AcknowledgeMessageReply reply = null;
    if (req.isReplyRequired()) {
        reply = (AcknowledgeMessageReply) req.createReply();
        reply.setOk(true);
    }
    try {
        MessageIndex ackIndex = req.getMessageIndex();
        if (ctx.ackMode == javax.jms.Session.CLIENT_ACKNOWLEDGE) {
            boolean found = false;
            Iterator iter = deliveredList.iterator();
            while (iter.hasNext()) {
                MessageDeliveredRequest request = (MessageDeliveredRequest) iter.next();
                Consumer consumer = (Consumer) consumerList.get(request.getQueueConsumerId());
                MessageIndex actIndex = request.getMessageIndex();
                QueuePullTransaction t = consumer.getTransaction();
                try {
                    if (!t.isClosed())
                        t.acknowledgeMessage(actIndex);
                } catch (Exception e) {
                // temp queue might be deleted in the mean time
                }
                iter.remove();
            }
        } else {
            Consumer consumer = (Consumer) consumerList.get(req.getQueueConsumerId());
            QueuePullTransaction t = consumer.getReadTransaction();
            try {
                if (!t.isClosed())
                    t.acknowledgeMessage(ackIndex);
            } catch (Exception e) {
            // temp queue might be deleted in the mean time
            }
        }
    } catch (Exception e) {
        if (ctx.traceSpace.enabled)
            ctx.traceSpace.trace("sys$jms", ctx.tracePrefix + "/visitAcknowledgeMessageRequest, exception: " + e);
        if (reply != null) {
            reply.setOk(false);
            reply.setException(e);
        }
    }
    if (reply != null)
        reply.send();
}
Also used : MessageIndex(com.swiftmq.swiftlet.queue.MessageIndex) Iterator(java.util.Iterator) QueuePullTransaction(com.swiftmq.swiftlet.queue.QueuePullTransaction)

Aggregations

QueuePullTransaction (com.swiftmq.swiftlet.queue.QueuePullTransaction)26 MessageIndex (com.swiftmq.swiftlet.queue.MessageIndex)7 Iterator (java.util.Iterator)6 QueueReceiver (com.swiftmq.swiftlet.queue.QueueReceiver)5 XidImpl (com.swiftmq.jms.XidImpl)4 XAContextException (com.swiftmq.swiftlet.xa.XAContextException)4 JMSException (javax.jms.JMSException)4 MessageImpl (com.swiftmq.jms.MessageImpl)3 MessageProcessor (com.swiftmq.swiftlet.queue.MessageProcessor)3 QueueSender (com.swiftmq.swiftlet.queue.QueueSender)2 XAContext (com.swiftmq.swiftlet.xa.XAContext)2 Request (com.swiftmq.tools.requestreply.Request)2 InvalidDestinationException (javax.jms.InvalidDestinationException)2 POSendMessage (com.swiftmq.impl.mqtt.po.POSendMessage)1 MqttQoS (com.swiftmq.impl.mqtt.v311.netty.handler.codec.mqtt.MqttQoS)1 TopicImpl (com.swiftmq.jms.TopicImpl)1 MessageSelector (com.swiftmq.ms.MessageSelector)1 MessageEntry (com.swiftmq.swiftlet.queue.MessageEntry)1 QueueTransactionClosedException (com.swiftmq.swiftlet.queue.QueueTransactionClosedException)1 XStream (com.thoughtworks.xstream.XStream)1