From 3cf2b34d2a1f20a2606d515ad145bf0fb018b44f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ilkka=20Sepp=C3=A4l=C3=A4?= Date: Wed, 14 Sep 2016 22:01:41 +0300 Subject: [PATCH] Hexagonal pattern: Improve connection properties handling --- .../administration/ConsoleAdministration.java | 2 + .../iluwatar/hexagonal/banking/MongoBank.java | 5 +-- .../database/MongoTicketRepository.java | 5 +-- ...a => MongoConnectionPropertiesLoader.java} | 40 +++++-------------- .../hexagonal/service/ConsoleLottery.java | 2 + .../hexagonal/banking/MongoBankTest.java | 7 ++-- .../database/MongoTicketRepositoryTest.java | 7 ++-- 7 files changed, 25 insertions(+), 43 deletions(-) rename hexagonal/src/main/java/com/iluwatar/hexagonal/mongo/{MongoConnectionProperties.java => MongoConnectionPropertiesLoader.java} (75%) diff --git a/hexagonal/src/main/java/com/iluwatar/hexagonal/administration/ConsoleAdministration.java b/hexagonal/src/main/java/com/iluwatar/hexagonal/administration/ConsoleAdministration.java index 6a846280c..ea2f33699 100644 --- a/hexagonal/src/main/java/com/iluwatar/hexagonal/administration/ConsoleAdministration.java +++ b/hexagonal/src/main/java/com/iluwatar/hexagonal/administration/ConsoleAdministration.java @@ -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); diff --git a/hexagonal/src/main/java/com/iluwatar/hexagonal/banking/MongoBank.java b/hexagonal/src/main/java/com/iluwatar/hexagonal/banking/MongoBank.java index 2a18d8986..23a0e376a 100644 --- a/hexagonal/src/main/java/com/iluwatar/hexagonal/banking/MongoBank.java +++ b/hexagonal/src/main/java/com/iluwatar/hexagonal/banking/MongoBank.java @@ -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); } diff --git a/hexagonal/src/main/java/com/iluwatar/hexagonal/database/MongoTicketRepository.java b/hexagonal/src/main/java/com/iluwatar/hexagonal/database/MongoTicketRepository.java index 73ff40b78..4cfa83649 100644 --- a/hexagonal/src/main/java/com/iluwatar/hexagonal/database/MongoTicketRepository.java +++ b/hexagonal/src/main/java/com/iluwatar/hexagonal/database/MongoTicketRepository.java @@ -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); diff --git a/hexagonal/src/main/java/com/iluwatar/hexagonal/mongo/MongoConnectionProperties.java b/hexagonal/src/main/java/com/iluwatar/hexagonal/mongo/MongoConnectionPropertiesLoader.java similarity index 75% rename from hexagonal/src/main/java/com/iluwatar/hexagonal/mongo/MongoConnectionProperties.java rename to hexagonal/src/main/java/com/iluwatar/hexagonal/mongo/MongoConnectionPropertiesLoader.java index 20b1876f6..a9bb39803 100644 --- a/hexagonal/src/main/java/com/iluwatar/hexagonal/mongo/MongoConnectionProperties.java +++ b/hexagonal/src/main/java/com/iluwatar/hexagonal/mongo/MongoConnectionPropertiesLoader.java @@ -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)); } } diff --git a/hexagonal/src/main/java/com/iluwatar/hexagonal/service/ConsoleLottery.java b/hexagonal/src/main/java/com/iluwatar/hexagonal/service/ConsoleLottery.java index afacc35cc..b0d660023 100644 --- a/hexagonal/src/main/java/com/iluwatar/hexagonal/service/ConsoleLottery.java +++ b/hexagonal/src/main/java/com/iluwatar/hexagonal/service/ConsoleLottery.java @@ -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); diff --git a/hexagonal/src/test/java/com/iluwatar/hexagonal/banking/MongoBankTest.java b/hexagonal/src/test/java/com/iluwatar/hexagonal/banking/MongoBankTest.java index 26041b174..ce5c9ff1a 100644 --- a/hexagonal/src/test/java/com/iluwatar/hexagonal/banking/MongoBankTest.java +++ b/hexagonal/src/test/java/com/iluwatar/hexagonal/banking/MongoBankTest.java @@ -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); diff --git a/hexagonal/src/test/java/com/iluwatar/hexagonal/database/MongoTicketRepositoryTest.java b/hexagonal/src/test/java/com/iluwatar/hexagonal/database/MongoTicketRepositoryTest.java index a29b535f6..bbd95b38d 100644 --- a/hexagonal/src/test/java/com/iluwatar/hexagonal/database/MongoTicketRepositoryTest.java +++ b/hexagonal/src/test/java/com/iluwatar/hexagonal/database/MongoTicketRepositoryTest.java @@ -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,