001 /****************************************************************************** 002 * Copyright (C) MActor Developers. 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 ******************************************************************************/ 020 package org.mactor.brokers; 021 022 import org.mactor.framework.MactorException; 023 import org.mactor.framework.extensioninterface.MessageSelectorCommand; 024 025 /** 026 * Defines the message broker interface 027 * <p> 028 * Message broker implementations is not requiered to implement both publish and 029 * subscribe (UnsupportedOperationException should be thrown by methods not 030 * implemented by the message broker) 031 * </p> 032 * <p> 033 * Message broker implementations must have contructor that takes a 034 * 035 * <pre> 036 * MessageBrokerConfig 037 * </pre> 038 * 039 * as the single parameter 040 * </p> 041 * 042 * <p> 043 * The simplest way to implement a message broker is to extend the 044 * AbstractMessageBroker class, or the PollingMessageBrokerTemplate if the 045 * protocol is polling based (i.e. the case for FilesMessageBroker) 046 * </p> 047 * 048 * @author Lars Ivar Almli 049 */ 050 public interface MessageBroker { 051 /** 052 * Subscibe to message from a channel 053 * 054 * @param channel 055 * the channel 056 * @param subscriber 057 * the subscriber that will receive the messages 058 * @param messageSelector 059 * the message selector restricts which messages to receive from 060 * the channel 061 * @throws MactorException 062 * if some problem occures (this will cause the test to fail) 063 */ 064 void subscribe(String channel, MessageSubscriber subscriber, MessageSelectorCommand messageSelector) throws MactorException; 065 /** 066 * Unsubscribe 067 * 068 * @param channel 069 * the channel 070 * @param subscriber 071 * the subscriber 072 * @throws MactorException 073 * if some problem occures 074 */ 075 void unsubscribe(String channel, MessageSubscriber subscriber) throws MactorException; 076 /** 077 * Publish a message to a channel 078 * 079 * @param channel 080 * the channel 081 * @param message 082 * the message 083 * @throws MactorException 084 * if some problem occures (this will cause the test to fail) 085 */ 086 void publish(String channel, Message message) throws MactorException; 087 /** 088 * Publish a message and expect a reponse (when dealing with synchrounous 089 * protcols) 090 * 091 * @param channel 092 * the channel 093 * @param message 094 * the message 095 * @return the response message 096 * @throws MactorException 097 * if some problem occures (this will cause the test to fail) 098 */ 099 Message publishWithResponse(String channel, Message message) throws MactorException; 100 void terminate(); 101 }