Hexagonal pattern: Improve connection properties handling

This commit is contained in:
Ilkka Seppälä 2016-09-14 22:01:41 +03:00
parent 27e8cb7f2d
commit 3cf2b34d2a
7 changed files with 25 additions and 43 deletions

View File

@ -28,6 +28,7 @@ import com.iluwatar.hexagonal.domain.LotteryAdministration;
import com.iluwatar.hexagonal.domain.LotteryNumbers; import com.iluwatar.hexagonal.domain.LotteryNumbers;
import com.iluwatar.hexagonal.domain.LotteryService; import com.iluwatar.hexagonal.domain.LotteryService;
import com.iluwatar.hexagonal.module.LotteryModule; import com.iluwatar.hexagonal.module.LotteryModule;
import com.iluwatar.hexagonal.mongo.MongoConnectionPropertiesLoader;
import com.iluwatar.hexagonal.sampledata.SampleData; import com.iluwatar.hexagonal.sampledata.SampleData;
import java.util.Scanner; import java.util.Scanner;
@ -41,6 +42,7 @@ public class ConsoleAdministration {
* Program entry point * Program entry point
*/ */
public static void main(String[] args) { public static void main(String[] args) {
MongoConnectionPropertiesLoader.load();
Injector injector = Guice.createInjector(new LotteryModule()); Injector injector = Guice.createInjector(new LotteryModule());
LotteryAdministration administartion = injector.getInstance(LotteryAdministration.class); LotteryAdministration administartion = injector.getInstance(LotteryAdministration.class);
LotteryService service = injector.getInstance(LotteryService.class); LotteryService service = injector.getInstance(LotteryService.class);

View File

@ -22,7 +22,6 @@
*/ */
package com.iluwatar.hexagonal.banking; package com.iluwatar.hexagonal.banking;
import com.iluwatar.hexagonal.mongo.MongoConnectionProperties;
import com.mongodb.MongoClient; import com.mongodb.MongoClient;
import com.mongodb.client.MongoCollection; import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase; import com.mongodb.client.MongoDatabase;
@ -71,8 +70,8 @@ public class MongoBank implements WireTransfers {
if (mongoClient != null) { if (mongoClient != null) {
mongoClient.close(); mongoClient.close();
} }
MongoConnectionProperties properties = new MongoConnectionProperties().load(); mongoClient = new MongoClient(System.getProperty("mongo-host"),
mongoClient = new MongoClient(properties.getHost(), properties.getPort()); Integer.parseInt(System.getProperty("mongo-port")));
database = mongoClient.getDatabase(dbName); database = mongoClient.getDatabase(dbName);
accountsCollection = database.getCollection(accountsCollectionName); accountsCollection = database.getCollection(accountsCollectionName);
} }

View File

@ -26,7 +26,6 @@ import com.iluwatar.hexagonal.domain.LotteryNumbers;
import com.iluwatar.hexagonal.domain.LotteryTicket; import com.iluwatar.hexagonal.domain.LotteryTicket;
import com.iluwatar.hexagonal.domain.LotteryTicketId; import com.iluwatar.hexagonal.domain.LotteryTicketId;
import com.iluwatar.hexagonal.domain.PlayerDetails; import com.iluwatar.hexagonal.domain.PlayerDetails;
import com.iluwatar.hexagonal.mongo.MongoConnectionProperties;
import com.mongodb.MongoClient; import com.mongodb.MongoClient;
import com.mongodb.client.MongoCollection; import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase; import com.mongodb.client.MongoDatabase;
@ -83,8 +82,8 @@ public class MongoTicketRepository implements LotteryTicketRepository {
if (mongoClient != null) { if (mongoClient != null) {
mongoClient.close(); mongoClient.close();
} }
MongoConnectionProperties properties = new MongoConnectionProperties().load(); mongoClient = new MongoClient(System.getProperty("mongo-host"),
mongoClient = new MongoClient(properties.getHost(), properties.getPort()); Integer.parseInt(System.getProperty("mongo-port")));
database = mongoClient.getDatabase(dbName); database = mongoClient.getDatabase(dbName);
ticketsCollection = database.getCollection(ticketsCollectionName); ticketsCollection = database.getCollection(ticketsCollectionName);
countersCollection = database.getCollection(countersCollectionName); countersCollection = database.getCollection(countersCollectionName);

View File

@ -26,55 +26,33 @@ import java.io.FileInputStream;
import java.util.Properties; 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 String DEFAULT_HOST = "localhost";
private static final int DEFAULT_PORT = 27017; 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. * Try to load connection properties from file.
* Fall back to default connection properties. * 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"); String path = System.getProperty("hexagonal.properties.path");
Properties properties = new Properties(); Properties properties = new Properties();
if (path != null) { if (path != null) {
try (FileInputStream fin = new FileInputStream(path)) { try (FileInputStream fin = new FileInputStream(path)) {
properties.load(fin); properties.load(fin);
this.host = properties.getProperty("host"); host = properties.getProperty("mongo-host");
this.port = Integer.parseInt(properties.getProperty("port")); port = Integer.parseInt(properties.getProperty("mongo-port"));
} catch (Exception e) { } catch (Exception e) {
// error occurred, use default properties // error occurred, use default properties
e.printStackTrace(); e.printStackTrace();
} }
} }
return this; System.setProperty("mongo-host", host);
System.setProperty("mongo-port", String.format("%d", port));
} }
} }

View File

@ -32,6 +32,7 @@ import com.iluwatar.hexagonal.domain.LotteryTicketCheckResult;
import com.iluwatar.hexagonal.domain.LotteryTicketId; import com.iluwatar.hexagonal.domain.LotteryTicketId;
import com.iluwatar.hexagonal.domain.PlayerDetails; import com.iluwatar.hexagonal.domain.PlayerDetails;
import com.iluwatar.hexagonal.module.LotteryModule; import com.iluwatar.hexagonal.module.LotteryModule;
import com.iluwatar.hexagonal.mongo.MongoConnectionPropertiesLoader;
import java.util.HashSet; import java.util.HashSet;
import java.util.Optional; import java.util.Optional;
@ -48,6 +49,7 @@ public class ConsoleLottery {
* Program entry point * Program entry point
*/ */
public static void main(String[] args) { public static void main(String[] args) {
MongoConnectionPropertiesLoader.load();
Injector injector = Guice.createInjector(new LotteryModule()); Injector injector = Guice.createInjector(new LotteryModule());
LotteryService service = injector.getInstance(LotteryService.class); LotteryService service = injector.getInstance(LotteryService.class);
WireTransfers bank = injector.getInstance(WireTransfers.class); WireTransfers bank = injector.getInstance(WireTransfers.class);

View File

@ -22,7 +22,7 @@
*/ */
package com.iluwatar.hexagonal.banking; package com.iluwatar.hexagonal.banking;
import com.iluwatar.hexagonal.mongo.MongoConnectionProperties; import com.iluwatar.hexagonal.mongo.MongoConnectionPropertiesLoader;
import com.mongodb.MongoClient; import com.mongodb.MongoClient;
import org.junit.Before; import org.junit.Before;
import org.junit.Ignore; import org.junit.Ignore;
@ -43,8 +43,9 @@ public class MongoBankTest {
@Before @Before
public void init() { public void init() {
MongoConnectionProperties properties = new MongoConnectionProperties().load(); MongoConnectionPropertiesLoader.load();
MongoClient mongoClient = new MongoClient(properties.getHost(), properties.getPort()); MongoClient mongoClient = new MongoClient(System.getProperty("mongo-host"),
Integer.parseInt(System.getProperty("mongo-port")));
mongoClient.dropDatabase(TEST_DB); mongoClient.dropDatabase(TEST_DB);
mongoClient.close(); mongoClient.close();
mongoBank = new MongoBank(TEST_DB, TEST_ACCOUNTS_COLLECTION); mongoBank = new MongoBank(TEST_DB, TEST_ACCOUNTS_COLLECTION);

View File

@ -26,7 +26,7 @@ import com.iluwatar.hexagonal.domain.LotteryNumbers;
import com.iluwatar.hexagonal.domain.LotteryTicket; import com.iluwatar.hexagonal.domain.LotteryTicket;
import com.iluwatar.hexagonal.domain.LotteryTicketId; import com.iluwatar.hexagonal.domain.LotteryTicketId;
import com.iluwatar.hexagonal.domain.PlayerDetails; import com.iluwatar.hexagonal.domain.PlayerDetails;
import com.iluwatar.hexagonal.mongo.MongoConnectionProperties; import com.iluwatar.hexagonal.mongo.MongoConnectionPropertiesLoader;
import com.mongodb.MongoClient; import com.mongodb.MongoClient;
import org.junit.Before; import org.junit.Before;
import org.junit.Ignore; import org.junit.Ignore;
@ -51,8 +51,9 @@ public class MongoTicketRepositoryTest {
@Before @Before
public void init() { public void init() {
MongoConnectionProperties properties = new MongoConnectionProperties().load(); MongoConnectionPropertiesLoader.load();
MongoClient mongoClient = new MongoClient(properties.getHost(), properties.getPort()); MongoClient mongoClient = new MongoClient(System.getProperty("mongo-host"),
Integer.parseInt(System.getProperty("mongo-port")));
mongoClient.dropDatabase(TEST_DB); mongoClient.dropDatabase(TEST_DB);
mongoClient.close(); mongoClient.close();
repository = new MongoTicketRepository(TEST_DB, TEST_TICKETS_COLLECTION, repository = new MongoTicketRepository(TEST_DB, TEST_TICKETS_COLLECTION,