001 /** 002 * 003 * Copyright 2004 Protique Ltd 004 * 005 * Licensed under the Apache License, Version 2.0 (the "License"); 006 * you may not use this file except in compliance with the License. 007 * 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 * 017 **/ 018 package org.activemq.broker; 019 020 import org.activemq.capacity.CapacityMonitor; 021 import org.activemq.message.ActiveMQMessage; 022 import org.activemq.message.ActiveMQXid; 023 import org.activemq.message.ConnectionInfo; 024 import org.activemq.message.ConsumerInfo; 025 import org.activemq.message.MessageAck; 026 import org.activemq.message.ProducerInfo; 027 import org.activemq.security.SecurityAdapter; 028 import org.activemq.service.DeadLetterPolicy; 029 import org.activemq.service.MessageContainerManager; 030 import org.activemq.service.RedeliveryPolicy; 031 import org.activemq.service.Service; 032 import org.activemq.store.PersistenceAdapter; 033 034 import javax.jms.JMSException; 035 import javax.naming.Context; 036 import javax.transaction.xa.XAException; 037 import java.io.File; 038 import java.util.Hashtable; 039 import java.util.Map; 040 041 /** 042 * The Message Broker which routes messages, 043 * maintains subscriptions and connections, acknowlegdges messages and handles 044 * transactions. 045 * 046 * @version $Revision: 1.1.1.1 $ 047 */ 048 public interface Broker extends Service, CapacityMonitor { 049 050 /** 051 * Get's the admin interface of the broker. 052 * 053 * @return the admin interface of the broker. 054 */ 055 public BrokerAdmin getBrokerAdmin(); 056 057 /** 058 * Notification of a new client attempting to connect, which can 059 * be rejected if authentication or authorization fails. 060 */ 061 public void addClient(BrokerClient client, ConnectionInfo info) throws JMSException; 062 063 /** 064 * A hint to the broker that an BrokerClient has stopped 065 * This enables the broker to clean-up any outstanding processing 066 * that may be outstanding 067 */ 068 public void removeClient(BrokerClient client, ConnectionInfo info) throws JMSException; 069 070 /** 071 * Adds a new message producer, which could be rejected due to authorization 072 */ 073 public void addMessageProducer(BrokerClient client, ProducerInfo info) throws JMSException; 074 075 /** 076 * Removes a producer 077 */ 078 public void removeMessageProducer(BrokerClient client, ProducerInfo info) throws JMSException; 079 080 081 /** 082 * Add an active message consumer, which could be rejected due to authorization 083 */ 084 public void addMessageConsumer(BrokerClient client, ConsumerInfo info) throws JMSException; 085 086 /** 087 * remove an active message consumer 088 */ 089 public void removeMessageConsumer(BrokerClient client, ConsumerInfo info) throws JMSException; 090 091 092 /** 093 * send a message to the broker 094 */ 095 public void sendMessage(BrokerClient client, ActiveMQMessage message) throws JMSException; 096 097 /** 098 * Acknowledge positively or negatively, the consumption of a message by the Message Consumer 099 */ 100 public void acknowledgeMessage(BrokerClient client, MessageAck ack) throws JMSException; 101 102 /** 103 * gets a list of all the prepared xa transactions. 104 * 105 * @param client 106 */ 107 public ActiveMQXid[] getPreparedTransactions(BrokerClient client) throws XAException; 108 109 /** 110 * Delete a durable subscriber 111 * 112 * @param clientId 113 * @param subscriberName 114 * @throws JMSException if the subscriber doesn't exist or is still active 115 */ 116 public void deleteSubscription(String clientId, String subscriberName) throws JMSException; 117 118 /** 119 * start a transaction 120 * 121 * @param client 122 * @param transactionId 123 */ 124 public void startTransaction(BrokerClient client, String transactionId) throws JMSException; 125 126 /** 127 * commit a transaction 128 * 129 * @param client 130 * @param transactionId 131 * @throws JMSException 132 */ 133 public void commitTransaction(BrokerClient client, String transactionId) throws JMSException; 134 135 /** 136 * rollback a transaction 137 * 138 * @param client 139 * @param transactionId 140 * @throws JMSException 141 */ 142 public void rollbackTransaction(BrokerClient client, String transactionId) throws JMSException; 143 144 145 /** 146 * @param client 147 * @param xid 148 * @throws XAException 149 */ 150 public void startTransaction(BrokerClient client, ActiveMQXid xid) throws XAException; 151 152 /** 153 * @param client 154 * @param xid 155 * @return 156 * @throws XAException 157 */ 158 public int prepareTransaction(BrokerClient client, ActiveMQXid xid) throws XAException; 159 160 /** 161 * @param client 162 * @param xid 163 * @throws XAException 164 */ 165 166 public void rollbackTransaction(BrokerClient client, ActiveMQXid xid) throws XAException; 167 168 /** 169 * @param client 170 * @param xid 171 * @param onePhase 172 * @throws XAException 173 */ 174 public void commitTransaction(BrokerClient client, ActiveMQXid xid, boolean onePhase) throws XAException; 175 176 177 // Properties 178 //------------------------------------------------------------------------- 179 180 /** 181 * Get a temp directory - used for spooling 182 * 183 * @return a File ptr to the directory 184 */ 185 public File getTempDir(); 186 187 /** 188 * @return the name of the Broker 189 */ 190 public String getBrokerName(); 191 192 /** 193 * @return the name of the cluster the broker belongs to 194 */ 195 public String getBrokerClusterName(); 196 197 /** 198 * @return the PersistenceAdaptor 199 */ 200 public PersistenceAdapter getPersistenceAdapter(); 201 202 /** 203 * set the persistence adaptor 204 * 205 * @param persistenceAdapter 206 */ 207 public void setPersistenceAdapter(PersistenceAdapter persistenceAdapter); 208 209 /** 210 * @return a map, indexed by name of the container managers 211 */ 212 public Map getContainerManagerMap(); 213 214 /** 215 * Returns the naming context of the destinations available in this broker 216 * 217 * @param environment 218 * @return the context 219 */ 220 public Context getDestinationContext(Hashtable environment); 221 222 /** 223 * Add a ConsumerInfoListener to the Broker 224 * 225 * @param l 226 */ 227 public void addConsumerInfoListener(ConsumerInfoListener l); 228 229 /** 230 * Remove a ConsumerInfoListener from the Broker 231 * 232 * @param l 233 */ 234 public void removeConsumerInfoListener(ConsumerInfoListener l); 235 236 237 /** 238 * @return the MessageContainerManager for durable topics 239 */ 240 public MessageContainerManager getPersistentTopicContainerManager(); 241 242 /** 243 * @return the MessageContainerManager for transient topics 244 */ 245 public MessageContainerManager getTransientTopicContainerManager(); 246 247 /** 248 * @return the MessageContainerManager for persistent queues 249 */ 250 public MessageContainerManager getPersistentQueueContainerManager(); 251 252 /** 253 * @return the MessageContainerManager for transient queues 254 */ 255 public MessageContainerManager getTransientQueueContainerManager(); 256 257 /** 258 * Returns the security adapter used to authenticate and authorize access to JMS resources 259 */ 260 public SecurityAdapter getSecurityAdapter(); 261 262 /** 263 * Sets the security adapter used to authenticate and authorize access to JMS resources 264 */ 265 public void setSecurityAdapter(SecurityAdapter securityAdapter); 266 267 /** 268 * @return the RedeliveryPolicy 269 */ 270 RedeliveryPolicy getRedeliveryPolicy(); 271 272 /** 273 * set the redelivery policy 274 * @param redeliveryPolicy 275 */ 276 void setRedeliveryPolicy(RedeliveryPolicy redeliveryPolicy); 277 278 /** 279 * @return the DeadLetterPolicy 280 */ 281 public DeadLetterPolicy getDeadLetterPolicy(); 282 283 /** 284 * set the dead letter policy 285 * @param deadLetterPolicy 286 */ 287 public void setDeadLetterPolicy(DeadLetterPolicy deadLetterPolicy); 288 289 /** 290 * Add a message to a dead letter queue 291 * @param deadLetterName 292 * @param message 293 * @throws JMSException 294 */ 295 public void sendToDeadLetterQueue(String deadLetterName,ActiveMQMessage message) throws JMSException; 296 297 }