open method

  1. @override
Future open(
  1. String? correlationId
)

Opens the component.

  • correlationId (optional) transaction id to trace execution through call chain. Returns Future that receives null no errors occured. Throws error

Implementation

@override
Future open(String? correlationId) async {
  String? uri;
  try {
    uri = await connectionResolver.resolve(correlationId);
  } catch (err) {
    logger.error(correlationId, ApplicationException().wrap(err),
        'Failed to resolve MongoDb connection');
  }

  logger.debug(correlationId, 'Connecting to mongodb');

  try {
    var settings = _composeSettings();

    settings['useNewUrlParser'] = true;
    settings['useUnifiedTopology'] = true;

    connection = mongo.Db(uri ?? '');
    await connection!.open();

    var credential = await connectionResolver.credentialResolver.lookup('');
    var username = credential?.getUsername();
    if (username != null) {
      var password = credential?.getPassword();
      if (password != null) {
        await connection!.authenticate(username, password);
      }
    }
    if (settings['username'] != null) {
      await connection!
          .authenticate(settings['username'], settings['password']);
    }

    databaseName = connection?.databaseName;
  } catch (ex) {
    throw ConnectionException(
            correlationId, 'CONNECT_FAILED', 'Connection to mongodb failed')
        .withCause(ex);
  }
}