Hexagonal pattern: Improve connection properties handling
This commit is contained in:
		@@ -28,6 +28,7 @@ import com.iluwatar.hexagonal.domain.LotteryAdministration;
 | 
			
		||||
import com.iluwatar.hexagonal.domain.LotteryNumbers;
 | 
			
		||||
import com.iluwatar.hexagonal.domain.LotteryService;
 | 
			
		||||
import com.iluwatar.hexagonal.module.LotteryModule;
 | 
			
		||||
import com.iluwatar.hexagonal.mongo.MongoConnectionPropertiesLoader;
 | 
			
		||||
import com.iluwatar.hexagonal.sampledata.SampleData;
 | 
			
		||||
 | 
			
		||||
import java.util.Scanner;
 | 
			
		||||
@@ -41,6 +42,7 @@ public class ConsoleAdministration {
 | 
			
		||||
   * Program entry point
 | 
			
		||||
   */
 | 
			
		||||
  public static void main(String[] args) {
 | 
			
		||||
    MongoConnectionPropertiesLoader.load();
 | 
			
		||||
    Injector injector = Guice.createInjector(new LotteryModule());
 | 
			
		||||
    LotteryAdministration administartion = injector.getInstance(LotteryAdministration.class);
 | 
			
		||||
    LotteryService service = injector.getInstance(LotteryService.class);
 | 
			
		||||
 
 | 
			
		||||
@@ -22,7 +22,6 @@
 | 
			
		||||
 */
 | 
			
		||||
package com.iluwatar.hexagonal.banking;
 | 
			
		||||
 | 
			
		||||
import com.iluwatar.hexagonal.mongo.MongoConnectionProperties;
 | 
			
		||||
import com.mongodb.MongoClient;
 | 
			
		||||
import com.mongodb.client.MongoCollection;
 | 
			
		||||
import com.mongodb.client.MongoDatabase;
 | 
			
		||||
@@ -71,8 +70,8 @@ public class MongoBank implements WireTransfers {
 | 
			
		||||
    if (mongoClient != null) {
 | 
			
		||||
      mongoClient.close();
 | 
			
		||||
    }
 | 
			
		||||
    MongoConnectionProperties properties = new MongoConnectionProperties().load();
 | 
			
		||||
    mongoClient = new MongoClient(properties.getHost(), properties.getPort());
 | 
			
		||||
    mongoClient = new MongoClient(System.getProperty("mongo-host"),
 | 
			
		||||
        Integer.parseInt(System.getProperty("mongo-port")));
 | 
			
		||||
    database = mongoClient.getDatabase(dbName);
 | 
			
		||||
    accountsCollection = database.getCollection(accountsCollectionName);
 | 
			
		||||
  }
 | 
			
		||||
 
 | 
			
		||||
@@ -26,7 +26,6 @@ import com.iluwatar.hexagonal.domain.LotteryNumbers;
 | 
			
		||||
import com.iluwatar.hexagonal.domain.LotteryTicket;
 | 
			
		||||
import com.iluwatar.hexagonal.domain.LotteryTicketId;
 | 
			
		||||
import com.iluwatar.hexagonal.domain.PlayerDetails;
 | 
			
		||||
import com.iluwatar.hexagonal.mongo.MongoConnectionProperties;
 | 
			
		||||
import com.mongodb.MongoClient;
 | 
			
		||||
import com.mongodb.client.MongoCollection;
 | 
			
		||||
import com.mongodb.client.MongoDatabase;
 | 
			
		||||
@@ -83,8 +82,8 @@ public class MongoTicketRepository implements LotteryTicketRepository {
 | 
			
		||||
    if (mongoClient != null) {
 | 
			
		||||
      mongoClient.close();
 | 
			
		||||
    }
 | 
			
		||||
    MongoConnectionProperties properties = new MongoConnectionProperties().load();
 | 
			
		||||
    mongoClient = new MongoClient(properties.getHost(), properties.getPort());
 | 
			
		||||
    mongoClient = new MongoClient(System.getProperty("mongo-host"),
 | 
			
		||||
        Integer.parseInt(System.getProperty("mongo-port")));
 | 
			
		||||
    database = mongoClient.getDatabase(dbName);
 | 
			
		||||
    ticketsCollection = database.getCollection(ticketsCollectionName);
 | 
			
		||||
    countersCollection = database.getCollection(countersCollectionName);
 | 
			
		||||
 
 | 
			
		||||
@@ -26,55 +26,33 @@ import java.io.FileInputStream;
 | 
			
		||||
import java.util.Properties;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Mongo connection properties
 | 
			
		||||
 * Mongo connection properties loader
 | 
			
		||||
 */
 | 
			
		||||
public class MongoConnectionProperties {
 | 
			
		||||
public class MongoConnectionPropertiesLoader {
 | 
			
		||||
 | 
			
		||||
  private static final String DEFAULT_HOST = "localhost";
 | 
			
		||||
  private static final int DEFAULT_PORT = 27017;
 | 
			
		||||
 | 
			
		||||
  private String host;
 | 
			
		||||
  private int port;
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Constructor
 | 
			
		||||
   */
 | 
			
		||||
  public MongoConnectionProperties() {
 | 
			
		||||
    this.host = DEFAULT_HOST;
 | 
			
		||||
    this.port = DEFAULT_PORT;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * @return host name
 | 
			
		||||
   */
 | 
			
		||||
  public String getHost() {
 | 
			
		||||
    return host;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * @return port number
 | 
			
		||||
   */
 | 
			
		||||
  public int getPort() {
 | 
			
		||||
    return port;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Try to load connection properties from file.
 | 
			
		||||
   * Fall back to default connection properties.
 | 
			
		||||
   */
 | 
			
		||||
  public MongoConnectionProperties load() {
 | 
			
		||||
  public static void load() {
 | 
			
		||||
    String host = DEFAULT_HOST;
 | 
			
		||||
    int port = DEFAULT_PORT;
 | 
			
		||||
    String path = System.getProperty("hexagonal.properties.path");
 | 
			
		||||
    Properties properties = new Properties();
 | 
			
		||||
    if (path != null) {
 | 
			
		||||
      try (FileInputStream fin = new FileInputStream(path)) {
 | 
			
		||||
        properties.load(fin);
 | 
			
		||||
        this.host = properties.getProperty("host");
 | 
			
		||||
        this.port = Integer.parseInt(properties.getProperty("port"));
 | 
			
		||||
        host = properties.getProperty("mongo-host");
 | 
			
		||||
        port = Integer.parseInt(properties.getProperty("mongo-port"));
 | 
			
		||||
      } catch (Exception e) {
 | 
			
		||||
        // error occurred, use default properties
 | 
			
		||||
        e.printStackTrace();
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
    return this;
 | 
			
		||||
    System.setProperty("mongo-host", host);
 | 
			
		||||
    System.setProperty("mongo-port", String.format("%d", port));
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -32,6 +32,7 @@ import com.iluwatar.hexagonal.domain.LotteryTicketCheckResult;
 | 
			
		||||
import com.iluwatar.hexagonal.domain.LotteryTicketId;
 | 
			
		||||
import com.iluwatar.hexagonal.domain.PlayerDetails;
 | 
			
		||||
import com.iluwatar.hexagonal.module.LotteryModule;
 | 
			
		||||
import com.iluwatar.hexagonal.mongo.MongoConnectionPropertiesLoader;
 | 
			
		||||
 | 
			
		||||
import java.util.HashSet;
 | 
			
		||||
import java.util.Optional;
 | 
			
		||||
@@ -48,6 +49,7 @@ public class ConsoleLottery {
 | 
			
		||||
   * Program entry point
 | 
			
		||||
   */
 | 
			
		||||
  public static void main(String[] args) {
 | 
			
		||||
    MongoConnectionPropertiesLoader.load();
 | 
			
		||||
    Injector injector = Guice.createInjector(new LotteryModule());
 | 
			
		||||
    LotteryService service = injector.getInstance(LotteryService.class);
 | 
			
		||||
    WireTransfers bank = injector.getInstance(WireTransfers.class);
 | 
			
		||||
 
 | 
			
		||||
@@ -22,7 +22,7 @@
 | 
			
		||||
 */
 | 
			
		||||
package com.iluwatar.hexagonal.banking;
 | 
			
		||||
 | 
			
		||||
import com.iluwatar.hexagonal.mongo.MongoConnectionProperties;
 | 
			
		||||
import com.iluwatar.hexagonal.mongo.MongoConnectionPropertiesLoader;
 | 
			
		||||
import com.mongodb.MongoClient;
 | 
			
		||||
import org.junit.Before;
 | 
			
		||||
import org.junit.Ignore;
 | 
			
		||||
@@ -43,8 +43,9 @@ public class MongoBankTest {
 | 
			
		||||
 | 
			
		||||
  @Before
 | 
			
		||||
  public void init() {
 | 
			
		||||
    MongoConnectionProperties properties = new MongoConnectionProperties().load();
 | 
			
		||||
    MongoClient mongoClient = new MongoClient(properties.getHost(), properties.getPort());
 | 
			
		||||
    MongoConnectionPropertiesLoader.load();
 | 
			
		||||
    MongoClient mongoClient = new MongoClient(System.getProperty("mongo-host"),
 | 
			
		||||
        Integer.parseInt(System.getProperty("mongo-port")));
 | 
			
		||||
    mongoClient.dropDatabase(TEST_DB);
 | 
			
		||||
    mongoClient.close();
 | 
			
		||||
    mongoBank = new MongoBank(TEST_DB, TEST_ACCOUNTS_COLLECTION);
 | 
			
		||||
 
 | 
			
		||||
@@ -26,7 +26,7 @@ import com.iluwatar.hexagonal.domain.LotteryNumbers;
 | 
			
		||||
import com.iluwatar.hexagonal.domain.LotteryTicket;
 | 
			
		||||
import com.iluwatar.hexagonal.domain.LotteryTicketId;
 | 
			
		||||
import com.iluwatar.hexagonal.domain.PlayerDetails;
 | 
			
		||||
import com.iluwatar.hexagonal.mongo.MongoConnectionProperties;
 | 
			
		||||
import com.iluwatar.hexagonal.mongo.MongoConnectionPropertiesLoader;
 | 
			
		||||
import com.mongodb.MongoClient;
 | 
			
		||||
import org.junit.Before;
 | 
			
		||||
import org.junit.Ignore;
 | 
			
		||||
@@ -51,8 +51,9 @@ public class MongoTicketRepositoryTest {
 | 
			
		||||
 | 
			
		||||
  @Before
 | 
			
		||||
  public void init() {
 | 
			
		||||
    MongoConnectionProperties properties = new MongoConnectionProperties().load();
 | 
			
		||||
    MongoClient mongoClient = new MongoClient(properties.getHost(), properties.getPort());
 | 
			
		||||
    MongoConnectionPropertiesLoader.load();
 | 
			
		||||
    MongoClient mongoClient = new MongoClient(System.getProperty("mongo-host"),
 | 
			
		||||
        Integer.parseInt(System.getProperty("mongo-port")));
 | 
			
		||||
    mongoClient.dropDatabase(TEST_DB);
 | 
			
		||||
    mongoClient.close();
 | 
			
		||||
    repository = new MongoTicketRepository(TEST_DB, TEST_TICKETS_COLLECTION,
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user