You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by da...@apache.org on 2018/02/12 17:38:08 UTC

[isis] 03/03: ISIS-1569: suppresses possible concurrency exceptions when auditing pre-commit.

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

danhaywood pushed a commit to branch maint-1.16.1
in repository https://gitbox.apache.org/repos/asf/isis.git

commit c2026ee3cbbbdf6e6a413017a8cd4440bca72c4a
Author: Dan Haywood <da...@haywood-associates.co.uk>
AuthorDate: Mon Feb 12 17:37:47 2018 +0000

    ISIS-1569: suppresses possible concurrency exceptions when auditing pre-commit.
---
 .../changes/ChangedObjectsServiceInternal.java     | 52 ++++++++++++----------
 1 file changed, 29 insertions(+), 23 deletions(-)

diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/changes/ChangedObjectsServiceInternal.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/services/changes/ChangedObjectsServiceInternal.java
index 3611706..e704874 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/changes/ChangedObjectsServiceInternal.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/services/changes/ChangedObjectsServiceInternal.java
@@ -21,6 +21,7 @@ package org.apache.isis.core.runtime.services.changes;
 import java.util.Collections;
 import java.util.Map;
 import java.util.Set;
+import java.util.concurrent.Callable;
 
 import javax.enterprise.context.RequestScoped;
 
@@ -34,6 +35,7 @@ import org.apache.isis.applib.annotation.PublishedObject;
 import org.apache.isis.applib.services.HasTransactionId;
 import org.apache.isis.applib.services.WithTransactionScope;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.feature.Contributed;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAssociation;
@@ -226,31 +228,35 @@ public class ChangedObjectsServiceInternal implements WithTransactionScope {
     }
 
     private Set<Map.Entry<AdapterAndProperty, PreAndPostValues>> capturePostValuesAndDrain(final Map<AdapterAndProperty, PreAndPostValues> changedObjectProperties) {
-        final Map<AdapterAndProperty, PreAndPostValues> processedObjectProperties = Maps.newLinkedHashMap();
-
-        while(!changedObjectProperties.isEmpty()) {
-
-            final Set<AdapterAndProperty> keys = Sets.newLinkedHashSet(changedObjectProperties.keySet());
-            for (final AdapterAndProperty aap : keys) {
-
-                final PreAndPostValues papv = changedObjectProperties.remove(aap);
-
-                final ObjectAdapter adapter = aap.getAdapter();
-                if(adapter.isDestroyed()) {
-                    // don't touch the object!!!
-                    // JDO, for example, will complain otherwise...
-                    papv.setPost(IsisTransaction.Placeholder.DELETED);
-                } else {
-                    papv.setPost(aap.getPropertyValue());
+        return AdapterManager.ConcurrencyChecking.executeWithConcurrencyCheckingDisabled(new Callable<Set<Map.Entry<AdapterAndProperty, PreAndPostValues>>>() {
+            @Override
+            public Set<Map.Entry<AdapterAndProperty, PreAndPostValues>> call() {
+                final Map<AdapterAndProperty, PreAndPostValues> processedObjectProperties = Maps.newLinkedHashMap();
+
+                while(!changedObjectProperties.isEmpty()) {
+
+                    final Set<AdapterAndProperty> keys = Sets.newLinkedHashSet(changedObjectProperties.keySet());
+                    for (final AdapterAndProperty aap : keys) {
+
+                        final PreAndPostValues papv = changedObjectProperties.remove(aap);
+
+                        final ObjectAdapter adapter = aap.getAdapter();
+                        if(adapter.isDestroyed()) {
+                            // don't touch the object!!!
+                            // JDO, for example, will complain otherwise...
+                            papv.setPost(IsisTransaction.Placeholder.DELETED);
+                        } else {
+                            papv.setPost(aap.getPropertyValue());
+                        }
+
+                        // if we encounter the same objectProperty again, this will simply overwrite it
+                        processedObjectProperties.put(aap, papv);
+                    }
                 }
 
-                // if we encounter the same objectProperty again, this will simply overwrite it
-                processedObjectProperties.put(aap, papv);
-            }
-        }
-
-        return Collections.unmodifiableSet(
-                Sets.filter(processedObjectProperties.entrySet(), PreAndPostValues.Predicates.SHOULD_AUDIT));
+                return Collections.unmodifiableSet(
+                        Sets.filter(processedObjectProperties.entrySet(), PreAndPostValues.Predicates.SHOULD_AUDIT));            }
+        });
     }
 
     protected boolean shouldIgnore(final ObjectAdapter adapter) {

-- 
To stop receiving notification emails like this one, please contact
danhaywood@apache.org.