Skip to content

Commit 27e8cb7

Browse files
committed
Hexagonal pattern: Add separate class for Mongo connection properties
1 parent e685512 commit 27e8cb7

File tree

5 files changed

+102
-22
lines changed

5 files changed

+102
-22
lines changed

hexagonal/src/main/java/com/iluwatar/hexagonal/banking/MongoBank.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
*/
2323
package com.iluwatar.hexagonal.banking;
2424

25+
import com.iluwatar.hexagonal.mongo.MongoConnectionProperties;
2526
import com.mongodb.MongoClient;
2627
import com.mongodb.client.MongoCollection;
2728
import com.mongodb.client.MongoDatabase;
@@ -35,8 +36,6 @@
3536
*/
3637
public class MongoBank implements WireTransfers {
3738

38-
private static final String DEFAULT_HOST = "localhost";
39-
private static final int DEFAULT_PORT = 27017;
4039
private static final String DEFAULT_DB = "lotteryDB";
4140
private static final String DEFAULT_ACCOUNTS_COLLECTION = "accounts";
4241

@@ -54,25 +53,26 @@ public MongoBank() {
5453
/**
5554
* Constructor accepting parameters
5655
*/
57-
public MongoBank(String host, int port, String dbName, String accountsCollectionName) {
58-
connect(host, port, dbName, accountsCollectionName);
56+
public MongoBank(String dbName, String accountsCollectionName) {
57+
connect(dbName, accountsCollectionName);
5958
}
6059

6160
/**
6261
* Connect to database with default parameters
6362
*/
6463
public void connect() {
65-
connect(DEFAULT_HOST, DEFAULT_PORT, DEFAULT_DB, DEFAULT_ACCOUNTS_COLLECTION);
64+
connect(DEFAULT_DB, DEFAULT_ACCOUNTS_COLLECTION);
6665
}
6766

6867
/**
6968
* Connect to database with given parameters
7069
*/
71-
public void connect(String host, int port, String dbName, String accountsCollectionName) {
70+
public void connect(String dbName, String accountsCollectionName) {
7271
if (mongoClient != null) {
7372
mongoClient.close();
7473
}
75-
mongoClient = new MongoClient(host , port);
74+
MongoConnectionProperties properties = new MongoConnectionProperties().load();
75+
mongoClient = new MongoClient(properties.getHost(), properties.getPort());
7676
database = mongoClient.getDatabase(dbName);
7777
accountsCollection = database.getCollection(accountsCollectionName);
7878
}

hexagonal/src/main/java/com/iluwatar/hexagonal/database/MongoTicketRepository.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import com.iluwatar.hexagonal.domain.LotteryTicket;
2727
import com.iluwatar.hexagonal.domain.LotteryTicketId;
2828
import com.iluwatar.hexagonal.domain.PlayerDetails;
29+
import com.iluwatar.hexagonal.mongo.MongoConnectionProperties;
2930
import com.mongodb.MongoClient;
3031
import com.mongodb.client.MongoCollection;
3132
import com.mongodb.client.MongoDatabase;
@@ -43,8 +44,6 @@
4344
*/
4445
public class MongoTicketRepository implements LotteryTicketRepository {
4546

46-
private static final String DEFAULT_HOST = "localhost";
47-
private static final int DEFAULT_PORT = 27017;
4847
private static final String DEFAULT_DB = "lotteryDB";
4948
private static final String DEFAULT_TICKETS_COLLECTION = "lotteryTickets";
5049
private static final String DEFAULT_COUNTERS_COLLECTION = "counters";
@@ -64,27 +63,28 @@ public MongoTicketRepository() {
6463
/**
6564
* Constructor accepting parameters
6665
*/
67-
public MongoTicketRepository(String host, int port, String dbName, String ticketsCollectionName,
66+
public MongoTicketRepository(String dbName, String ticketsCollectionName,
6867
String countersCollectionName) {
69-
connect(host, port, dbName, ticketsCollectionName, countersCollectionName);
68+
connect(dbName, ticketsCollectionName, countersCollectionName);
7069
}
7170

7271
/**
7372
* Connect to database with default parameters
7473
*/
7574
public void connect() {
76-
connect(DEFAULT_HOST, DEFAULT_PORT, DEFAULT_DB, DEFAULT_TICKETS_COLLECTION, DEFAULT_COUNTERS_COLLECTION);
75+
connect(DEFAULT_DB, DEFAULT_TICKETS_COLLECTION, DEFAULT_COUNTERS_COLLECTION);
7776
}
7877

7978
/**
8079
* Connect to database with given parameters
8180
*/
82-
public void connect(String host, int port, String dbName, String ticketsCollectionName,
81+
public void connect(String dbName, String ticketsCollectionName,
8382
String countersCollectionName) {
8483
if (mongoClient != null) {
8584
mongoClient.close();
8685
}
87-
mongoClient = new MongoClient(host , port);
86+
MongoConnectionProperties properties = new MongoConnectionProperties().load();
87+
mongoClient = new MongoClient(properties.getHost(), properties.getPort());
8888
database = mongoClient.getDatabase(dbName);
8989
ticketsCollection = database.getCollection(ticketsCollectionName);
9090
countersCollection = database.getCollection(countersCollectionName);
Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
/**
2+
* The MIT License
3+
* Copyright (c) 2014 Ilkka Seppälä
4+
*
5+
* Permission is hereby granted, free of charge, to any person obtaining a copy
6+
* of this software and associated documentation files (the "Software"), to deal
7+
* in the Software without restriction, including without limitation the rights
8+
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9+
* copies of the Software, and to permit persons to whom the Software is
10+
* furnished to do so, subject to the following conditions:
11+
*
12+
* The above copyright notice and this permission notice shall be included in
13+
* all copies or substantial portions of the Software.
14+
*
15+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20+
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21+
* THE SOFTWARE.
22+
*/
23+
package com.iluwatar.hexagonal.mongo;
24+
25+
import java.io.FileInputStream;
26+
import java.util.Properties;
27+
28+
/**
29+
* Mongo connection properties
30+
*/
31+
public class MongoConnectionProperties {
32+
33+
private static final String DEFAULT_HOST = "localhost";
34+
private static final int DEFAULT_PORT = 27017;
35+
36+
private String host;
37+
private int port;
38+
39+
/**
40+
* Constructor
41+
*/
42+
public MongoConnectionProperties() {
43+
this.host = DEFAULT_HOST;
44+
this.port = DEFAULT_PORT;
45+
}
46+
47+
/**
48+
* @return host name
49+
*/
50+
public String getHost() {
51+
return host;
52+
}
53+
54+
/**
55+
* @return port number
56+
*/
57+
public int getPort() {
58+
return port;
59+
}
60+
61+
/**
62+
* Try to load connection properties from file.
63+
* Fall back to default connection properties.
64+
*/
65+
public MongoConnectionProperties load() {
66+
String path = System.getProperty("hexagonal.properties.path");
67+
Properties properties = new Properties();
68+
if (path != null) {
69+
try (FileInputStream fin = new FileInputStream(path)) {
70+
properties.load(fin);
71+
this.host = properties.getProperty("host");
72+
this.port = Integer.parseInt(properties.getProperty("port"));
73+
} catch (Exception e) {
74+
// error occurred, use default properties
75+
e.printStackTrace();
76+
}
77+
}
78+
return this;
79+
}
80+
}

hexagonal/src/test/java/com/iluwatar/hexagonal/banking/MongoBankTest.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
*/
2323
package com.iluwatar.hexagonal.banking;
2424

25+
import com.iluwatar.hexagonal.mongo.MongoConnectionProperties;
2526
import com.mongodb.MongoClient;
2627
import org.junit.Before;
2728
import org.junit.Ignore;
@@ -35,19 +36,18 @@
3536
@Ignore
3637
public class MongoBankTest {
3738

38-
private static final String TEST_HOST = "localhost";
39-
private static final int TEST_PORT = 27017;
4039
private static final String TEST_DB = "lotteryDBTest";
4140
private static final String TEST_ACCOUNTS_COLLECTION = "testAccounts";
4241

4342
private MongoBank mongoBank;
4443

4544
@Before
4645
public void init() {
47-
MongoClient mongoClient = new MongoClient(TEST_HOST, TEST_PORT);
46+
MongoConnectionProperties properties = new MongoConnectionProperties().load();
47+
MongoClient mongoClient = new MongoClient(properties.getHost(), properties.getPort());
4848
mongoClient.dropDatabase(TEST_DB);
4949
mongoClient.close();
50-
mongoBank = new MongoBank(TEST_HOST, TEST_PORT, TEST_DB, TEST_ACCOUNTS_COLLECTION);
50+
mongoBank = new MongoBank(TEST_DB, TEST_ACCOUNTS_COLLECTION);
5151
}
5252

5353
@Test

hexagonal/src/test/java/com/iluwatar/hexagonal/database/MongoTicketRepositoryTest.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import com.iluwatar.hexagonal.domain.LotteryTicket;
2727
import com.iluwatar.hexagonal.domain.LotteryTicketId;
2828
import com.iluwatar.hexagonal.domain.PlayerDetails;
29+
import com.iluwatar.hexagonal.mongo.MongoConnectionProperties;
2930
import com.mongodb.MongoClient;
3031
import org.junit.Before;
3132
import org.junit.Ignore;
@@ -42,8 +43,6 @@
4243
@Ignore
4344
public class MongoTicketRepositoryTest {
4445

45-
private static final String TEST_HOST = "localhost";
46-
private static final int TEST_PORT = 27017;
4746
private static final String TEST_DB = "lotteryTestDB";
4847
private static final String TEST_TICKETS_COLLECTION = "lotteryTestTickets";
4948
private static final String TEST_COUNTERS_COLLECTION = "testCounters";
@@ -52,10 +51,11 @@ public class MongoTicketRepositoryTest {
5251

5352
@Before
5453
public void init() {
55-
MongoClient mongoClient = new MongoClient(TEST_HOST, TEST_PORT);
54+
MongoConnectionProperties properties = new MongoConnectionProperties().load();
55+
MongoClient mongoClient = new MongoClient(properties.getHost(), properties.getPort());
5656
mongoClient.dropDatabase(TEST_DB);
5757
mongoClient.close();
58-
repository = new MongoTicketRepository(TEST_HOST, TEST_PORT, TEST_DB, TEST_TICKETS_COLLECTION,
58+
repository = new MongoTicketRepository(TEST_DB, TEST_TICKETS_COLLECTION,
5959
TEST_COUNTERS_COLLECTION);
6060
}
6161

0 commit comments

Comments
 (0)