diff --git a/adapters/mso-adapter-utils/src/main/java/org/openecomp/mso/cloud/IdentityAuthenticationTypeAbstract.java b/adapters/mso-adapter-utils/src/main/java/org/openecomp/mso/cloud/IdentityAuthenticationTypeAbstract.java
index 666509e..f40c7d9 100644
--- a/adapters/mso-adapter-utils/src/main/java/org/openecomp/mso/cloud/IdentityAuthenticationTypeAbstract.java
+++ b/adapters/mso-adapter-utils/src/main/java/org/openecomp/mso/cloud/IdentityAuthenticationTypeAbstract.java
@@ -3,6 +3,7 @@
  * ONAP - SO
  * ================================================================================
  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017 Huawei Technologies Co., Ltd. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -23,9 +24,11 @@
 import java.util.concurrent.ConcurrentHashMap;
 
 import org.openecomp.mso.cloud.authentication.AuthenticationWrapper;
+import org.openecomp.mso.logger.MsoLogger;
 
 public abstract class IdentityAuthenticationTypeAbstract {
 
+	private static final MsoLogger LOGGER = MsoLogger.getMsoLogger(MsoLogger.Catalog.APIH);
 	// This map will prevent duplicates (as if it was an Enum).
 	// Without this, using an instance specific field for the class could allow
 	// different classes bound to the same entry name.
@@ -42,7 +45,7 @@
 			entries.put(identityType, this);
 			AuthenticationWrapper.register(this.toString(), wrapperClass);
 		} catch (IllegalAccessException | InstantiationException e) {
-			// Do not add the class if an exception occurs as we won't get the class anyway
+			LOGGER.debug("Exception in Identity Authentication",e);
 		}
 	}
 
@@ -72,4 +75,12 @@
 		return ((this.identityType != null) && (other != null) && (other instanceof IdentityAuthenticationTypeAbstract) && (this.identityType.equals(other.toString())));
 	}
 
+	@Override
+	public int hashCode() {
+		final int prime = 31;
+		int result = 1;
+		result = prime * result + ((identityType == null) ? 0 : identityType.hashCode());
+		return result;
+	}
+
 }
diff --git a/adapters/mso-adapter-utils/src/main/java/org/openecomp/mso/cloud/IdentityServerTypeAbstract.java b/adapters/mso-adapter-utils/src/main/java/org/openecomp/mso/cloud/IdentityServerTypeAbstract.java
index a4cd124..ad909a7 100644
--- a/adapters/mso-adapter-utils/src/main/java/org/openecomp/mso/cloud/IdentityServerTypeAbstract.java
+++ b/adapters/mso-adapter-utils/src/main/java/org/openecomp/mso/cloud/IdentityServerTypeAbstract.java
@@ -3,6 +3,7 @@
  * ONAP - SO
  * ================================================================================
  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017 Huawei Technologies Co., Ltd. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -74,4 +75,11 @@
 		return ((this.serverType != null) && (other != null) && (other instanceof IdentityServerTypeAbstract) && (this.serverType.equals(other.toString())));
 	}
 
+	@Override
+	public int hashCode() {
+        final int prime = 31;
+        int result = 1;
+        result = prime * result + ((serverType == null) ? 0 : serverType.hashCode());
+        return result;
+    }
 }
diff --git a/mso-api-handlers/mso-requests-db/src/main/java/org/openecomp/mso/requestsdb/RequestsDatabase.java b/mso-api-handlers/mso-requests-db/src/main/java/org/openecomp/mso/requestsdb/RequestsDatabase.java
index b950c1b..8db4548 100644
--- a/mso-api-handlers/mso-requests-db/src/main/java/org/openecomp/mso/requestsdb/RequestsDatabase.java
+++ b/mso-api-handlers/mso-requests-db/src/main/java/org/openecomp/mso/requestsdb/RequestsDatabase.java
@@ -3,6 +3,7 @@
  * ONAP - SO
  * ================================================================================
  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017 Huawei Technologies Co., Ltd. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -519,9 +520,7 @@
             }
             session.getTransaction ().commit ();
         } finally {
-            if (session != null && session.isOpen ()) {
-                session.close ();
-            }
+            session.close ();
             msoLogger.recordMetricEvent (startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, "Successfully", "RequestDB", "updateSiteStatus", null);
         }
     }
@@ -588,9 +587,7 @@
             }
             session.getTransaction().commit();
         } finally {
-            if(session != null && session.isOpen()) {
-                session.close();
-            }
+            session.close();
             msoLogger.recordMetricEvent(startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc,
                     "Successfully", "RequestDB", "updateOperationStatus", null);
         }
@@ -663,9 +660,7 @@
             }
             session.getTransaction().commit();
         } finally {
-            if(session != null && session.isOpen()) {
-                session.close();
-            }
+            session.close();
             msoLogger.recordMetricEvent(startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc,
                     "Successfully", "RequestDB", "updateResOperStatus", null);
         }
@@ -720,9 +715,7 @@
             }
             updateOperationStatus(serviceOperStatus);
         } finally {
-            if(session != null && session.isOpen()) {
-                session.close();
-            }
+            session.close();
             msoLogger.recordMetricEvent(startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc,
                     "Successfully", "RequestDB", "updateResOperStatus", null);
         }
