Package org.directwebremoting.jms

Source Code of org.directwebremoting.jms.DwrMessageProducer

/*
* Copyright 2005 Joe Walker
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*     http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.directwebremoting.jms;

import java.util.Date;
import java.util.UUID;

import javax.jms.Destination;
import javax.jms.IllegalStateException;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageProducer;

import org.directwebremoting.Hub;
import org.directwebremoting.HubFactory;
import org.directwebremoting.ServerContext;

/**
* An implementation of {@link MessageProducer} that sends messages out over
* Reverse Ajax to a client side hub
* @author Joe Walker [joe at getahead dot ltd dot uk]
*/
public class DwrMessageProducer implements MessageProducer
{
    /**
     * @param destination
     */
    public DwrMessageProducer(Destination destination, DwrConnection connection)
    {
        this.destination = destination;
        ServerContext serverContext = connection.getServerContext();

        if (serverContext != null)
        {
            hub = HubFactory.get(serverContext);
        }
        else
        {
            hub = HubFactory.get();
        }
    }

    /* (non-Javadoc)
     * @see javax.jms.MessageProducer#close()
     */
    public void close() throws JMSException
    {
        state = State.CLOSED;
    }

    /* (non-Javadoc)
     * @see javax.jms.MessageProducer#getDeliveryMode()
     */
    public int getDeliveryMode() throws JMSException
    {
        return deliveryMode;
    }

    /* (non-Javadoc)
     * @see javax.jms.MessageProducer#getDestination()
     */
    public Destination getDestination() throws JMSException
    {
        return destination;
    }

    /* (non-Javadoc)
     * @see javax.jms.MessageProducer#getDisableMessageID()
     */
    public boolean getDisableMessageID() throws JMSException
    {
        return disableMessageID;
    }

    /* (non-Javadoc)
     * @see javax.jms.MessageProducer#getDisableMessageTimestamp()
     */
    public boolean getDisableMessageTimestamp() throws JMSException
    {
        return disableMessageTimestamp;
    }

    /* (non-Javadoc)
     * @see javax.jms.MessageProducer#getPriority()
     */
    public int getPriority() throws JMSException
    {
        return priority;
    }

    /* (non-Javadoc)
     * @see javax.jms.MessageProducer#getTimeToLive()
     */
    public long getTimeToLive() throws JMSException
    {
        return timeToLive;
    }

    /* (non-Javadoc)
     * @see javax.jms.MessageProducer#send(javax.jms.Message)
     */
    public void send(Message message) throws JMSException
    {
        send(destination, message, deliveryMode, priority, timeToLive);
    }

    /* (non-Javadoc)
     * @see javax.jms.MessageProducer#send(javax.jms.Destination, javax.jms.Message)
     */
    public void send(Destination realDestination, Message message) throws JMSException
    {
        send(realDestination, message, deliveryMode, priority, timeToLive);
    }

    /* (non-Javadoc)
     * @see javax.jms.MessageProducer#send(javax.jms.Message, int, int, long)
     */
    public void send(Message message, int realDeliveryMode, int realPriority, long realTimeToLive) throws JMSException
    {
        send(destination, message, realDeliveryMode, realPriority, realTimeToLive);
    }

    /* (non-Javadoc)
     * @see javax.jms.MessageProducer#send(javax.jms.Destination, javax.jms.Message, int, int, long)
     */
    public void send(Destination realDestination, Message message, int realDeliveryMode, int realPriority, long realTimeToLive) throws JMSException
    {
        if (state == State.CLOSED)
        {
            throw new IllegalStateException("DwrMessageProducer has been closed");
        }

        if (!disableMessageID)
        {
            message.setJMSMessageID(UUID.randomUUID().toString());
        }

        if (!disableMessageTimestamp)
        {
            message.setJMSTimestamp(new Date().getTime());
        }

        if (realDestination instanceof DwrTopic)
        {
            DwrTopic dwrtopic = (DwrTopic) realDestination;
            String topicName = dwrtopic.getTopicName();

            hub.publish(topicName, message);
        }
        else
        {
            throw new IllegalStateException("Unsuported Destination type (" + realDestination.getClass().getCanonicalName() + "). Only Topics are currently supported.");
        }
    }

    /* (non-Javadoc)
     * @see javax.jms.MessageProducer#setDeliveryMode(int)
     */
    public void setDeliveryMode(int deliveryMode) throws JMSException
    {
        this.deliveryMode = deliveryMode;
        throw Unsupported.noManualAcknowledgment();
    }

    /* (non-Javadoc)
     * @see javax.jms.MessageProducer#setDisableMessageID(boolean)
     */
    public void setDisableMessageID(boolean disableMessageID) throws JMSException
    {
        this.disableMessageID = disableMessageID;
    }

    /* (non-Javadoc)
     * @see javax.jms.MessageProducer#setDisableMessageTimestamp(boolean)
     */
    public void setDisableMessageTimestamp(boolean disableMessageTimestamp) throws JMSException
    {
        this.disableMessageTimestamp = disableMessageTimestamp;
    }

    /* (non-Javadoc)
     * @see javax.jms.MessageProducer#setPriority(int)
     */
    public void setPriority(int priority) throws JMSException
    {
        this.priority = priority;
        throw Unsupported.noMessagePriority();
    }

    /* (non-Javadoc)
     * @see javax.jms.MessageProducer#setTimeToLive(long)
     */
    public void setTimeToLive(long timeToLive) throws JMSException
    {
        this.timeToLive = timeToLive;
        throw Unsupported.noMessageExpiry();
    }

    /**
     * The DWR hub that does the real work
     */
    private Hub hub;

    /**
     * The default queue or topic
     */
    private final Destination destination;

    /**
     * For queues: are messages persistent
     */
    private int deliveryMode;

    /**
     * Have we been closed?
     */
    private State state;

    /**
     * Do we skip assigning message IDs?
     */
    private boolean disableMessageID;

    /**
     * Do we skip assigning timestamps
     */
    private boolean disableMessageTimestamp;

    /**
     * What is the default priority for messages we produce
     */
    private int priority;

    /**
     * How long before the system can delete messages that we produce
     */
    private long timeToLive;
}
TOP

Related Classes of org.directwebremoting.jms.DwrMessageProducer

TOP
Copyright © 2018 www.massapi.com. 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.