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.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);

View File

@ -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);
}

View File

@ -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);

View File

@ -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));
}
}

View File

@ -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);

View File

@ -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);

View File

@ -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,