diff --git a/appc-dispatcher/appc-command-executor/appc-command-executor-api/pom.xml b/appc-dispatcher/appc-command-executor/appc-command-executor-api/pom.xml
index 210fd04..1d03434 100644
--- a/appc-dispatcher/appc-command-executor/appc-command-executor-api/pom.xml
+++ b/appc-dispatcher/appc-command-executor/appc-command-executor-api/pom.xml
@@ -25,12 +25,12 @@
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     <modelVersion>4.0.0</modelVersion>
-	<parent>
-		<groupId>org.onap.appc.parent</groupId>
-		<artifactId>binding-parent</artifactId>
-		<version>1.5.0-SNAPSHOT</version>
-                <relativePath />
-	</parent>
+    <parent>
+        <groupId>org.onap.appc.parent</groupId>
+        <artifactId>binding-parent</artifactId>
+        <version>1.5.0-SNAPSHOT</version>
+        <relativePath />
+    </parent>
 
     <artifactId>appc-command-executor-api</artifactId>
     <packaging>bundle</packaging>
diff --git a/appc-dispatcher/appc-command-executor/appc-command-executor-core/pom.xml b/appc-dispatcher/appc-command-executor/appc-command-executor-core/pom.xml
index 4ffa0b8..40cbb3e 100644
--- a/appc-dispatcher/appc-command-executor/appc-command-executor-core/pom.xml
+++ b/appc-dispatcher/appc-command-executor/appc-command-executor-core/pom.xml
@@ -25,12 +25,12 @@
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     <modelVersion>4.0.0</modelVersion>
-	<parent>
-		<groupId>org.onap.appc.parent</groupId>
-		<artifactId>binding-parent</artifactId>
-		<version>1.5.0-SNAPSHOT</version>
-                <relativePath />
-	</parent>
+    <parent>
+        <groupId>org.onap.appc.parent</groupId>
+        <artifactId>binding-parent</artifactId>
+        <version>1.5.0-SNAPSHOT</version>
+        <relativePath />
+    </parent>
 
     <artifactId>appc-command-executor-core</artifactId>
     <packaging>bundle</packaging>
@@ -78,6 +78,11 @@
             <version>${project.version}</version>
         </dependency>
         <dependency>
+            <groupId>org.mockito</groupId>
+            <artifactId>mockito-core</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
             <groupId>org.onap.ccsdk.sli.adaptors</groupId>
             <artifactId>aai-service-provider</artifactId>
         </dependency>
diff --git a/appc-dispatcher/appc-dispatcher-common/appc-data-access-lib/pom.xml b/appc-dispatcher/appc-dispatcher-common/appc-data-access-lib/pom.xml
index 5d1861d..60352e4 100644
--- a/appc-dispatcher/appc-dispatcher-common/appc-data-access-lib/pom.xml
+++ b/appc-dispatcher/appc-dispatcher-common/appc-data-access-lib/pom.xml
@@ -10,17 +10,17 @@
   Licensed 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.
-  
+
   ============LICENSE_END=========================================================
- -->	
+ -->
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     <modelVersion>4.0.0</modelVersion>
@@ -68,13 +68,22 @@
             <version>${apache.common.dbcp2.version}</version>
         </dependency>
         <dependency>
+            <groupId>org.mockito</groupId>
+            <artifactId>mockito-core</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
             <groupId>org.slf4j</groupId>
             <artifactId>slf4j-api</artifactId>
         </dependency>
-	<dependency>
-		<groupId>org.mariadb.jdbc</groupId>
-		<artifactId>mariadb-java-client</artifactId>
-	</dependency>
+        <dependency>
+            <groupId>com.att.eelf</groupId>
+            <artifactId>eelf-core</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.mariadb.jdbc</groupId>
+            <artifactId>mariadb-java-client</artifactId>
+        </dependency>
         <dependency>
             <groupId>org.onap.appc</groupId>
             <artifactId>appc-test-dependencies</artifactId>
diff --git a/appc-dispatcher/appc-dispatcher-common/execution-queue-management-lib/pom.xml b/appc-dispatcher/appc-dispatcher-common/execution-queue-management-lib/pom.xml
index 93da4fe..9b96a53 100644
--- a/appc-dispatcher/appc-dispatcher-common/execution-queue-management-lib/pom.xml
+++ b/appc-dispatcher/appc-dispatcher-common/execution-queue-management-lib/pom.xml
@@ -50,6 +50,11 @@
             <groupId>com.att.eelf</groupId>
             <artifactId>eelf-core</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.mockito</groupId>
+            <artifactId>mockito-core</artifactId>
+            <scope>test</scope>
+        </dependency>
     </dependencies>
 
     <build>
diff --git a/appc-dispatcher/appc-dispatcher-common/transaction-recorder/pom.xml b/appc-dispatcher/appc-dispatcher-common/transaction-recorder/pom.xml
index ca1bfc6..6747c58 100644
--- a/appc-dispatcher/appc-dispatcher-common/transaction-recorder/pom.xml
+++ b/appc-dispatcher/appc-dispatcher-common/transaction-recorder/pom.xml
@@ -61,6 +61,11 @@
             <scope>test</scope>
             <type>pom</type>
         </dependency>
+        <dependency>
+            <groupId>org.mockito</groupId>
+            <artifactId>mockito-core</artifactId>
+            <scope>test</scope>
+        </dependency>
 
     </dependencies>
 
diff --git a/appc-dispatcher/appc-dispatcher-common/transaction-recorder/src/main/java/org/onap/appc/transactionrecorder/TransactionRecorder.java b/appc-dispatcher/appc-dispatcher-common/transaction-recorder/src/main/java/org/onap/appc/transactionrecorder/TransactionRecorder.java
index 17e0e25..40bd0a7 100644
--- a/appc-dispatcher/appc-dispatcher-common/transaction-recorder/src/main/java/org/onap/appc/transactionrecorder/TransactionRecorder.java
+++ b/appc-dispatcher/appc-dispatcher-common/transaction-recorder/src/main/java/org/onap/appc/transactionrecorder/TransactionRecorder.java
@@ -2,7 +2,7 @@
  * ============LICENSE_START=======================================================
  * ONAP : APPC
  * ================================================================================
- * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-2019 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
  * Copyright (C) 2017 Amdocs
  * =============================================================================
@@ -45,10 +45,12 @@
     /**
      * This method is called when a particular row in transactions needs to be updated
      * @param key This is TransactionId which uniquely identifies the record.
+     * @param requestId
      * @param updateColumns Map containing names of updated columns and their values.
      * @throws APPCException
      */
-    void update(String key, Map<TransactionConstants.TRANSACTION_ATTRIBUTES, String> updateColumns) throws APPCException;
+    void update(String key, String requestId, Map<TransactionConstants.TRANSACTION_ATTRIBUTES, String> updateColumns)
+            throws APPCException;
 
     /**
      * Marks all records in Transactions table in non-terminal state as ABORTED. This method is to be called during
diff --git a/appc-dispatcher/appc-dispatcher-common/transaction-recorder/src/main/java/org/onap/appc/transactionrecorder/impl/TransactionRecorderImpl.java b/appc-dispatcher/appc-dispatcher-common/transaction-recorder/src/main/java/org/onap/appc/transactionrecorder/impl/TransactionRecorderImpl.java
index 5c5d8fc..12a3457 100644
--- a/appc-dispatcher/appc-dispatcher-common/transaction-recorder/src/main/java/org/onap/appc/transactionrecorder/impl/TransactionRecorderImpl.java
+++ b/appc-dispatcher/appc-dispatcher-common/transaction-recorder/src/main/java/org/onap/appc/transactionrecorder/impl/TransactionRecorderImpl.java
@@ -2,7 +2,7 @@
  * ============LICENSE_START=======================================================
  * ONAP : APPC
  * ================================================================================
- * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-2019 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
  * Copyright (C) 2017 Amdocs
  * ================================================================================
@@ -109,14 +109,29 @@
     }
 
     @Override
-    public void update(String key, Map<TransactionConstants.TRANSACTION_ATTRIBUTES, String> updateColumns) throws
-        APPCException {
+    public void update(String key,
+                       String requestId,
+                       Map<TransactionConstants.TRANSACTION_ATTRIBUTES, String> updateColumns) throws APPCException {
+        logger.debug("Inside update in TransactionRecorderImpl");
+
+        if (appcInstanceId != null && checkIfNullInstanceEntryExist(key, requestId)) {
+            updateNullInstanceEntry(key, requestId, updateColumns);
+        } else {
+            updateTransactionEntry(key, updateColumns);
+        }
+        logger.trace("End of Update Transaction table.");
+    }
+
+    private void updateTransactionEntry(String key, Map<TRANSACTION_ATTRIBUTES, String> updateColumns)
+        throws APPCException {
         ArrayList<String> values = new ArrayList<>();
+        logger.debug("Inside updateTransactionEntry");
 
         StringBuilder queryBuilder = new StringBuilder("UPDATE TRANSACTIONS SET ");
         for (Map.Entry<TransactionConstants.TRANSACTION_ATTRIBUTES, String> entry : updateColumns.entrySet()) {
             queryBuilder.append(entry.getKey().getColumnName() + " = ? ,");
             values.add(entry.getValue());
+            logger.debug("Value for " + entry.getKey().getColumnName() + " in Transaction table: " + entry.getValue());
         }
         queryBuilder.deleteCharAt(queryBuilder.lastIndexOf(","));
         queryBuilder.append(WHERE + TRANSACTION_ID.getColumnName() + " = ?");
@@ -124,9 +139,16 @@
 
         String query = queryBuilder.toString();
         try {
-            dbLibService.writeData(query, values, SCHEMA);
+            if (logger.isDebugEnabled()) {
+                logger.debug("Before updating Transaction table the Query is: " + query);
+                for (String value : values) {
+                    logger.debug("Value for Transaction table: " + value);
+                }
+            }
+            Boolean result = dbLibService.writeData(query, values, SCHEMA);
+            logger.debug("Transactions table data update, writeData() result: " + result);
         } catch (SQLException e) {
-            logger.error("Error in updating records " + e);
+            logger.error("Error in updating records in updateTransactionEntry " + e);
             throw new APPCException(ERROR_ACCESSING_DATABASE, e);
         }
         if (logger.isTraceEnabled()) {
@@ -135,6 +157,70 @@
 
     }
 
+    private void updateNullInstanceEntry(String key,
+                                         String requestId,
+                                         Map<TRANSACTION_ATTRIBUTES, String> updateColumns) throws APPCException {
+        logger.debug("Inside updateNullInstanceEntry");
+
+        ArrayList<String> values = new ArrayList<>();
+        StringBuilder queryBuilder = new StringBuilder("UPDATE TRANSACTIONS SET ");
+        for (Map.Entry<TransactionConstants.TRANSACTION_ATTRIBUTES, String> entry : updateColumns.entrySet()) {
+            queryBuilder.append(entry.getKey().getColumnName() + " = ? ,");
+            values.add(entry.getValue());
+        }
+        // queryBuilder.deleteCharAt(queryBuilder.lastIndexOf(","));
+        queryBuilder.append(TRANSACTION_ID.getColumnName() + " = ?");
+        queryBuilder.append(WHERE + TRANSACTION_ID.getColumnName() + " = ? AND "
+                            + REQUEST_ID.getColumnName() + " = ? ");
+        values.add(appcInstanceId + "~" + key);
+        values.add(null + "~" + key);
+        values.add(requestId);
+        String query = queryBuilder.toString();
+        try {
+            if (logger.isDebugEnabled()) {
+                logger.debug("Before updating Transaction table the Query is: " + query);
+                for (String value : values) {
+                        logger.debug("Value for Transaction table: " + value);
+                }
+            }
+            Boolean result = dbLibService.writeData(query, values, SCHEMA);
+            logger.debug("Transactions table data update, writeData() result: " + result);
+
+        } catch (SQLException e) {
+            logger.error("Error in updating records in updateNullInstanceEntry " + e);
+            throw new APPCException(ERROR_ACCESSING_DATABASE, e);
+        }
+
+    }
+
+    private boolean checkIfNullInstanceEntryExist(String key, String requestId) throws APPCException {
+        logger.debug("Entered checkIfNullInstanceEntryExist");
+        String nullInstanceCheckQuery = new String("SELECT COUNT(*) as ROWS  FROM " +
+            TransactionConstants.TRANSACTIONS + WHERE +
+            TRANSACTION_ID.getColumnName() + " = ? AND " +
+            REQUEST_ID.getColumnName() + " = ? ");
+
+        ArrayList<String> nullInstanceCheckParams = new ArrayList<>();
+        nullInstanceCheckParams.add(null + "~" + key);
+        nullInstanceCheckParams.add(requestId);
+
+        try{
+            CachedRowSet rowSet = dbLibService.getData(nullInstanceCheckQuery, nullInstanceCheckParams, SCHEMA);
+            int noRows = 0;
+            if (rowSet != null && rowSet.first()) {
+                noRows = rowSet.getInt("ROWS");
+                logger.info("No of Rows in Transactions Table with TRANSACTION_ID: " +
+                            null + "~" + key + " and REQUEST_ID " + requestId + " is: " + noRows);
+            }
+            if(noRows > 0)
+                return true;
+        } catch (SQLException e) {
+            logger.error("Error in checkIfNullInstanceEntryExist in the transaction table", e);
+            throw new APPCException(ERROR_ACCESSING_DATABASE, e);
+        }
+        return false;
+    }
+
     @Override
     public void markTransactionsAborted(String appcInstanceId) {
         if (logger.isTraceEnabled()) {
diff --git a/appc-dispatcher/appc-dispatcher-common/transaction-recorder/src/test/java/org/onap/appc/transactionrecorder/impl/TransactionRecorderImplTest.java b/appc-dispatcher/appc-dispatcher-common/transaction-recorder/src/test/java/org/onap/appc/transactionrecorder/impl/TransactionRecorderImplTest.java
index 8d30ef3..36cf26b 100644
--- a/appc-dispatcher/appc-dispatcher-common/transaction-recorder/src/test/java/org/onap/appc/transactionrecorder/impl/TransactionRecorderImplTest.java
+++ b/appc-dispatcher/appc-dispatcher-common/transaction-recorder/src/test/java/org/onap/appc/transactionrecorder/impl/TransactionRecorderImplTest.java
@@ -2,7 +2,7 @@
  * ============LICENSE_START=======================================================
  * ONAP : APPC
  * ================================================================================
- * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-2019 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
  * Copyright (C) 2017 Amdocs
  * ================================================================================
@@ -145,7 +145,7 @@
     }
 
     /**
-     * Verify the transactionRecorderImpl.sore() store the TransactionRecord correctly in the database.
+     * Verify the transactionRecorderImpl.store() store the TransactionRecord correctly in the database.
      */
     @Test
     public void testStore() throws Exception {
@@ -274,9 +274,13 @@
         insertRecord(input);
         Map<TransactionConstants.TRANSACTION_ATTRIBUTES, String> updateColumns = new HashMap<>();
         updateColumns.put(TransactionConstants.TRANSACTION_ATTRIBUTES.TARGET_TYPE, "Firewall");
+        Mockito.when(dbLibService.getData(anyString(), anyObject(), anyString())).thenAnswer(invocation ->
+                returnResult(invocation.getArguments()));
         Mockito.when(dbLibService.writeData(anyString(), anyObject(), anyString())).thenAnswer(invocation ->
                 testUpdateInMemory(invocation.getArguments()));
-        transactionRecorderImpl.update(input.getTransactionId(), updateColumns);
+        transactionRecorderImpl.update(input.getTransactionId(), input.getRequestId(), updateColumns);
+        Mockito.verify(dbLibService).getData(anyString(), anyObject(), anyString());
+        Mockito.verify(dbLibService).writeData(anyString(), anyObject(), anyString());
     }
 
     @Test
@@ -289,7 +293,97 @@
         expectedEx.expect(APPCException.class);
         expectedEx.expectMessage(TransactionConstants.ERROR_ACCESSING_DATABASE);
         expectedEx.expectCause(isA(SQLException.class));
-        transactionRecorderImpl.update(input.getTransactionId(), updateColumns);
+        transactionRecorderImpl.update(input.getTransactionId(), input.getRequestId(), updateColumns);
+    }
+
+    @Test
+    public void testUpdatewithNullInstance() throws APPCException, SQLException {
+        TransactionRecord input = prepareTransactionsInput();
+        Map<TransactionConstants.TRANSACTION_ATTRIBUTES, String> updateColumns = new HashMap<>();
+        updateColumns.put(TransactionConstants.TRANSACTION_ATTRIBUTES.TARGET_TYPE, "Firewall");
+        Mockito.when(dbLibService.getData(anyString(), anyObject(), anyString())).thenAnswer(invocation ->
+                returnPositiveResult(invocation.getArguments()));
+        Mockito.when(dbLibService.writeData(anyString(), anyObject(), anyString())).thenAnswer(invocation ->
+                testUpdateInMemory(invocation.getArguments()));
+
+        transactionRecorderImpl.update(input.getTransactionId(), input.getRequestId(), updateColumns);
+        Mockito.verify(dbLibService).getData(anyString(), anyObject(), anyString());
+        Mockito.verify(dbLibService).writeData(anyString(), anyObject(), anyString());
+    }
+
+    private Object returnPositiveResult(Object[] obj) throws Exception {
+        String query = (String) obj[0];
+        ArrayList<String> args = (ArrayList<String>) obj[1];
+        System.out.println("returnPositiveResult: Query: " + query + "\nArgs: " + args);
+
+        insertNullInstanceData(args.get(0));
+
+        try (
+             Connection con = dbConnectionPool.getConnection();
+             PreparedStatement ps_second = con.prepareStatement(query)
+             ) {
+            for (int i = 1; i <= args.size(); i++) {
+                ps_second.setString(i, args.get(i - 1));
+            }
+            CachedRowSet rowSet = new CachedRowSetImpl();
+            rowSet.populate(ps_second.executeQuery());
+            return rowSet;
+        }
+    }
+
+    private void insertNullInstanceData(String transactionId) throws Exception {
+        final String nullInstanceQuery = (TransactionConstants.INSERT_INTO + TransactionConstants.TRANSACTIONS +
+                                          " values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)");
+        try (
+             Connection con = dbConnectionPool.getConnection();
+             PreparedStatement ps = con.prepareStatement(nullInstanceQuery)
+             ) {
+            ArrayList<String> input = new ArrayList<String>();
+            input.add(transactionId);
+            input.add(dateToStringConverterMillis(Instant.parse("2017-09-12T00:00:01.00Z")));
+            input.add("REQUEST_ID");
+            input.add("SUB_REQUEST_ID");
+            input.add("ORIGINATOR_ID");
+            input.add(dateToStringConverterMillis(Instant.parse("2018-09-12T00:00:02.00Z")));
+            input.add(dateToStringConverterMillis(Instant.parse("2018-09-12T20:00:02.00Z")));
+            input.add("TARGET_ID");
+            input.add("TARGET_TYPE");
+            input.add("Audit");
+            input.add(String.valueOf(200));
+            input.add("SERVICE_INSTANCE_ID");
+            input.add("ACCEPTED");
+            input.add("DESCRIPTION");
+            input.add("test");
+            input.add("test");
+            input.add("test");
+            input.add("EXCLUSIVE");
+
+            for (int i = 1; i <= input.size(); i++) {
+                ps.setString(i, input.get(i-1));
+            }
+            ps.execute();
+
+            if (checkIfRowIsPresent(input.get(0))) {
+                System.out.println("RECORD INSERTED " + input.get(0));
+            }
+        }
+    }
+
+    private ResultSet returnResult(Object[] obj) throws Exception {
+        String query = (String) obj[0];
+        ArrayList<String> args = (ArrayList<String>) obj[1];
+        System.out.println("Query: " + query + "\nArgs: " + args);
+        try (
+             Connection con = dbConnectionPool.getConnection();
+             PreparedStatement ps = con.prepareStatement(query)
+             ) {
+            for (int i = 1; i <= args.size(); i++) {
+                ps.setString(i, args.get(i - 1));
+            }
+            CachedRowSet rowSet = new CachedRowSetImpl();
+            rowSet.populate(ps.executeQuery());
+            return rowSet;
+        }
     }
 
     @Test
@@ -334,74 +428,94 @@
     private ResultSet inMemoryExecutionWithResultSet(Object[] obj) throws Exception {
         String query = (String) obj[0];
         ArrayList<String> args = (ArrayList<String>) obj[1];
-        Connection con = dbConnectionPool.getConnection();
-        PreparedStatement ps = con.prepareStatement(query);
-        for (int i = 1; i <= args.size(); i++) {
-            ps.setString(i, args.get(i - 1));
+        // System.out.println("Query: " + query + "\nArgs: " + args);
+        try (
+             Connection con = dbConnectionPool.getConnection();
+             PreparedStatement ps = con.prepareStatement(query)
+             ) {
+            for (int i = 1; i <= args.size(); i++) {
+                ps.setString(i, args.get(i - 1));
+            }
+            CachedRowSet rowSet = new CachedRowSetImpl();
+            rowSet.populate(ps.executeQuery());
+            return rowSet;
         }
-        CachedRowSet rowSet = new CachedRowSetImpl();
-        rowSet.populate(ps.executeQuery());
-        return rowSet;
     }
 
     private boolean testMarkAbortedInMemory(Object[] obj) throws Exception {
         String query = (String) obj[0];
         ArrayList<String> args = (ArrayList<String>) obj[1];
-        Connection con = dbConnectionPool.getConnection();
-        PreparedStatement ps = con.prepareStatement(query);
-        for (int i = 1; i <= args.size(); i++) {
-            ps.setString(i, args.get(i - 1));
+        try (
+             Connection con = dbConnectionPool.getConnection();
+             PreparedStatement ps = con.prepareStatement(query)
+             ) {
+            for (int i = 1; i <= args.size(); i++) {
+                ps.setString(i, args.get(i - 1));
+            }
+            ps.execute();
+            return isTransactionAborted();
         }
-        ps.execute();
-        return isTransactionAborted();
     }
 
     private boolean isTransactionAborted() throws Exception {
         String query = "SELECT COUNT(*) FROM  TRANSACTIONS WHERE STATE = ?";
-        Connection con = dbConnectionPool.getConnection();
-        PreparedStatement ps = con.prepareStatement(query);
-        ps.setString(1, RequestStatus.ABORTED.toString());
-        ResultSet rs = ps.executeQuery();
-        while (rs.next()) {
-            int value = rs.getInt(1);
-            if (value == 1) {
-                System.out.println("Non terminal Transactions are aborted");
-                return true;
+        try (
+             Connection con = dbConnectionPool.getConnection();
+             PreparedStatement ps = con.prepareStatement(query)
+             ) {
+            ps.setString(1, RequestStatus.ABORTED.toString());
+            try (
+                 ResultSet rs = ps.executeQuery()
+                 ) {
+                while (rs.next()) {
+                    int value = rs.getInt(1);
+                    if (value == 1) {
+                        System.out.println("Non terminal Transactions are aborted");
+                        return true;
+                    }
+                }
+                throw new Exception("Transactions are not aborted");
             }
         }
-        throw new Exception("Transactions are not aborted");
     }
 
     private boolean testUpdateInMemory(Object[] obj) throws Exception {
         String query = (String) obj[0];
         ArrayList<String> args = (ArrayList<String>) obj[1];
-        Connection con = dbConnectionPool.getConnection();
-        PreparedStatement ps = con.prepareStatement(query);
-        for (int i = 1; i <= args.size(); i++) {
-            ps.setString(i, args.get(i - 1));
+        try (
+             Connection con = dbConnectionPool.getConnection();
+             PreparedStatement ps = con.prepareStatement(query)
+             ) {
+            for (int i = 1; i <= args.size(); i++) {
+                System.out.println("Value at " + i + ": " + args.get(i - 1));
+                ps.setString(i, args.get(i - 1));
+            }
+            ps.execute();
+            String updatedValue = checkIfValueIsUpdated(args.get(1));
+            System.out.println("updated Value is " + updatedValue);
+            if (updatedValue.equals("Firewall")) {
+                return true;
+            }
+            throw new Exception("Not Updated");
         }
-        ps.execute();
-        String updatedValue = checkIfValueIsUpdated(args.get(1));
-        System.out.println("updated Value is " + updatedValue);
-        if (updatedValue.equals("Firewall")) {
-            return true;
-        }
-        throw new Exception("Not Updated");
     }
 
     private boolean testStoreInMemory(Object[] obj) throws Exception {
         String query = (String) obj[0];
         ArrayList<String> args = (ArrayList<String>) obj[1];
-        Connection con = dbConnectionPool.getConnection();
-        PreparedStatement ps = con.prepareStatement(query);
-        for (int i = 1; i <= args.size(); i++) {
-            ps.setString(i, args.get(i - 1));
+        try (
+             Connection con = dbConnectionPool.getConnection();
+             PreparedStatement ps = con.prepareStatement(query)
+             ) {
+            for (int i = 1; i <= args.size(); i++) {
+                ps.setString(i, args.get(i - 1));
+            }
+            ps.execute();
+            if (checkIfRowIsPresent(args.get(0))) {
+                return true;
+            }
+            throw new Exception("Failed to update");
         }
-        ps.execute();
-        if (checkIfRowIsPresent(args.get(0))) {
-            return true;
-        }
-        throw new Exception("Failed to update");
     }
 
     private TransactionRecord prepareTransactionsInput() {
@@ -426,19 +540,21 @@
     private void insertRecord(TransactionRecord input) throws SQLException {
         final String STORE_DATE_QUERY = TransactionConstants.INSERT_INTO + TransactionConstants.TRANSACTIONS +
                 " values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
-        Connection con = dbConnectionPool.getConnection();
-        PreparedStatement ps = con.prepareStatement(STORE_DATE_QUERY);
-        ArrayList<String> args = prepareArguments(input);
-        args.remove(0);
-        args.add(0, "123~" + input.getTransactionId());
-        for (int i = 1; i <= 18; i++) {
-            ps.setString(i, args.get(i - 1));
+        try (
+             Connection con = dbConnectionPool.getConnection();
+             PreparedStatement ps = con.prepareStatement(STORE_DATE_QUERY)
+             ) {
+            ArrayList<String> args = prepareArguments(input);
+            args.remove(0);
+            args.add(0, "123~" + input.getTransactionId());
+            for (int i = 1; i <= 18; i++) {
+                ps.setString(i, args.get(i - 1));
+            }
+            ps.execute();
+            if (checkIfRowIsPresent(args.get(0))) {
+                System.out.println("RECORD INSERTED " + args.get(0));
+            }
         }
-        ps.execute();
-        if (checkIfRowIsPresent(args.get(0))) {
-            System.out.println("RECORD INSERTED " + args.get(0));
-        }
-
     }
 
     private ArrayList<String> prepareArguments(TransactionRecord input) {
@@ -498,15 +614,24 @@
     }
 
     private String checkIfValueIsUpdated(String key) throws Exception {
-        Connection con = dbConnectionPool.getConnection();
-        PreparedStatement ps = con.prepareStatement("SELECT TARGET_TYPE FROM  TRANSACTIONS WHERE TRANSACTION_ID = ?");
-        ps.setString(1, key);
-        ResultSet rs = ps.executeQuery();
-        while (rs.next()) {
-            String value = rs.getString("TARGET_TYPE");
-            return value;
+        try (
+             Connection con = dbConnectionPool.getConnection();
+             PreparedStatement ps = con.prepareStatement("SELECT TARGET_TYPE,TRANSACTION_ID FROM TRANSACTIONS" +
+                                                         " WHERE TRANSACTION_ID = ?")
+             ) {
+            ps.setString(1, key);
+            try (
+                 ResultSet rs = ps.executeQuery()
+                 ) {
+               while (rs.next()) {
+                   String value = rs.getString("TARGET_TYPE");
+                   String transactionId = rs.getString("TRANSACTION_ID");
+                   System.out.println("Updated data: TRANSACTION_ID: " + transactionId + " TARGET_TYPE: " + value);
+                   return value;
+               }
+               throw new Exception("Value not found");
+            }
         }
-        throw new Exception("Value not found");
     }
 
 
diff --git a/appc-dispatcher/appc-request-handler/appc-request-handler-api/pom.xml b/appc-dispatcher/appc-request-handler/appc-request-handler-api/pom.xml
index c13e6c4..15229dd 100644
--- a/appc-dispatcher/appc-request-handler/appc-request-handler-api/pom.xml
+++ b/appc-dispatcher/appc-request-handler/appc-request-handler-api/pom.xml
@@ -24,12 +24,12 @@
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     <modelVersion>4.0.0</modelVersion>
-	<parent>
-		<groupId>org.onap.appc.parent</groupId>
-		<artifactId>binding-parent</artifactId>
-		<version>1.5.0-SNAPSHOT</version>
-                <relativePath />
-	</parent>
+    <parent>
+        <groupId>org.onap.appc.parent</groupId>
+        <artifactId>binding-parent</artifactId>
+        <version>1.5.0-SNAPSHOT</version>
+        <relativePath />
+    </parent>
 
     <artifactId>appc-request-handler-api</artifactId>
     <packaging>bundle</packaging>
diff --git a/appc-dispatcher/appc-request-handler/appc-request-handler-core/pom.xml b/appc-dispatcher/appc-request-handler/appc-request-handler-core/pom.xml
index 87aad83..f31ef0f 100644
--- a/appc-dispatcher/appc-request-handler/appc-request-handler-core/pom.xml
+++ b/appc-dispatcher/appc-request-handler/appc-request-handler-core/pom.xml
@@ -25,12 +25,12 @@
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 
     <modelVersion>4.0.0</modelVersion>
-	<parent>
-		<groupId>org.onap.appc.parent</groupId>
-		<artifactId>binding-parent</artifactId>
-		<version>1.5.0-SNAPSHOT</version>
-                <relativePath />
-	</parent>
+    <parent>
+        <groupId>org.onap.appc.parent</groupId>
+        <artifactId>binding-parent</artifactId>
+        <version>1.5.0-SNAPSHOT</version>
+        <relativePath />
+    </parent>
 
     <artifactId>appc-request-handler-core</artifactId>
     <packaging>bundle</packaging>
@@ -143,6 +143,11 @@
             <version>${equinox.osgi.version}</version>
             <scope>test</scope>
         </dependency>
+        <dependency>
+            <groupId>org.mockito</groupId>
+            <artifactId>mockito-core</artifactId>
+            <scope>test</scope>
+        </dependency>
     </dependencies>
 
     <build>
diff --git a/appc-dispatcher/appc-request-handler/appc-request-handler-core/src/main/java/org/onap/appc/requesthandler/impl/AbstractRequestHandlerImpl.java b/appc-dispatcher/appc-request-handler/appc-request-handler-core/src/main/java/org/onap/appc/requesthandler/impl/AbstractRequestHandlerImpl.java
index 73c98e9..aa9b42a 100644
--- a/appc-dispatcher/appc-request-handler/appc-request-handler-core/src/main/java/org/onap/appc/requesthandler/impl/AbstractRequestHandlerImpl.java
+++ b/appc-dispatcher/appc-request-handler/appc-request-handler-core/src/main/java/org/onap/appc/requesthandler/impl/AbstractRequestHandlerImpl.java
@@ -2,22 +2,22 @@
  * ============LICENSE_START=======================================================
  * ONAP : APPC
  * ================================================================================
- * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-2019 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
  * Copyright (C) 2017 Amdocs
  * =============================================================================
  * Licensed 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.
- * 
+ *
  * ============LICENSE_END=========================================================
  */
 
@@ -233,7 +233,7 @@
                     dateToStringConverterMillis(endTime));
         }
         try {
-            transactionRecorder.update(record.getTransactionId(), updateColumns);
+            transactionRecorder.update(record.getTransactionId(), record.getRequestId(), updateColumns);
         } catch (APPCException e) {
             logger.error("Error accessing database", e);
         }
diff --git a/appc-dispatcher/appc-workflow-management/appc-workflow-management-api/pom.xml b/appc-dispatcher/appc-workflow-management/appc-workflow-management-api/pom.xml
index 856c135..2f19fe6 100644
--- a/appc-dispatcher/appc-workflow-management/appc-workflow-management-api/pom.xml
+++ b/appc-dispatcher/appc-workflow-management/appc-workflow-management-api/pom.xml
@@ -25,12 +25,12 @@
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     <modelVersion>4.0.0</modelVersion>
-	<parent>
-		<groupId>org.onap.appc.parent</groupId>
-		<artifactId>binding-parent</artifactId>
-		<version>1.5.0-SNAPSHOT</version>
-                <relativePath />
-	</parent>
+    <parent>
+        <groupId>org.onap.appc.parent</groupId>
+        <artifactId>binding-parent</artifactId>
+        <version>1.5.0-SNAPSHOT</version>
+        <relativePath />
+    </parent>
 
     <artifactId>appc-workflow-management-api</artifactId>
     <name>APPC Workflow Management API</name>
diff --git a/appc-dispatcher/appc-workflow-management/appc-workflow-management-core/pom.xml b/appc-dispatcher/appc-workflow-management/appc-workflow-management-core/pom.xml
index 12e99c2..c9c0871 100644
--- a/appc-dispatcher/appc-workflow-management/appc-workflow-management-core/pom.xml
+++ b/appc-dispatcher/appc-workflow-management/appc-workflow-management-core/pom.xml
@@ -25,12 +25,12 @@
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     <modelVersion>4.0.0</modelVersion>
-	<parent>
-		<groupId>org.onap.appc.parent</groupId>
-		<artifactId>binding-parent</artifactId>
-		<version>1.5.0-SNAPSHOT</version>
-                <relativePath />
-	</parent>
+    <parent>
+        <groupId>org.onap.appc.parent</groupId>
+        <artifactId>binding-parent</artifactId>
+        <version>1.5.0-SNAPSHOT</version>
+        <relativePath />
+    </parent>
 
     <artifactId>appc-workflow-management-core</artifactId>
     <packaging>bundle</packaging>
@@ -60,6 +60,11 @@
             <version>${project.version}</version>
         </dependency>
         <dependency>
+            <groupId>org.mockito</groupId>
+            <artifactId>mockito-core</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
             <groupId>org.onap.appc</groupId>
             <artifactId>transaction-recorder</artifactId>
             <version>${project.version}</version>
diff --git a/appc-dispatcher/pom.xml b/appc-dispatcher/pom.xml
index dc62232..be396ee 100644
--- a/appc-dispatcher/pom.xml
+++ b/appc-dispatcher/pom.xml
@@ -43,11 +43,12 @@
             <artifactId>mockito-core</artifactId>
             <scope>test</scope>
         </dependency>
-            <dependency>
+        <dependency>
             <groupId>org.powermock</groupId>
             <artifactId>powermock-api-mockito</artifactId>
-         </dependency>
-         <dependency>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
             <groupId>org.powermock</groupId>
             <artifactId>powermock-module-junit4</artifactId>
             <version>1.6.2</version>
@@ -90,12 +91,12 @@
     </modules>
 
     <dependencyManagement>
-    	<dependencies>
-    	    <dependency>
-            <groupId>org.powermock</groupId>
-            <artifactId>powermock-api-mockito</artifactId>
-            <version>1.6.4</version>
-         </dependency>
-    	</dependencies>
+        <dependencies>
+            <dependency>
+                <groupId>org.powermock</groupId>
+                <artifactId>powermock-api-mockito</artifactId>
+                <version>1.6.4</version>
+            </dependency>
+        </dependencies>
     </dependencyManagement>
 </project>
