001: /******************************************************************************
002: * Copyright (C) Lars Ivar Almli. All rights reserved. *
003: * ---------------------------------------------------------------------------*
004: * This file is part of MActor. *
005: * *
006: * MActor is free software; you can redistribute it and/or modify *
007: * it under the terms of the GNU General Public License as published by *
008: * the Free Software Foundation; either version 2 of the License, or *
009: * (at your option) any later version. *
010: * *
011: * MActor is distributed in the hope that it will be useful, *
012: * but WITHOUT ANY WARRANTY; without even the implied warranty of *
013: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
014: * GNU General Public License for more details. *
015: * *
016: * You should have received a copy of the GNU General Public License *
017: * along with MActor; if not, write to the Free Software *
018: * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *
019: ******************************************************************************/package org.mactor.brokers;
020:
021: import org.mactor.framework.MactorException;
022: import org.mactor.framework.extensioninterface.MessageSelectorCommand;
023:
024: /**
025: * Defines the message broker interface
026: * <p>
027: * Message broker implementations is not requiered to implement both publish and
028: * subscribe (UnsupportedOperationException should be thrown by methods not implemented by the message broker)
029: * </p>
030: * <p>
031: * Message broker implementations must have contructor that takes a
032: *
033: * <pre>
034: * MessageBrokerConfig
035: * </pre>
036: *
037: * as the single parameter
038: * </p>
039: *
040: * <p>
041: * The simplest way to implement a message broker is to extend the
042: * AbstractMessageBroker class, or the PollingMessageBrokerTemplate if the protocol is polling based (i.e. the case for FilesMessageBroker)
043: * </p>
044: * @author Lars Ivar Almli
045: */
046: public interface MessageBroker {
047: /**
048: * Subscibe to message from a channel
049: *
050: * @param channel
051: * the channel
052: * @param subscriber
053: * the subscriber that will receive the messages
054: * @param messageSelector
055: * the message selector restricts which messages to receive from
056: * the channel
057: * @throws MactorException
058: * if some problem occures (this will cause the test to fail)
059: */
060: void subscribe(String channel, MessageSubscriber subscriber,
061: MessageSelectorCommand messageSelector)
062: throws MactorException;
063:
064: /**
065: * Unsubscribe
066: *
067: * @param channel
068: * the channel
069: * @param subscriber
070: * the subscriber
071: * @throws MactorException
072: * if some problem occures
073: */
074: void unsubscribe(String channel, MessageSubscriber subscriber)
075: throws MactorException;
076:
077: /**
078: * Publish a message to a channel
079: *
080: * @param channel
081: * the channel
082: * @param message
083: * the message
084: * @throws MactorException
085: * if some problem occures (this will cause the test to fail)
086: */
087: void publish(String channel, Message message)
088: throws MactorException;
089:
090: /**
091: * Publish a message and expect a reponse (when dealing with synchrounous
092: * protcols)
093: *
094: * @param channel
095: * the channel
096: * @param message
097: * the message
098: * @return the response message
099: * @throws MactorException
100: * if some problem occures (this will cause the test to fail)
101: */
102: Message publishWithResponse(String channel, Message message)
103: throws MactorException;
104: }
|