diff --git a/src/org/openbravo/externaldata/integration/process/ProcessRequest.java b/src/org/openbravo/externaldata/integration/process/ProcessRequest.java
--- a/src/org/openbravo/externaldata/integration/process/ProcessRequest.java
+++ b/src/org/openbravo/externaldata/integration/process/ProcessRequest.java
@@ -505,15 +505,10 @@
           endProcess(config);
         }
       }
-    } catch (OBException e) {
-      log4j.error("Error processing request line", e);
-      error = true;
-      status = STATUS_ERROR;
-      errorMsg = e.getMessage();
     } catch (Exception e) {
       try {
-        SessionHandler.getInstance().getConnection().rollback();
-      } catch (SQLException e1) {
+        OBDal.getInstance().rollbackAndClose();
+      } catch (Exception e1) {
         log4j.error("Error while doing rollback.", e1);
       }
       log4j.error("Unhandled exception processing request line", e);
@@ -537,29 +532,35 @@
   private void updateRequestLineAndRequestStatus(String status, String errorMsg,
       Date executionDate) {
     ReentrantLock lock = null;
+    String requestId = request.getId();
+    String requestLineId = requestLine != null ? requestLine.getId() : null;
     try {
       lock = lockByEdlProcess();
 
+      if (STATUS_ERROR.equals(status)) {
+        // reload the EDL request because the transaction has been rolled back due to an error
+        request = OBDal.getInstance().get(OBEDLRequest.class, requestId);
+      }
+
       request.setExecutionDate(executionDate);
-      if (requestLine != null) {
-        OBDal.getInstance()
-            .getSession()
-            .buildLockRequest(LockOptions.NONE)
-            .lock(OBEDLRequestLine.ENTITY_NAME, requestLine);
+      if (requestLineId != null) {
+        requestLine = OBDal.getInstance().get(OBEDLRequestLine.class, requestLineId);
         requestLine.setStatus(status);
         requestLine.setErrorMsg(EDLUtils.getSafeEDLRequestLineErrorMessage(errorMsg));
+      }
 
-        OBDal.getInstance().save(requestLine);
-        OBDal.getInstance().flush();
-      }
       doCommit();
       updateRequestStatus();
       doCommit();
+    } catch (Exception ex) {
+      log4j.error("Error updating status: Request = {}, Request Line = {}, Status = {}", requestId,
+          requestLineId, status, ex);
     } finally {
       if (lock != null) {
         unlockByEdlProcess(lock);
       }
     }
+
   }
 
   private void unlockByEdlProcess(ReentrantLock lock) {
