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