@Override
 public void getConnectionAsync(final SingleResultCallback<AsyncConnection> callback) {
   isTrue("open", !isClosed());
   connectionPool.getAsync(
       new SingleResultCallback<InternalConnection>() {
         @Override
         public void onResult(final InternalConnection result, final Throwable t) {
           if (t instanceof MongoSecurityException) {
             invalidate();
           }
           if (t != null) {
             callback.onResult(null, t);
           } else {
             callback.onResult(
                 connectionFactory.createAsync(
                     result, new DefaultServerProtocolExecutor(), clusterConnectionMode),
                 null);
           }
         }
       });
 }