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
19 package org.codehaus.activemq.broker;
20
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.DurableUnsubscribe;
26 import org.codehaus.activemq.message.MessageAck;
27 import org.codehaus.activemq.message.ProducerInfo;
28 import org.codehaus.activemq.message.SessionInfo;
29 import org.codehaus.activemq.message.WireFormat;
30 import org.codehaus.activemq.security.SecurityAdapter;
31 import org.codehaus.activemq.service.Service;
32 import org.codehaus.activemq.store.PersistenceAdapter;
33 import org.codehaus.activemq.transport.DiscoveryAgent;
34 import org.codehaus.activemq.transport.NetworkConnector;
35 import org.codehaus.activemq.transport.TransportServerChannel;
36
37 import javax.jms.InvalidClientIDException;
38 import javax.jms.JMSException;
39 import javax.jms.JMSSecurityException;
40 import javax.transaction.xa.XAException;
41 import java.util.List;
42
43 /***
44 * The ActiveMQ JMS Broker Container which contains a {@link Broker} and one or more
45 * {@ BrokerConnector} instances talking over some {@link org.codehaus.activemq.transport.TransportChannel}
46 * <p/>
47 * <b>Note</b> that once a broker container has been stopped it should be discarded and a new service
48 * instance created again. Calling start() on a stopped broker will not usually work.
49 *
50 * @version $Revision: 1.9 $
51 */
52 public interface BrokerContainer extends Service {
53
54 /***
55 * registers a new Connection
56 *
57 * @param client
58 * @param info infomation about the client-side Connection
59 * @throws InvalidClientIDException if the ClientID of the Connection is a duplicate
60 */
61 public void registerConnection(BrokerClient client, ConnectionInfo info) throws JMSException;
62
63 /***
64 * un-registers a Connection
65 *
66 * @param client
67 * @param info infomation about the client-side Connection
68 * @throws JMSException
69 */
70 public void deregisterConnection(BrokerClient client, ConnectionInfo info) throws JMSException;
71
72 /***
73 * Registers a MessageConsumer
74 *
75 * @param client
76 * @param info
77 * @throws JMSException
78 * @throws JMSSecurityException if client authentication fails for the Destination the
79 * Consumer applies for
80 */
81 public void registerMessageConsumer(BrokerClient client, ConsumerInfo info) throws JMSException;
82
83 /***
84 * De-register a MessageConsumer from the Broker
85 *
86 * @param client
87 * @param info
88 * @throws JMSException
89 */
90 public void deregisterMessageConsumer(BrokerClient client, ConsumerInfo info) throws JMSException;
91
92 /***
93 * Registers a MessageProducer
94 *
95 * @param client
96 * @param info
97 * @throws JMSException
98 * @throws JMSSecurityException if client authentication fails for the Destination the
99 * Consumer applies for
100 */
101
102 public void registerMessageProducer(BrokerClient client, ProducerInfo info) throws JMSException;
103
104 /***
105 * De-register a MessageProducer from the Broker
106 *
107 * @param client
108 * @param info
109 * @throws JMSException
110 */
111 public void deregisterMessageProducer(BrokerClient client, ProducerInfo info) throws JMSException;
112
113 /***
114 * Register a client-side Session (used for Monitoring)
115 *
116 * @param client
117 * @param info
118 * @throws JMSException
119 */
120
121 public void registerSession(BrokerClient client, SessionInfo info) throws JMSException;
122
123 /***
124 * De-register a client-side Session from the Broker (used for monitoring)
125 *
126 * @param client
127 * @param info
128 * @throws JMSException
129 */
130 public void deregisterSession(BrokerClient client, SessionInfo info) throws JMSException;
131
132 /***
133 * Start a transaction from the Client session
134 *
135 * @param client
136 * @param transactionId
137 * @throws JMSException
138 */
139 public void startTransaction(BrokerClient client, String transactionId) throws JMSException;
140
141 /***
142 * Rollback a transacton
143 *
144 * @param client
145 * @param transactionId
146 * @throws JMSException
147 */
148 public void rollbackTransaction(BrokerClient client, String transactionId) throws JMSException;
149
150 /***
151 * Commit a transaction
152 *
153 * @param client
154 * @param transactionId
155 * @throws JMSException
156 */
157 public void commitTransaction(BrokerClient client, String transactionId) throws JMSException;
158
159 /***
160 * send message with a transaction context
161 *
162 * @param client
163 * @param transactionId
164 * @param message
165 * @throws JMSException
166 */
167 public void sendTransactedMessage(BrokerClient client, String transactionId, ActiveMQMessage message)
168 throws JMSException;
169
170 /***
171 * Acknowledge receipt of a message within a transaction context
172 *
173 * @param client
174 * @param transactionId
175 * @param ack
176 * @throws JMSException
177 */
178 public void acknowledgeTransactedMessage(BrokerClient client, String transactionId, MessageAck ack)
179 throws JMSException;
180
181 /***
182 * Send a non-transacted message to the Broker
183 *
184 * @param client
185 * @param message
186 * @throws JMSException
187 */
188
189 public void sendMessage(BrokerClient client, ActiveMQMessage message) throws JMSException;
190
191 /***
192 * Acknowledge reciept of a message
193 *
194 * @param client
195 * @param ack
196 * @throws JMSException
197 */
198 public void acknowledgeMessage(BrokerClient client, MessageAck ack) throws JMSException;
199
200 /***
201 * Command to delete a durable topic subscription
202 *
203 * @param client
204 * @param ds
205 * @throws JMSException
206 */
207
208 public void durableUnsubscribe(BrokerClient client, DurableUnsubscribe ds) throws JMSException;
209
210 /***
211 * Start an XA transaction.
212 *
213 * @param client
214 * @param xid
215 */
216 public void startTransaction(BrokerClient client, ActiveMQXid xid) throws XAException;
217
218 /***
219 * Gets the prepared XA transactions.
220 *
221 * @param client
222 * @return
223 */
224 public ActiveMQXid[] getPreparedTransactions(BrokerClient client) throws XAException;
225
226 /***
227 * Prepare an XA transaction.
228 *
229 * @param client
230 * @param xid
231 */
232 public int prepareTransaction(BrokerClient client, ActiveMQXid xid) throws XAException;
233
234 /***
235 * Rollback an XA transaction.
236 *
237 * @param client
238 * @param xid
239 */
240 public void rollbackTransaction(BrokerClient client, ActiveMQXid xid) throws XAException;
241
242 /***
243 * Commit an XA transaction.
244 *
245 * @param client
246 * @param xid
247 * @param onePhase
248 */
249 public void commitTransaction(BrokerClient client, ActiveMQXid xid, boolean onePhase) throws XAException;
250
251 /***
252 * Called when a new connector is added to this container
253 *
254 * @param connector
255 */
256 public void addConnector(BrokerConnector connector);
257
258 /***
259 * Called when a connector is removed to this container
260 *
261 * @param connector
262 */
263 public void removeConnector(BrokerConnector connector);
264
265
266 /***
267 * @return the Broker for the Container
268 */
269 public Broker getBroker();
270
271 /***
272 * Returns the transport connectors used to communicate with
273 * clients
274 */
275 public List getTransportConnectors();
276
277 public void setTransportConnectors(List transportConnectors);
278
279 /***
280 * Returns a list of {@link org.codehaus.activemq.transport.NetworkConnector}
281 * instances used to communicate with the network of {@link Broker} instances
282 */
283 public List getNetworkConnectors();
284
285 public void setNetworkConnectors(List networkConnectors);
286
287
288 /***
289 * Returns the persistence adapter
290 */
291 public PersistenceAdapter getPersistenceAdapter();
292
293 public void setPersistenceAdapter(PersistenceAdapter persistenceAdapter);
294
295 /***
296 * Returns the discovery agent if one is available or null if discovery is not
297 * enabled
298 */
299 public DiscoveryAgent getDiscoveryAgent();
300
301 public void setDiscoveryAgent(DiscoveryAgent discoveryAgent);
302
303 /***
304 * Returns the security adapter used to authenticate and authorize access to JMS resources
305 */
306 public SecurityAdapter getSecurityAdapter();
307
308 /***
309 * Sets the security adapter used to authenticate and authorize access to JMS resources
310 */
311 public void setSecurityAdapter(SecurityAdapter securityAdapter);
312
313 /***
314 * Adds a new network connector for the given URI
315 */
316 NetworkConnector addNetworkConnector(String uri);
317
318 /***
319 * Adds a new network connector
320 *
321 * @return the newly created network connector
322 */
323 NetworkConnector addNetworkConnector();
324
325 /***
326 * Adds a new network connector
327 */
328 void addNetworkConnector(NetworkConnector connector);
329
330 /***
331 * Removes the given network connector
332 */
333 void removeNetworkConnector(NetworkConnector connector);
334
335 /***
336 * Adds a new transport connector for the given bind address
337 */
338 void addConnector(String bindAddress) throws JMSException;
339
340 /***
341 * Adds a new transport connector for the given bind address and wire format
342 */
343 void addConnector(String bindAddress, WireFormat wireFormat) throws JMSException;
344
345 /***
346 * Adds a new transport connector for the given transportConnector
347 */
348 void addConnector(TransportServerChannel transportConnector);
349 }