@Override public MessageStore createQueueMessageStore(ActiveMQQueue destination) throws IOException { MessageStore rc = queues.get(destination); if (rc == null) { rc = new MemoryMessageStore(destination); if (transactionStore != null) { rc = transactionStore.proxy(rc); } queues.put(destination, rc); } return rc; }
@Override public TransactionStore createTransactionStore() throws IOException { if (transactionStore == null) { transactionStore = new MemoryTransactionStore(this); } return transactionStore; }
@Override public void acknowledge(ConnectionContext context, String clientId, String subscriptionName, MessageId messageId, MessageAck ack) throws IOException { MemoryTransactionStore.this.acknowledge((TopicMessageStore) getDelegate(), clientId, subscriptionName, messageId, ack); } };
@Override public void addMessage(ConnectionContext context, final Message send, boolean canOptimize) throws IOException { MemoryTransactionStore.this.addMessage(context, getDelegate(), send); }
@Override public void removeAsyncMessage(ConnectionContext context, MessageAck ack) throws IOException { MemoryTransactionStore.this.removeMessage(getDelegate(), ack); } };
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); } }
@Override public void deleteAllMessages() throws IOException { for (Iterator<TopicMessageStore> iter = topics.values().iterator(); iter.hasNext();) { MemoryMessageStore store = asMemoryMessageStore(iter.next()); if (store != null) { store.delete(); } } for (Iterator<MessageStore> iter = queues.values().iterator(); iter.hasNext();) { MemoryMessageStore store = asMemoryMessageStore(iter.next()); if (store != null) { store.delete(); } } if (transactionStore != null) { transactionStore.delete(); } }
@Override public synchronized void recover(TransactionRecoveryListener listener) throws IOException { // All the inflight transactions get rolled back.. inflightTransactions.clear(); this.doingRecover = true; try { for (Iterator<TransactionId> iter = preparedTransactions.keySet().iterator(); iter.hasNext();) { Object txid = iter.next(); Tx tx = preparedTransactions.get(txid); listener.recover((XATransactionId) txid, tx.getMessages(), tx.getAcks()); onRecovered(tx); } } finally { this.doingRecover = false; } }
onProxyQueueStore(proxyMessageStore); return proxyMessageStore;
onProxyTopicStore(proxyTopicMessageStore); return proxyTopicMessageStore;
@Override public void addMessage(ConnectionContext context, final Message send) throws IOException { MemoryTransactionStore.this.addMessage(context, getDelegate(), send); }
@Override public void removeMessage(ConnectionContext context, final MessageAck ack) throws IOException { MemoryTransactionStore.this.removeMessage(getDelegate(), 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); } }
@Override public void deleteAllMessages() throws IOException { for (Iterator<TopicMessageStore> iter = topics.values().iterator(); iter.hasNext();) { MemoryMessageStore store = asMemoryMessageStore(iter.next()); if (store != null) { store.delete(); } } for (Iterator<MessageStore> iter = queues.values().iterator(); iter.hasNext();) { MemoryMessageStore store = asMemoryMessageStore(iter.next()); if (store != null) { store.delete(); } } if (transactionStore != null) { transactionStore.delete(); } }
@Override public synchronized void recover(TransactionRecoveryListener listener) throws IOException { // All the inflight transactions get rolled back.. inflightTransactions.clear(); this.doingRecover = true; try { for (Iterator<TransactionId> iter = preparedTransactions.keySet().iterator(); iter.hasNext();) { Object txid = iter.next(); Tx tx = preparedTransactions.get(txid); listener.recover((XATransactionId) txid, tx.getMessages(), tx.getAcks()); onRecovered(tx); } } finally { this.doingRecover = false; } }
onProxyQueueStore(proxyMessageStore); return proxyMessageStore;
onProxyTopicStore(proxyTopicMessageStore); return proxyTopicMessageStore;
@Override public TopicMessageStore createTopicMessageStore(ActiveMQTopic destination) throws IOException { TopicMessageStore rc = topics.get(destination); if (rc == null) { rc = new MemoryTopicMessageStore(destination); if (transactionStore != null) { rc = transactionStore.proxy(rc); } topics.put(destination, rc); } return rc; }
@Override public void addMessage(ConnectionContext context, final Message send) throws IOException { MemoryTransactionStore.this.addMessage(context, getDelegate(), send); }
@Override public void removeMessage(ConnectionContext context, final MessageAck ack) throws IOException { MemoryTransactionStore.this.removeMessage(getDelegate(), ack); }