1 /* 2 * #%L 3 * Connection.java - mongodb-async-driver - Allanbank Consulting, Inc. 4 * %% 5 * Copyright (C) 2011 - 2014 Allanbank Consulting, Inc. 6 * %% 7 * Licensed under the Apache License, Version 2.0 (the "License"); 8 * you may not use this file except in compliance with the License. 9 * You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, software 14 * distributed under the License is distributed on an "AS IS" BASIS, 15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 * See the License for the specific language governing permissions and 17 * limitations under the License. 18 * #L% 19 */ 20 package com.allanbank.mongodb.client.connection; 21 22 import java.beans.PropertyChangeListener; 23 import java.io.Closeable; 24 import java.io.Flushable; 25 import java.util.concurrent.TimeUnit; 26 27 import com.allanbank.mongodb.MongoDbException; 28 import com.allanbank.mongodb.client.Message; 29 import com.allanbank.mongodb.client.callback.ReplyCallback; 30 31 /** 32 * Provides the lowest level interface for interacting with a MongoDB server. 33 * The method provided here are a straight forward mapping from the <a href= 34 * "http://www.mongodb.org/display/DOCS/Mongo+Wire+Protocol">MongoDB Wire 35 * Protocol</a>. 36 * 37 * @api.no This class is <b>NOT</b> part of the drivers API. This class may be 38 * mutated in incompatible ways between any two releases of the driver. 39 * @copyright 2011-2014, Allanbank Consulting, Inc., All Rights Reserved 40 */ 41 public interface Connection extends Closeable, Flushable { 42 43 /** The collection to use when issuing commands to the database. */ 44 public static final String COMMAND_COLLECTION = "$cmd"; 45 46 /** The property for if the connection is open or not. */ 47 public static final String OPEN_PROP_NAME = "open"; 48 49 /** 50 * Adds a {@link PropertyChangeListener} to this connection. Events are 51 * fired as the state of the connection changes. 52 * 53 * @param listener 54 * The listener for the change events. 55 */ 56 public void addPropertyChangeListener(PropertyChangeListener listener); 57 58 /** 59 * Returns the number of messages that are pending responses from the 60 * server. 61 * 62 * @return The number of messages pending responses from the server. 63 */ 64 public int getPendingCount(); 65 66 /** 67 * Returns the name of a server the connection is currently connected to. 68 * 69 * @return The name of a server the connection is currently connected to. 70 */ 71 public String getServerName(); 72 73 /** 74 * Returns true if the connection is open and not shutting down, false 75 * otherwise. 76 * 77 * @return True if the connection is open and not shutting down, false 78 * otherwise. 79 */ 80 public boolean isAvailable(); 81 82 /** 83 * Determines if the connection is idle. 84 * 85 * @return True if the connection is waiting for messages to send and has no 86 * outstanding messages to receive. 87 */ 88 public boolean isIdle(); 89 90 /** 91 * Determines if the connection is open. 92 * 93 * @return True if the connection is open and thinks it can send messages. 94 */ 95 public boolean isOpen(); 96 97 /** 98 * Returns true if the connection is being gracefully closed, false 99 * otherwise. 100 * 101 * @return True if the connection is being gracefully closed, false 102 * otherwise. 103 */ 104 public boolean isShuttingDown(); 105 106 /** 107 * Notifies the call backs for the pending and optionally the to be sent 108 * messages that there has been an external, unrecoverable error. 109 * 110 * @param exception 111 * The error condition. 112 */ 113 public void raiseErrors(MongoDbException exception); 114 115 /** 116 * Removes a {@link PropertyChangeListener} from this connection. 117 * 118 * @param listener 119 * The listener for the change events. 120 */ 121 public void removePropertyChangeListener(PropertyChangeListener listener); 122 123 /** 124 * Sends a message on the connection. 125 * 126 * @param message1 127 * The first message to send on the connection. 128 * @param message2 129 * The second message to send on the connection. 130 * @param replyCallback 131 * The callback to notify of responses to the {@code message2}. 132 * May be <code>null</code>. 133 * @throws MongoDbException 134 * On an error sending the message. 135 */ 136 public void send(Message message1, Message message2, 137 ReplyCallback replyCallback) throws MongoDbException; 138 139 /** 140 * Sends a message on the connection. 141 * 142 * @param message 143 * The message to send on the connection. 144 * @param replyCallback 145 * The callback to notify of responses to the messages. May be 146 * <code>null</code>. 147 * @throws MongoDbException 148 * On an error sending the message. 149 */ 150 public void send(Message message, ReplyCallback replyCallback) 151 throws MongoDbException; 152 153 /** 154 * Notifies the connection that once all outstanding requests have been sent 155 * and all replies received the Connection should be closed. This method 156 * will return prior to the connection being closed. 157 * 158 * @param force 159 * If true then the connection can be immediately closed as the 160 * caller knows there are no outstanding requests to the server. 161 */ 162 public void shutdown(boolean force); 163 164 /** 165 * Waits for the connection to become idle. 166 * 167 * @param timeout 168 * The amount of time to wait for the connection to become idle. 169 * @param timeoutUnits 170 * The units for the amount of time to wait for the connection to 171 * become idle. 172 */ 173 public void waitForClosed(int timeout, TimeUnit timeoutUnits); 174 }