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.ra;
018
019import javax.jms.Destination;
020import javax.jms.JMSException;
021import javax.jms.Message;
022import javax.jms.MessageProducer;
023import javax.jms.Queue;
024import javax.jms.QueueSender;
025import javax.jms.Topic;
026import javax.jms.TopicPublisher;
027
028/**
029 * An implementation of {@link MessageProducer} which uses the ActiveMQ JCA ResourceAdapter's
030 * current thread's JMS {@link javax.jms.Session} to send messages.
031 *
032 * 
033 */
034public class InboundMessageProducerProxy implements MessageProducer, QueueSender, TopicPublisher {
035    
036    private MessageProducer messageProducer;
037    private Destination destination;
038    private int deliveryMode;
039    private boolean disableMessageID;
040    private boolean disableMessageTimestamp;
041    private int priority;
042    private long timeToLive;
043
044    public InboundMessageProducerProxy(MessageProducer messageProducer, Destination destination) throws JMSException {
045        this.messageProducer = messageProducer;
046        this.destination = destination;
047
048        this.deliveryMode = messageProducer.getDeliveryMode();
049        this.disableMessageID = messageProducer.getDisableMessageID();
050        this.disableMessageTimestamp = messageProducer.getDisableMessageTimestamp();
051        this.priority = messageProducer.getPriority();
052        this.timeToLive = messageProducer.getTimeToLive();
053    }
054
055    public void close() throws JMSException {
056        // do nothing as we just go back into the pool
057        // though lets reset the various settings which may have been changed
058        messageProducer.setDeliveryMode(deliveryMode);
059        messageProducer.setDisableMessageID(disableMessageID);
060        messageProducer.setDisableMessageTimestamp(disableMessageTimestamp);
061        messageProducer.setPriority(priority);
062        messageProducer.setTimeToLive(timeToLive);
063    }
064
065    public Destination getDestination() throws JMSException {
066        return destination;
067    }
068
069    public int getDeliveryMode() throws JMSException {
070        return messageProducer.getDeliveryMode();
071    }
072
073    public boolean getDisableMessageID() throws JMSException {
074        return messageProducer.getDisableMessageID();
075    }
076
077    public boolean getDisableMessageTimestamp() throws JMSException {
078        return messageProducer.getDisableMessageTimestamp();
079    }
080
081    public int getPriority() throws JMSException {
082        return messageProducer.getPriority();
083    }
084
085    public long getTimeToLive() throws JMSException {
086        return messageProducer.getTimeToLive();
087    }
088
089    public void send(Destination destination, Message message) throws JMSException {
090        if (destination == null) {
091            destination = this.destination;
092        }
093        messageProducer.send(destination, message);
094    }
095
096    public void send(Destination destination, Message message, int deliveryMode, int priority, long timeToLive) throws JMSException {
097        if (destination == null) {
098            destination = this.destination;
099        }
100        messageProducer.send(destination, message, deliveryMode, priority, timeToLive);
101    }
102
103    public void send(Message message) throws JMSException {
104        messageProducer.send(destination, message);
105    }
106
107    public void send(Message message, int deliveryMode, int priority, long timeToLive) throws JMSException {
108        messageProducer.send(destination, message, deliveryMode, priority, timeToLive);
109    }
110
111    public void setDeliveryMode(int i) throws JMSException {
112        messageProducer.setDeliveryMode(i);
113    }
114
115    public void setDisableMessageID(boolean b) throws JMSException {
116        messageProducer.setDisableMessageID(b);
117    }
118
119    public void setDisableMessageTimestamp(boolean b) throws JMSException {
120        messageProducer.setDisableMessageTimestamp(b);
121    }
122
123    public void setPriority(int i) throws JMSException {
124        messageProducer.setPriority(i);
125    }
126
127    public void setTimeToLive(long l) throws JMSException {
128        messageProducer.setTimeToLive(l);
129    }
130
131    public Queue getQueue() throws JMSException {
132        return (Queue) messageProducer.getDestination();
133    }
134
135    public void send(Queue arg0, Message arg1) throws JMSException {
136        messageProducer.send(arg0, arg1);
137    }
138
139    public void send(Queue arg0, Message arg1, int arg2, int arg3, long arg4) throws JMSException {
140        messageProducer.send(arg0, arg1, arg2, arg3, arg4);
141    }
142
143    public Topic getTopic() throws JMSException {
144        return (Topic) messageProducer.getDestination();
145    }
146
147    public void publish(Message arg0) throws JMSException {
148        messageProducer.send(arg0);
149    }
150
151    public void publish(Message arg0, int arg1, int arg2, long arg3) throws JMSException {
152        messageProducer.send(arg0, arg1, arg2, arg3);
153    }
154
155    public void publish(Topic arg0, Message arg1) throws JMSException {
156        messageProducer.send(arg0, arg1);
157    }
158
159    public void publish(Topic arg0, Message arg1, int arg2, int arg3, long arg4) throws JMSException {
160        messageProducer.send(arg0, arg1, arg2, arg3, arg4);
161    }
162}