From 619f664622a5a7d0d311271414b615e7b2932424 Mon Sep 17 00:00:00 2001 From: Harikumar Palemkota Date: Thu, 18 Jul 2019 11:03:06 +0530 Subject: [PATCH 1/5] Issue #SC-1193 read data from registry if es fails --- .../java/org/sunbird/user/UserReadActor.java | 13 ++++++++--- .../java/org/sunbird/user/dao/IUserOSDao.java | 9 ++++++++ .../org/sunbird/user/dao/UserOSDaoImpl.java | 22 +++++++++++++++++++ .../sunbird/user/service/IUserService.java | 7 ++++++ .../sunbird/user/service/UserServiceImpl.java | 13 +++++++++++ .../org/sunbird/util/jsonkey/UserJsonKey.java | 1 + 6 files changed, 62 insertions(+), 3 deletions(-) diff --git a/user-org-actor/src/main/java/org/sunbird/user/UserReadActor.java b/user-org-actor/src/main/java/org/sunbird/user/UserReadActor.java index 3e1b5ea..6e42a6d 100644 --- a/user-org-actor/src/main/java/org/sunbird/user/UserReadActor.java +++ b/user-org-actor/src/main/java/org/sunbird/user/UserReadActor.java @@ -9,8 +9,8 @@ import org.sunbird.response.Response; import org.sunbird.user.dao.IUserESDao; import org.sunbird.user.dao.UserDaoFactory; -import org.sunbird.util.LoggerEnum; -import org.sunbird.util.ProjectLogger; +import org.sunbird.user.service.IUserService; +import org.sunbird.user.service.UserServiceImpl; import org.sunbird.util.jsonkey.JsonKey; @@ -28,6 +28,7 @@ ) public class UserReadActor extends BaseActor { + private IUserService userService = null; IUserESDao userESDao = (IUserESDao) UserDaoFactory.getDaoImpl(DaoImplType.ES.getType()); @@ -48,7 +49,13 @@ public void onReceive(Request request) throws Throwable { */ public void readUserById(Request request) throws BaseException { startTrace("readUserById"); - Response response = userESDao.getUserById((String) request.getRequest().get(JsonKey.USER_ID)); + Response response = null; + try { + response = userESDao.getUserById((String) request.getRequest().get(JsonKey.USER_ID)); + } catch (Exception e) { + userService = new UserServiceImpl(); + response = userService.readUser(request); + } endTrace("readUserById"); sender().tell(response, self()); } diff --git a/user-org-actor/src/main/java/org/sunbird/user/dao/IUserOSDao.java b/user-org-actor/src/main/java/org/sunbird/user/dao/IUserOSDao.java index 798120d..7161aa3 100644 --- a/user-org-actor/src/main/java/org/sunbird/user/dao/IUserOSDao.java +++ b/user-org-actor/src/main/java/org/sunbird/user/dao/IUserOSDao.java @@ -1,5 +1,6 @@ package org.sunbird.user.dao; +import com.fasterxml.jackson.databind.JsonNode; import org.sunbird.exception.BaseException; import org.sunbird.exception.ProjectCommonException; import org.sunbird.exception.message.Localizer; @@ -23,5 +24,13 @@ public interface IUserOSDao { */ Response createUser(Map user) throws BaseException; + /** + * this method will read a user from open saber + * @param userId + * @return response + * @throws BaseException + */ + public Response readUser(JsonNode userId) throws BaseException; + } diff --git a/user-org-actor/src/main/java/org/sunbird/user/dao/UserOSDaoImpl.java b/user-org-actor/src/main/java/org/sunbird/user/dao/UserOSDaoImpl.java index 91ce184..172dac3 100644 --- a/user-org-actor/src/main/java/org/sunbird/user/dao/UserOSDaoImpl.java +++ b/user-org-actor/src/main/java/org/sunbird/user/dao/UserOSDaoImpl.java @@ -1,7 +1,10 @@ package org.sunbird.user.dao; +import com.fasterxml.jackson.core.JsonFactory; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.node.JsonNodeFactory; +import com.fasterxml.jackson.databind.node.ObjectNode; import io.opensaber.registry.helper.RegistryHelper; import org.sunbird.Application; import org.sunbird.exception.BaseException; @@ -61,4 +64,23 @@ public Response createUser(Map user) throws BaseException { throw new ProjectCommonException.ServerError(IResponseMessage.INTERNAL_ERROR, localizer.getMessage(IResponseMessage.INTERNAL_ERROR, null), ResponseCode.SERVER_ERROR.getCode()); } } + + /** + * this method is used to read user record from OS. + * @param inputNode + * @return response + * @throws BaseException + */ + @Override + public Response readUser(JsonNode inputNode) throws BaseException { + Response response = new Response(); + try { + JsonNode responseNode = registryHelper.readEntity(inputNode,""); + response.putAll(objectMapper.convertValue(responseNode,Map.class)); + return response; + } catch (Exception e) { + ProjectLogger.log("Exception occurred while reading user from open saber.", e); + throw new ProjectCommonException.ServerError(IResponseMessage.INTERNAL_ERROR, localizer.getMessage(IResponseMessage.INTERNAL_ERROR, null), ResponseCode.SERVER_ERROR.getCode()); + } + } } diff --git a/user-org-actor/src/main/java/org/sunbird/user/service/IUserService.java b/user-org-actor/src/main/java/org/sunbird/user/service/IUserService.java index e9983a3..7721122 100644 --- a/user-org-actor/src/main/java/org/sunbird/user/service/IUserService.java +++ b/user-org-actor/src/main/java/org/sunbird/user/service/IUserService.java @@ -12,4 +12,11 @@ public interface IUserService { * @return Response */ Response createUser(Request request) throws BaseException; + + /** + * This method will read user. + * @param request + * @return Response + */ + Response readUser(Request request) throws BaseException; } diff --git a/user-org-actor/src/main/java/org/sunbird/user/service/UserServiceImpl.java b/user-org-actor/src/main/java/org/sunbird/user/service/UserServiceImpl.java index e153b0f..42ae26e 100644 --- a/user-org-actor/src/main/java/org/sunbird/user/service/UserServiceImpl.java +++ b/user-org-actor/src/main/java/org/sunbird/user/service/UserServiceImpl.java @@ -3,6 +3,8 @@ import akka.actor.ActorRef; import akka.pattern.Patterns; import akka.util.Timeout; +import com.fasterxml.jackson.databind.node.JsonNodeFactory; +import com.fasterxml.jackson.databind.node.ObjectNode; import org.apache.commons.lang3.StringUtils; import org.sunbird.Application; import org.sunbird.DaoImplType; @@ -48,4 +50,15 @@ private Response saveUserAttributes(Request request) { } return response; } + + @Override + public Response readUser(Request request) throws BaseException { + ObjectNode idNode = JsonNodeFactory.instance.objectNode(); + ObjectNode userNode = JsonNodeFactory.instance.objectNode(); + String recordId = (String) request.getRequest().get(JsonKey.USER_ID); + idNode.put(JsonKey.OSID, recordId); + userNode.set("User", idNode); + IUserOSDao userDao = (IUserOSDao) UserDaoFactory.getDaoImpl(DaoImplType.OS.getType()); + return userDao.readUser(userNode); + } } diff --git a/user-org-util/src/main/java/org/sunbird/util/jsonkey/UserJsonKey.java b/user-org-util/src/main/java/org/sunbird/util/jsonkey/UserJsonKey.java index 8b520aa..38bd515 100644 --- a/user-org-util/src/main/java/org/sunbird/util/jsonkey/UserJsonKey.java +++ b/user-org-util/src/main/java/org/sunbird/util/jsonkey/UserJsonKey.java @@ -5,6 +5,7 @@ */ public interface UserJsonKey { + String OSID = "osid"; String USER = "user"; String USER_ID = "userId"; String EDUCATION = "education"; From eb6a1c176bd0debde086d249e8ca6579b7d4a8fb Mon Sep 17 00:00:00 2001 From: Harikumar Palemkota Date: Fri, 19 Jul 2019 00:49:43 +0530 Subject: [PATCH 2/5] Issue #SC-1193 code review changes --- .../src/main/java/org/sunbird/user/UserReadActor.java | 2 ++ .../main/java/org/sunbird/user/service/UserServiceImpl.java | 4 +++- .../src/main/java/org/sunbird/util/jsonkey/UserJsonKey.java | 1 - 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/user-org-actor/src/main/java/org/sunbird/user/UserReadActor.java b/user-org-actor/src/main/java/org/sunbird/user/UserReadActor.java index 6e42a6d..ca98a15 100644 --- a/user-org-actor/src/main/java/org/sunbird/user/UserReadActor.java +++ b/user-org-actor/src/main/java/org/sunbird/user/UserReadActor.java @@ -11,6 +11,7 @@ import org.sunbird.user.dao.UserDaoFactory; import org.sunbird.user.service.IUserService; import org.sunbird.user.service.UserServiceImpl; +import org.sunbird.util.ProjectLogger; import org.sunbird.util.jsonkey.JsonKey; @@ -53,6 +54,7 @@ public void readUserById(Request request) throws BaseException { try { response = userESDao.getUserById((String) request.getRequest().get(JsonKey.USER_ID)); } catch (Exception e) { + ProjectLogger.log("Exception occurred while reading user ES.", e); userService = new UserServiceImpl(); response = userService.readUser(request); } diff --git a/user-org-actor/src/main/java/org/sunbird/user/service/UserServiceImpl.java b/user-org-actor/src/main/java/org/sunbird/user/service/UserServiceImpl.java index 42ae26e..3205ad6 100644 --- a/user-org-actor/src/main/java/org/sunbird/user/service/UserServiceImpl.java +++ b/user-org-actor/src/main/java/org/sunbird/user/service/UserServiceImpl.java @@ -5,6 +5,7 @@ import akka.util.Timeout; import com.fasterxml.jackson.databind.node.JsonNodeFactory; import com.fasterxml.jackson.databind.node.ObjectNode; +import io.opensaber.registry.model.DBConnectionInfoMgr; import org.apache.commons.lang3.StringUtils; import org.sunbird.Application; import org.sunbird.DaoImplType; @@ -56,7 +57,8 @@ public Response readUser(Request request) throws BaseException { ObjectNode idNode = JsonNodeFactory.instance.objectNode(); ObjectNode userNode = JsonNodeFactory.instance.objectNode(); String recordId = (String) request.getRequest().get(JsonKey.USER_ID); - idNode.put(JsonKey.OSID, recordId); + DBConnectionInfoMgr dBConnectionInfoMgr = Application.applicationContext.getBean(DBConnectionInfoMgr.class); + idNode.put(dBConnectionInfoMgr.getUuidPropertyName(), recordId); userNode.set("User", idNode); IUserOSDao userDao = (IUserOSDao) UserDaoFactory.getDaoImpl(DaoImplType.OS.getType()); return userDao.readUser(userNode); diff --git a/user-org-util/src/main/java/org/sunbird/util/jsonkey/UserJsonKey.java b/user-org-util/src/main/java/org/sunbird/util/jsonkey/UserJsonKey.java index 38bd515..8b520aa 100644 --- a/user-org-util/src/main/java/org/sunbird/util/jsonkey/UserJsonKey.java +++ b/user-org-util/src/main/java/org/sunbird/util/jsonkey/UserJsonKey.java @@ -5,7 +5,6 @@ */ public interface UserJsonKey { - String OSID = "osid"; String USER = "user"; String USER_ID = "userId"; String EDUCATION = "education"; From b6d548d6b80b98fcc3829c54bf1e2680a4793ded Mon Sep 17 00:00:00 2001 From: Harikumar Palemkota Date: Fri, 19 Jul 2019 13:59:04 +0530 Subject: [PATCH 3/5] merged to remote release-2.2.0-prime --- .gitmodules | 4 ++-- sunbird-user-registry | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.gitmodules b/.gitmodules index b157870..d9b5bac 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,4 +1,4 @@ [submodule "sunbird-user-registry"] path = sunbird-user-registry - url = https://github.com/project-sunbird/sunbird-user-registry - branch = release-2.2.0-prime \ No newline at end of file + url = https://github.com/project-sunbird/sunbird-user-registry.git + branch = release-2.2.0-prime diff --git a/sunbird-user-registry b/sunbird-user-registry index 91aa254..924dc43 160000 --- a/sunbird-user-registry +++ b/sunbird-user-registry @@ -1 +1 @@ -Subproject commit 91aa254b44171ecc07ccc6970e6122ec642079b0 +Subproject commit 924dc438b7e18e57bade2e615b4fd167842ecc67 From 8545473a921910019d5299a2c784fd3ef8732fda Mon Sep 17 00:00:00 2001 From: Harikumar Palemkota Date: Sat, 20 Jul 2019 11:59:51 +0530 Subject: [PATCH 4/5] Issue #SC-1193 created factory class for creating service objects as singleton --- .../main/java/org/sunbird/ServiceImplType.java | 16 ++++++++++++++++ .../org/sunbird/factory/ServiceFactory.java | 18 ++++++++++++++++++ .../java/org/sunbird/user/UserReadActor.java | 11 ++++++++++- .../org/sunbird/user/dao/UserOSDaoImpl.java | 7 ++++++- .../sunbird/user/service/UserServiceImpl.java | 11 +++++++++++ 5 files changed, 61 insertions(+), 2 deletions(-) create mode 100644 user-org-actor/src/main/java/org/sunbird/ServiceImplType.java create mode 100644 user-org-actor/src/main/java/org/sunbird/factory/ServiceFactory.java diff --git a/user-org-actor/src/main/java/org/sunbird/ServiceImplType.java b/user-org-actor/src/main/java/org/sunbird/ServiceImplType.java new file mode 100644 index 0000000..8a96e92 --- /dev/null +++ b/user-org-actor/src/main/java/org/sunbird/ServiceImplType.java @@ -0,0 +1,16 @@ +package org.sunbird; + +public enum ServiceImplType { + + USER("userService"); + + private String serviceType; + + ServiceImplType(String serviceType) { + this.serviceType = serviceType; + } + + public String getServiceType() { + return this.serviceType; + } +} diff --git a/user-org-actor/src/main/java/org/sunbird/factory/ServiceFactory.java b/user-org-actor/src/main/java/org/sunbird/factory/ServiceFactory.java new file mode 100644 index 0000000..42fe64d --- /dev/null +++ b/user-org-actor/src/main/java/org/sunbird/factory/ServiceFactory.java @@ -0,0 +1,18 @@ +package org.sunbird.factory; + +import org.sunbird.ServiceImplType; +import org.sunbird.user.service.UserServiceImpl; + +/** + * This class is created for keeping all service's object creation. + */ +public class ServiceFactory { + + public static Object getService(String serviceName) { + Object serviceObj = null; + if(serviceName.equals(ServiceImplType.USER.getServiceType())) { + serviceObj = UserServiceImpl.getInstance(); + } + return serviceObj; + } +} diff --git a/user-org-actor/src/main/java/org/sunbird/user/UserReadActor.java b/user-org-actor/src/main/java/org/sunbird/user/UserReadActor.java index ca98a15..b28e5c1 100644 --- a/user-org-actor/src/main/java/org/sunbird/user/UserReadActor.java +++ b/user-org-actor/src/main/java/org/sunbird/user/UserReadActor.java @@ -2,15 +2,18 @@ import org.sunbird.BaseActor; import org.sunbird.DaoImplType; +import org.sunbird.ServiceImplType; import org.sunbird.actor.core.ActorConfig; import org.sunbird.actorOperation.UserActorOperations; import org.sunbird.exception.BaseException; +import org.sunbird.factory.ServiceFactory; import org.sunbird.request.Request; import org.sunbird.response.Response; import org.sunbird.user.dao.IUserESDao; import org.sunbird.user.dao.UserDaoFactory; import org.sunbird.user.service.IUserService; import org.sunbird.user.service.UserServiceImpl; +import org.sunbird.util.LoggerEnum; import org.sunbird.util.ProjectLogger; import org.sunbird.util.jsonkey.JsonKey; @@ -54,8 +57,14 @@ public void readUserById(Request request) throws BaseException { try { response = userESDao.getUserById((String) request.getRequest().get(JsonKey.USER_ID)); } catch (Exception e) { + ProjectLogger.log( + "UserReadActor:readUserById: " + + "Exception in getting the record from ES : " + + e.getMessage(), + LoggerEnum.ERROR.name()); ProjectLogger.log("Exception occurred while reading user ES.", e); - userService = new UserServiceImpl(); + userService = (IUserService) ServiceFactory.getService(ServiceImplType.USER.getServiceType()); + //userService = new UserServiceImpl(); response = userService.readUser(request); } endTrace("readUserById"); diff --git a/user-org-actor/src/main/java/org/sunbird/user/dao/UserOSDaoImpl.java b/user-org-actor/src/main/java/org/sunbird/user/dao/UserOSDaoImpl.java index 172dac3..60c7098 100644 --- a/user-org-actor/src/main/java/org/sunbird/user/dao/UserOSDaoImpl.java +++ b/user-org-actor/src/main/java/org/sunbird/user/dao/UserOSDaoImpl.java @@ -13,6 +13,7 @@ import org.sunbird.exception.message.Localizer; import org.sunbird.exception.message.ResponseCode; import org.sunbird.response.Response; +import org.sunbird.util.LoggerEnum; import org.sunbird.util.ProjectLogger; import org.sunbird.util.jsonkey.JsonKey; @@ -79,7 +80,11 @@ public Response readUser(JsonNode inputNode) throws BaseException { response.putAll(objectMapper.convertValue(responseNode,Map.class)); return response; } catch (Exception e) { - ProjectLogger.log("Exception occurred while reading user from open saber.", e); + ProjectLogger.log( + "UserOSDaoImpl:readUser: " + + "Exception in getting the record from opensaber : " + + e.getMessage(), + LoggerEnum.ERROR.name()); throw new ProjectCommonException.ServerError(IResponseMessage.INTERNAL_ERROR, localizer.getMessage(IResponseMessage.INTERNAL_ERROR, null), ResponseCode.SERVER_ERROR.getCode()); } } diff --git a/user-org-actor/src/main/java/org/sunbird/user/service/UserServiceImpl.java b/user-org-actor/src/main/java/org/sunbird/user/service/UserServiceImpl.java index 3205ad6..9f05412 100644 --- a/user-org-actor/src/main/java/org/sunbird/user/service/UserServiceImpl.java +++ b/user-org-actor/src/main/java/org/sunbird/user/service/UserServiceImpl.java @@ -25,6 +25,17 @@ public class UserServiceImpl implements IUserService { + private static volatile IUserService iUserService; + + public static IUserService getInstance() { + if(iUserService == null) { + synchronized(UserServiceImpl.class){ + iUserService = new UserServiceImpl(); + } + } + return iUserService; + } + @Override public Response createUser(Request request) throws BaseException{ From e7eb7341cbfc92a74d677a72857125e1456ac1b4 Mon Sep 17 00:00:00 2001 From: Harikumar Palemkota Date: Sat, 20 Jul 2019 12:02:56 +0530 Subject: [PATCH 5/5] Issue #SC-1193 meaningful readUser attribute name --- .../src/main/java/org/sunbird/user/dao/IUserOSDao.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/user-org-actor/src/main/java/org/sunbird/user/dao/IUserOSDao.java b/user-org-actor/src/main/java/org/sunbird/user/dao/IUserOSDao.java index 7161aa3..80d3fc4 100644 --- a/user-org-actor/src/main/java/org/sunbird/user/dao/IUserOSDao.java +++ b/user-org-actor/src/main/java/org/sunbird/user/dao/IUserOSDao.java @@ -26,11 +26,11 @@ public interface IUserOSDao { /** * this method will read a user from open saber - * @param userId + * @param userInput * @return response * @throws BaseException */ - public Response readUser(JsonNode userId) throws BaseException; + public Response readUser(JsonNode userInput) throws BaseException; }