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/01/03 11:37:32 UTC
[isis] branch master updated: ISIS-1729: improves the auditer
service spi so that it ignores objects that are created and then deleted in
the same xactn
This is an automated email from the ASF dual-hosted git repository.
danhaywood 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 f136d19 ISIS-1729: improves the auditer service spi so that it ignores objects that are created and then deleted in the same xactn
f136d19 is described below
commit f136d1948705141f1552459ff44fcc5449c6e159
Author: Dan Haywood <da...@haywood-associates.co.uk>
AuthorDate: Wed Jan 3 10:04:41 2018 +0000
ISIS-1729: improves the auditer service spi so that it ignores objects that are created and then deleted in the same xactn
---
.../changes/ChangedObjectsServiceInternal.java | 6 +--
.../runtime/services/changes/PreAndPostValues.java | 12 ++++--
.../changes/PreAndPostValues_shouldAudit_Test.java | 47 ++++++++++++++++++++++
.../src/main/webapp/WEB-INF/logging.properties | 26 +++++++-----
.../modules/simple/dom/impl/SimpleObjects.java | 15 +++++++
.../src/main/webapp/WEB-INF/logging.properties | 26 +++++++-----
6 files changed, 106 insertions(+), 26 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 063aaa6..3611706 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
@@ -226,7 +226,7 @@ public class ChangedObjectsServiceInternal implements WithTransactionScope {
}
private Set<Map.Entry<AdapterAndProperty, PreAndPostValues>> capturePostValuesAndDrain(final Map<AdapterAndProperty, PreAndPostValues> changedObjectProperties) {
- final Map<AdapterAndProperty, PreAndPostValues> processedObjectProperties1 = Maps.newLinkedHashMap();
+ final Map<AdapterAndProperty, PreAndPostValues> processedObjectProperties = Maps.newLinkedHashMap();
while(!changedObjectProperties.isEmpty()) {
@@ -245,12 +245,12 @@ public class ChangedObjectsServiceInternal implements WithTransactionScope {
}
// if we encounter the same objectProperty again, this will simply overwrite it
- processedObjectProperties1.put(aap, papv);
+ processedObjectProperties.put(aap, papv);
}
}
return Collections.unmodifiableSet(
- Sets.filter(processedObjectProperties1.entrySet(), PreAndPostValues.Predicates.CHANGED));
+ Sets.filter(processedObjectProperties.entrySet(), PreAndPostValues.Predicates.SHOULD_AUDIT));
}
protected boolean shouldIgnore(final ObjectAdapter adapter) {
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/changes/PreAndPostValues.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/services/changes/PreAndPostValues.java
index 4a5cb39..73559e3 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/changes/PreAndPostValues.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/services/changes/PreAndPostValues.java
@@ -28,11 +28,11 @@ import org.apache.isis.core.runtime.system.transaction.IsisTransaction;
public class PreAndPostValues {
public static class Predicates {
- public final static Predicate<Map.Entry<?, PreAndPostValues>> CHANGED = new Predicate<Map.Entry<?, PreAndPostValues>>() {
+ public final static Predicate<Map.Entry<?, PreAndPostValues>> SHOULD_AUDIT = new Predicate<Map.Entry<?, PreAndPostValues>>() {
@Override
public boolean apply(Map.Entry<?, PreAndPostValues> input) {
final PreAndPostValues papv = input.getValue();
- return papv.differ();
+ return papv.shouldAudit();
}
};
}
@@ -95,10 +95,16 @@ public class PreAndPostValues {
return getPre() + " -> " + getPost();
}
- public boolean differ() {
+ public boolean shouldAudit() {
+ // don't audit objects that were created and then immediately deleted within the same xactn
+ if (getPre() == IsisTransaction.Placeholder.NEW && getPost() == IsisTransaction.Placeholder.DELETED) {
+ return false;
+ }
+ // but do always audit objects that have just been created or deleted
if (getPre() == IsisTransaction.Placeholder.NEW || getPost() == IsisTransaction.Placeholder.DELETED) {
return true;
}
+ // else - for updated objects - audit only if the property value has changed
return !Objects.equal(getPre(), getPost());
}
}
diff --git a/core/runtime/src/test/java/org/apache/isis/core/runtime/services/changes/PreAndPostValues_shouldAudit_Test.java b/core/runtime/src/test/java/org/apache/isis/core/runtime/services/changes/PreAndPostValues_shouldAudit_Test.java
new file mode 100644
index 0000000..14252f9
--- /dev/null
+++ b/core/runtime/src/test/java/org/apache/isis/core/runtime/services/changes/PreAndPostValues_shouldAudit_Test.java
@@ -0,0 +1,47 @@
+package org.apache.isis.core.runtime.services.changes;
+
+import org.junit.Test;
+
+import org.apache.isis.core.runtime.system.transaction.IsisTransaction;
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+public class PreAndPostValues_shouldAudit_Test {
+
+ @Test
+ public void just_created() {
+ final PreAndPostValues papv = PreAndPostValues.pre(IsisTransaction.Placeholder.NEW);
+ papv.setPost("Foo");
+
+ assertTrue(papv.shouldAudit());
+ }
+ @Test
+ public void just_deleted() {
+ final PreAndPostValues papv = PreAndPostValues.pre("Foo");
+ papv.setPost(IsisTransaction.Placeholder.DELETED);
+
+ assertTrue(papv.shouldAudit());
+ }
+ @Test
+ public void changed() {
+ final PreAndPostValues papv = PreAndPostValues.pre("Foo");
+ papv.setPost("Bar");
+
+ assertTrue(papv.shouldAudit());
+ }
+ @Test
+ public void unchanged() {
+ final PreAndPostValues papv = PreAndPostValues.pre("Foo");
+ papv.setPost("Foo");
+
+ assertFalse(papv.shouldAudit());
+ }
+ @Test
+ public void created_and_then_deleted() {
+ final PreAndPostValues papv = PreAndPostValues.pre(IsisTransaction.Placeholder.NEW);
+ papv.setPost(IsisTransaction.Placeholder.DELETED);
+
+ assertFalse(papv.shouldAudit());
+ }
+}
\ No newline at end of file
diff --git a/example/application/helloworld/src/main/webapp/WEB-INF/logging.properties b/example/application/helloworld/src/main/webapp/WEB-INF/logging.properties
index 53bb3da..ded0152 100644
--- a/example/application/helloworld/src/main/webapp/WEB-INF/logging.properties
+++ b/example/application/helloworld/src/main/webapp/WEB-INF/logging.properties
@@ -44,11 +44,17 @@ log4j.appender.File.append=false
log4j.appender.File.layout=org.apache.log4j.PatternLayout
log4j.appender.File.layout.ConversionPattern=%d [%-20c{1} %-10t %-5p] %m%n
-log4j.appender.sql=org.apache.log4j.RollingFileAppender
-log4j.appender.sql.File=./logs/sql.log
-log4j.appender.sql.Append=false
-log4j.appender.sql.layout=org.apache.log4j.PatternLayout
-log4j.appender.sql.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss.SSS} %m%n
+log4j.appender.sql-dml=org.apache.log4j.RollingFileAppender
+log4j.appender.sql-dml.File=./logs/sql-dml.log
+log4j.appender.sql-dml.Append=false
+log4j.appender.sql-dml.layout=org.apache.log4j.PatternLayout
+log4j.appender.sql-dml.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss.SSS} %m%n
+
+log4j.appender.sql-ddl=org.apache.log4j.RollingFileAppender
+log4j.appender.sql-ddl.File=./logs/sql-ddl.log
+log4j.appender.sql-ddl.Append=false
+log4j.appender.sql-ddl.layout=org.apache.log4j.PatternLayout
+log4j.appender.sql-ddl.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss.SSS} %m%n
log4j.appender.sqltiming=org.apache.log4j.RollingFileAppender
log4j.appender.sqltiming.File=./logs/sqltiming.log
@@ -105,10 +111,10 @@ log4j.additivity.org.apache.isis.applib.services.audit.AuditerServiceLogging=fal
# DataNucleus
# the first two log the DML and DDL (if set to DEBUG)
-log4j.logger.DataNucleus.Datastore.Native=DEBUG, Console, sql
-log4j.logger.DataNucleus.Datastore.Schema=DEBUG, Console, sql
-#log4j.logger.DataNucleus.Datastore.Native=WARN, Console
-#log4j.logger.DataNucleus.Datastore.Schema=WARN, Console
+log4j.logger.DataNucleus.Datastore.Native=DEBUG, Console, sql-dml
+log4j.logger.DataNucleus.Datastore.Schema=DEBUG, Console, sql-ddl
+#log4j.logger.DataNucleus.Datastore.Native=WARN, Console, sql-dml
+#log4j.logger.DataNucleus.Datastore.Schema=WARN, Console, sql-ddl
# the remainder can probably be left to WARN
log4j.logger.DataNucleus.Persistence=WARN, Console
log4j.logger.DataNucleus.Transaction=WARN, Console
@@ -152,7 +158,7 @@ log4j.additivity.DataNucleus.Datastore.IDE=false
# if using log4jdbc-remix as JDBC driver
-#log4j.logger.jdbc.sqlonly=DEBUG, sql, Console
+#log4j.logger.jdbc.sqlonly=DEBUG, sql-dml, Console
#log4j.additivity.jdbc.sqlonly=false
#log4j.logger.jdbc.resultsettable=DEBUG, jdbc, Console
#log4j.additivity.jdbc.resultsettable=false
diff --git a/example/application/simpleapp/module-simple/src/main/java/domainapp/modules/simple/dom/impl/SimpleObjects.java b/example/application/simpleapp/module-simple/src/main/java/domainapp/modules/simple/dom/impl/SimpleObjects.java
index f216f8a..e245dbb 100644
--- a/example/application/simpleapp/module-simple/src/main/java/domainapp/modules/simple/dom/impl/SimpleObjects.java
+++ b/example/application/simpleapp/module-simple/src/main/java/domainapp/modules/simple/dom/impl/SimpleObjects.java
@@ -35,6 +35,7 @@ import org.apache.isis.applib.annotation.SemanticsOf;
import org.apache.isis.applib.services.eventbus.ActionDomainEvent;
import org.apache.isis.applib.services.jdosupport.IsisJdoSupport;
import org.apache.isis.applib.services.repository.RepositoryService;
+import org.apache.isis.applib.services.xactn.TransactionService;
@DomainService(
nature = NatureOfService.VIEW_MENU_ONLY,
@@ -92,6 +93,20 @@ public class SimpleObjects {
return repositoryService.persist(new SimpleObject(name));
}
+ @Action
+ @MemberOrder(sequence = "4")
+ public void createAndDelete(
+ @ParameterLayout(named="Name")
+ final String name) {
+ final SimpleObject simpleObject = create(name);
+ transactionService.nextTransaction();
+ simpleObject.delete();
+ transactionService.nextTransaction();
+ }
+
+ @javax.inject.Inject
+ TransactionService transactionService;
+
@javax.inject.Inject
RepositoryService repositoryService;
diff --git a/example/application/simpleapp/webapp/src/main/webapp/WEB-INF/logging.properties b/example/application/simpleapp/webapp/src/main/webapp/WEB-INF/logging.properties
index 53bb3da..ded0152 100644
--- a/example/application/simpleapp/webapp/src/main/webapp/WEB-INF/logging.properties
+++ b/example/application/simpleapp/webapp/src/main/webapp/WEB-INF/logging.properties
@@ -44,11 +44,17 @@ log4j.appender.File.append=false
log4j.appender.File.layout=org.apache.log4j.PatternLayout
log4j.appender.File.layout.ConversionPattern=%d [%-20c{1} %-10t %-5p] %m%n
-log4j.appender.sql=org.apache.log4j.RollingFileAppender
-log4j.appender.sql.File=./logs/sql.log
-log4j.appender.sql.Append=false
-log4j.appender.sql.layout=org.apache.log4j.PatternLayout
-log4j.appender.sql.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss.SSS} %m%n
+log4j.appender.sql-dml=org.apache.log4j.RollingFileAppender
+log4j.appender.sql-dml.File=./logs/sql-dml.log
+log4j.appender.sql-dml.Append=false
+log4j.appender.sql-dml.layout=org.apache.log4j.PatternLayout
+log4j.appender.sql-dml.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss.SSS} %m%n
+
+log4j.appender.sql-ddl=org.apache.log4j.RollingFileAppender
+log4j.appender.sql-ddl.File=./logs/sql-ddl.log
+log4j.appender.sql-ddl.Append=false
+log4j.appender.sql-ddl.layout=org.apache.log4j.PatternLayout
+log4j.appender.sql-ddl.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss.SSS} %m%n
log4j.appender.sqltiming=org.apache.log4j.RollingFileAppender
log4j.appender.sqltiming.File=./logs/sqltiming.log
@@ -105,10 +111,10 @@ log4j.additivity.org.apache.isis.applib.services.audit.AuditerServiceLogging=fal
# DataNucleus
# the first two log the DML and DDL (if set to DEBUG)
-log4j.logger.DataNucleus.Datastore.Native=DEBUG, Console, sql
-log4j.logger.DataNucleus.Datastore.Schema=DEBUG, Console, sql
-#log4j.logger.DataNucleus.Datastore.Native=WARN, Console
-#log4j.logger.DataNucleus.Datastore.Schema=WARN, Console
+log4j.logger.DataNucleus.Datastore.Native=DEBUG, Console, sql-dml
+log4j.logger.DataNucleus.Datastore.Schema=DEBUG, Console, sql-ddl
+#log4j.logger.DataNucleus.Datastore.Native=WARN, Console, sql-dml
+#log4j.logger.DataNucleus.Datastore.Schema=WARN, Console, sql-ddl
# the remainder can probably be left to WARN
log4j.logger.DataNucleus.Persistence=WARN, Console
log4j.logger.DataNucleus.Transaction=WARN, Console
@@ -152,7 +158,7 @@ log4j.additivity.DataNucleus.Datastore.IDE=false
# if using log4jdbc-remix as JDBC driver
-#log4j.logger.jdbc.sqlonly=DEBUG, sql, Console
+#log4j.logger.jdbc.sqlonly=DEBUG, sql-dml, Console
#log4j.additivity.jdbc.sqlonly=false
#log4j.logger.jdbc.resultsettable=DEBUG, jdbc, Console
#log4j.additivity.jdbc.resultsettable=false
--
To stop receiving notification emails like this one, please contact
['"commits@isis.apache.org" <co...@isis.apache.org>'].