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