1 /***
2 *
3 * Copyright 2004 Protique Ltd
4 *
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 *
17 **/
18 package org.codehaus.activemq.broker;
19
20 import org.codehaus.activemq.capacity.CapacityMonitor;
21 import org.codehaus.activemq.message.ActiveMQMessage;
22 import org.codehaus.activemq.message.ActiveMQXid;
23 import org.codehaus.activemq.message.ConnectionInfo;
24 import org.codehaus.activemq.message.ConsumerInfo;
25 import org.codehaus.activemq.message.MessageAck;
26 import org.codehaus.activemq.message.ProducerInfo;
27 import org.codehaus.activemq.security.SecurityAdapter;
28 import org.codehaus.activemq.service.MessageContainerManager;
29 import org.codehaus.activemq.service.Service;
30 import org.codehaus.activemq.service.RedeliveryPolicy;
31 import org.codehaus.activemq.store.PersistenceAdapter;
32
33 import javax.jms.JMSException;
34 import javax.naming.Context;
35 import javax.transaction.xa.XAException;
36 import java.io.File;
37 import java.util.Hashtable;
38 import java.util.Map;
39
40 /***
41 * The Message Broker which routes messages,
42 * maintains subscriptions and connections, acknowlegdges messages and handles
43 * transactions.
44 *
45 * @version $Revision: 1.15 $
46 */
47 public interface Broker extends Service, CapacityMonitor {
48
49 /***
50 * Notification of a new client attempting to connect, which can
51 * be rejected if authentication or authorization fails.
52 */
53 public void addClient(BrokerClient client, ConnectionInfo info) throws JMSException;
54
55 /***
56 * A hint to the broker that an BrokerClient has stopped
57 * This enables the broker to clean-up any outstanding processing
58 * that may be outstanding
59 */
60 public void removeClient(BrokerClient client, ConnectionInfo info) throws JMSException;
61
62 /***
63 * Adds a new message producer, which could be rejected due to authorization
64 */
65 public void addMessageProducer(BrokerClient client, ProducerInfo info) throws JMSException;
66
67 /***
68 * Removes a producer
69 */
70 public void removeMessageProducer(BrokerClient client, ProducerInfo info) throws JMSException;
71
72
73 /***
74 * Add an active message consumer, which could be rejected due to authorization
75 */
76 public void addMessageConsumer(BrokerClient client, ConsumerInfo info) throws JMSException;
77
78 /***
79 * remove an active message consumer
80 */
81 public void removeMessageConsumer(BrokerClient client, ConsumerInfo info) throws JMSException;
82
83
84 /***
85 * send a message to the broker
86 */
87 public void sendMessage(BrokerClient client, ActiveMQMessage message) throws JMSException;
88
89 /***
90 * send a message to the broker within a transaction
91 */
92 public void sendTransactedMessage(BrokerClient client, String transactionId, ActiveMQMessage message) throws JMSException;
93
94 /***
95 * Acknowledge positively or negatively, the consumption of a message by the Message Consumer
96 */
97 public void acknowledgeMessage(BrokerClient client, MessageAck ack) throws JMSException;
98
99 /***
100 * Acknowledge positively or negatively, the consumption of a message within a transaction
101 */
102 public void acknowledgeTransactedMessage(BrokerClient client, String transactionId, MessageAck ack) throws JMSException;
103
104 /***
105 * gets a list of all the prepared xa transactions.
106 *
107 * @param client
108 */
109 public ActiveMQXid[] getPreparedTransactions(BrokerClient client) throws XAException;
110
111
112 /***
113 * Called after a rollback of a JMS transaction to redeliver the message to the consumers
114 * dispatch queue
115 *
116 * @param client
117 * @param ack
118 */
119 public void redeliverMessage(BrokerClient client, MessageAck ack) throws JMSException;
120
121 /***
122 * Delete a durable subscriber
123 *
124 * @param clientId
125 * @param subscriberName
126 * @throws JMSException if the subscriber doesn't exist or is still active
127 */
128 public void deleteSubscription(String clientId, String subscriberName) throws JMSException;
129
130 /***
131 * start a transaction
132 *
133 * @param client
134 * @param transactionId
135 */
136 public void startTransaction(BrokerClient client, String transactionId) throws JMSException;
137
138 /***
139 * commit a transaction
140 *
141 * @param client
142 * @param transactionId
143 * @throws JMSException
144 */
145 public void commitTransaction(BrokerClient client, String transactionId) throws JMSException;
146
147 /***
148 * rollback a transaction
149 *
150 * @param client
151 * @param transactionId
152 * @throws JMSException
153 */
154 public void rollbackTransaction(BrokerClient client, String transactionId) throws JMSException;
155
156
157 /***
158 * @param client
159 * @param xid
160 * @throws XAException
161 */
162 public void startTransaction(BrokerClient client, ActiveMQXid xid) throws XAException;
163
164 /***
165 * @param client
166 * @param xid
167 * @return
168 * @throws XAException
169 */
170 public int prepareTransaction(BrokerClient client, ActiveMQXid xid) throws XAException;
171
172 /***
173 * @param client
174 * @param xid
175 * @throws XAException
176 */
177
178 public void rollbackTransaction(BrokerClient client, ActiveMQXid xid) throws XAException;
179
180 /***
181 * @param client
182 * @param xid
183 * @param onePhase
184 * @throws XAException
185 */
186 public void commitTransaction(BrokerClient client, ActiveMQXid xid, boolean onePhase) throws XAException;
187
188
189
190
191
192 /***
193 * Get a temp directory - used for spooling
194 *
195 * @return a File ptr to the directory
196 */
197 public File getTempDir();
198
199 /***
200 * @return the name of the Broker
201 */
202 public String getBrokerName();
203
204 /***
205 * @return the name of the cluster the broker belongs to
206 */
207 public String getBrokerClusterName();
208
209 /***
210 * @return the PersistenceAdaptor
211 */
212 public PersistenceAdapter getPersistenceAdapter();
213
214 /***
215 * set the persistence adaptor
216 *
217 * @param persistenceAdapter
218 */
219 public void setPersistenceAdapter(PersistenceAdapter persistenceAdapter);
220
221 /***
222 * @return a map, indexed by name of the container managers
223 */
224 public Map getContainerManagerMap();
225
226 /***
227 * Returns the naming context of the destinations available in this broker
228 *
229 * @param environment
230 * @return the context
231 */
232 public Context getDestinationContext(Hashtable environment);
233
234 /***
235 * Add a ConsumerInfoListener to the Broker
236 *
237 * @param l
238 */
239 public void addConsumerInfoListener(ConsumerInfoListener l);
240
241 /***
242 * Remove a ConsumerInfoListener from the Broker
243 *
244 * @param l
245 */
246 public void removeConsumerInfoListener(ConsumerInfoListener l);
247
248
249 /***
250 * @return the MessageContainerManager for durable topics
251 */
252 public MessageContainerManager getPersistentTopicContainerManager();
253
254 /***
255 * @return the MessageContainerManager for transient topics
256 */
257 public MessageContainerManager getTransientTopicContainerManager();
258
259 /***
260 * @return the MessageContainerManager for persistent queues
261 */
262 public MessageContainerManager getPersistentQueueContainerManager();
263
264 /***
265 * @return the MessageContainerManager for transient queues
266 */
267 public MessageContainerManager getTransientQueueContainerManager();
268
269 /***
270 * Returns the security adapter used to authenticate and authorize access to JMS resources
271 */
272 public SecurityAdapter getSecurityAdapter();
273
274 /***
275 * Sets the security adapter used to authenticate and authorize access to JMS resources
276 */
277 public void setSecurityAdapter(SecurityAdapter securityAdapter);
278
279 RedeliveryPolicy getRedeliveryPolicy();
280
281 void setRedeliveryPolicy(RedeliveryPolicy redeliveryPolicy);
282 }