001/**
002 * Licensed to the Apache Software Foundation (ASF) under one or more
003 * contributor license agreements.  See the NOTICE file distributed with
004 * this work for additional information regarding copyright ownership.
005 * The ASF licenses this file to You under the Apache License, Version 2.0
006 * (the "License"); you may not use this file except in compliance with
007 * the License.  You may obtain a copy of the License at
008 *
009 *      http://www.apache.org/licenses/LICENSE-2.0
010 *
011 * Unless required by applicable law or agreed to in writing, software
012 * distributed under the License is distributed on an "AS IS" BASIS,
013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014 * See the License for the specific language governing permissions and
015 * limitations under the License.
016 */
017package org.apache.activemq.pool;
018
019import javax.jms.Destination;
020import javax.jms.JMSException;
021import javax.jms.Message;
022import javax.jms.MessageProducer;
023
024import org.apache.activemq.ActiveMQMessageProducer;
025
026/**
027 * A pooled {@link MessageProducer}
028 * 
029 * 
030 */
031public class PooledProducer implements MessageProducer {
032    private ActiveMQMessageProducer messageProducer;
033    private Destination destination;
034    private int deliveryMode;
035    private boolean disableMessageID;
036    private boolean disableMessageTimestamp;
037    private int priority;
038    private long timeToLive;
039
040    public PooledProducer(ActiveMQMessageProducer messageProducer, Destination destination) throws JMSException {
041        this.messageProducer = messageProducer;
042        this.destination = destination;
043
044        this.deliveryMode = messageProducer.getDeliveryMode();
045        this.disableMessageID = messageProducer.getDisableMessageID();
046        this.disableMessageTimestamp = messageProducer.getDisableMessageTimestamp();
047        this.priority = messageProducer.getPriority();
048        this.timeToLive = messageProducer.getTimeToLive();
049    }
050
051    public void close() throws JMSException {
052    }
053
054    public void send(Destination destination, Message message) throws JMSException {
055        send(destination, message, getDeliveryMode(), getPriority(), getTimeToLive());
056    }
057
058    public void send(Message message) throws JMSException {
059        send(destination, message, getDeliveryMode(), getPriority(), getTimeToLive());
060    }
061
062    public void send(Message message, int deliveryMode, int priority, long timeToLive) throws JMSException {
063        send(destination, message, deliveryMode, priority, timeToLive);
064    }
065
066    public void send(Destination destination, Message message, int deliveryMode, int priority, long timeToLive) throws JMSException {
067        if (destination == null) {
068            destination = this.destination;
069        }
070        ActiveMQMessageProducer messageProducer = getMessageProducer();
071
072        // just in case let only one thread send at once
073        synchronized (messageProducer) {
074            messageProducer.send(destination, message, deliveryMode, priority, timeToLive);
075        }
076    }
077
078    public Destination getDestination() {
079        return destination;
080    }
081
082    public int getDeliveryMode() {
083        return deliveryMode;
084    }
085
086    public void setDeliveryMode(int deliveryMode) {
087        this.deliveryMode = deliveryMode;
088    }
089
090    public boolean getDisableMessageID() {
091        return disableMessageID;
092    }
093
094    public void setDisableMessageID(boolean disableMessageID) {
095        this.disableMessageID = disableMessageID;
096    }
097
098    public boolean getDisableMessageTimestamp() {
099        return disableMessageTimestamp;
100    }
101
102    public void setDisableMessageTimestamp(boolean disableMessageTimestamp) {
103        this.disableMessageTimestamp = disableMessageTimestamp;
104    }
105
106    public int getPriority() {
107        return priority;
108    }
109
110    public void setPriority(int priority) {
111        this.priority = priority;
112    }
113
114    public long getTimeToLive() {
115        return timeToLive;
116    }
117
118    public void setTimeToLive(long timeToLive) {
119        this.timeToLive = timeToLive;
120    }
121
122    // Implementation methods
123    // -------------------------------------------------------------------------
124    protected ActiveMQMessageProducer getMessageProducer() {
125        return messageProducer;
126    }
127
128    public String toString() {
129        return "PooledProducer { " + messageProducer + " }";
130    }
131
132}