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.activemq.broker;
018    
019    import java.io.IOException;
020    import org.apache.activemq.Service;
021    import org.apache.activemq.broker.region.ConnectionStatistics;
022    import org.apache.activemq.command.Command;
023    import org.apache.activemq.command.ConnectionControl;
024    import org.apache.activemq.command.Response;
025    
026    /**
027     * 
028     */
029    public interface Connection extends Service {
030    
031        /**
032         * @return the connector that created this connection.
033         */
034        Connector getConnector();
035    
036        /**
037         * Sends a message to the client.
038         * 
039         * @param message the message to send to the client.
040         */
041        void dispatchSync(Command message);
042    
043        /**
044         * Sends a message to the client.
045         * 
046         * @param command
047         */
048        void dispatchAsync(Command command);
049    
050        /**
051         * Services a client command and submits it to the broker.
052         * 
053         * @param command
054         * @return Response
055         */
056        Response service(Command command);
057    
058        /**
059         * Handles an unexpected error associated with a connection.
060         * 
061         * @param error
062         */
063        void serviceException(Throwable error);
064    
065        /**
066         * @return true if the Connection is slow
067         */
068        boolean isSlow();
069    
070        /**
071         * @return if after being marked, the Connection is still writing
072         */
073        boolean isBlocked();
074    
075        /**
076         * @return true if the Connection is connected
077         */
078        boolean isConnected();
079    
080        /**
081         * @return true if the Connection is active
082         */
083        boolean isActive();
084    
085        /**
086         * Returns the number of messages to be dispatched to this connection
087         */
088        int getDispatchQueueSize();
089    
090        /**
091         * Returns the statistics for this connection
092         */
093        ConnectionStatistics getStatistics();
094    
095        /**
096         * @return true if the Connection will process control commands
097         */
098        boolean isManageable();
099    
100        /**
101         * @return the source address for this connection
102         */
103        String getRemoteAddress();
104    
105        void serviceExceptionAsync(IOException e);
106    
107        String getConnectionId();
108        
109        /**
110         * return true if a network connection
111         * @return
112         */
113        boolean isNetworkConnection();
114        
115        /**
116         * @return true if a fault tolerant connection
117         */
118        boolean isFaultTolerantConnection();
119        
120        void updateClient(ConnectionControl control);
121    
122    }