diff --git a/product/CMFActivity/Activity/SQLDict.py b/product/CMFActivity/Activity/SQLDict.py
index 8d31df784ecfa2737f150e5fb061f80eab929975..c595c239b85d738bee920d417b2b3ae104879ef3 100644
--- a/product/CMFActivity/Activity/SQLDict.py
+++ b/product/CMFActivity/Activity/SQLDict.py
@@ -373,13 +373,17 @@ class SQLDict(RAMDict, SQLBase):
         LOG('SQLDict', PANIC, 'Failed to unreserve %r' % (make_available_uid_list, ), error=sys.exc_info())
       else:
         LOG('SQLDict', TRACE, 'Freed messages %r' % (make_available_uid_list, ))
-    for m in notify_user_list:
-      m.notifyUser(activity_tool)
-    for m in message_with_active_process_list:
-      active_process = activity_tool.unrestrictedTraverse(m.active_process)
-      if not active_process.hasActivity():
-        # No more activity
-        m.notifyUser(activity_tool, message="Process Finished") # XXX commit bas ???
+    try:
+      for m in notify_user_list:
+        m.notifyUser(activity_tool)
+      for m in message_with_active_process_list:
+        active_process = activity_tool.unrestrictedTraverse(m.active_process)
+        if not active_process.hasActivity():
+          # No more activity
+          m.notifyUser(activity_tool, message="Process Finished") # XXX commit bas ???
+    except:
+      # Notification failures must not cause this method to raise.
+      LOG('SQLDict', WARNING, 'Exception during notification phase of finalizeMessageExecution', error=sys.exc_info())
 
   # Queue semantic
   def dequeueMessage(self, activity_tool, processing_node):
diff --git a/product/CMFActivity/Activity/SQLQueue.py b/product/CMFActivity/Activity/SQLQueue.py
index 750455d683970773e10e9633e64179986f2e3d7e..60c20dd958f899fb18e51b9b6feffeb9af3f5eb7 100644
--- a/product/CMFActivity/Activity/SQLQueue.py
+++ b/product/CMFActivity/Activity/SQLQueue.py
@@ -244,14 +244,17 @@ class SQLQueue(RAMQueue, SQLBase):
                                              processing_node=INVOKE_ERROR_STATE)
       except:
         LOG('SQLQueue', PANIC, 'Failed to set message to error state for %r' % (final_error_uid_list, ), error=sys.exc_info())
-    for m in notify_user_list:
-      m.notifyUser(activity_tool)
-    for m in message_with_active_process_list:
-      active_process = activity_tool.unrestrictedTraverse(m.active_process)
-      if not active_process.hasActivity():
-        # No more activity
-        m.notifyUser(activity_tool, message="Process Finished") # XXX commit bas ???
-
+    try:
+      for m in notify_user_list:
+        m.notifyUser(activity_tool)
+      for m in message_with_active_process_list:
+        active_process = activity_tool.unrestrictedTraverse(m.active_process)
+        if not active_process.hasActivity():
+          # No more activity
+          m.notifyUser(activity_tool, message="Process Finished") # XXX commit bas ???
+    except:
+      # Notification failures must not cause this method to raise.
+      LOG('SQLQueue', WARNING, 'Exception during notification phase of finalizeMessageExecution', error=sys.exc_info())
 
   def dequeueMessage(self, activity_tool, processing_node):
     def makeMessageListAvailable(uid_list):