protected void connect() {

    if (this.mongoClient == null) {
      try {

        List<ServerAddress> addresses = new ArrayList<ServerAddress>();

        for (String host : this.servers) {
          addresses.add(new ServerAddress(host, 27017));
        }

        this.mongoClient =
            new MongoClient(
                addresses,
                MongoClientOptions.builder()
                    .connectionsPerHost(30)
                    .threadsAllowedToBlockForConnectionMultiplier(20)
                    .build());

        this.db = this.mongoClient.getDB("twitter");

        this.dbCollection = this.db.getCollection("tweets");
      } catch (Exception e) {
        this.log.write(
            "MongoDBConnector - Exception in MongoDBConnector.connect: "
                + e.getMessage()
                + ": "
                + e.toString());
      }
    }
  }
  public void initialiseConnections() throws UnknownHostException {
    MongoClientOptions options =
        MongoClientOptions.builder().connectTimeout(15000).socketKeepAlive(true).build();

    Mongo mongo = new MongoClient(new ServerAddress(sourceHost, sourcePort), options);

    sourceDB = mongo.getDB(sourceDBName);

    // conceptTermListColl_source = JacksonDBCollection.wrap(sourceDB.getCollection("TermList"),
    // ConceptTermList.class,
    //		String.class);

    placeTermListColl_source =
        JacksonDBCollection.wrap(
            sourceDB.getCollection("TermList"), PlaceTermList.class, String.class);

    // timespanTermListColl_source = JacksonDBCollection.wrap(sourceDB.getCollection("TermList"),
    //		TimespanTermList.class, String.class);

    // agentTermListColl_source = JacksonDBCollection.wrap(sourceDB.getCollection("TermList"),
    // AgentTermList.class,
    //		String.class);

    // conceptTermColl_source = JacksonDBCollection.wrap(sourceDB.getCollection("concept"),
    // MongoTerm.class,
    //		String.class);

    placeTermColl_source =
        JacksonDBCollection.wrap(sourceDB.getCollection("place"), MongoTerm.class, String.class);

    // timespanTermColl_source = JacksonDBCollection.wrap(sourceDB.getCollection("period"),
    // MongoTerm.class,
    //		String.class);

    // agentTermColl_source = JacksonDBCollection.wrap(sourceDB.getCollection("people"),
    // MongoTerm.class,
    //		String.class);

    if (!sourceHost.equals(targetHost) || sourcePort != targetPort) {
      mongo = new MongoClient(new ServerAddress(targetHost, targetPort), options);
    }

    targetDB = mongo.getDB(targetDBName);

    /*
    		conceptTermListColl_target = JacksonDBCollection.wrap(targetDB.getCollection("TermList"), ConceptTermList.class,
    				String.class);
    		conceptTermListColl_target.createIndex(new BasicDBObject("codeUri", 1), new BasicDBObject("unique", true));
    */
    placeTermListColl_target =
        JacksonDBCollection.wrap(
            targetDB.getCollection("TermList"), PlaceTermList.class, String.class);
    placeTermListColl_target.createIndex(
        new BasicDBObject("codeUri", 1), new BasicDBObject("unique", true));
    /*
    		timespanTermListColl_target = JacksonDBCollection.wrap(targetDB.getCollection("TermList"),
    				TimespanTermList.class, String.class);
    		timespanTermListColl_target.createIndex(new BasicDBObject("codeUri", 1), new BasicDBObject("unique", true));

    		agentTermListColl_target = JacksonDBCollection.wrap(targetDB.getCollection("TermList"), AgentTermList.class,
    				String.class);
    		agentTermListColl_target.createIndex(new BasicDBObject("codeUri", 1), new BasicDBObject("unique", true));

    		conceptTermColl_target = JacksonDBCollection.wrap(targetDB.getCollection("concept"), MongoTerm.class,
    				String.class);
    		conceptTermColl_target.createIndex(new BasicDBObject("label", 1).append("lang", 1).append("codeUri", 1),
    				new BasicDBObject("unique", true));
    		conceptTermColl_target.createIndex(new BasicDBObject("codeUri", 1));
    */
    placeTermColl_target =
        JacksonDBCollection.wrap(targetDB.getCollection("place"), MongoTerm.class, String.class);
    placeTermColl_target.createIndex(
        new BasicDBObject("label", 1).append("lang", 1).append("codeUri", 1),
        new BasicDBObject("unique", true));
    placeTermColl_target.createIndex(new BasicDBObject("codeUri", 1));
    /*
    		timespanTermColl_target = JacksonDBCollection.wrap(targetDB.getCollection("period"), MongoTerm.class,
    				String.class);
    		timespanTermColl_target.createIndex(new BasicDBObject("label", 1).append("lang", 1).append("codeUri", 1),
    				new BasicDBObject("unique", true));
    		timespanTermColl_target.createIndex(new BasicDBObject("codeUri", 1));

    		agentTermColl_target = JacksonDBCollection.wrap(targetDB.getCollection("people"), MongoTerm.class,
    				String.class);
    		agentTermColl_target.createIndex(new BasicDBObject("label", 1).append("lang", 1).append("codeUri", 1),
    				new BasicDBObject("unique", true));
    		agentTermColl_target.createIndex(new BasicDBObject("codeUri", 1));
    */
    lookupColl_target =
        JacksonDBCollection.wrap(
            targetDB.getCollection("lookup"), MongoCodeLookup.class, String.class);
    lookupColl_target.createIndex(
        new BasicDBObject("codeUri", 1).append("originalCodeUri", 1),
        new BasicDBObject("unique", true));
    lookupColl_target.createIndex(new BasicDBObject("originalCodeUri", 1)); // for
    // reverse
    // lookup

    sequenceColl_target =
        JacksonDBCollection.wrap(
            targetDB.getCollection("sequence"), MongoSequence.class, String.class);
  }
  @Test
  @SuppressWarnings("deprecation")
  public void testToClientOptions() throws UnknownHostException {
    MongoOptions options = new MongoOptions();
    options.description = "my client";
    options.fsync = true;
    options.readPreference = ReadPreference.secondary();
    options.requiredReplicaSetName = "test";
    options.cursorFinalizerEnabled = false;
    options.alwaysUseMBeans = true;
    options.connectTimeout = 100;
    options.maxWaitTime = 500;
    options.socketKeepAlive = true;
    options.threadsAllowedToBlockForConnectionMultiplier = 10;

    MongoClientOptions clientOptions = options.toClientOptions();

    assertEquals(options.requiredReplicaSetName, clientOptions.getRequiredReplicaSetName());
    assertEquals(options.description, clientOptions.getDescription());
    assertEquals(WriteConcern.ACKNOWLEDGED.withFsync(true), clientOptions.getWriteConcern());
    assertEquals(0, clientOptions.getMinConnectionsPerHost());
    assertEquals(10, clientOptions.getConnectionsPerHost());
    assertEquals(100, clientOptions.getConnectTimeout());
    assertEquals(500, clientOptions.getMaxWaitTime());
    assertEquals(ReadPreference.secondary(), clientOptions.getReadPreference());
    assertEquals(10, clientOptions.getThreadsAllowedToBlockForConnectionMultiplier());
    assertTrue(clientOptions.isSocketKeepAlive());
    assertFalse(clientOptions.isSslEnabled());
    assertEquals(options.dbDecoderFactory, clientOptions.getDbDecoderFactory());
    assertEquals(options.dbEncoderFactory, clientOptions.getDbEncoderFactory());
    assertEquals(15, clientOptions.getLocalThreshold());
    assertTrue(clientOptions.isAlwaysUseMBeans());
    assertFalse(clientOptions.isCursorFinalizerEnabled());
  }