Package org.activemq.message

Examples of org.activemq.message.ActiveMQMessage


        /**
         * Find the caller and ensure it is marked as consumed
         * This is to ensure acknowledge called by a
         * MessageListener works correctly
         */
        ActiveMQMessage msg = (ActiveMQMessage)deliveredMessages.get(caller);
        if (msg != null){
            msg.setMessageConsumed(true);
        }
      
        doAcknowledge(false);
    }
View Full Code Here


    }

    protected void doAcknowledge(boolean isClosing) throws JMSException {
        if (!closed) {
            if (this.acknowledgeMode == Session.CLIENT_ACKNOWLEDGE) {
                ActiveMQMessage msg = null;
                while((msg = (ActiveMQMessage)deliveredMessages.removeFirst())!=null){
                    boolean messageConsumed = isClosing ? false : msg.isMessageConsumed();
                    if (!msg.isTransientConsumed()){
                        sendMessageAck(msg, messageConsumed, false);
                    }else {
                        if (!messageConsumed){
                            connection.addToTransientConsumedRedeliverCache(msg);
                        }
View Full Code Here

       
        if ((id == null || id.length() == 0) || !producer.getDisableMessageID() && !reuseMessageId) {
            message.setJMSMessageID(producerKey + sequenceNumber);
        }
        //transform to our own message format here
        ActiveMQMessage msg = ActiveMQMessageTransformation.transformMessage(message);
        if (connection.isCopyMessageOnSend()){
            msg = msg.shallowCopy();
        }
        //clear identity - incase forwared on
        msg.setJMSMessageIdentity(null);
        msg.setExternalMessageId(id != null);
        msg.setSequenceNumber(sequenceNumber);
        msg.setProducerKey(producerKey);
        msg.setTransactionId(transactionContext.getTransactionId());
        msg.setJMSClientID(this.connection.clientID);
        msg.setMesssageHandle(producer.getProducerId());
        //reset state as could be forwarded on
        msg.setJMSRedelivered(false);
        if (!connection.isInternalConnection()){
            msg.clearBrokersVisited();
            connection.validateDestination(msg.getJMSActiveMQDestination());
        }
       
        if (this.connection.isPrepareMessageBodyOnSend()){
            msg.prepareMessageBody();
        }
        //do message payload compression
        if (connection.isDoMessageCompression()){
            try {
                msg.getBodyAsBytes(compression);
            }
            catch (IOException e) {
                JMSException jmsEx = new JMSException("Failed to compress message payload");
                jmsEx.setLinkedException(e);
                throw jmsEx;
            }
        }
        boolean fragmentedMessage = connection.isDoMessageFragmentation();
        if (fragmentedMessage && !msg.isMessagePart()){
            try {
                fragmentedMessage = fragmentation.doFragmentation(msg.getBodyAsBytes());
                if (fragmentedMessage){
                    ByteArray[] array = fragmentation.fragment(msg.getBodyAsBytes());
                    String parentMessageId = msg.getJMSMessageID();
                    for (int i = 0; i < array.length; i++){
                        ActiveMQMessage fragment = msg.shallowCopy();
                        fragment.setJMSMessageID(null);
                        fragment.setMessagePart(true);
                        fragment.setParentMessageID(parentMessageId);
                        fragment.setNumberOfParts((short)array.length);
                        fragment.setPartNumber((short)i);
                        if (i != 0){
                            fragment.setSequenceNumber(producer.getIdGenerator().getNextSequence());
                        }
                        fragment.setBodyAsBytes(array[i]);
                        if (this.connection.isUseAsyncSend()) {
                            this.connection.asyncSendPacket(fragment);
                        }
                        else {
                            this.connection.syncSendPacket(fragment);
View Full Code Here

    public void run() {
        // Only allow one thread at a time to dispatch.
        synchronized (dispatchMutex) {
            boolean dispatched = false;
            boolean targeted = false;
            ActiveMQMessage message = null;
            int notDispatchedCount = 0;
            int sleepTime = 250;
            int iterationsWithoutDispatchingBeforeStopping = 10000 / sleepTime;// ~10
                                                                                // seconds
            Map messageParts = new HashMap();
            try {
                while (started.get() && running.get()) {
                    dispatched = false;
                    targeted = false;
                    synchronized (subscriptionMutex) {
                        if (!subscriptions.isEmpty()) {
                            message = (ActiveMQMessage) queue
                                    .dequeue(sleepTime);
                            if (message != null) {
                                if (!message.isExpired()) {
                                    QueueListEntry entry = subscriptions.getFirstEntry();
                                    while (entry != null) {
                                        TransientQueueSubscription ts = (TransientQueueSubscription) entry.getElement();
                                        if (ts.isTarget(message)) {
                                            targeted = true;
                                            if (message.isMessagePart()) {
                                                TransientQueueSubscription sameTarget = (TransientQueueSubscription) messageParts
                                                        .get(message.getParentMessageID());
                                                if (sameTarget == null) {
                                                    sameTarget = ts;
                                                    messageParts.put(message.getParentMessageID(),sameTarget);
                                                }
                                                sameTarget.doDispatch(message);
                                                if (message.isLastMessagePart()) {
                                                    messageParts.remove(message.getParentMessageID());
                                                }
                                                message = null;
                                                dispatched = true;
                                                notDispatchedCount = 0;
                                                break;
View Full Code Here

        }
       
        deliveredMessages.clear();
        if (!replay.isEmpty()) {
            for (ListIterator i = replay.listIterator(replay.size());i.hasPrevious();) {
                ActiveMQMessage msg = (ActiveMQMessage) i.previous();
                if (!onlyDeliverTransientConsumed || msg.isTransientConsumed()) {
                    msg.setJMSRedelivered(true);
                    msg.incrementDeliveryCount();
                    messageExecutor.executeFirst(msg);
                }
            }
        }
        replay.clear();
View Full Code Here

    protected void removeExpiredMessages() {
        long currentTime = System.currentTimeMillis();
        List list = queue.getContents();
        for (int i = 0;i < list.size();i++) {
            ActiveMQMessage msg = (ActiveMQMessage) list.get(i);
            if (msg.isExpired(currentTime)) {
                queue.remove(msg);
                if (log.isDebugEnabled()) {
                    log.debug("expired message: " + msg);
                }
            }
View Full Code Here

        this.internalSession = internalSession;
    }
   
   
    private final ActiveMQMessage assembleMessage(ActiveMQMessage message) {
        ActiveMQMessage result = message;
        if (message != null && !connection.isInternalConnection() && message.isMessagePart()) {
            if (message.getNumberOfParts() == 1) {
                //passed though from another session - i.e.
                //a network or remote connection and now assembled
                message.resetMessagePart();
                result = message;
            }
            else {
                result = null;
                String parentId = message.getParentMessageID();
                ActiveMQMessage[] array = (ActiveMQMessage[]) assemblies.get(parentId);
                if (array == null) {
                    array = new ActiveMQMessage[message.getNumberOfParts()];
                    assemblies.put(parentId, array);
                }
                array[message.getPartNumber()] = message;
                boolean complete = true;
                for (int i = 0;i < array.length;i++) {
                    complete &= array[i] != null;
                }
                if (complete) {
                    result = array[0];
                    ByteArray[] bas = new ByteArray[array.length];
                    try {
                        for (int i = 0;i < bas.length;i++) {
                            bas[i] = array[i].getBodyAsBytes();
                            if (i >= 1){
                                array[i].clearBody();
                            }
                        }
                        ByteArray ba = fragmentation.assemble(bas);
                        result.setBodyAsBytes(ba);
                    }
                    catch (IOException ioe) {
                        JMSException jmsEx = new JMSException("Failed to assemble fragment message: " + parentId);
                        jmsEx.setLinkedException(ioe);
                        this.connection.onException(jmsEx);
View Full Code Here

                        TransactionManager.getContexTransaction().addPostCommitTask(new TransactionTask() {
                            public void execute() throws Throwable {
                                messagePtrs.remove(theEntry);
                                if ((ack.isExpired() || ack.isMessageRead()) && !browser) {
                                    if (ack.isExpired() && !pointer.getContainer().isDeadLetterQueue()) {
                                        ActiveMQMessage msg = pointer.getContainer().getMessage(
                                                pointer.getMessageIdentity());
                                        if (msg != null) {
                                            deadLetterPolicy.sendToDeadLetter(msg);
                                        }
                                    }
View Full Code Here

        synchronized (lock) {
            QueueListEntry entry = messagePtrs.getFirstEntry();
            while (entry != null) {
                MessagePointer pointer = (MessagePointer) entry.getElement();
                if (!pointer.isDispatched()) {
                    ActiveMQMessage msg = pointer.getContainer().getMessage(pointer.getMessageIdentity());
                    if (msg != null) {
                        if (pointer.isDispatched() || pointer.isRedelivered()) {
                            //already dispatched - so mark as redelivered
                            msg.setJMSRedelivered(true);
                            if (redeliveryPolicy.isBackOffMode()
                                    && msg.getDeliveryCount() < redeliveryPolicy.getMaximumRetryCount()) {
                                long sleepTime = redeliveryPolicy.getInitialRedeliveryTimeout();
                                sleepTime *= (msg.getDeliveryCount() * redeliveryPolicy.getBackOffIncreaseRate());
                                try {
                                    Thread.sleep(sleepTime);
                                }
                                catch (InterruptedException e) {
                                }
                            }
                            //incremenent delivery count
                            msg.incrementDeliveryCount();
                        }
                        if (!pointer.getContainer().isDeadLetterQueue()
                                && (msg.isExpired() || msg.getDeliveryCount() >= redeliveryPolicy
                                        .getMaximumRetryCount())) {
                            if (msg.isExpired()) {
                                log.warn("Message: " + msg + " has expired");
                            }
                            else {
                                log.warn("Message: " + msg + " exceeded retry count: " + msg.getDeliveryCount());
                            }
                            deadLetterPolicy.sendToDeadLetter(msg);
                            QueueListEntry discarded = entry;
                            entry = messagePtrs.getPrevEntry(discarded);
                            messagePtrs.remove(discarded);
                        }
                        else {
                            pointer.setDispatched(true);
                            msg.setDispatchedFromDLQ(pointer.getContainer().isDeadLetterQueue());
                            tmpList.add(msg);
                        }
                    }
                    else {
                        //the message is probably expired
View Full Code Here

            boolean fragmentedMessages = false;
            int maxNumberToDispatch = prefetchLimit - unconsumedMessagesDispatched.get();
            while (entry != null && (count < maxNumberToDispatch || fragmentedMessages)) {
                MessagePointer pointer = (MessagePointer) entry.getElement();
                if (!pointer.isDispatched()) {
                    ActiveMQMessage msg = pointer.getContainer().getMessage(pointer.getMessageIdentity());
                    if (msg != null && !msg.isExpired()) {
                        if (pointer.isDispatched() || pointer.isRedelivered()) {
                            //already dispatched - so mark as redelivered
                            msg.setJMSRedelivered(true);
                        }
                        pointer.setDispatched(true);
                        tmpList.add(msg);
                        fragmentedMessages = msg.isMessagePart() && !msg.isLastMessagePart();
                        unconsumedMessagesDispatched.increment();
                        count++;
                    }
                    else {
                        //the message is probably expired
View Full Code Here

TOP

Related Classes of org.activemq.message.ActiveMQMessage

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.