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