@Override public MessageStore createQueueMessageStore(ActiveMQQueue destination) throws IOException { MessageStore rc = storeCache.get(destination); if (rc == null) { MessageStore store = transactionStore.proxy(new JDBCMessageStore(this, getAdapter(), wireFormat, destination, audit)); rc = storeCache.putIfAbsent(destination, store); if (rc == null) { rc = store; } } return rc; }
try { if (LOG.isTraceEnabled()) { LOG.trace(this + " recoverNext lastRecovered:" + Arrays.toString(perPriorityLastRecovered) + ", minPending:" + minPendingSequeunceId()); maxReturned -= recoverRolledBackAcks(maxReturned, listener); adapter.doRecoverNextMessages(c, destination, perPriorityLastRecovered, minPendingSequeunceId(), maxReturned, isPrioritizedMessages(), new JDBCMessageRecoveryListener() {
@Override public void run(final ConnectionContext context) throws IOException { JDBCPersistenceAdapter jdbcPersistenceAdapter = (JDBCPersistenceAdapter) persistenceAdapter; final Long preparedEntrySequence = (Long) message.getMessageId().getEntryLocator(); TransactionContext c = jdbcPersistenceAdapter.getTransactionContext(context); long newSequence; synchronized (jdbcMessageStore.pendingAdditions) { newSequence = jdbcPersistenceAdapter.getNextSequenceId(); final long sequenceToSet = newSequence; c.onCompletion(new Runnable() { @Override public void run() { message.getMessageId().setEntryLocator(sequenceToSet); message.getMessageId().setFutureOrSequenceLong(sequenceToSet); } }); if (jdbcMessageStore.getIndexListener() != null) { jdbcMessageStore.getIndexListener().onAdd(new IndexListener.MessageContext(context, message, null)); } } jdbcPersistenceAdapter.commitAdd(context, message.getMessageId(), preparedEntrySequence, newSequence); jdbcMessageStore.onAdd(message, (Long)message.getMessageId().getEntryLocator(), message.getPriority()); }
@Override public void setBatch(MessageId messageId) { if (LOG.isTraceEnabled()) { LOG.trace(this + " setBatch: last recovered: " + Arrays.toString(perPriorityLastRecovered)); } try { long[] storedValues = persistenceAdapter.getStoreSequenceIdForMessageId(null, messageId, destination); setLastRecovered(storedValues[0]); } catch (IOException ignoredAsAlreadyLogged) { resetBatching(); } if (LOG.isTraceEnabled()) { LOG.trace(this + " setBatch: new last recovered: " + Arrays.toString(perPriorityLastRecovered)); } }
public JDBCMessageStore(JDBCPersistenceAdapter persistenceAdapter, JDBCAdapter adapter, WireFormat wireFormat, ActiveMQDestination destination, ActiveMQMessageAudit audit) throws IOException { super(destination); this.persistenceAdapter = persistenceAdapter; this.adapter = adapter; this.wireFormat = wireFormat; this.audit = audit; if (destination.isQueue() && persistenceAdapter.getBrokerService().shouldRecordVirtualDestination(destination)) { recordDestinationCreation(destination); } resetBatching(); }
this.isPrioritizedMessages() ? message.getPriority() : 0, xaXid); } catch (SQLException e) { JDBCPersistenceAdapter.log("JDBC Failure: ", e); onAdd(message, sequenceId, message.getPriority());
try { if (LOG.isTraceEnabled()) { LOG.trace(this + " recoverNext lastRecovered:" + Arrays.toString(perPriorityLastRecovered) + ", minPending:" + minPendingSequeunceId()); adapter.doRecoverNextMessages(c, destination, perPriorityLastRecovered, minPendingSequeunceId(), maxReturned, isPrioritizedMessages(), new JDBCMessageRecoveryListener() {
private void trackLastRecovered(long sequenceId, int priority) { perPriorityLastRecovered[isPrioritizedMessages() ? priority : 0] = sequenceId; }
/** * @see org.apache.activemq.store.MessageStore#resetBatching() */ @Override public void resetBatching() { if (LOG.isTraceEnabled()) { LOG.trace(this + " resetBatching. last recovered: " + Arrays.toString(perPriorityLastRecovered)); } setLastRecovered(-1); }
c.close(); onAdd(sequenceId, message.getPriority());
this.isPrioritizedMessages() ? message.getPriority() : 0, xaXid); } catch (SQLException e) { JDBCPersistenceAdapter.log("JDBC Failure: ", e); onAdd(message, sequenceId, message.getPriority());
try { if (LOG.isTraceEnabled()) { LOG.trace(this + " recoverNext lastRecovered:" + Arrays.toString(perPriorityLastRecovered) + ", minPending:" + minPendingSequeunceId()); adapter.doRecoverNextMessages(c, destination, perPriorityLastRecovered, minPendingSequeunceId(), maxReturned, isPrioritizedMessages(), new JDBCMessageRecoveryListener() {
public JDBCMessageStore(JDBCPersistenceAdapter persistenceAdapter, JDBCAdapter adapter, WireFormat wireFormat, ActiveMQDestination destination, ActiveMQMessageAudit audit) throws IOException { super(destination); this.persistenceAdapter = persistenceAdapter; this.adapter = adapter; this.wireFormat = wireFormat; this.audit = audit; if (destination.isQueue() && persistenceAdapter.getBrokerService().shouldRecordVirtualDestination(destination)) { recordDestinationCreation(destination); } resetBatching(); }
@Override public void setBatch(MessageId messageId) { if (LOG.isTraceEnabled()) { LOG.trace(this + " setBatch: last recovered: " + Arrays.toString(perPriorityLastRecovered)); } try { long[] storedValues = persistenceAdapter.getStoreSequenceIdForMessageId(null, messageId, destination); setLastRecovered(storedValues[0]); } catch (IOException ignoredAsAlreadyLogged) { resetBatching(); } if (LOG.isTraceEnabled()) { LOG.trace(this + " setBatch: new last recovered: " + Arrays.toString(perPriorityLastRecovered)); } }
private long lastRecovered(int priority) { return perPriorityLastRecovered[isPrioritizedMessages() ? priority : 0]; }
/** * @see org.apache.activemq.store.MessageStore#resetBatching() */ @Override public void resetBatching() { if (LOG.isTraceEnabled()) { LOG.trace(this + " resetBatching. last recovered: " + Arrays.toString(perPriorityLastRecovered)); } setLastRecovered(-1); }
this.isPrioritizedMessages() ? message.getPriority() : 0, xaXid); } catch (SQLException e) { JDBCPersistenceAdapter.log("JDBC Failure: ", e); onAdd(message, sequenceId, message.getPriority());
@Override public void run(final ConnectionContext context) throws IOException { JDBCPersistenceAdapter jdbcPersistenceAdapter = (JDBCPersistenceAdapter) persistenceAdapter; final Long preparedEntrySequence = (Long) message.getMessageId().getEntryLocator(); TransactionContext c = jdbcPersistenceAdapter.getTransactionContext(context); synchronized (jdbcMessageStore.pendingAdditions) { message.getMessageId().setEntryLocator(jdbcPersistenceAdapter.getNextSequenceId()); c.onCompletion(new Runnable() { @Override public void run() { message.getMessageId().setFutureOrSequenceLong(message.getMessageId().getEntryLocator()); } }); if (jdbcMessageStore.getIndexListener() != null) { jdbcMessageStore.getIndexListener().onAdd(new IndexListener.MessageContext(context, message, null)); } } jdbcPersistenceAdapter.commitAdd(context, message.getMessageId(), preparedEntrySequence); jdbcMessageStore.onAdd(message, (Long)message.getMessageId().getEntryLocator(), message.getPriority()); }
try { if (LOG.isTraceEnabled()) { LOG.trace(this + " recoverNext lastRecovered:" + Arrays.toString(perPriorityLastRecovered) + ", minPending:" + minPendingSequeunceId()); adapter.doRecoverNextMessages(c, destination, perPriorityLastRecovered, minPendingSequeunceId(), maxReturned, isPrioritizedMessages(), new JDBCMessageRecoveryListener() {
public JDBCMessageStore(JDBCPersistenceAdapter persistenceAdapter, JDBCAdapter adapter, WireFormat wireFormat, ActiveMQDestination destination, ActiveMQMessageAudit audit) throws IOException { super(destination); this.persistenceAdapter = persistenceAdapter; this.adapter = adapter; this.wireFormat = wireFormat; this.audit = audit; if (destination.isQueue() && persistenceAdapter.getBrokerService().shouldRecordVirtualDestination(destination)) { recordDestinationCreation(destination); } resetBatching(); }