private boolean isInTransaction(Command command) { return command instanceof Message && ((Message)command).isInTransaction() || command instanceof MessageAck && ((MessageAck)command).isInTransaction(); }
@Override public Response processMessageAck(MessageAck ack) throws Exception { ConsumerBrokerExchange consumerExchange = getConsumerBrokerExchange(ack.getConsumerId()); if (consumerExchange != null) { broker.acknowledge(consumerExchange, ack); } else if (ack.isInTransaction()) { LOG.warn("no matching consumer, ignoring ack {}", consumerExchange, ack); } return null; }
if (ack.isInTransaction() || !task.cancel()) { try { task.future.get();
public void acknowledge(final TopicMessageStore destination, final String clientId, final String subscriptionName, final MessageId messageId, final MessageAck ack) throws IOException { if (doingRecover) { return; } if (ack.isInTransaction()) { Tx tx = getTx(ack.getTransactionId()); tx.add(new RemoveMessageCommand() { @Override public MessageAck getMessageAck() { return ack; } @Override public void run(ConnectionContext ctx) throws IOException { destination.acknowledge(ctx, clientId, subscriptionName, messageId, ack); } @Override public MessageStore getMessageStore() { return destination; } }); } else { destination.acknowledge(null, clientId, subscriptionName, messageId, ack); } }
/** * @param ack * @throws IOException */ final void removeMessage(final MessageStore destination, final MessageAck ack) throws IOException { if (doingRecover) { return; } if (ack.isInTransaction()) { Tx tx = getTx(ack.getTransactionId()); tx.add(new RemoveMessageCommand() { @Override public MessageAck getMessageAck() { return ack; } @Override public void run(ConnectionContext ctx) throws IOException { destination.removeMessage(ctx, ack); } @Override public MessageStore getMessageStore() { return destination; } }); } else { destination.removeMessage(null, ack); } }
final MessageId messageId, final MessageAck ack) throws IOException { if (ack.isInTransaction()) { Tx tx = getTx(ack.getTransactionId()); tx.add(new LastAckCommand() {
public void acknowledge(ConsumerBrokerExchange consumerExchange, MessageAck ack) throws Exception { // This method may be invoked recursively. // Track original tx so that it can be restored. final ConnectionContext context = consumerExchange.getConnectionContext(); Transaction originalTx = context.getTransaction(); Transaction transaction = null; if (ack.isInTransaction()) { transaction = getTransaction(context, ack.getTransactionId(), false); } context.setTransaction(transaction); try { next.acknowledge(consumerExchange, ack); } finally { context.setTransaction(originalTx); } }
LOG.trace("ack of {} with {}", reference.getMessageId(), ack); if (!ack.isInTransaction()) { acknowledge(context, sub, ack, reference); dropMessage(reference);
if (!ack.isInTransaction()) { contractPrefetchExtension(1); incrementStatsOnAck(destination, ack, ack.getMessageCount()); if (!ack.isInTransaction()) { contractPrefetchExtension(ack.getMessageCount());
final void removeAsyncMessage(ConnectionContext context, final MessageStore destination, final MessageAck ack) throws IOException { if (ack.isInTransaction()) { if (ack.getTransactionId().isXATransaction() || theStore.isConcurrentStoreAndDispatchTransactions()==false) { destination.removeAsyncMessage(context, ack); } else { Tx tx = getTx(ack.getTransactionId()); tx.add(new RemoveMessageCommand(context) { @Override public MessageAck getMessageAck() { return ack; } @Override public Future<Object> run(ConnectionContext ctx) throws IOException { destination.removeMessage(ctx, ack); return AbstractMessageStore.FUTURE; } }); } } else { destination.removeAsyncMessage(context, ack); } }
/** * @param ack * @throws IOException */ final void removeMessage(ConnectionContext context, final MessageStore destination, final MessageAck ack) throws IOException { if (ack.isInTransaction()) { if (ack.getTransactionId().isXATransaction() || theStore.isConcurrentStoreAndDispatchTransactions()== false) { destination.removeMessage(context, ack); } else { Tx tx = getTx(ack.getTransactionId()); tx.add(new RemoveMessageCommand(context) { @Override public MessageAck getMessageAck() { return ack; } @Override public Future<Object> run(ConnectionContext ctx) throws IOException { destination.removeMessage(ctx, ack); return AbstractMessageStore.FUTURE; } }); } } else { destination.removeMessage(context, ack); } }
final void acknowledge(ConnectionContext context, final TopicMessageStore destination, final String clientId, final String subscriptionName, final MessageId messageId, final MessageAck ack) throws IOException { if (ack.isInTransaction()) { if (ack.getTransactionId().isXATransaction() || theStore.isConcurrentStoreAndDispatchTransactions()== false) { destination.acknowledge(context, clientId, subscriptionName, messageId, ack); } else { Tx tx = getTx(ack.getTransactionId()); tx.add(new RemoveMessageCommand(context) { @Override public MessageAck getMessageAck() { return ack; } @Override public Future<Object> run(ConnectionContext ctx) throws IOException { destination.acknowledge(ctx, clientId, subscriptionName, messageId, ack); return AbstractMessageStore.FUTURE; } }); } } else { destination.acknowledge(context, clientId, subscriptionName, messageId, ack); } }
@Override public synchronized void acknowledge(final ConnectionContext context, final MessageAck ack) throws Exception { super.acknowledge(context, ack); if (ack.isStandardAck()) { updateStatsOnAck(context, ack); } else if (ack.isPoisonAck()) { if (ack.isInTransaction()) { throw new JMSException("Poison ack cannot be transacted: " + ack); } updateStatsOnAck(context, ack); contractPrefetchExtension(ack.getMessageCount()); } else if (ack.isIndividualAck()) { updateStatsOnAck(context, ack); if (ack.isInTransaction()) { expandPrefetchExtension(1); } } else if (ack.isExpiredAck()) { updateStatsOnAck(ack); contractPrefetchExtension(ack.getMessageCount()); } else if (ack.isDeliveredAck()) { // Message was delivered but not acknowledged: update pre-fetch counters. expandPrefetchExtension(ack.getMessageCount()); } else if (ack.isRedeliveredAck()) { // No processing for redelivered needed return; } else { throw new JMSException("Invalid acknowledgment: " + ack); } dispatchMatched(); }
+ "; Could not find Message-ID " + lastAckedMsg + " in dispatched-list (end of ack)"); if (ack.getMessageCount() != checkCount && !ack.isInTransaction()) { throw new JMSException("Unmatched acknowledge: " + ack + "; Expected message count (" + ack.getMessageCount()
JournalQueueAck command = (JournalQueueAck)c; JournalMessageStore store = (JournalMessageStore)createMessageStore(command.getDestination()); if (command.getMessageAck().isInTransaction()) { transactionStore.removeMessage(store, command.getMessageAck(), pos); } else {
if (ack.isInTransaction()) { throw new JMSException("Poison ack cannot be transacted: " + ack);
private boolean isInTransaction(Command command) { return command instanceof Message && ((Message)command).isInTransaction() || command instanceof MessageAck && ((MessageAck)command).isInTransaction(); }
@Override public Response processMessageAck(MessageAck ack) throws Exception { ConsumerBrokerExchange consumerExchange = getConsumerBrokerExchange(ack.getConsumerId()); if (consumerExchange != null) { broker.acknowledge(consumerExchange, ack); } else if (ack.isInTransaction()) { LOG.warn("no matching consumer, ignoring ack {}", consumerExchange, ack); } return null; }
@Override public Response processMessageAck(MessageAck ack) throws Exception { ConsumerBrokerExchange consumerExchange = getConsumerBrokerExchange(ack.getConsumerId()); if (consumerExchange != null) { broker.acknowledge(consumerExchange, ack); } else if (ack.isInTransaction()) { LOG.warn("no matching consumer, ignoring ack {}", consumerExchange, ack); } return null; }
@Override public Response processMessageAck(MessageAck ack) throws Exception { ConsumerBrokerExchange consumerExchange = getConsumerBrokerExchange(ack.getConsumerId()); if (consumerExchange != null) { broker.acknowledge(consumerExchange, ack); } else if (ack.isInTransaction()) { LOG.warn("no matching consumer, ignoring ack {}", consumerExchange, ack); } return null; }