Fix Bug with mongo connection. Used "Try with resources"

This commit is contained in:
Victor Zalevskii
2021-08-30 08:48:03 +03:00
parent 49039843e5
commit 50755b7215
4 changed files with 73 additions and 53 deletions

View File

@ -24,6 +24,7 @@
package com.iluwatar.caching; package com.iluwatar.caching;
import com.iluwatar.caching.database.DbManager; import com.iluwatar.caching.database.DbManager;
import com.iluwatar.caching.database.exceptions.DatabaseConnectionException;
import java.util.Optional; import java.util.Optional;
import lombok.Data; import lombok.Data;
@ -68,7 +69,11 @@ public class AppManager {
* to (temporarily) store the data/objects during runtime. * to (temporarily) store the data/objects during runtime.
*/ */
public void initDb() { public void initDb() {
try {
dbManager.connect(); dbManager.connect();
} catch (DatabaseConnectionException e) {
LOGGER.error("Could not connect to DB: {}", e.getMessage());
}
} }
/** /**

View File

@ -1,6 +1,7 @@
package com.iluwatar.caching.database; package com.iluwatar.caching.database;
import com.iluwatar.caching.UserAccount; import com.iluwatar.caching.UserAccount;
import com.iluwatar.caching.database.exceptions.DatabaseConnectionException;
/** /**
* <p>DBManager handles the communication with the underlying data store i.e. * <p>DBManager handles the communication with the underlying data store i.e.
@ -11,7 +12,7 @@ public interface DbManager {
/** /**
* Connect to DB. * Connect to DB.
*/ */
void connect(); void connect() throws DatabaseConnectionException;
/** /**
* Read from DB. * Read from DB.

View File

@ -7,28 +7,31 @@ import static com.iluwatar.caching.constants.CachingConstants.USER_NAME;
import com.iluwatar.caching.UserAccount; import com.iluwatar.caching.UserAccount;
import com.iluwatar.caching.constants.CachingConstants; import com.iluwatar.caching.constants.CachingConstants;
import com.iluwatar.caching.database.exceptions.DatabaseConnectionException;
import com.mongodb.MongoClient; import com.mongodb.MongoClient;
import com.mongodb.client.MongoDatabase; import com.mongodb.client.MongoDatabase;
import com.mongodb.client.model.UpdateOptions; import com.mongodb.client.model.UpdateOptions;
import lombok.extern.slf4j.Slf4j;
import org.bson.Document; import org.bson.Document;
/** /**
* Implementation of DatabaseManager. * Implementation of DatabaseManager.
* implements base methods to work with MongoDb. * implements base methods to work with MongoDb.
*/ */
@Slf4j
public class MongoDb implements DbManager { public class MongoDb implements DbManager {
/** private static final String DATABASE_NAME = "test";
* Mongo db.
*/
private MongoDatabase db;
/** /**
* Connect to Db. * Connect to Db. Check th connection
*/ */
@Override @Override
public void connect() { public void connect() throws DatabaseConnectionException {
MongoClient mongoClient = new MongoClient(); try (MongoClient mongoClient = new MongoClient()) {
db = mongoClient.getDatabase("test"); mongoClient.getDatabase("test");
} catch (NoClassDefFoundError e) {
throw new DatabaseConnectionException("Could not connect to DB.");
}
} }
/** /**
@ -39,9 +42,8 @@ public class MongoDb implements DbManager {
*/ */
@Override @Override
public UserAccount readFromDb(final String userId) { public UserAccount readFromDb(final String userId) {
if (db == null) { try (MongoClient mongoClient = new MongoClient()) {
connect(); MongoDatabase db = mongoClient.getDatabase(DATABASE_NAME);
}
var iterable = db var iterable = db
.getCollection(CachingConstants.USER_ACCOUNT) .getCollection(CachingConstants.USER_ACCOUNT)
.find(new Document(USER_ID, userId)); .find(new Document(USER_ID, userId));
@ -49,9 +51,14 @@ public class MongoDb implements DbManager {
return null; return null;
} }
Document doc = iterable.first(); Document doc = iterable.first();
if (doc != null) {
String userName = doc.getString(USER_NAME); String userName = doc.getString(USER_NAME);
String appInfo = doc.getString(ADD_INFO); String appInfo = doc.getString(ADD_INFO);
return new UserAccount(userId, userName, appInfo); return new UserAccount(userId, userName, appInfo);
} else {
return null;
}
}
} }
/** /**
@ -62,9 +69,8 @@ public class MongoDb implements DbManager {
*/ */
@Override @Override
public UserAccount writeToDb(final UserAccount userAccount) { public UserAccount writeToDb(final UserAccount userAccount) {
if (db == null) { try (MongoClient mongoClient = new MongoClient()) {
connect(); MongoDatabase db = mongoClient.getDatabase(DATABASE_NAME);
}
db.getCollection(USER_ACCOUNT).insertOne( db.getCollection(USER_ACCOUNT).insertOne(
new Document(USER_ID, userAccount.getUserId()) new Document(USER_ID, userAccount.getUserId())
.append(USER_NAME, userAccount.getUserName()) .append(USER_NAME, userAccount.getUserName())
@ -72,6 +78,7 @@ public class MongoDb implements DbManager {
); );
return userAccount; return userAccount;
} }
}
/** /**
* Update DB. * Update DB.
@ -81,9 +88,8 @@ public class MongoDb implements DbManager {
*/ */
@Override @Override
public UserAccount updateDb(final UserAccount userAccount) { public UserAccount updateDb(final UserAccount userAccount) {
if (db == null) { try (MongoClient mongoClient = new MongoClient()) {
connect(); MongoDatabase db = mongoClient.getDatabase(DATABASE_NAME);
}
Document id = new Document(USER_ID, userAccount.getUserId()); Document id = new Document(USER_ID, userAccount.getUserId());
Document dataSet = new Document(USER_NAME, userAccount.getUserName()) Document dataSet = new Document(USER_NAME, userAccount.getUserName())
.append(ADD_INFO, userAccount.getAdditionalInfo()); .append(ADD_INFO, userAccount.getAdditionalInfo());
@ -91,6 +97,7 @@ public class MongoDb implements DbManager {
.updateOne(id, new Document("$set", dataSet)); .updateOne(id, new Document("$set", dataSet));
return userAccount; return userAccount;
} }
}
/** /**
* Update data if exists. * Update data if exists.
@ -100,9 +107,8 @@ public class MongoDb implements DbManager {
*/ */
@Override @Override
public UserAccount upsertDb(final UserAccount userAccount) { public UserAccount upsertDb(final UserAccount userAccount) {
if (db == null) { try (MongoClient mongoClient = new MongoClient()) {
connect(); MongoDatabase db = mongoClient.getDatabase(DATABASE_NAME);
}
String userId = userAccount.getUserId(); String userId = userAccount.getUserId();
String userName = userAccount.getUserName(); String userName = userAccount.getUserName();
String additionalInfo = userAccount.getAdditionalInfo(); String additionalInfo = userAccount.getAdditionalInfo();
@ -118,3 +124,4 @@ public class MongoDb implements DbManager {
return userAccount; return userAccount;
} }
} }
}

View File

@ -0,0 +1,7 @@
package com.iluwatar.caching.database.exceptions;
public class DatabaseConnectionException extends Exception {
public DatabaseConnectionException(String s) {
super(s);
}
}