You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ranger.apache.org by ab...@apache.org on 2019/05/28 22:19:02 UTC

[ranger] branch master updated: RANGER-2420: Ranger spends 36% of CPU in ObjectMapper

This is an automated email from the ASF dual-hosted git repository.

abhay pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ranger.git


The following commit(s) were added to refs/heads/master by this push:
     new 4d11568  RANGER-2420: Ranger spends 36% of CPU in ObjectMapper
4d11568 is described below

commit 4d1156875244c9bc6f9bd34bfae7d65a1e634552
Author: Abhay Kulkarni <ab...@apache.org>
AuthorDate: Tue May 28 14:55:15 2019 -0700

    RANGER-2420: Ranger spends 36% of CPU in ObjectMapper
---
 .../admin/client/datatype/GrantRevokeData.java     | 27 ++-----
 .../ranger/admin/client/datatype/RESTResponse.java | 22 ++----
 .../plugin/audit/RangerDefaultAuditHandler.java    |  6 +-
 .../org/apache/ranger/plugin/util/JsonUtilsV2.java | 71 ++++++++++++++++++
 .../hadoop/crypto/key/RangerKeyStoreProvider.java  | 12 ++-
 .../crypto/key/kms/server/KMSJSONReader.java       |  5 +-
 .../crypto/key/kms/server/KMSJSONWriter.java       |  5 +-
 .../ranger/services/knox/client/KnoxClient.java    | 12 +--
 .../java/org/apache/ranger/biz/ServiceDBStore.java |  4 +-
 .../java/org/apache/ranger/common/JSONUtil.java    | 85 ++++------------------
 .../java/org/apache/ranger/rest/ServiceREST.java   | 14 ++--
 .../ranger/service/RangerDataHistService.java      | 53 ++------------
 .../apache/ranger/service/RangerPolicyService.java | 11 +--
 .../org/apache/ranger/service/XAssetService.java   |  5 +-
 .../org/apache/ranger/biz/TestServiceDBStore.java  |  4 +
 .../ranger/service/TestRangerDataHistService.java  | 61 ----------------
 16 files changed, 141 insertions(+), 256 deletions(-)

diff --git a/agents-common/src/main/java/org/apache/ranger/admin/client/datatype/GrantRevokeData.java b/agents-common/src/main/java/org/apache/ranger/admin/client/datatype/GrantRevokeData.java
index a8d3c6a..d55667c 100644
--- a/agents-common/src/main/java/org/apache/ranger/admin/client/datatype/GrantRevokeData.java
+++ b/agents-common/src/main/java/org/apache/ranger/admin/client/datatype/GrantRevokeData.java
@@ -20,18 +20,15 @@
  package org.apache.ranger.admin.client.datatype;
 
 
-import java.io.IOException;
 import java.util.List;
 import java.util.ArrayList;
 
 import org.apache.ranger.authorization.utils.StringUtil;
-import org.codehaus.jackson.JsonGenerationException;
+import org.apache.ranger.plugin.util.JsonUtilsV2;
 import org.codehaus.jackson.annotate.JsonAutoDetect;
 import org.codehaus.jackson.annotate.JsonAutoDetect.Visibility;
 import org.codehaus.jackson.annotate.JsonIgnoreProperties;
 import org.codehaus.jackson.map.annotate.JsonSerialize;
-import org.codehaus.jackson.map.JsonMappingException;
-import org.codehaus.jackson.map.ObjectMapper;
 
 
 @JsonAutoDetect(getterVisibility = Visibility.NONE, setterVisibility = Visibility.NONE, fieldVisibility = Visibility.ANY)
@@ -151,14 +148,8 @@ public class GrantRevokeData implements java.io.Serializable {
 	
 	public String toJson() {
 		try {
-			ObjectMapper om = new ObjectMapper();
-
-			return om.writeValueAsString(this);
-		} catch (JsonGenerationException e) {
-			e.printStackTrace();
-		} catch (JsonMappingException e) {
-			e.printStackTrace();
-		} catch (IOException e) {
+			return JsonUtilsV2.objToJson(this);
+		} catch (Exception e) {
 			e.printStackTrace();
 		}
 		
@@ -173,7 +164,7 @@ public class GrantRevokeData implements java.io.Serializable {
 	@JsonAutoDetect(getterVisibility = Visibility.NONE, setterVisibility = Visibility.NONE, fieldVisibility = Visibility.ANY)
 	@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL)
 	@JsonIgnoreProperties(ignoreUnknown = true)
-	public static class PermMap {
+	public static class PermMap implements java.io.Serializable {
 		private List<String> userList  = new ArrayList<>();
 		private List<String> groupList = new ArrayList<>();
 		private List<String> permList  = new ArrayList<>();
@@ -233,14 +224,8 @@ public class GrantRevokeData implements java.io.Serializable {
 
 		public String toJson() {
 			try {
-				ObjectMapper om = new ObjectMapper();
-
-				return om.writeValueAsString(this);
-			} catch (JsonGenerationException e) {
-				e.printStackTrace();
-			} catch (JsonMappingException e) {
-				e.printStackTrace();
-			} catch (IOException e) {
+				return JsonUtilsV2.objToJson(this);
+			} catch (Exception e) {
 				e.printStackTrace();
 			}
 			
diff --git a/agents-common/src/main/java/org/apache/ranger/admin/client/datatype/RESTResponse.java b/agents-common/src/main/java/org/apache/ranger/admin/client/datatype/RESTResponse.java
index 333f565..75c2c9f 100644
--- a/agents-common/src/main/java/org/apache/ranger/admin/client/datatype/RESTResponse.java
+++ b/agents-common/src/main/java/org/apache/ranger/admin/client/datatype/RESTResponse.java
@@ -22,10 +22,10 @@ import java.util.List;
 
 import org.apache.log4j.Logger;
 import org.apache.ranger.authorization.utils.StringUtil;
+import org.apache.ranger.plugin.util.JsonUtilsV2;
 import org.codehaus.jackson.annotate.JsonAutoDetect;
 import org.codehaus.jackson.annotate.JsonIgnoreProperties;
 import org.codehaus.jackson.annotate.JsonAutoDetect.Visibility;
-import org.codehaus.jackson.map.ObjectMapper;
 import org.codehaus.jackson.map.annotate.JsonSerialize;
 
 import com.sun.jersey.api.client.ClientResponse;
@@ -34,7 +34,7 @@ import com.sun.jersey.api.client.ClientResponse;
 @JsonAutoDetect(getterVisibility = Visibility.NONE, setterVisibility = Visibility.NONE, fieldVisibility = Visibility.ANY)
 @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL)
 @JsonIgnoreProperties(ignoreUnknown = true)
-public class RESTResponse {
+public class RESTResponse implements java.io.Serializable {
 	private static final Logger LOG = Logger.getLogger(RESTResponse.class);
 
 	/**
@@ -111,9 +111,7 @@ public class RESTResponse {
 
 	public String toJson() {
 		try {
-			ObjectMapper om = new ObjectMapper();
-
-			return om.writeValueAsString(this);
+			return JsonUtilsV2.objToJson(this);
 		} catch (Exception e) {
 			if(LOG.isDebugEnabled()) {
 				LOG.debug("toJson() failed", e);
@@ -125,9 +123,7 @@ public class RESTResponse {
 
 	public static RESTResponse fromJson(String jsonString) {
 		try {
-			ObjectMapper om = new ObjectMapper();
-
-			return om.readValue(jsonString, RESTResponse.class);
+			return JsonUtilsV2.jsonToObj(jsonString, RESTResponse.class);
 		} catch (Exception e) {
 			if(LOG.isDebugEnabled()) {
 				LOG.debug("fromJson('" + jsonString + "') failed", e);
@@ -145,7 +141,7 @@ public class RESTResponse {
 	@JsonAutoDetect(getterVisibility = Visibility.NONE, setterVisibility = Visibility.NONE, fieldVisibility = Visibility.ANY)
 	@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL)
 	@JsonIgnoreProperties(ignoreUnknown = true)
-	public static class Message {
+	public static class Message implements java.io.Serializable {
 		private String name;
 		private String rbKey;
 		private String message;
@@ -185,9 +181,7 @@ public class RESTResponse {
 
 		public String toJson() {
 			try {
-				ObjectMapper om = new ObjectMapper();
-
-				return om.writeValueAsString(this);
+				return JsonUtilsV2.objToJson(this);
 			} catch (Exception e) {
 				if(LOG.isDebugEnabled()) {
 					LOG.debug("toJson() failed", e);
@@ -199,9 +193,7 @@ public class RESTResponse {
 
 		public static RESTResponse fromJson(String jsonString) {
 			try {
-				ObjectMapper om = new ObjectMapper();
-
-				return om.readValue(jsonString, RESTResponse.class);
+				return JsonUtilsV2.jsonToObj(jsonString, RESTResponse.class);
 			} catch (Exception e) {
 				if(LOG.isDebugEnabled()) {
 					LOG.debug("fromJson('" + jsonString + "') failed", e);
diff --git a/agents-common/src/main/java/org/apache/ranger/plugin/audit/RangerDefaultAuditHandler.java b/agents-common/src/main/java/org/apache/ranger/plugin/audit/RangerDefaultAuditHandler.java
index 5e2c492..6b6e91d 100644
--- a/agents-common/src/main/java/org/apache/ranger/plugin/audit/RangerDefaultAuditHandler.java
+++ b/agents-common/src/main/java/org/apache/ranger/plugin/audit/RangerDefaultAuditHandler.java
@@ -35,9 +35,9 @@ import org.apache.ranger.authorization.hadoop.constants.RangerHadoopConstants;
 import org.apache.ranger.plugin.contextenricher.RangerTagForEval;
 import org.apache.ranger.plugin.policyengine.*;
 import org.apache.ranger.plugin.service.RangerBasePlugin;
+import org.apache.ranger.plugin.util.JsonUtilsV2;
 import org.apache.ranger.plugin.util.RangerAccessRequestUtil;
 import org.apache.ranger.plugin.util.RangerRESTUtils;
-import org.codehaus.jackson.map.ObjectMapper;
 
 
 public class RangerDefaultAuditHandler implements RangerAccessResultProcessor {
@@ -272,11 +272,9 @@ public class RangerDefaultAuditHandler implements RangerAccessResultProcessor {
 	 }
 
 	private String writeObjectAsString(Serializable obj) {
-		ObjectMapper mapper = new ObjectMapper();
-
 		String jsonStr = StringUtils.EMPTY;
 		try {
-			jsonStr = mapper.writeValueAsString(obj);
+			jsonStr = JsonUtilsV2.objToJson(obj);
 		} catch (Exception e) {
 			LOG.error("Cannot create JSON string for object:[" + obj + "]", e);
 		}
diff --git a/agents-common/src/main/java/org/apache/ranger/plugin/util/JsonUtilsV2.java b/agents-common/src/main/java/org/apache/ranger/plugin/util/JsonUtilsV2.java
new file mode 100644
index 0000000..9a8546b
--- /dev/null
+++ b/agents-common/src/main/java/org/apache/ranger/plugin/util/JsonUtilsV2.java
@@ -0,0 +1,71 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.ranger.plugin.util;
+
+import org.codehaus.jackson.map.ObjectMapper;
+import org.codehaus.jackson.type.TypeReference;
+
+import java.io.Serializable;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+public class JsonUtilsV2 {
+
+    static private final ThreadLocal<ObjectMapper> mapper = new ThreadLocal<ObjectMapper>() {
+        @Override
+        protected ObjectMapper initialValue() {
+            return new ObjectMapper();
+        }
+    };
+
+    static public ObjectMapper getMapper() {
+        return mapper.get();
+    }
+
+    static public Map<String, String> jsonToMap(String jsonStr) throws Exception {
+        final Map<String, String> ret;
+
+        if (jsonStr == null || jsonStr.isEmpty()) {
+            ret = new HashMap<>();
+        } else {
+            ret = getMapper().readValue(jsonStr, new TypeReference<Map<String, String>>() {});
+        }
+
+        return ret;
+    }
+
+    static public String mapToJson(Map<?, ?> map) throws Exception {
+        return getMapper().writeValueAsString(map);
+    }
+
+    static public String listToJson(List<?> list) throws Exception {
+        return getMapper().writeValueAsString(list);
+    }
+
+    static public String objToJson(Serializable obj) throws Exception {
+        return getMapper().writeValueAsString(obj);
+    }
+
+    static public <T> T jsonToObj(String json, Class<T> tClass) throws Exception {
+        return getMapper().readValue(json, tClass);
+    }
+
+}
diff --git a/kms/src/main/java/org/apache/hadoop/crypto/key/RangerKeyStoreProvider.java b/kms/src/main/java/org/apache/hadoop/crypto/key/RangerKeyStoreProvider.java
index bc69293..b280cbf 100755
--- a/kms/src/main/java/org/apache/hadoop/crypto/key/RangerKeyStoreProvider.java
+++ b/kms/src/main/java/org/apache/hadoop/crypto/key/RangerKeyStoreProvider.java
@@ -41,7 +41,7 @@ import javax.crypto.spec.SecretKeySpec;
 import org.apache.commons.lang.StringUtils;
 import org.apache.hadoop.classification.InterfaceAudience;
 import org.apache.hadoop.conf.Configuration;
-import org.codehaus.jackson.map.ObjectMapper;
+import org.apache.ranger.plugin.util.JsonUtilsV2;
 import org.apache.hadoop.fs.Path;
 import org.apache.ranger.credentialapi.CredentialReader;
 import org.apache.ranger.kms.dao.DaoManager;
@@ -217,10 +217,9 @@ public class RangerKeyStoreProvider extends KeyProvider {
             logger.debug("name : " + name + " and versionName : " + versionName);
         }
         try {
-            ObjectMapper om = new ObjectMapper();
-            String attribute = om.writeValueAsString(attributes);
+            String attribute = JsonUtilsV2.mapToJson(attributes);
             dbStore.addKeyEntry(versionName, new SecretKeySpec(material, cipher), masterKey, cipher, bitLength, description, version, attribute);
-        } catch (KeyStoreException e) {
+        } catch (Exception e) {
             throw new IOException("Can't store key " + versionName, e);
         }
         changed = true;
@@ -271,10 +270,9 @@ public class RangerKeyStoreProvider extends KeyProvider {
             for (Map.Entry<String, Metadata> entry : cache.entrySet()) {
                 try {
                     Metadata metadata = entry.getValue();
-                    ObjectMapper om = new ObjectMapper();
-                    String attributes = om.writeValueAsString(metadata.getAttributes());
+                    String attributes = JsonUtilsV2.mapToJson(metadata.getAttributes());
                     dbStore.addKeyEntry(entry.getKey(), new KeyMetadata(metadata), masterKey, metadata.getAlgorithm(), metadata.getBitLength(), metadata.getDescription(), metadata.getVersions(), attributes);
-                } catch (KeyStoreException e) {
+                } catch (Exception e) {
                     throw new IOException("Can't set metadata key " + entry.getKey(), e);
                 }
             }
diff --git a/kms/src/main/java/org/apache/hadoop/crypto/key/kms/server/KMSJSONReader.java b/kms/src/main/java/org/apache/hadoop/crypto/key/kms/server/KMSJSONReader.java
index d3e0064..2b85276 100644
--- a/kms/src/main/java/org/apache/hadoop/crypto/key/kms/server/KMSJSONReader.java
+++ b/kms/src/main/java/org/apache/hadoop/crypto/key/kms/server/KMSJSONReader.java
@@ -18,7 +18,7 @@
 package org.apache.hadoop.crypto.key.kms.server;
 
 import org.apache.hadoop.classification.InterfaceAudience;
-import org.codehaus.jackson.map.ObjectMapper;
+import org.apache.ranger.plugin.util.JsonUtilsV2;
 
 import javax.ws.rs.Consumes;
 import javax.ws.rs.WebApplicationException;
@@ -48,7 +48,6 @@ public class KMSJSONReader implements MessageBodyReader<Map> {
       Annotation[] annotations, MediaType mediaType,
       MultivaluedMap<String, String> httpHeaders, InputStream entityStream)
       throws IOException, WebApplicationException {
-    ObjectMapper mapper = new ObjectMapper();
-    return mapper.readValue(entityStream, type);
+    return JsonUtilsV2.getMapper().readValue(entityStream, type);
   }
 }
diff --git a/kms/src/main/java/org/apache/hadoop/crypto/key/kms/server/KMSJSONWriter.java b/kms/src/main/java/org/apache/hadoop/crypto/key/kms/server/KMSJSONWriter.java
index 3674e7a..a4e2b30 100644
--- a/kms/src/main/java/org/apache/hadoop/crypto/key/kms/server/KMSJSONWriter.java
+++ b/kms/src/main/java/org/apache/hadoop/crypto/key/kms/server/KMSJSONWriter.java
@@ -18,7 +18,7 @@
 package org.apache.hadoop.crypto.key.kms.server;
 
 import org.apache.hadoop.classification.InterfaceAudience;
-import org.codehaus.jackson.map.ObjectMapper;
+import org.apache.ranger.plugin.util.JsonUtilsV2;
 
 import javax.ws.rs.Produces;
 import javax.ws.rs.WebApplicationException;
@@ -63,8 +63,7 @@ public class KMSJSONWriter implements MessageBodyWriter<Object> {
       MultivaluedMap<String, Object> stringObjectMultivaluedMap,
       OutputStream outputStream) throws IOException, WebApplicationException {
     Writer writer = new OutputStreamWriter(outputStream);
-    ObjectMapper jsonMapper = new ObjectMapper();
-    jsonMapper.writerWithDefaultPrettyPrinter().writeValue(writer, obj);
+    JsonUtilsV2.getMapper().writerWithDefaultPrettyPrinter().writeValue(writer, obj);
   }
 
 }
diff --git a/knox-agent/src/main/java/org/apache/ranger/services/knox/client/KnoxClient.java b/knox-agent/src/main/java/org/apache/ranger/services/knox/client/KnoxClient.java
index 0c83ef9..b3c163d 100644
--- a/knox-agent/src/main/java/org/apache/ranger/services/knox/client/KnoxClient.java
+++ b/knox-agent/src/main/java/org/apache/ranger/services/knox/client/KnoxClient.java
@@ -30,9 +30,9 @@ import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.ranger.plugin.client.BaseClient;
 import org.apache.ranger.plugin.client.HadoopException;
+import org.apache.ranger.plugin.util.JsonUtilsV2;
 import org.apache.ranger.plugin.util.PasswordUtils;
 import org.codehaus.jackson.JsonNode;
-import org.codehaus.jackson.map.ObjectMapper;
 
 import com.sun.jersey.api.client.Client;
 import com.sun.jersey.api.client.ClientResponse;
@@ -103,10 +103,8 @@ public class KnoxClient {
 					if (response.getStatus() == 200) {
 						String jsonString = response.getEntity(String.class);
 						LOG.debug("Knox topology list response JSON string: "+ jsonString);
-						
-						ObjectMapper objectMapper = new ObjectMapper();
-						
-						JsonNode rootNode = objectMapper.readTree(jsonString);
+
+						JsonNode rootNode = JsonUtilsV2.getMapper().readTree(jsonString);
 						JsonNode topologyNode = rootNode.findValue("topology");
 						if (topologyNode == null) {
 							return topologyList;
@@ -215,9 +213,7 @@ public class KnoxClient {
 							String jsonString = response.getEntity(String.class);
 							LOG.debug("Knox service lookup response JSON string: " + jsonString);
 
-							ObjectMapper objectMapper = new ObjectMapper();
-
-							JsonNode rootNode = objectMapper.readTree(jsonString);
+							JsonNode rootNode = JsonUtilsV2.getMapper().readTree(jsonString);
 							JsonNode topologyNode = rootNode.findValue("topology");
 							if (topologyNode != null) {
 								JsonNode servicesNode = topologyNode.get("service");
diff --git a/security-admin/src/main/java/org/apache/ranger/biz/ServiceDBStore.java b/security-admin/src/main/java/org/apache/ranger/biz/ServiceDBStore.java
index 35dc940..eef29b0 100644
--- a/security-admin/src/main/java/org/apache/ranger/biz/ServiceDBStore.java
+++ b/security-admin/src/main/java/org/apache/ranger/biz/ServiceDBStore.java
@@ -3272,7 +3272,7 @@ public class ServiceDBStore extends AbstractServiceStore {
 		}
 
 		String content = xDataHist.getContent();
-		RangerPolicy policy = (RangerPolicy) dataHistService.writeJsonToJavaObject(content, RangerPolicy.class);
+		RangerPolicy policy = (RangerPolicy) jsonUtil.writeJsonToJavaObject(content, RangerPolicy.class);
 
 		return policy;
 	}
@@ -3296,7 +3296,7 @@ public class ServiceDBStore extends AbstractServiceStore {
 		}
 
 		String content = xDataHist.getContent();
-		RangerPolicy policy = (RangerPolicy) dataHistService.writeJsonToJavaObject(content, RangerPolicy.class);
+		RangerPolicy policy = (RangerPolicy) jsonUtil.writeJsonToJavaObject(content, RangerPolicy.class);
 
 		return policy;
 	}
diff --git a/security-admin/src/main/java/org/apache/ranger/common/JSONUtil.java b/security-admin/src/main/java/org/apache/ranger/common/JSONUtil.java
index 5bc1baf..014796f 100644
--- a/security-admin/src/main/java/org/apache/ranger/common/JSONUtil.java
+++ b/security-admin/src/main/java/org/apache/ranger/common/JSONUtil.java
@@ -25,16 +25,13 @@ package org.apache.ranger.common;
 import java.io.File;
 import java.io.IOException;
 import java.io.Serializable;
-import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
 import org.apache.ranger.common.view.ViewBaseBean;
+import org.apache.ranger.plugin.util.JsonUtilsV2;
 import org.codehaus.jackson.JsonGenerationException;
-import org.codehaus.jackson.JsonParseException;
 import org.codehaus.jackson.map.JsonMappingException;
-import org.codehaus.jackson.map.ObjectMapper;
-import org.codehaus.jackson.type.TypeReference;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
@@ -46,39 +43,23 @@ public class JSONUtil {
 
 	public File writeJsonToFile(ViewBaseBean viewBean, String fileName)
 			throws JsonGenerationException, JsonMappingException, IOException {
-		ObjectMapper objectMapper = new ObjectMapper();
 
 		if (fileName.length() < 3) {
 			fileName = "file_" + fileName;
 		}
 
 		File file = File.createTempFile(fileName, ".json");
-		objectMapper.defaultPrettyPrintingWriter().writeValue(file, viewBean);
+		JsonUtilsV2.getMapper().defaultPrettyPrintingWriter().writeValue(file, viewBean);
 
 		return file;
 	}
 
 	public Map<String, String> jsonToMap(String jsonStr) {
-		if (jsonStr == null || jsonStr.isEmpty()) {
-			return new HashMap<String, String>();
-		}
 
-		ObjectMapper mapper = new ObjectMapper();
 		try {
-			Map<String, String> tempObject = mapper.readValue(jsonStr,
-					new TypeReference<Map<String, String>>() {
-					});
-			return tempObject;
+			return JsonUtilsV2.jsonToMap(jsonStr);
 
-		} catch (JsonParseException e) {
-			throw restErrorUtil.createRESTException(
-					"Invalid input data: " + e.getMessage(),
-					MessageEnums.INVALID_INPUT_DATA);
-		} catch (JsonMappingException e) {
-			throw restErrorUtil.createRESTException(
-					"Invalid input data: " + e.getMessage(),
-					MessageEnums.INVALID_INPUT_DATA);
-		} catch (IOException e) {
+		} catch (Exception e) {
 			throw restErrorUtil.createRESTException(
 					"Invalid input data: " + e.getMessage(),
 					MessageEnums.INVALID_INPUT_DATA);
@@ -87,63 +68,32 @@ public class JSONUtil {
 	}
 
 	public String readMapToString(Map<?, ?> map) {
-		ObjectMapper mapper = new ObjectMapper();
-		String jsonString = null;
+
 		try {
-			jsonString = mapper.writeValueAsString(map);
-		} catch (JsonParseException e) {
-			throw restErrorUtil.createRESTException(
-					"Invalid input data: " + e.getMessage(),
-					MessageEnums.INVALID_INPUT_DATA);
-		} catch (JsonMappingException e) {
-			throw restErrorUtil.createRESTException(
-					"Invalid input data: " + e.getMessage(),
-					MessageEnums.INVALID_INPUT_DATA);
-		} catch (IOException e) {
+			return JsonUtilsV2.mapToJson(map);
+		} catch (Exception e) {
 			throw restErrorUtil.createRESTException(
 					"Invalid input data: " + e.getMessage(),
 					MessageEnums.INVALID_INPUT_DATA);
 		}
-		return jsonString;
 	}
 	
 	public String readListToString(List<?> list) {
-		ObjectMapper mapper = new ObjectMapper();
-		String jsonString = null;
+
 		try {
-			jsonString = mapper.writeValueAsString(list);
-		} catch (JsonParseException e) {
-			throw restErrorUtil.createRESTException(
-					"Invalid input data: " + e.getMessage(),
-					MessageEnums.INVALID_INPUT_DATA);
-		} catch (JsonMappingException e) {
-			throw restErrorUtil.createRESTException(
-					"Invalid input data: " + e.getMessage(),
-					MessageEnums.INVALID_INPUT_DATA);
-		} catch (IOException e) {
+			return JsonUtilsV2.listToJson(list);
+		} catch (Exception e) {
 			throw restErrorUtil.createRESTException(
 					"Invalid input data: " + e.getMessage(),
 					MessageEnums.INVALID_INPUT_DATA);
 		}
-		return jsonString;
 	}
 
 	public String writeObjectAsString(Serializable obj) {
-		ObjectMapper mapper = new ObjectMapper();
 
-		String jsonStr;
 		try {
-			jsonStr = mapper.writeValueAsString(obj);
-			return jsonStr;
-		} catch (JsonParseException e) {
-			throw restErrorUtil.createRESTException(
-					"Invalid input data: " + e.getMessage(),
-					MessageEnums.INVALID_INPUT_DATA);
-		} catch (JsonMappingException e) {
-			throw restErrorUtil.createRESTException(
-					"Invalid input data: " + e.getMessage(),
-					MessageEnums.INVALID_INPUT_DATA);
-		} catch (IOException e) {
+			return JsonUtilsV2.objToJson(obj);
+		} catch (Exception e) {
 			throw restErrorUtil.createRESTException(
 					"Invalid input data: " + e.getMessage(),
 					MessageEnums.INVALID_INPUT_DATA);
@@ -151,17 +101,10 @@ public class JSONUtil {
 	}
 
 	public <T> T writeJsonToJavaObject(String json, Class<T> tClass) {
-		ObjectMapper mapper = new ObjectMapper();
 
 		try {
-			return mapper.readValue(json, tClass);
-		} catch (JsonParseException e) {
-			throw restErrorUtil.createRESTException("Invalid input data: " + e.getMessage(),
-					MessageEnums.INVALID_INPUT_DATA);
-		} catch (JsonMappingException e) {
-			throw restErrorUtil.createRESTException("Invalid input data: " + e.getMessage(),
-					MessageEnums.INVALID_INPUT_DATA);
-		} catch (IOException e) {
+			return JsonUtilsV2.jsonToObj(json, tClass);
+		} catch (Exception e) {
 			throw restErrorUtil.createRESTException("Invalid input data: " + e.getMessage(),
 					MessageEnums.INVALID_INPUT_DATA);
 		}
diff --git a/security-admin/src/main/java/org/apache/ranger/rest/ServiceREST.java b/security-admin/src/main/java/org/apache/ranger/rest/ServiceREST.java
index b5caea8..01f1a12 100644
--- a/security-admin/src/main/java/org/apache/ranger/rest/ServiceREST.java
+++ b/security-admin/src/main/java/org/apache/ranger/rest/ServiceREST.java
@@ -111,6 +111,7 @@ import org.apache.ranger.plugin.store.EmbeddedServiceDefsUtil;
 import org.apache.ranger.plugin.store.PList;
 import org.apache.ranger.plugin.store.ServiceStore;
 import org.apache.ranger.plugin.util.GrantRevokeRequest;
+import org.apache.ranger.plugin.util.JsonUtilsV2;
 import org.apache.ranger.plugin.util.RangerAccessRequestUtil;
 import org.apache.ranger.plugin.util.RangerPerfTracer;
 import org.apache.ranger.plugin.util.SearchFilter;
@@ -131,7 +132,6 @@ import org.apache.ranger.view.RangerServiceList;
 import org.apache.ranger.view.VXResponse;
 import org.apache.ranger.view.VXString;
 import org.apache.ranger.view.VXUser;
-import org.codehaus.jackson.map.ObjectMapper;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Scope;
 import org.springframework.security.access.prepost.PreAuthorize;
@@ -1923,7 +1923,7 @@ public class ServiceREST {
 			
 			RangerExportPolicyList rangerExportPolicyList = new RangerExportPolicyList();
 			svcStore.putMetaDataInfo(rangerExportPolicyList);
-			String metaDataInfo = new ObjectMapper().writeValueAsString(rangerExportPolicyList.getMetaDataInfo());
+			String metaDataInfo = JsonUtilsV2.mapToJson(rangerExportPolicyList.getMetaDataInfo());
 			
 			List<XXTrxLog> trxLogList = new ArrayList<XXTrxLog>();
 			XXTrxLog xxTrxLog = new XXTrxLog();
@@ -1976,7 +1976,7 @@ public class ServiceREST {
 			
 			RangerExportPolicyList rangerExportPolicyList = new RangerExportPolicyList();
 			svcStore.putMetaDataInfo(rangerExportPolicyList);
-			String metaDataInfo = new ObjectMapper().writeValueAsString(rangerExportPolicyList.getMetaDataInfo());
+			String metaDataInfo = JsonUtilsV2.mapToJson(rangerExportPolicyList.getMetaDataInfo());
 			
 			List<XXTrxLog> trxLogList = new ArrayList<XXTrxLog>();
 			XXTrxLog xxTrxLog = new XXTrxLog();
@@ -2039,7 +2039,7 @@ public class ServiceREST {
 			if(!checkPoliciesExists){
 				RangerExportPolicyList rangerExportPolicyList = new RangerExportPolicyList();
 				svcStore.putMetaDataInfo(rangerExportPolicyList);
-				String metaDataInfo = new ObjectMapper().writeValueAsString(rangerExportPolicyList.getMetaDataInfo());
+				String metaDataInfo = JsonUtilsV2.mapToJson(rangerExportPolicyList.getMetaDataInfo());
 							
 				List<XXTrxLog> trxLogList = new ArrayList<XXTrxLog>();
 				XXTrxLog xxTrxLog = new XXTrxLog();
@@ -2126,7 +2126,7 @@ public class ServiceREST {
 					List<RangerPolicy> policies = null;
 					rangerExportPolicyList = processPolicyInputJsonForMetaData(uploadedInputStream,rangerExportPolicyList);
 					if (rangerExportPolicyList != null && !CollectionUtils.sizeIsEmpty(rangerExportPolicyList.getMetaDataInfo())) {
-						metaDataInfo = new ObjectMapper().writeValueAsString(rangerExportPolicyList.getMetaDataInfo());
+						metaDataInfo = JsonUtilsV2.mapToJson(rangerExportPolicyList.getMetaDataInfo());
 					} else {
 						LOG.info("metadata info is not provided!!");
 					}
@@ -2343,13 +2343,13 @@ public class ServiceREST {
 	}
 
 	private RangerExportPolicyList processPolicyInputJsonForMetaData(InputStream uploadedInputStream,
-			RangerExportPolicyList rangerExportPolicyList) throws IOException, WebApplicationException {
+			RangerExportPolicyList rangerExportPolicyList) throws Exception {
 		Gson gson = new Gson();
 		String policiesString = IOUtils.toString(uploadedInputStream);
 		policiesString = policiesString.trim();
 		if (StringUtils.isNotEmpty(policiesString)) {
 			gson.fromJson(policiesString, RangerExportPolicyList.class);
-			rangerExportPolicyList = new ObjectMapper().readValue(policiesString, RangerExportPolicyList.class);
+			rangerExportPolicyList = JsonUtilsV2.jsonToObj(policiesString, RangerExportPolicyList.class);
 		} else {
 			LOG.error("Provided json file is empty!!");
 			throw restErrorUtil.createRESTException("Provided json file is empty!!");
diff --git a/security-admin/src/main/java/org/apache/ranger/service/RangerDataHistService.java b/security-admin/src/main/java/org/apache/ranger/service/RangerDataHistService.java
index a96d648..7bd0681 100644
--- a/security-admin/src/main/java/org/apache/ranger/service/RangerDataHistService.java
+++ b/security-admin/src/main/java/org/apache/ranger/service/RangerDataHistService.java
@@ -17,11 +17,11 @@
 
 package org.apache.ranger.service;
 
-import java.io.IOException;
 import java.util.Date;
 
 import org.apache.ranger.common.AppConstants;
 import org.apache.ranger.common.DateUtil;
+import org.apache.ranger.common.JSONUtil;
 import org.apache.ranger.common.MessageEnums;
 import org.apache.ranger.common.RESTErrorUtil;
 import org.apache.ranger.db.RangerDaoManager;
@@ -32,9 +32,6 @@ import org.apache.ranger.plugin.model.RangerBaseModelObject;
 import org.apache.ranger.plugin.model.RangerPolicy;
 import org.apache.ranger.plugin.model.RangerService;
 import org.apache.ranger.plugin.model.RangerServiceDef;
-import org.codehaus.jackson.JsonParseException;
-import org.codehaus.jackson.map.JsonMappingException;
-import org.codehaus.jackson.map.ObjectMapper;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Scope;
 import org.springframework.stereotype.Service;
@@ -48,6 +45,9 @@ public class RangerDataHistService {
 	
 	@Autowired
 	RangerDaoManager daoMgr;
+
+	@Autowired
+	JSONUtil jsonUtil;
 	
 	public static final String ACTION_CREATE = "Create";
 	public static final String ACTION_UPDATE = "Update";
@@ -84,12 +84,12 @@ public class RangerDataHistService {
 			RangerServiceDef serviceDef = (RangerServiceDef) baseModelObj;
 			objectName = serviceDef.getName();
 			classType = AppConstants.CLASS_TYPE_XA_SERVICE_DEF;
-			content = writeObjectAsString(serviceDef);
+			content = jsonUtil.writeObjectAsString(serviceDef);
 		} else if(baseModelObj instanceof RangerService) {
 			RangerService service = (RangerService) baseModelObj;
 			objectName = service.getName();
 			classType = AppConstants.CLASS_TYPE_XA_SERVICE;
-			content = writeObjectAsString(service);
+			content = jsonUtil.writeObjectAsString(service);
 		} else if(baseModelObj instanceof RangerPolicy) {
 			RangerPolicy policy = (RangerPolicy) baseModelObj;
 			objectName = policy.getName();
@@ -102,7 +102,7 @@ public class RangerDataHistService {
                         if(xxServiceDef != null){
                                 policy.setServiceType(xxServiceDef.getName());
                         }
-			content = writeObjectAsString(policy);
+			content = jsonUtil.writeObjectAsString(policy);
 		}
 		
 		xDataHist.setObjectClassType(classType);
@@ -126,43 +126,4 @@ public class RangerDataHistService {
 		}
 	}
 
-	public String writeObjectAsString(RangerBaseModelObject vObj) {
-		ObjectMapper mapper = new ObjectMapper();
-
-		String jsonStr;
-		try {
-			jsonStr = mapper.writeValueAsString(vObj);
-			return jsonStr;
-		} catch (JsonParseException e) {
-			throw restErrorUtil.createRESTException(
-					"Invalid input data: " + e.getMessage(),
-					MessageEnums.INVALID_INPUT_DATA);
-		} catch (JsonMappingException e) {
-			throw restErrorUtil.createRESTException(
-					"Invalid input data: " + e.getMessage(),
-					MessageEnums.INVALID_INPUT_DATA);
-		} catch (IOException e) {
-			throw restErrorUtil.createRESTException(
-					"Invalid input data: " + e.getMessage(),
-					MessageEnums.INVALID_INPUT_DATA);
-		}
-	}
-
-	public Object writeJsonToJavaObject(String json, Class<?> tClass) {
-		ObjectMapper mapper = new ObjectMapper();
-
-		try {
-			return mapper.readValue(json, tClass);
-		} catch (JsonParseException e) {
-			throw restErrorUtil.createRESTException("Invalid input data: " + e.getMessage(),
-					MessageEnums.INVALID_INPUT_DATA);
-		} catch (JsonMappingException e) {
-			throw restErrorUtil.createRESTException("Invalid input data: " + e.getMessage(),
-					MessageEnums.INVALID_INPUT_DATA);
-		} catch (IOException e) {
-			throw restErrorUtil.createRESTException("Invalid input data: " + e.getMessage(),
-					MessageEnums.INVALID_INPUT_DATA);
-		}
-	}
-
 }
diff --git a/security-admin/src/main/java/org/apache/ranger/service/RangerPolicyService.java b/security-admin/src/main/java/org/apache/ranger/service/RangerPolicyService.java
index 4117442..95342c3 100644
--- a/security-admin/src/main/java/org/apache/ranger/service/RangerPolicyService.java
+++ b/security-admin/src/main/java/org/apache/ranger/service/RangerPolicyService.java
@@ -42,6 +42,7 @@ import org.apache.ranger.plugin.model.RangerPolicy.RangerPolicyItem;
 import org.apache.ranger.plugin.model.RangerPolicy.RangerPolicyResource;
 import org.apache.ranger.plugin.model.RangerPolicy.RangerRowFilterPolicyItem;
 import org.apache.ranger.plugin.model.RangerValiditySchedule;
+import org.apache.ranger.plugin.util.JsonUtilsV2;
 import org.codehaus.jackson.JsonParseException;
 import org.codehaus.jackson.map.JsonMappingException;
 import org.codehaus.jackson.map.ObjectMapper;
@@ -471,7 +472,7 @@ public class RangerPolicyService extends RangerPolicyServiceBase<XXPolicy, Range
                 if (stringUtil.isEmpty(value) || stringUtil.isEmpty(oldValue)) {
                         return false;
                 }
-                ObjectMapper mapper = new ObjectMapper();
+                ObjectMapper mapper = JsonUtilsV2.getMapper();
                 try {
                         List<String> obj = mapper.readValue(value, new TypeReference<List<String>>() {
                         });
@@ -511,7 +512,7 @@ public class RangerPolicyService extends RangerPolicyServiceBase<XXPolicy, Range
 			return false;
 		}
 
-		ObjectMapper mapper = new ObjectMapper();
+		ObjectMapper mapper = JsonUtilsV2.getMapper();
 		try {
 			List<RangerPolicyItem> obj = mapper.readValue(value,
 					new TypeReference<List<RangerPolicyItem>>() {
@@ -558,7 +559,7 @@ public class RangerPolicyService extends RangerPolicyServiceBase<XXPolicy, Range
 			return false;
 		}
 
-		ObjectMapper mapper = new ObjectMapper();
+		ObjectMapper mapper = JsonUtilsV2.getMapper();
 		try {
 			Map<String, RangerPolicyResource> obj = mapper.readValue(value,
 					new TypeReference<Map<String, RangerPolicyResource>>() {
@@ -714,7 +715,7 @@ public class RangerPolicyService extends RangerPolicyServiceBase<XXPolicy, Range
 		if (stringUtil.isEmpty(value) || stringUtil.isEmpty(oldValue)) {
 			return false;
 		}
-		ObjectMapper mapper = new ObjectMapper();
+		ObjectMapper mapper = JsonUtilsV2.getMapper();
 		try {
 			List<RangerDataMaskPolicyItem> obj = mapper.readValue(value,
 					new TypeReference<List<RangerDataMaskPolicyItem>>() {
@@ -758,7 +759,7 @@ public class RangerPolicyService extends RangerPolicyServiceBase<XXPolicy, Range
 		if (stringUtil.isEmpty(value) || stringUtil.isEmpty(oldValue)) {
 			return false;
 		}
-		ObjectMapper mapper = new ObjectMapper();
+		ObjectMapper mapper = JsonUtilsV2.getMapper();
 		try {
 			List<RangerRowFilterPolicyItem> obj = mapper.readValue(value,
 					new TypeReference<List<RangerRowFilterPolicyItem>>() {
diff --git a/security-admin/src/main/java/org/apache/ranger/service/XAssetService.java b/security-admin/src/main/java/org/apache/ranger/service/XAssetService.java
index 5525584..b937cff 100644
--- a/security-admin/src/main/java/org/apache/ranger/service/XAssetService.java
+++ b/security-admin/src/main/java/org/apache/ranger/service/XAssetService.java
@@ -30,6 +30,7 @@ import java.util.Map.Entry;
 import org.apache.ranger.common.AppConstants;
 import org.apache.ranger.common.JSONUtil;
 import org.apache.ranger.common.MessageEnums;
+import org.apache.ranger.plugin.util.JsonUtilsV2;
 import org.apache.ranger.plugin.util.PasswordUtils;
 import org.apache.ranger.common.PropertiesUtil;
 import org.apache.ranger.common.SearchField;
@@ -41,7 +42,6 @@ import org.apache.ranger.entity.XXAsset;
 import org.apache.ranger.entity.XXTrxLog;
 import org.apache.ranger.util.RangerEnumUtil;
 import org.apache.ranger.view.VXAsset;
-import org.codehaus.jackson.map.ObjectMapper;
 import org.codehaus.jackson.type.TypeReference;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Scope;
@@ -189,11 +189,10 @@ public class XAssetService extends XAssetServiceBase<XXAsset, VXAsset> {
 	public void validateConfig(VXAsset vObj) {
 		HashMap<String, Object> configrationMap = null;
 		if (vObj.getAssetType() == AppConstants.ASSET_HDFS) {
-			ObjectMapper objectMapper = new ObjectMapper();
 			TypeReference<HashMap<String, Object>> typeRef = new TypeReference
 					<HashMap<String, Object>>() {};
 			try {
-				configrationMap = objectMapper.readValue(vObj.getConfig(),
+				configrationMap = JsonUtilsV2.getMapper().readValue(vObj.getConfig(),
 						typeRef);
 			} catch (Exception e) {
 				logger.error("Error in config json", e);
diff --git a/security-admin/src/test/java/org/apache/ranger/biz/TestServiceDBStore.java b/security-admin/src/test/java/org/apache/ranger/biz/TestServiceDBStore.java
index ac9af5e..00ef5e3 100644
--- a/security-admin/src/test/java/org/apache/ranger/biz/TestServiceDBStore.java
+++ b/security-admin/src/test/java/org/apache/ranger/biz/TestServiceDBStore.java
@@ -25,6 +25,7 @@ import java.util.Map;
 
 import org.apache.commons.collections.ListUtils;
 import org.apache.ranger.common.ContextUtil;
+import org.apache.ranger.common.JSONUtil;
 import org.apache.ranger.common.RESTErrorUtil;
 import org.apache.ranger.common.RangerFactory;
 import org.apache.ranger.common.SearchCriteria;
@@ -146,6 +147,9 @@ public class TestServiceDBStore {
 	@Mock
 	RangerTransactionSynchronizationAdapter transactionSynchronizationAdapter;
 
+	@Mock
+	JSONUtil jsonUtil;
+
 	@Rule
 	public ExpectedException thrown = ExpectedException.none();
 
diff --git a/security-admin/src/test/java/org/apache/ranger/service/TestRangerDataHistService.java b/security-admin/src/test/java/org/apache/ranger/service/TestRangerDataHistService.java
index e1a236e..65e273c 100644
--- a/security-admin/src/test/java/org/apache/ranger/service/TestRangerDataHistService.java
+++ b/security-admin/src/test/java/org/apache/ranger/service/TestRangerDataHistService.java
@@ -15,13 +15,8 @@
 
 package org.apache.ranger.service;
 
-import java.util.Date;
-
 import org.apache.ranger.db.RangerDaoManager;
-import org.apache.ranger.entity.XXDataHist;
 import org.apache.ranger.plugin.model.RangerBaseModelObject;
-import org.apache.ranger.plugin.model.RangerPolicy;
-import org.codehaus.jackson.map.ObjectMapper;
 import org.junit.FixMethodOrder;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -46,9 +41,6 @@ public class TestRangerDataHistService {
 	@Mock
 	org.apache.ranger.db.XXDataHistDao XXDataHistDao;
 
-	@Mock
-	ObjectMapper mapper;
-
 	@Test
 	public void test1CreateObjectDataHistory() {
 		String action = "create";
@@ -57,57 +49,4 @@ public class TestRangerDataHistService {
 		rangerDataHistService.createObjectDataHistory(baseModelObj, action);
 
 	}
-
-	@Test
-	public void test2WriteObjectAsString() {
-		RangerBaseModelObject testbaseModelObj = createRangerBaseModelObject();
-		rangerDataHistService.writeObjectAsString(testbaseModelObj);
-
-	}
-
-	@Test
-	public void test3WriteJsonToJavaObject() {
-		XXDataHist XXDataHist = createXXDataHistObject();
-		rangerDataHistService.writeJsonToJavaObject(XXDataHist.getContent(), RangerPolicy.class);
-	}
-
-	private XXDataHist createXXDataHistObject() {
-		XXDataHist xDataHist = new XXDataHist();
-		Date date = new Date();
-		xDataHist.setObjectId(1L);
-		xDataHist.setObjectGuid("testGuid");
-		xDataHist.setCreateTime(date);
-		xDataHist.setAction("Create");
-		xDataHist.setVersion(1L);
-		xDataHist.setUpdateTime(date);
-		xDataHist.setFromTime(date);
-
-		xDataHist.setContent("{\"id\":3,\"guid\":\"c3991965-b063-4fff-b9e5-2e0aa566af29\""
-				+ ",\"isEnabled\":true,\"createdBy\":\"Admin\",\""
-				+ "updatedBy\":\"Admin\",\"createTime\":1529044511083,\"updateTime\""
-				+ ":1529044511084,\"version\":1,\"service\":\"cl1_storm_01\",\"name\""
-				+ ":\"all - topology\",\"policyType\":0,\"description\":\"Policy for all - topology\""
-				+ ",\"resourceSignature\":\"61c9e34a1c273ed9263940cf79275e94\",\"isAuditEnabled\""
-				+ ":true,\"resources\":{\"topology\":{\"values\":[\"*\"],\"isExcludes\":false,\"isRecursive\""
-				+ ":false}},\"policyItems\":[{\"accesses\":[{\"type\":\"submitTopology\",\"isAllowed\":true}"
-				+ ",{\"type\":\"fileUpload\",\"isAllowed\":true},{\"type\":\"fileDownload\",\"isAllowed\""
-				+ ":true},{\"type\":\"killTopology\",\"isAllowed\":true},{\"type\":\"rebalance\",\"isAllowed\""
-				+ ":true},{\"type\":\"activate\",\"isAllowed\":true},{\"type\":\"deactivate\",\"isAllowed\":true},{\"type\":\"getTopologyConf\",\"isAllowed\":true},{\"type\":\"getTopology\",\"isAllowed\":true},{\"type\":\"getUserTopology\",\"isAllowed\":true},{\"type\":\"getTopologyInfo\",\"isAllowed\":true},{\"type\":\"uploadNewCredentials\",\"isAllowed\":true}],\"users\":[\"test\",\"test123\",\"HTTP123\"],\"groups\":[],\"conditions\":[],\"delegateAdmin\":true}],\"denyPolicyItems\":[],\"allowExcept [...]
-
-		return xDataHist;
-	}
-
-	private RangerBaseModelObject createRangerBaseModelObject() {
-		RangerBaseModelObject baseModelObj = new RangerBaseModelObject();
-		Date date = new Date();
-		baseModelObj.setCreatedBy("admin");
-		baseModelObj.setCreateTime(date);
-		baseModelObj.setGuid("testGuid");
-		baseModelObj.setIsEnabled(true);
-		baseModelObj.setUpdatedBy("admin");
-		baseModelObj.setUpdateTime(date);
-		baseModelObj.setVersion(1L);
-		return baseModelObj;
-
-	}
 }