All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.mongodb.internal.connection.DefaultServerConnection Maven / Gradle / Ivy

Go to download

The Java operations layer for the MongoDB Java Driver. Third parties can wrap this layer to provide custom higher-level APIs

There is a newer version: 5.3.0-beta0
Show newest version
/*
 * Copyright 2008-present MongoDB, Inc.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.mongodb.internal.connection;

import com.mongodb.ReadPreference;
import com.mongodb.connection.ClusterConnectionMode;
import com.mongodb.connection.ConnectionDescription;
import com.mongodb.internal.async.SingleResultCallback;
import com.mongodb.internal.binding.BindingContext;
import com.mongodb.internal.diagnostics.logging.Logger;
import com.mongodb.internal.diagnostics.logging.Loggers;
import com.mongodb.internal.session.SessionContext;
import com.mongodb.lang.Nullable;
import org.bson.BsonDocument;
import org.bson.FieldNameValidator;
import org.bson.codecs.Decoder;

import static com.mongodb.internal.async.ErrorHandlingResultCallback.errorHandlingCallback;

/**
 * 

This class is not part of the public API and may be removed or changed at any time

*/ public class DefaultServerConnection extends AbstractReferenceCounted implements Connection, AsyncConnection { private static final Logger LOGGER = Loggers.getLogger("connection"); private final InternalConnection wrapped; private final ProtocolExecutor protocolExecutor; private final ClusterConnectionMode clusterConnectionMode; public DefaultServerConnection(final InternalConnection wrapped, final ProtocolExecutor protocolExecutor, final ClusterConnectionMode clusterConnectionMode) { this.wrapped = wrapped; this.protocolExecutor = protocolExecutor; this.clusterConnectionMode = clusterConnectionMode; } @Override public DefaultServerConnection retain() { super.retain(); return this; } @Override public int release() { int count = super.release(); if (count == 0) { wrapped.close(); } return count; } @Override public ConnectionDescription getDescription() { return wrapped.getDescription(); } @Nullable @Override public T command(final String database, final BsonDocument command, final FieldNameValidator fieldNameValidator, @Nullable final ReadPreference readPreference, final Decoder commandResultDecoder, final BindingContext context) { return command(database, command, fieldNameValidator, readPreference, commandResultDecoder, context, true, null, null); } @Nullable @Override public T command(final String database, final BsonDocument command, final FieldNameValidator commandFieldNameValidator, @Nullable final ReadPreference readPreference, final Decoder commandResultDecoder, final BindingContext context, final boolean responseExpected, @Nullable final SplittablePayload payload, @Nullable final FieldNameValidator payloadFieldNameValidator) { return executeProtocol(new CommandProtocolImpl<>(database, command, commandFieldNameValidator, readPreference, commandResultDecoder, responseExpected, payload, payloadFieldNameValidator, clusterConnectionMode, context.getServerApi(), context.getRequestContext(), context.getOperationContext()), context.getSessionContext()); } @Override public void commandAsync(final String database, final BsonDocument command, final FieldNameValidator fieldNameValidator, @Nullable final ReadPreference readPreference, final Decoder commandResultDecoder, final BindingContext context, final SingleResultCallback callback) { commandAsync(database, command, fieldNameValidator, readPreference, commandResultDecoder, context, true, null, null, callback); } @Override public void commandAsync(final String database, final BsonDocument command, final FieldNameValidator commandFieldNameValidator, @Nullable final ReadPreference readPreference, final Decoder commandResultDecoder, final BindingContext context, final boolean responseExpected, @Nullable final SplittablePayload payload, @Nullable final FieldNameValidator payloadFieldNameValidator, final SingleResultCallback callback) { executeProtocolAsync(new CommandProtocolImpl<>(database, command, commandFieldNameValidator, readPreference, commandResultDecoder, responseExpected, payload, payloadFieldNameValidator, clusterConnectionMode, context.getServerApi(), context.getRequestContext(), context.getOperationContext()), context.getSessionContext(), callback); } @Override public void markAsPinned(final PinningMode pinningMode) { wrapped.markAsPinned(pinningMode); } @Nullable private T executeProtocol(final CommandProtocol protocol, final SessionContext sessionContext) { return protocolExecutor.execute(protocol, this.wrapped, sessionContext); } private void executeProtocolAsync(final CommandProtocol protocol, final SessionContext sessionContext, final SingleResultCallback callback) { SingleResultCallback errHandlingCallback = errorHandlingCallback(callback, LOGGER); try { protocolExecutor.executeAsync(protocol, this.wrapped, sessionContext, errHandlingCallback); } catch (Throwable t) { errHandlingCallback.onResult(null, t); } } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy