This is an automated email from the ASF dual-hosted git repository. ahuber pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/isis.git
commit bf6068e138720fe6bb6de2178a74c3e9a8960564 Author: Andi Huber <[email protected]> AuthorDate: Thu Nov 19 19:29:22 2020 +0100 ISIS-2464: reinstate optimization: only enlist entities that are enabled for auditing --- .../isis/applib/services/metrics/MetricsService.java | 2 -- .../persistence/changetracking/AdapterAndProperty.java | 15 +++------------ .../changetracking/ChangingEntitiesFactory.java | 2 +- .../changetracking/EntityChangeTrackerDefault.java | 14 ++++++-------- .../publish/ChangingEntitiesDispatcherDefault.java | 2 +- .../persistence/IsisPersistenceSessionJdoBase.java | 4 ---- .../isis/testdomain/conf/Configuration_headless.java | 5 ----- 7 files changed, 11 insertions(+), 33 deletions(-) diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/metrics/MetricsService.java b/api/applib/src/main/java/org/apache/isis/applib/services/metrics/MetricsService.java index a81a02e..a6618d0 100644 --- a/api/applib/src/main/java/org/apache/isis/applib/services/metrics/MetricsService.java +++ b/api/applib/src/main/java/org/apache/isis/applib/services/metrics/MetricsService.java @@ -46,8 +46,6 @@ public interface MetricsService { */ // tag::refguide[] int numberEntitiesDirtied(); // <.> - - int numberEntityPropertiesModified(); } // end::refguide[] diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/changetracking/AdapterAndProperty.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/changetracking/AdapterAndProperty.java index a1feab0..34afd73 100644 --- a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/changetracking/AdapterAndProperty.java +++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/changetracking/AdapterAndProperty.java @@ -18,8 +18,6 @@ */ package org.apache.isis.core.runtime.persistence.changetracking; -import java.util.Map; - import org.apache.isis.applib.services.bookmark.Bookmark; import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy; import org.apache.isis.core.metamodel.spec.ManagedObject; @@ -42,22 +40,19 @@ final class AdapterAndProperty { @Getter private final ObjectAssociation property; @Getter private final Bookmark bookmark; @Getter private final String propertyId; - @Getter private final boolean auditDispatchEnabled; private final String bookmarkStr; public static AdapterAndProperty of( final @NonNull ManagedObject adapter, - final @NonNull ObjectAssociation property, - final boolean auditDispatchEnabled) { - return new AdapterAndProperty(adapter, property, auditDispatchEnabled); + final @NonNull ObjectAssociation property) { + return new AdapterAndProperty(adapter, property); } - private AdapterAndProperty(ManagedObject adapter, ObjectAssociation property, boolean auditDispatchEnabled) { + private AdapterAndProperty(ManagedObject adapter, ObjectAssociation property) { this.adapter = adapter; this.property = property; - this.auditDispatchEnabled = auditDispatchEnabled; this.propertyId = property.getId(); this.bookmark = ManagedObjects.bookmarkElseFail(adapter); @@ -74,9 +69,5 @@ final class AdapterAndProperty { return referencedAdapter == null ? null : referencedAdapter.getPojo(); } - public static boolean isAuditDispatchEnabled(final Map.Entry<AdapterAndProperty, ?> enlistedEntry) { - val adapterAndProperty = enlistedEntry.getKey(); - return adapterAndProperty.isAuditDispatchEnabled(); - } } diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/changetracking/ChangingEntitiesFactory.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/changetracking/ChangingEntitiesFactory.java index 0ee6a5b..69f7a52 100644 --- a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/changetracking/ChangingEntitiesFactory.java +++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/changetracking/ChangingEntitiesFactory.java @@ -59,7 +59,7 @@ class ChangingEntitiesFactory { val changingEntities = newChangingEntities( entityChangeTracker.currentInteraction(), entityChangeTracker.numberEntitiesLoaded(), - entityChangeTracker.numberEntityPropertiesModified(), + entityChangeTracker.numberAuditedEntityPropertiesModified(), changeKindByPublishedAdapter); return changingEntities; diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/changetracking/EntityChangeTrackerDefault.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/changetracking/EntityChangeTrackerDefault.java index d6d8e99..459aadd 100644 --- a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/changetracking/EntityChangeTrackerDefault.java +++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/changetracking/EntityChangeTrackerDefault.java @@ -256,7 +256,9 @@ implements + "since changedObjectPropertiesRef was already prepared (memoized) for auditing."); } - val auditDispatchEnabled = AuditableFacet.isAuditingEnabled(entity.getSpecification()); + if(!AuditableFacet.isAuditingEnabled(entity.getSpecification())) { + return; // ignore entities that are not enabled for auditing + } log.debug("enlist entity's property changes for auditing {}", entity); @@ -264,11 +266,10 @@ implements .streamAssociations(Contributed.EXCLUDED) .filter(ObjectAssociation.Predicates.PROPERTIES) .filter(property->!property.isNotPersisted()) - .map(property->AdapterAndProperty.of(entity, property, auditDispatchEnabled)) + .map(property->AdapterAndProperty.of(entity, property)) .filter(aap->!enlistedEntityPropertiesForAuditing.containsKey(aap)) // already enlisted, so ignore .forEach(aap->{ enlistedEntityPropertiesForAuditing.put(aap, pre.apply(aap)); - numberEntityPropertiesModified.increment(); }); } @@ -280,7 +281,6 @@ implements val postValues = enlistedEntityPropertiesForAuditing.entrySet().stream() .peek(this::updatePostOn) // set post values of audits, which have been left empty up to now - .filter(AdapterAndProperty::isAuditDispatchEnabled) .filter(PreAndPostValues::shouldAudit) .map(entry->AuditEntry.of(entry.getKey(), entry.getValue())) .collect(_Sets.toUnmodifiable()); @@ -316,9 +316,8 @@ implements return changeKindByEnlistedAdapter.size(); } - @Override - public int numberEntityPropertiesModified() { - return Math.toIntExact(numberEntityPropertiesModified.longValue()); + int numberAuditedEntityPropertiesModified() { + return getEntityAuditEntries().size(); } // -- ENTITY CHANGE TRACKING @@ -374,7 +373,6 @@ implements } private final LongAdder numberEntitiesLoaded = new LongAdder(); - private final LongAdder numberEntityPropertiesModified = new LongAdder(); @Override public void incrementLoaded() { diff --git a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/publish/ChangingEntitiesDispatcherDefault.java b/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/publish/ChangingEntitiesDispatcherDefault.java index f63e161..6c13e5f 100644 --- a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/publish/ChangingEntitiesDispatcherDefault.java +++ b/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/publish/ChangingEntitiesDispatcherDefault.java @@ -41,7 +41,7 @@ import lombok.RequiredArgsConstructor; import lombok.val; /** - * Wrapper around {@link org.apache.isis.applib.services.audit.EntityAuditListener}. + * Wrapper around {@link org.apache.isis.applib.services.audit.ChangingEntitiesListener}. */ @Service @Named("isisRuntime.ChangingEntitiesDispatcher") diff --git a/persistence/jdo/datanucleus-5/src/main/java/org/apache/isis/persistence/jdo/datanucleus5/persistence/IsisPersistenceSessionJdoBase.java b/persistence/jdo/datanucleus-5/src/main/java/org/apache/isis/persistence/jdo/datanucleus5/persistence/IsisPersistenceSessionJdoBase.java index cf0f7e4..e3cf7cc 100644 --- a/persistence/jdo/datanucleus-5/src/main/java/org/apache/isis/persistence/jdo/datanucleus5/persistence/IsisPersistenceSessionJdoBase.java +++ b/persistence/jdo/datanucleus-5/src/main/java/org/apache/isis/persistence/jdo/datanucleus5/persistence/IsisPersistenceSessionJdoBase.java @@ -29,7 +29,6 @@ import org.apache.isis.applib.services.clock.ClockService; import org.apache.isis.applib.services.factory.FactoryService; import org.apache.isis.applib.services.iactn.InteractionContext; import org.apache.isis.applib.services.inject.ServiceInjector; -import org.apache.isis.applib.services.metrics.MetricsService; import org.apache.isis.applib.services.registry.ServiceRegistry; import org.apache.isis.applib.services.user.UserService; import org.apache.isis.commons.internal.collections._Maps; @@ -71,7 +70,6 @@ abstract class IsisPersistenceSessionJdoBase implements IsisPersistenceSessionJd protected final Supplier<EntityChangeTracker> entityChangeTrackerProvider; protected final Supplier<InteractionContext> interactionContextProvider; - protected final Supplier<MetricsService> metricsServiceProvider; /** * Used to create the {@link #persistenceManager} when {@link #open()}ed. @@ -122,8 +120,6 @@ abstract class IsisPersistenceSessionJdoBase implements IsisPersistenceSessionJd this.interactionContextProvider = ()->lookupService(InteractionContext.class); this.entityChangeTrackerProvider = ()->lookupService(EntityChangeTracker.class); - this.metricsServiceProvider = ()->lookupService(MetricsService.class); - // sub-components this.persistenceQueryFactory = PersistenceQueryFactory.of( diff --git a/regressiontests/stable/src/main/java/org/apache/isis/testdomain/conf/Configuration_headless.java b/regressiontests/stable/src/main/java/org/apache/isis/testdomain/conf/Configuration_headless.java index cca59a4..ce8146a 100644 --- a/regressiontests/stable/src/main/java/org/apache/isis/testdomain/conf/Configuration_headless.java +++ b/regressiontests/stable/src/main/java/org/apache/isis/testdomain/conf/Configuration_headless.java @@ -171,11 +171,6 @@ public class Configuration_headless { return 0; } - @Override - public int numberEntityPropertiesModified() { - return 0; - } - }; }
