@Override public Message getMessage() { return ref.getMessage(); }
@Override public int getMessageMemoryEstimate() { return ref.getMessage().getMemoryEstimate(); }
/** * @param refs * @return */ private Map<String, Object>[] convertMessagesToMaps(List<MessageReference> refs) throws ActiveMQException { Map<String, Object>[] messages = new Map[refs.size()]; int i = 0; for (MessageReference ref : refs) { Message message = ref.getMessage(); messages[i++] = message.toMap(); } return messages; }
private MessageReference removeDeliveringRefById(long messageID) { assert deliveringRefs.peek().getMessage().getMessageID() != messageID; Iterator<MessageReference> iter = deliveringRefs.iterator(); MessageReference ref = null; while (iter.hasNext()) { MessageReference theRef = iter.next(); if (theRef.getMessage().getMessageID() == messageID) { iter.remove(); ref = theRef; break; } } return ref; }
private void decrementRefCount(MessageReference refmsg) { try { refmsg.getMessage().decrementRefCount(); } catch (NonExistentPage e) { // This could happen on after commit, since the page could be deleted on file earlier by another thread logger.debug(e); } catch (Exception e) { ActiveMQServerLogger.LOGGER.failedToDecrementMessageReferenceCount(e); } }
@Override public MessageReference removeReferenceWithID(final long id) throws ActiveMQException { synchronized (scheduledReferences) { Iterator<RefScheduled> iter = scheduledReferences.iterator(); while (iter.hasNext()) { MessageReference ref = iter.next().getRef(); if (ref.getMessage().getMessageID() == id) { iter.remove(); metrics.decrementMetrics(ref); return ref; } } } return null; }
private SimpleString extractGroupID(MessageReference ref) { if (internalQueue) { return null; } else { try { return ref.getMessage().getGroupID(); } catch (Throwable e) { ActiveMQServerLogger.LOGGER.unableToExtractGroupID(e); return null; } } }
private int getPriority(MessageReference ref) { try { return ref.getMessage().getPriority(); } catch (Throwable e) { ActiveMQServerLogger.LOGGER.unableToGetMessagePriority(e); return 4; // the default one in case of failure } }
private int extractGroupSequence(MessageReference ref) { if (internalQueue) { return 0; } else { try { // But we don't use the groupID on internal queues (clustered queues) otherwise the group map would leak forever return ref.getMessage().getGroupSequence(); } catch (Throwable e) { ActiveMQServerLogger.LOGGER.unableToExtractGroupSequence(e); return 0; } } }
@Override public void deliverScheduledMessages() throws ActiveMQException { List<MessageReference> scheduledMessages = scheduledDeliveryHandler.cancel(null); if (scheduledMessages != null && scheduledMessages.size() > 0) { for (MessageReference ref : scheduledMessages) { ref.getMessage().setScheduledDeliveryTime(ref.getScheduledDeliveryTime()); ref.setScheduledDeliveryTime(0); } this.addHead(scheduledMessages, true); } }
@Override public Map<String, Object> getFields(MessageReference ref) throws OpenDataException { Map<String, Object> rc = super.getFields(ref); ICoreMessage m = ref.getMessage().toCore(); if (!m.isLargeMessage()) { SimpleString text = m.getReadOnlyBodyBuffer().readNullableSimpleString(); rc.put(CompositeDataConstants.TEXT_BODY, text != null ? text.toString() : ""); } else { rc.put(CompositeDataConstants.TEXT_BODY, ""); } return rc; } }
private SimpleString expiryAddressFromAddressSettings(MessageReference ref) { SimpleString messageAddress = extractAddress(ref.getMessage()); SimpleString expiryAddress = null; if (messageAddress != null) { AddressSettings addressSettings = addressSettingsRepository.getMatch(messageAddress.toString()); expiryAddress = addressSettings.getExpiryAddress(); } return expiryAddress; }
private SimpleString expiryAddressFromMessageAddress(MessageReference ref) { SimpleString messageAddress = extractAddress(ref.getMessage()); SimpleString expiryAddress = null; if (messageAddress == null || messageAddress.equals(getAddress())) { expiryAddress = getExpiryAddress(); } return expiryAddress; }
@Override public synchronized MessageReference getReference(final long id1) throws ActiveMQException { try (LinkedListIterator<MessageReference> iterator = iterator()) { while (iterator.hasNext()) { MessageReference ref = iterator.next(); if (ref.getMessage().getMessageID() == id1) { return ref; } } return null; } }
@Override public Map<String, Object> getFields(MessageReference ref) throws OpenDataException { Map<String, Object> rc = super.getFields(ref); ICoreMessage m = ref.getMessage().toCore(); if (!m.isLargeMessage()) { ActiveMQBuffer bodyCopy = m.getReadOnlyBodyBuffer(); byte[] bytes = new byte[bodyCopy.readableBytes()]; bodyCopy.readBytes(bytes); rc.put(CompositeDataConstants.BODY, bytes); } else { rc.put(CompositeDataConstants.BODY, new byte[0]); } return rc; } }
@Override public void reacknowledge(final Transaction tx, final MessageReference ref) throws Exception { Message message = ref.getMessage(); if (message.isDurable() && isDurableMessage()) { tx.setContainsPersistent(); } getRefsOperation(tx).addAck(ref); // https://issues.jboss.org/browse/HORNETQ-609 incDelivering(ref); messagesAcknowledged.incrementAndGet(); }
@Override public void beforeRollback(final Transaction tx) throws Exception { // Reverse the ref counts, and paging sizes for (MessageReference ref : refs) { Message message = ref.getMessage(); if (message.isDurable() && ref.getQueue().isDurableMessage()) { message.decrementDurableRefCount(); } message.decrementRefCount(); } }
private void validateSequence(ScheduledDeliveryHandlerImpl handler) throws Exception { long lastSequence = -1; for (MessageReference ref : handler.getScheduledReferences()) { assertEquals(lastSequence + 1, ref.getMessage().getMessageID()); lastSequence = ref.getMessage().getMessageID(); } }
@Override public void updateScheduledDeliveryTimeTransactional(final long txID, final MessageReference ref) throws Exception { ScheduledDeliveryEncoding encoding = new ScheduledDeliveryEncoding(ref.getScheduledDeliveryTime(), ref.getQueue().getID()); readLock(); try { messageJournal.appendUpdateRecordTransactional(txID, ref.getMessage().getMessageID(), JournalRecordIds.SET_SCHEDULED_DELIVERY_TIME, encoding); } finally { readUnLock(); } }
@Override public void updateScheduledDeliveryTime(final MessageReference ref) throws Exception { ScheduledDeliveryEncoding encoding = new ScheduledDeliveryEncoding(ref.getScheduledDeliveryTime(), ref.getQueue().getID()); readLock(); try { messageJournal.appendUpdateRecord(ref.getMessage().getMessageID(), JournalRecordIds.SET_SCHEDULED_DELIVERY_TIME, encoding, syncNonTransactional, getContext(syncNonTransactional)); } finally { readUnLock(); } }