001    /*
002     * Licensed to the Apache Software Foundation (ASF) under one or more
003     * contributor license agreements.  See the NOTICE file distributed with
004     * this work for additional information regarding copyright ownership.
005     * The ASF licenses this file to You under the Apache License, Version 2.0
006     * (the "License"); you may not use this file except in compliance with
007     * the License.  You may obtain a copy of the License at
008     *
009     *      http://www.apache.org/licenses/LICENSE-2.0
010     *
011     * Unless required by applicable law or agreed to in writing, software
012     * distributed under the License is distributed on an "AS IS" BASIS,
013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014     * See the License for the specific language governing permissions and
015     * limitations under the License.
016     */
017    package org.apache.servicemix.jbi.nmr.flow;
018    
019    import javax.jbi.JBIException;
020    import javax.jbi.management.LifeCycleMBean;
021    import javax.jbi.messaging.MessageExchange;
022    
023    import org.apache.servicemix.jbi.nmr.Broker;
024    
025    /**
026     * A Flow provides different dispatch policies within the NMR
027     *
028     * @version $Revision: 564607 $
029     */
030    public interface Flow  extends LifeCycleMBean {
031       
032        /**
033         * Initialize the Region
034         * @param broker
035         * @throws JBIException
036         */
037        void init(Broker broker) throws JBIException;
038        
039        /**
040         * The description of Flow
041         * @return the description
042         */
043        String getDescription();
044        
045        /**
046         * The unique name of Flow
047         * @return the name
048         */
049        String getName();
050        
051        /**
052         * Distribute an ExchangePacket
053         * @param packet
054         * @throws JBIException
055         */
056        void send(MessageExchange me) throws JBIException;
057        
058        /**
059         * suspend the flow to prevent any message exchanges
060         */
061        void suspend();
062        
063        
064        /**
065         * resume message exchange processing
066         */
067        void resume();
068        
069        /**
070         * Get the broker associated with this flow
071         *
072         */
073        Broker getBroker();
074        
075        /**
076         * Check if the flow can support the requested QoS for this exchange
077         * @param me the exchange to check
078         * @return true if this flow can handle the given exchange
079         */
080        boolean canHandle(MessageExchange me);
081            
082    }