01: /*
02: * <copyright>
03: *
04: * Copyright 1997-2004 BBNT Solutions, LLC
05: * under sponsorship of the Defense Advanced Research Projects
06: * Agency (DARPA).
07: *
08: * You can redistribute this software and/or modify it under the
09: * terms of the Cougaar Open Source License as published on the
10: * Cougaar Open Source Website (www.cougaar.org).
11: *
12: * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
13: * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
14: * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
15: * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
16: * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
17: * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
18: * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
19: * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
20: * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
21: * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
22: * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23: *
24: * </copyright>
25: */
26:
27: package org.cougaar.mts.base;
28:
29: import org.cougaar.core.component.Service;
30: import org.cougaar.core.mts.MessageAddress;
31: import org.cougaar.core.mts.MessageAttributes;
32: import org.cougaar.mts.std.AttributedMessage;
33:
34: /**
35: * The first or second station for an outgoing message on the receive
36: * side is a MessageDeliverer (first if no serialization, second
37: * otherwise). <p> In theory a given Message Transport subsystem can
38: * have multiple MessageDeliverers. For this release we only make
39: * one, instantiated as a MessageDelivererImpl. Either way, the
40: * MessageDeliverers are instantiated by a MessageDelivererFactory,
41: * accessible as the MTS-internal <ff>MessageDeliver</ff> service,
42: *
43: * <p> The <strong>deliverMessage</strong> method is used to pass the
44: * messages onto the next stop, a ReceiveLink. The LinkProtocol is
45: * responsible for calling the MessageDeliverer's deliverMessage after
46: * it reaches the destination node.
47: *
48: * <p> The previous station is MessageReader if the Java serialization
49: * was used or DestinationLink on the sender side otherwise. The next
50: * station is ReceiveLink.
51: *
52: * @see MessageDelivererFactory
53: * @see SendLink
54: * @see SendQueue
55: * @see Router
56: * @see DestinationQueue
57: * @see DestinationLink
58: * @see MessageWriter
59: * @see MessageReader
60: * @see ReceiveLink
61: *
62: * Javadoc contributions from George Mount.
63: */
64:
65: public interface MessageDeliverer extends Service {
66: /**
67: * Called by the LinkProtocol on the receiving side. Chooses
68: * the correct ReceiveLink associated with the target
69: * address and calls the deliverMessage.
70: *
71: * @param message The mesage to be delivered.
72: * @param dest The target MessageTransportClient address.
73: * @see LinkProtocol
74: * @see ReceiveLink#deliverMessage(AttributedMessage)
75: */
76: MessageAttributes deliverMessage(AttributedMessage message,
77: MessageAddress dest) throws MisdeliveredMessageException;
78:
79: /**
80: * Returns true iff this MessageDeliverer is associated with the
81: * given name. Currently there is only one MessageDeliverer per
82: * node. Used by MessageDelivererFactory should there be multiple
83: * MessageDeliverers.
84: *
85: * @param name The MessageDeliverer name to compare against the one
86: * associated with this MessageDeliverer
87: */
88: boolean matches(String name);
89:
90: }
|