You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by ah...@apache.org on 2021/04/02 14:31:46 UTC
[isis] branch master updated: ISIS-2573: xray: prepare to have a
closer look into change enlisting
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
The following commit(s) were added to refs/heads/master by this push:
new d1a7ac6 ISIS-2573: xray: prepare to have a closer look into change enlisting
d1a7ac6 is described below
commit d1a7ac64bcf3ad4052bdc005c71956827ddcd6fc
Author: Andi Huber <ah...@apache.org>
AuthorDate: Fri Apr 2 16:31:33 2021 +0200
ISIS-2573: xray: prepare to have a closer look into change enlisting
---
.../changetracking/EntityChangeTrackerDefault.java | 26 ++++++++++++----------
.../core/transaction/changetracking/_Xray.java | 13 ++++++++++-
2 files changed, 26 insertions(+), 13 deletions(-)
diff --git a/core/transaction/src/main/java/org/apache/isis/core/transaction/changetracking/EntityChangeTrackerDefault.java b/core/transaction/src/main/java/org/apache/isis/core/transaction/changetracking/EntityChangeTrackerDefault.java
index 9c392bf..ace47ef 100644
--- a/core/transaction/src/main/java/org/apache/isis/core/transaction/changetracking/EntityChangeTrackerDefault.java
+++ b/core/transaction/src/main/java/org/apache/isis/core/transaction/changetracking/EntityChangeTrackerDefault.java
@@ -106,12 +106,13 @@ implements
/**
- * Used for publishing: this contains the pre- values of every property of every object enlisted.
+ * Contains initial change records having set the pre-values of every property of every object that was enlisted.
*/
private final Set<_PropertyChangeRecord> entityPropertyChangeRecords = _Sets.newLinkedHashSet();
/**
- * Used for publishing; contains the pre- and post- values of every property of every object that actually changed.
+ * Contains pre- and post- values of every property of every object that actually changed. A lazy snapshot,
+ * triggered by internal call to {@link #snapshotPropertyChangeRecords()}.
*/
private final _Lazy<Set<_PropertyChangeRecord>> entityPropertyChangeRecordsForPublishing
= _Lazy.threadSafe(this::capturePostValuesAndDrain);
@@ -130,7 +131,7 @@ implements
return;
}
enlistForChangeKindPublishing(adapter, EntityChangeKind.CREATE);
- enlistForPreAndPostValueAuditing(adapter, record->record.setPreValue(IsisTransactionPlaceholder.NEW));
+ enlistForPreAndPostValuePublishing(adapter, record->record.setPreValue(IsisTransactionPlaceholder.NEW));
}
private void enlistUpdatingInternal(final @NonNull ManagedObject adapter) {
@@ -138,7 +139,7 @@ implements
return;
}
enlistForChangeKindPublishing(adapter, EntityChangeKind.UPDATE);
- enlistForPreAndPostValueAuditing(adapter, _PropertyChangeRecord::updatePreValue);
+ enlistForPreAndPostValuePublishing(adapter, _PropertyChangeRecord::updatePreValue);
}
private void enlistDeletingInternal(final @NonNull ManagedObject adapter) {
@@ -147,11 +148,11 @@ implements
}
final boolean enlisted = enlistForChangeKindPublishing(adapter, EntityChangeKind.DELETE);
if(enlisted) {
- enlistForPreAndPostValueAuditing(adapter, _PropertyChangeRecord::updatePreValue);
+ enlistForPreAndPostValuePublishing(adapter, _PropertyChangeRecord::updatePreValue);
}
}
- private Set<_PropertyChangeRecord> getPropertyChangeRecords() {
+ private Set<_PropertyChangeRecord> snapshotPropertyChangeRecords() {
// this code path has side-effects, it locks the result for this transaction,
// such that cannot enlist on top of it
return entityPropertyChangeRecordsForPublishing.get();
@@ -181,7 +182,6 @@ implements
@EventListener(value = TransactionBeforeCompletionEvent.class)
public void onTransactionCompleting(TransactionBeforeCompletionEvent event) {
try {
- _Xray.publish(interactionContextProvider, authenticationContextProvider);
doPublish();
} finally {
postPublishing();
@@ -189,6 +189,8 @@ implements
}
private void doPublish() {
+ _Xray.publish(this, interactionContextProvider, authenticationContextProvider);
+
log.debug("about to publish entity changes");
entityPropertyChangePublisher.publishChangedProperties(this);
entityChangesPublisher.publishChangingEntities(this);
@@ -264,7 +266,7 @@ implements
return previousChangeKind == null;
}
- private void enlistForPreAndPostValueAuditing(
+ private void enlistForPreAndPostValuePublishing(
final ManagedObject entity,
final Consumer<_PropertyChangeRecord> fun) {
@@ -286,14 +288,14 @@ implements
*/
private Set<_PropertyChangeRecord> capturePostValuesAndDrain() {
- val postValues = entityPropertyChangeRecords.stream()
+ val records = entityPropertyChangeRecords.stream()
.peek(managedProperty->managedProperty.updatePostValue()) // set post values, which have been left empty up to now
.filter(managedProperty->managedProperty.getPreAndPostValue().shouldPublish())
.collect(_Sets.toUnmodifiable());
entityPropertyChangeRecords.clear();
- return postValues;
+ return records;
}
@@ -310,7 +312,7 @@ implements
}
int propertyChangeRecordCount() {
- return getPropertyChangeRecords().size();
+ return snapshotPropertyChangeRecords().size();
}
// -- ENTITY CHANGE TRACKING
@@ -407,7 +409,7 @@ implements
final String userName,
final TransactionId txId) {
- return getPropertyChangeRecords().stream()
+ return snapshotPropertyChangeRecords().stream()
.map(propertyChangeRecord->_EntityPropertyChangeFactory
.createEntityPropertyChange(timestamp, userName, txId, propertyChangeRecord))
.collect(Can.toCan());
diff --git a/core/transaction/src/main/java/org/apache/isis/core/transaction/changetracking/_Xray.java b/core/transaction/src/main/java/org/apache/isis/core/transaction/changetracking/_Xray.java
index 0748cbf..596d74d 100644
--- a/core/transaction/src/main/java/org/apache/isis/core/transaction/changetracking/_Xray.java
+++ b/core/transaction/src/main/java/org/apache/isis/core/transaction/changetracking/_Xray.java
@@ -18,6 +18,8 @@
*/
package org.apache.isis.core.transaction.changetracking;
+import java.awt.Color;
+
import javax.inject.Provider;
import org.apache.isis.applib.services.iactn.InteractionContext;
@@ -32,6 +34,7 @@ import lombok.val;
final class _Xray {
public static void publish(
+ final EntityChangeTrackerDefault entityChangeTrackerDefault,
final Provider<InteractionContext> iaContextProvider,
final Provider<AuthenticationContext> authContextProvider) {
@@ -39,7 +42,10 @@ final class _Xray {
return;
}
- val enteringLabel = String.format("do publish");
+ final int propertyChangeRecordCount = entityChangeTrackerDefault.propertyChangeRecordCount();
+
+ val enteringLabel = String.format("do publish %d entity change records",
+ propertyChangeRecordCount);
XrayUtil.createSequenceHandle(iaContextProvider.get(), authContextProvider.get(), "ec-tracker")
.ifPresent(handle->{
@@ -48,6 +54,11 @@ final class _Xray {
sequenceData.alias("ec-tracker", "EntityChange-\nTracker-\n(Default)");
+ if(propertyChangeRecordCount==0) {
+ sequenceData.setConnectionArrowColor(Color.GRAY);
+ sequenceData.setConnectionLabelColor(Color.GRAY);
+ }
+
val callee = handle.getCallees().getFirstOrFail();
sequenceData.enter(handle.getCaller(), callee, enteringLabel);
//sequenceData.activate(callee);