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 2022/07/22 15:15:03 UTC

[isis] branch ISIS-3091 updated: ISIS-3091: renames audittrail and sessionlog under 'extensions' subpackage; fleshes out integ tests

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

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


The following commit(s) were added to refs/heads/ISIS-3091 by this push:
     new 614033b1fd ISIS-3091: renames audittrail and sessionlog under 'extensions' subpackage; fleshes out integ tests
614033b1fd is described below

commit 614033b1fd8061cf861c37607dfcf5f99c70ad88
Author: Dan Haywood <da...@haywood-associates.co.uk>
AuthorDate: Fri Jul 22 16:14:54 2022 +0100

    ISIS-3091: renames audittrail and sessionlog under 'extensions' subpackage; fleshes out integ tests
---
 .../integtest/CommandLog_IntegTestAbstract.java    |   1 -
 .../applib/IsisModuleExtAuditTrailApplib.java      |   6 +-
 .../audittrail/applib/app/AuditTrailMenu.java      |   8 +-
 .../HasInteractionId_auditTrailEntries.java        |  12 +--
 .../Object_recentAuditTrailEntries.java            |   9 +-
 .../audittrail/applib/dom/AuditTrailEntry.java     |   4 +-
 .../applib/dom/AuditTrailEntry.layout.fallback.xml |   0
 .../audittrail/applib/dom/AuditTrailEntry.png      | Bin
 .../applib/dom/AuditTrailEntryRepository.java      |  28 ++++--
 ...ntityPropertyChangeSubscriberForAuditTrail.java |  10 +--
 .../applib/AuditTrailIntegTestAbstract.java        |  50 -----------
 .../integtests/AuditTrail_IntegTestAbstract.java   |  97 +++++++++++++++++++++
 .../model/AuditTrailTestDomainModel.java}          |  11 +--
 .../applib/integtests/model/Counter.java           |  76 ++++++++++++++++
 .../applib/integtests/model/CounterRepository.java |  56 ++++++++++++
 .../integtests/model/Counter_bumpUsingMixin.java}  |  19 ++--
 ...mpUsingMixinWithCommandPublishingDisabled.java} |  19 ++--
 .../security/audittrail/persistence-jdo/pom.xml    |   2 +
 .../jdo/IsisModuleExtAuditTrailPersistenceJdo.java |   2 +-
 .../isis/audittrail/jdo/dom/AuditTrailEntry.java   |   4 +-
 .../jdo/dom/AuditTrailEntryRepository.java         |   4 +-
 .../jdo/integtests}/AuditTrail_IntegTest.java      |  13 ++-
 .../audittrail/jdo/integtests/model/Counter.java   |  64 ++++++++++++++
 .../jdo/integtests/model/CounterRepository.java}   |  13 +--
 .../jpa/IsisModuleExtAuditTrailPersistenceJpa.java |   9 +-
 .../audittrail/jpa/dom/AuditTrailEntry.java        |   8 +-
 .../jpa/dom/AuditTrailEntryRepository.java         |   6 +-
 .../jpa/integtests}/AuditTrail_IntegTest.java      |  26 +++++-
 .../audittrail/jpa/integtests/model/Counter.java   |  70 +++++++++++++++
 .../jpa/integtests/model/CounterRepository.java}   |  14 +--
 .../applib/IsisModuleExtSessionLogApplib.java      |   8 +-
 .../sessionlog/applib/app/SessionLogMenu.java      |   8 +-
 .../HasUsername_recentSessionsForUser.java         |   8 +-
 .../applib/dom/SessionLogEntry-expired.png         | Bin
 .../applib/dom/SessionLogEntry-login.png           | Bin
 .../applib/dom/SessionLogEntry-logout.png          | Bin
 .../sessionlog/applib/dom/SessionLogEntry.java     |   7 +-
 .../applib/dom/SessionLogEntry.layout.fallback.xml |   0
 .../applib/dom/SessionLogEntryRepository.java      |   2 +-
 .../spiimpl/SessionLogServiceInitializer.java      |   6 +-
 .../spiimpl/SessionSubscriberForSessionLog.java    |   8 +-
 .../integtests}/SessionLogIntegTestAbstract.java   |   6 +-
 .../jdo/IsisModuleExtSessionLogPersistenceJdo.java |   8 +-
 .../sessionlog/jdo/dom/SessionLogEntry.java        |   8 +-
 .../jdo}/dom/SessionLogEntryRepository.java        |   4 +-
 .../jdo/{ => integtests}/SessionLog_IntegTest.java |  12 +--
 .../jpa/IsisModuleExtSessionLogPersistenceJpa.java |  11 ++-
 .../sessionlog/jpa/dom/SessionLogEntry.java        |   7 +-
 .../sessionlog/jpa/dom/SessionLogEntryPK.java      |   4 +-
 .../jpa}/dom/SessionLogEntryRepository.java        |   4 +-
 .../jpa/integtests}/SessionLog_IntegTest.java      |  10 +--
 51 files changed, 551 insertions(+), 211 deletions(-)

diff --git a/extensions/core/commandlog/applib/src/test/java/org/apache/isis/extensions/commandlog/applib/integtest/CommandLog_IntegTestAbstract.java b/extensions/core/commandlog/applib/src/test/java/org/apache/isis/extensions/commandlog/applib/integtest/CommandLog_IntegTestAbstract.java
index 62bf04e301..b158206b6d 100644
--- a/extensions/core/commandlog/applib/src/test/java/org/apache/isis/extensions/commandlog/applib/integtest/CommandLog_IntegTestAbstract.java
+++ b/extensions/core/commandlog/applib/src/test/java/org/apache/isis/extensions/commandlog/applib/integtest/CommandLog_IntegTestAbstract.java
@@ -492,7 +492,6 @@ public abstract class CommandLog_IntegTestAbstract extends IsisIntegrationTestAb
     @Inject CounterRepository counterRepository;
     @Inject WrapperFactory wrapperFactory;
     @Inject BookmarkService bookmarkService;
-    @Inject TransactionService transactionService;
     @Inject IsisBeanTypeRegistry isisBeanTypeRegistry;
 
 }
diff --git a/extensions/security/audittrail/applib/src/main/java/org/apache/isis/audittrail/applib/IsisModuleExtAuditTrailApplib.java b/extensions/security/audittrail/applib/src/main/java/org/apache/isis/extensions/audittrail/applib/IsisModuleExtAuditTrailApplib.java
similarity index 90%
rename from extensions/security/audittrail/applib/src/main/java/org/apache/isis/audittrail/applib/IsisModuleExtAuditTrailApplib.java
rename to extensions/security/audittrail/applib/src/main/java/org/apache/isis/extensions/audittrail/applib/IsisModuleExtAuditTrailApplib.java
index c037cdbcf5..81ab68a2fa 100644
--- a/extensions/security/audittrail/applib/src/main/java/org/apache/isis/audittrail/applib/IsisModuleExtAuditTrailApplib.java
+++ b/extensions/security/audittrail/applib/src/main/java/org/apache/isis/extensions/audittrail/applib/IsisModuleExtAuditTrailApplib.java
@@ -18,13 +18,13 @@
  *
  */
 
-package org.apache.isis.audittrail.applib;
+package org.apache.isis.extensions.audittrail.applib;
 
 import org.springframework.context.annotation.Configuration;
 import org.springframework.context.annotation.Import;
 
-import org.apache.isis.audittrail.applib.app.AuditTrailMenu;
-import org.apache.isis.audittrail.applib.spiimpl.EntityPropertyChangeSubscriberForAuditTrail;
+import org.apache.isis.extensions.audittrail.applib.app.AuditTrailMenu;
+import org.apache.isis.extensions.audittrail.applib.spiimpl.EntityPropertyChangeSubscriberForAuditTrail;
 
 @Configuration
 @Import({
diff --git a/extensions/security/audittrail/applib/src/main/java/org/apache/isis/audittrail/applib/app/AuditTrailMenu.java b/extensions/security/audittrail/applib/src/main/java/org/apache/isis/extensions/audittrail/applib/app/AuditTrailMenu.java
similarity index 91%
rename from extensions/security/audittrail/applib/src/main/java/org/apache/isis/audittrail/applib/app/AuditTrailMenu.java
rename to extensions/security/audittrail/applib/src/main/java/org/apache/isis/extensions/audittrail/applib/app/AuditTrailMenu.java
index 52cf1bf081..a7c5f9ac80 100644
--- a/extensions/security/audittrail/applib/src/main/java/org/apache/isis/audittrail/applib/app/AuditTrailMenu.java
+++ b/extensions/security/audittrail/applib/src/main/java/org/apache/isis/extensions/audittrail/applib/app/AuditTrailMenu.java
@@ -18,7 +18,7 @@
  *
  */
 
-package org.apache.isis.audittrail.applib.app;
+package org.apache.isis.extensions.audittrail.applib.app;
 
 import java.time.LocalDate;
 import java.util.List;
@@ -35,9 +35,9 @@ import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.NatureOfService;
 import org.apache.isis.applib.annotation.SemanticsOf;
 import org.apache.isis.applib.services.clock.ClockService;
-import org.apache.isis.audittrail.applib.IsisModuleExtAuditTrailApplib;
-import org.apache.isis.audittrail.applib.dom.AuditTrailEntry;
-import org.apache.isis.audittrail.applib.dom.AuditTrailEntryRepository;
+import org.apache.isis.extensions.audittrail.applib.IsisModuleExtAuditTrailApplib;
+import org.apache.isis.extensions.audittrail.applib.dom.AuditTrailEntry;
+import org.apache.isis.extensions.audittrail.applib.dom.AuditTrailEntryRepository;
 
 import lombok.RequiredArgsConstructor;
 
diff --git a/extensions/security/audittrail/applib/src/main/java/org/apache/isis/audittrail/applib/contributions/HasInteractionId_auditTrailEntries.java b/extensions/security/audittrail/applib/src/main/java/org/apache/isis/extensions/audittrail/applib/contributions/HasInteractionId_auditTrailEntries.java
similarity index 78%
rename from extensions/security/audittrail/applib/src/main/java/org/apache/isis/audittrail/applib/contributions/HasInteractionId_auditTrailEntries.java
rename to extensions/security/audittrail/applib/src/main/java/org/apache/isis/extensions/audittrail/applib/contributions/HasInteractionId_auditTrailEntries.java
index 236d0aff89..e41c2450aa 100644
--- a/extensions/security/audittrail/applib/src/main/java/org/apache/isis/audittrail/applib/contributions/HasInteractionId_auditTrailEntries.java
+++ b/extensions/security/audittrail/applib/src/main/java/org/apache/isis/extensions/audittrail/applib/contributions/HasInteractionId_auditTrailEntries.java
@@ -17,22 +17,18 @@
  * under the License.
  *
  */
-package org.apache.isis.audittrail.applib.contributions;
+package org.apache.isis.extensions.audittrail.applib.contributions;
 
 import java.util.List;
 
 import javax.inject.Inject;
 
-import org.apache.isis.applib.annotation.Action;
-import org.apache.isis.applib.annotation.ActionLayout;
 import org.apache.isis.applib.annotation.Collection;
-import org.apache.isis.applib.annotation.CollectionLayout;
 import org.apache.isis.applib.annotation.MemberSupport;
-import org.apache.isis.applib.annotation.SemanticsOf;
 import org.apache.isis.applib.mixins.system.HasInteractionId;
-import org.apache.isis.audittrail.applib.IsisModuleExtAuditTrailApplib;
-import org.apache.isis.audittrail.applib.dom.AuditTrailEntry;
-import org.apache.isis.audittrail.applib.dom.AuditTrailEntryRepository;
+import org.apache.isis.extensions.audittrail.applib.IsisModuleExtAuditTrailApplib;
+import org.apache.isis.extensions.audittrail.applib.dom.AuditTrailEntry;
+import org.apache.isis.extensions.audittrail.applib.dom.AuditTrailEntryRepository;
 
 import lombok.RequiredArgsConstructor;
 
diff --git a/extensions/security/audittrail/applib/src/main/java/org/apache/isis/audittrail/applib/contributions/Object_recentAuditTrailEntries.java b/extensions/security/audittrail/applib/src/main/java/org/apache/isis/extensions/audittrail/applib/contributions/Object_recentAuditTrailEntries.java
similarity index 91%
rename from extensions/security/audittrail/applib/src/main/java/org/apache/isis/audittrail/applib/contributions/Object_recentAuditTrailEntries.java
rename to extensions/security/audittrail/applib/src/main/java/org/apache/isis/extensions/audittrail/applib/contributions/Object_recentAuditTrailEntries.java
index f8fa039e89..5938c24871 100644
--- a/extensions/security/audittrail/applib/src/main/java/org/apache/isis/audittrail/applib/contributions/Object_recentAuditTrailEntries.java
+++ b/extensions/security/audittrail/applib/src/main/java/org/apache/isis/extensions/audittrail/applib/contributions/Object_recentAuditTrailEntries.java
@@ -17,11 +17,10 @@
  * under the License.
  *
  */
-package org.apache.isis.audittrail.applib.contributions;
+package org.apache.isis.extensions.audittrail.applib.contributions;
 
 import java.util.Collections;
 import java.util.List;
-import java.util.SortedSet;
 import java.util.stream.Collectors;
 
 import javax.inject.Inject;
@@ -34,9 +33,9 @@ import org.apache.isis.applib.services.appfeat.ApplicationFeatureId;
 import org.apache.isis.applib.services.appfeat.ApplicationFeatureRepository;
 import org.apache.isis.applib.services.bookmark.BookmarkService;
 import org.apache.isis.applib.services.metamodel.MetaModelService;
-import org.apache.isis.audittrail.applib.IsisModuleExtAuditTrailApplib;
-import org.apache.isis.audittrail.applib.dom.AuditTrailEntry;
-import org.apache.isis.audittrail.applib.dom.AuditTrailEntryRepository;
+import org.apache.isis.extensions.audittrail.applib.IsisModuleExtAuditTrailApplib;
+import org.apache.isis.extensions.audittrail.applib.dom.AuditTrailEntry;
+import org.apache.isis.extensions.audittrail.applib.dom.AuditTrailEntryRepository;
 
 import lombok.RequiredArgsConstructor;
 import lombok.val;
diff --git a/extensions/security/audittrail/applib/src/main/java/org/apache/isis/audittrail/applib/dom/AuditTrailEntry.java b/extensions/security/audittrail/applib/src/main/java/org/apache/isis/extensions/audittrail/applib/dom/AuditTrailEntry.java
similarity index 98%
rename from extensions/security/audittrail/applib/src/main/java/org/apache/isis/audittrail/applib/dom/AuditTrailEntry.java
rename to extensions/security/audittrail/applib/src/main/java/org/apache/isis/extensions/audittrail/applib/dom/AuditTrailEntry.java
index 5c2db0da51..de98813d5d 100644
--- a/extensions/security/audittrail/applib/src/main/java/org/apache/isis/audittrail/applib/dom/AuditTrailEntry.java
+++ b/extensions/security/audittrail/applib/src/main/java/org/apache/isis/extensions/audittrail/applib/dom/AuditTrailEntry.java
@@ -18,7 +18,7 @@
  *
  */
 
-package org.apache.isis.audittrail.applib.dom;
+package org.apache.isis.extensions.audittrail.applib.dom;
 
 import java.lang.annotation.ElementType;
 import java.lang.annotation.Retention;
@@ -42,7 +42,7 @@ import org.apache.isis.applib.services.bookmark.Bookmark;
 import org.apache.isis.applib.services.publishing.spi.EntityPropertyChange;
 import org.apache.isis.applib.util.ObjectContracts;
 import org.apache.isis.applib.util.TitleBuffer;
-import org.apache.isis.audittrail.applib.IsisModuleExtAuditTrailApplib;
+import org.apache.isis.extensions.audittrail.applib.IsisModuleExtAuditTrailApplib;
 import org.apache.isis.commons.internal.base._Strings;
 
 import lombok.val;
diff --git a/extensions/security/audittrail/applib/src/main/java/org/apache/isis/audittrail/applib/dom/AuditTrailEntry.layout.fallback.xml b/extensions/security/audittrail/applib/src/main/java/org/apache/isis/extensions/audittrail/applib/dom/AuditTrailEntry.layout.fallback.xml
similarity index 100%
rename from extensions/security/audittrail/applib/src/main/java/org/apache/isis/audittrail/applib/dom/AuditTrailEntry.layout.fallback.xml
rename to extensions/security/audittrail/applib/src/main/java/org/apache/isis/extensions/audittrail/applib/dom/AuditTrailEntry.layout.fallback.xml
diff --git a/extensions/security/audittrail/applib/src/main/java/org/apache/isis/audittrail/applib/dom/AuditTrailEntry.png b/extensions/security/audittrail/applib/src/main/java/org/apache/isis/extensions/audittrail/applib/dom/AuditTrailEntry.png
similarity index 100%
rename from extensions/security/audittrail/applib/src/main/java/org/apache/isis/audittrail/applib/dom/AuditTrailEntry.png
rename to extensions/security/audittrail/applib/src/main/java/org/apache/isis/extensions/audittrail/applib/dom/AuditTrailEntry.png
diff --git a/extensions/security/audittrail/applib/src/main/java/org/apache/isis/audittrail/applib/dom/AuditTrailEntryRepository.java b/extensions/security/audittrail/applib/src/main/java/org/apache/isis/extensions/audittrail/applib/dom/AuditTrailEntryRepository.java
similarity index 90%
rename from extensions/security/audittrail/applib/src/main/java/org/apache/isis/audittrail/applib/dom/AuditTrailEntryRepository.java
rename to extensions/security/audittrail/applib/src/main/java/org/apache/isis/extensions/audittrail/applib/dom/AuditTrailEntryRepository.java
index 20cd9d5f9a..fcbe0de134 100644
--- a/extensions/security/audittrail/applib/src/main/java/org/apache/isis/audittrail/applib/dom/AuditTrailEntryRepository.java
+++ b/extensions/security/audittrail/applib/src/main/java/org/apache/isis/extensions/audittrail/applib/dom/AuditTrailEntryRepository.java
@@ -18,7 +18,7 @@
  *
  */
 
-package org.apache.isis.audittrail.applib.dom;
+package org.apache.isis.extensions.audittrail.applib.dom;
 
 import java.sql.Timestamp;
 import java.time.LocalDate;
@@ -34,12 +34,15 @@ import org.apache.isis.applib.services.factory.FactoryService;
 import org.apache.isis.applib.services.publishing.spi.EntityPropertyChange;
 import org.apache.isis.applib.services.repository.RepositoryService;
 
+import lombok.AccessLevel;
 import lombok.NonNull;
+import lombok.RequiredArgsConstructor;
 import lombok.val;
 
 /**
  * Provides supporting functionality for querying {@link AuditTrailEntry audit trail entry} entities.
  */
+@RequiredArgsConstructor(access = AccessLevel.PROTECTED)
 public abstract class AuditTrailEntryRepository<E extends AuditTrailEntry> {
 
     @Inject RepositoryService repositoryService;
@@ -47,11 +50,6 @@ public abstract class AuditTrailEntryRepository<E extends AuditTrailEntry> {
 
     private final Class<E> auditTrailEntryClass;
 
-    protected AuditTrailEntryRepository(@NonNull Class<E> auditTrailEntryClass) {
-        this.auditTrailEntryClass = auditTrailEntryClass;
-    }
-
-
     public AuditTrailEntry createFor(final EntityPropertyChange change) {
         E entry = factoryService.detachedEntity(auditTrailEntryClass);
         entry.init(change);
@@ -69,6 +67,7 @@ public abstract class AuditTrailEntryRepository<E extends AuditTrailEntry> {
         return repositoryService.allMatches(
                 Query.named(auditTrailEntryClass, AuditTrailEntry.Nq.FIND_RECENT_BY_TARGET)
                         .withParameter("target", target)
+                        .withLimit(100)
         );
     }
 
@@ -80,6 +79,7 @@ public abstract class AuditTrailEntryRepository<E extends AuditTrailEntry> {
                 Query.named(auditTrailEntryClass, AuditTrailEntry.Nq.FIND_RECENT_BY_TARGET_AND_PROPERTY_ID)
                         .withParameter("target", target)
                         .withParameter("propertyId", propertyId)
+                        .withLimit(30)
         );
     }
 
@@ -151,6 +151,15 @@ public abstract class AuditTrailEntryRepository<E extends AuditTrailEntry> {
         return repositoryService.allMatches(query);
     }
 
+    /**
+     * intended for testing only
+     */
+    public List<? extends AuditTrailEntry> findAll() {
+        return repositoryService.allMatches(
+                Query.named(auditTrailEntryClass, AuditTrailEntry.Nq.FIND)
+        );
+    }
+
     private static Timestamp toTimestampStartOfDayWithOffset(final LocalDate dt, final int daysOffset) {
         return dt!=null
                 ? Timestamp.valueOf(dt.atStartOfDay().plusDays(daysOffset))
@@ -158,4 +167,11 @@ public abstract class AuditTrailEntryRepository<E extends AuditTrailEntry> {
     }
 
 
+    /**
+     * intended for testing only
+     */
+    public void removeAll() {
+        repositoryService.removeAll(auditTrailEntryClass);
+    }
+
 }
diff --git a/extensions/security/audittrail/applib/src/main/java/org/apache/isis/audittrail/applib/spiimpl/EntityPropertyChangeSubscriberForAuditTrail.java b/extensions/security/audittrail/applib/src/main/java/org/apache/isis/extensions/audittrail/applib/spiimpl/EntityPropertyChangeSubscriberForAuditTrail.java
similarity index 85%
rename from extensions/security/audittrail/applib/src/main/java/org/apache/isis/audittrail/applib/spiimpl/EntityPropertyChangeSubscriberForAuditTrail.java
rename to extensions/security/audittrail/applib/src/main/java/org/apache/isis/extensions/audittrail/applib/spiimpl/EntityPropertyChangeSubscriberForAuditTrail.java
index 2e53bcee78..25b42fc48e 100644
--- a/extensions/security/audittrail/applib/src/main/java/org/apache/isis/audittrail/applib/spiimpl/EntityPropertyChangeSubscriberForAuditTrail.java
+++ b/extensions/security/audittrail/applib/src/main/java/org/apache/isis/extensions/audittrail/applib/spiimpl/EntityPropertyChangeSubscriberForAuditTrail.java
@@ -18,7 +18,7 @@
  *
  */
 
-package org.apache.isis.audittrail.applib.spiimpl;
+package org.apache.isis.extensions.audittrail.applib.spiimpl;
 
 import javax.annotation.Priority;
 import javax.inject.Inject;
@@ -30,16 +30,16 @@ import org.springframework.stereotype.Service;
 import org.apache.isis.applib.annotation.PriorityPrecedence;
 import org.apache.isis.applib.services.publishing.spi.EntityPropertyChange;
 import org.apache.isis.applib.services.publishing.spi.EntityPropertyChangeSubscriber;
-import org.apache.isis.audittrail.applib.IsisModuleExtAuditTrailApplib;
-import org.apache.isis.audittrail.applib.dom.AuditTrailEntry;
-import org.apache.isis.audittrail.applib.dom.AuditTrailEntryRepository;
+import org.apache.isis.extensions.audittrail.applib.IsisModuleExtAuditTrailApplib;
+import org.apache.isis.extensions.audittrail.applib.dom.AuditTrailEntry;
+import org.apache.isis.extensions.audittrail.applib.dom.AuditTrailEntryRepository;
 
 import lombok.RequiredArgsConstructor;
 import lombok.extern.log4j.Log4j2;
 
 /**
  * Implementation of the Isis {@link EntityPropertyChangeSubscriber} creates a log
- * entry to the database (the {@link org.apache.isis.audittrail.applib.dom.AuditTrailEntry} entity) each time a
+ * entry to the database (the {@link AuditTrailEntry} entity) each time a
  * user either logs on or logs out, or if their session expires.
  */
 @Service
diff --git a/extensions/security/audittrail/applib/src/test/java/org/apache/isis/audittrail/applib/AuditTrailIntegTestAbstract.java b/extensions/security/audittrail/applib/src/test/java/org/apache/isis/audittrail/applib/AuditTrailIntegTestAbstract.java
deleted file mode 100644
index b0f9ebddaf..0000000000
--- a/extensions/security/audittrail/applib/src/test/java/org/apache/isis/audittrail/applib/AuditTrailIntegTestAbstract.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.apache.isis.audittrail.applib;
-
-import java.time.Instant;
-import java.util.Date;
-import java.util.UUID;
-import java.util.concurrent.atomic.AtomicInteger;
-
-import javax.inject.Inject;
-
-import org.junit.jupiter.api.BeforeEach;
-import org.springframework.beans.factory.annotation.Qualifier;
-
-import org.apache.isis.applib.annotation.Value;
-import org.apache.isis.applib.services.publishing.spi.EntityPropertyChangeSubscriber;
-import org.apache.isis.audittrail.applib.dom.AuditTrailEntry;
-import org.apache.isis.audittrail.applib.dom.AuditTrailEntryRepository;
-import org.apache.isis.testing.integtestsupport.applib.IsisIntegrationTestAbstract;
-
-import lombok.Getter;
-import lombok.RequiredArgsConstructor;
-
-public abstract class AuditTrailIntegTestAbstract extends IsisIntegrationTestAbstract {
-
-    @BeforeEach
-    void setUp() {
-    }
-
-
-    @Inject @Qualifier("audittrail") EntityPropertyChangeSubscriber entityPropertyChangeSubscriber;
-    @Inject AuditTrailEntryRepository<? extends AuditTrailEntry> auditTrailEntryRepository;
-
-}
diff --git a/extensions/security/audittrail/applib/src/test/java/org/apache/isis/extensions/audittrail/applib/integtests/AuditTrail_IntegTestAbstract.java b/extensions/security/audittrail/applib/src/test/java/org/apache/isis/extensions/audittrail/applib/integtests/AuditTrail_IntegTestAbstract.java
new file mode 100644
index 0000000000..56dc65ee48
--- /dev/null
+++ b/extensions/security/audittrail/applib/src/test/java/org/apache/isis/extensions/audittrail/applib/integtests/AuditTrail_IntegTestAbstract.java
@@ -0,0 +1,97 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+package org.apache.isis.extensions.audittrail.applib.integtests;
+
+import java.util.List;
+
+import javax.inject.Inject;
+
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+import org.apache.isis.applib.services.bookmark.Bookmark;
+import org.apache.isis.applib.services.bookmark.BookmarkService;
+import org.apache.isis.applib.services.iactnlayer.InteractionService;
+import org.apache.isis.applib.services.wrapper.WrapperFactory;
+import org.apache.isis.extensions.audittrail.applib.dom.AuditTrailEntry;
+import org.apache.isis.extensions.audittrail.applib.dom.AuditTrailEntryRepository;
+import org.apache.isis.extensions.audittrail.applib.integtests.model.Counter;
+import org.apache.isis.extensions.audittrail.applib.integtests.model.CounterRepository;
+import org.apache.isis.extensions.audittrail.applib.integtests.model.Counter_bumpUsingMixin;
+import org.apache.isis.core.config.presets.IsisPresets;
+import org.apache.isis.testing.integtestsupport.applib.IsisIntegrationTestAbstract;
+
+public abstract class AuditTrail_IntegTestAbstract extends IsisIntegrationTestAbstract {
+
+    @BeforeAll
+    static void beforeAll() {
+        IsisPresets.forcePrototyping();
+    }
+
+    Counter counter1;
+    Counter counter2;
+
+    @BeforeEach
+    void setUp() {
+        counterRepository.removeAll();
+        auditTrailEntryRepository.removeAll();
+
+        assertThat(counterRepository.find()).isEmpty();
+
+        counter1 = counterRepository.persist(newCounter("counter-1"));
+        counter2 = counterRepository.persist(newCounter("counter-2"));
+
+        assertThat(counterRepository.find()).hasSize(2);
+
+        List<? extends AuditTrailEntry> mostRecentCompleted = auditTrailEntryRepository.findAll();
+        assertThat(mostRecentCompleted).isEmpty();
+    }
+
+    protected abstract Counter newCounter(String name);
+
+    @Test
+    void mixin() {
+
+        // when
+        wrapperFactory.wrapMixin(Counter_bumpUsingMixin.class, counter1).act();
+        interactionService.closeInteractionLayers();    // to flush
+
+        interactionService.openInteraction();
+
+        // then
+        List<? extends AuditTrailEntry> entries = auditTrailEntryRepository.findAll();
+        assertThat(entries).hasSize(4); // Counter has four properties
+
+        Bookmark target = bookmarkService.bookmarkFor(counter1).orElseThrow();
+
+        auditTrailEntryRepository.findRecentByTarget()
+    }
+
+
+    @Inject InteractionService interactionService;
+    @Inject CounterRepository counterRepository;
+    @Inject WrapperFactory wrapperFactory;
+    @Inject BookmarkService bookmarkService;
+    @Inject AuditTrailEntryRepository<? extends AuditTrailEntry> auditTrailEntryRepository;
+
+
+}
diff --git a/extensions/security/sessionlog/persistence-jdo/src/main/java/org/apache/isis/sessionlog/jdo/dom/SessionLogEntryRepository.java b/extensions/security/audittrail/applib/src/test/java/org/apache/isis/extensions/audittrail/applib/integtests/model/AuditTrailTestDomainModel.java
similarity index 72%
copy from extensions/security/sessionlog/persistence-jdo/src/main/java/org/apache/isis/sessionlog/jdo/dom/SessionLogEntryRepository.java
copy to extensions/security/audittrail/applib/src/test/java/org/apache/isis/extensions/audittrail/applib/integtests/model/AuditTrailTestDomainModel.java
index d13bcb502a..cbdc99fbf0 100644
--- a/extensions/security/sessionlog/persistence-jdo/src/main/java/org/apache/isis/sessionlog/jdo/dom/SessionLogEntryRepository.java
+++ b/extensions/security/audittrail/applib/src/test/java/org/apache/isis/extensions/audittrail/applib/integtests/model/AuditTrailTestDomainModel.java
@@ -18,14 +18,7 @@
  *
  */
 
-package org.apache.isis.sessionlog.jdo.dom;
+package org.apache.isis.extensions.audittrail.applib.integtests.model;
 
-import org.springframework.stereotype.Service;
-
-@Service
-public class SessionLogEntryRepository extends org.apache.isis.sessionlog.applib.dom.SessionLogEntryRepository<SessionLogEntry> {
-
-    public SessionLogEntryRepository() {
-        super(SessionLogEntry.class);
-    }
+public class AuditTrailTestDomainModel {
 }
diff --git a/extensions/security/audittrail/applib/src/test/java/org/apache/isis/extensions/audittrail/applib/integtests/model/Counter.java b/extensions/security/audittrail/applib/src/test/java/org/apache/isis/extensions/audittrail/applib/integtests/model/Counter.java
new file mode 100644
index 0000000000..751e97ce43
--- /dev/null
+++ b/extensions/security/audittrail/applib/src/test/java/org/apache/isis/extensions/audittrail/applib/integtests/model/Counter.java
@@ -0,0 +1,76 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+
+package org.apache.isis.extensions.audittrail.applib.integtests.model;
+
+import javax.inject.Named;
+
+import org.apache.isis.applib.annotation.Action;
+import org.apache.isis.applib.annotation.DomainObject;
+import org.apache.isis.applib.annotation.Editing;
+import org.apache.isis.applib.annotation.Nature;
+import org.apache.isis.applib.annotation.Property;
+import org.apache.isis.applib.annotation.Publishing;
+
+@Named("audittrail.test.Counter")
+@DomainObject(nature = Nature.ENTITY)
+public abstract class Counter implements Comparable<Counter> {
+
+    @Property(
+            editing = Editing.ENABLED,
+            commandPublishing = Publishing.ENABLED
+    )
+    public abstract Long getNum();
+    public abstract void setNum(Long num);
+
+    @Property(
+            editing = Editing.ENABLED,
+            commandPublishing = Publishing.DISABLED
+    )
+    public abstract Long getNum2();
+    public abstract void setNum2(Long num2);
+
+    public abstract String getName();
+    public abstract void setName(String name);
+
+    @Action(commandPublishing = Publishing.ENABLED)
+    public Counter bumpUsingDeclaredAction() {
+        return doBump();
+    }
+
+    @Action(commandPublishing = Publishing.DISABLED)
+    public Counter bumpUsingDeclaredActionWithCommandPublishingDisabled() {
+        return doBump();
+    }
+
+    Counter doBump() {
+        if (getNum() == null) {
+            setNum(1L);
+        } else {
+            setNum(getNum() + 1);
+        }
+        return this;
+    }
+
+    @Override
+    public int compareTo(final Counter o) {
+        return this.getName().compareTo(o.getName());
+    }
+}
diff --git a/extensions/security/audittrail/applib/src/test/java/org/apache/isis/extensions/audittrail/applib/integtests/model/CounterRepository.java b/extensions/security/audittrail/applib/src/test/java/org/apache/isis/extensions/audittrail/applib/integtests/model/CounterRepository.java
new file mode 100644
index 0000000000..3bcbd40938
--- /dev/null
+++ b/extensions/security/audittrail/applib/src/test/java/org/apache/isis/extensions/audittrail/applib/integtests/model/CounterRepository.java
@@ -0,0 +1,56 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+
+package org.apache.isis.extensions.audittrail.applib.integtests.model;
+
+import java.util.List;
+import java.util.Objects;
+
+import javax.inject.Inject;
+
+import org.apache.isis.applib.services.repository.RepositoryService;
+
+public abstract class CounterRepository<X extends Counter> {
+
+    private final Class<X> counterClass;
+
+    public CounterRepository(Class<X> counterClass) {
+        this.counterClass = counterClass;
+    }
+
+    public List<X> find() {
+        return repositoryService.allInstances(counterClass);
+    }
+
+    public X persist(X counter) {
+        return repositoryService.persistAndFlush(counter);
+    }
+
+    public void removeAll() {
+        repositoryService.removeAll(counterClass);
+    }
+
+    @Inject RepositoryService repositoryService;
+
+    public Counter findByName(String name) {
+        List<X> xes = find();
+        return xes.stream().filter(x -> Objects.equals(x.getName(), name)).findFirst().orElseThrow();
+    }
+}
diff --git a/extensions/security/audittrail/persistence-jdo/src/main/java/org/apache/isis/audittrail/jdo/dom/AuditTrailEntryRepository.java b/extensions/security/audittrail/applib/src/test/java/org/apache/isis/extensions/audittrail/applib/integtests/model/Counter_bumpUsingMixin.java
similarity index 66%
copy from extensions/security/audittrail/persistence-jdo/src/main/java/org/apache/isis/audittrail/jdo/dom/AuditTrailEntryRepository.java
copy to extensions/security/audittrail/applib/src/test/java/org/apache/isis/extensions/audittrail/applib/integtests/model/Counter_bumpUsingMixin.java
index 55e16bd6e3..5b214c049d 100644
--- a/extensions/security/audittrail/persistence-jdo/src/main/java/org/apache/isis/audittrail/jdo/dom/AuditTrailEntryRepository.java
+++ b/extensions/security/audittrail/applib/src/test/java/org/apache/isis/extensions/audittrail/applib/integtests/model/Counter_bumpUsingMixin.java
@@ -17,16 +17,21 @@
  * under the License.
  *
  */
-package org.apache.isis.audittrail.jdo.dom;
 
-import org.springframework.stereotype.Service;
+package org.apache.isis.extensions.audittrail.applib.integtests.model;
 
-import org.apache.isis.audittrail.applib.dom.AuditTrailEntry;
+import org.apache.isis.applib.annotation.Action;
+import org.apache.isis.applib.annotation.Publishing;
 
-@Service
-public class AuditTrailEntryRepository extends org.apache.isis.audittrail.applib.dom.AuditTrailEntryRepository<AuditTrailEntry> {
+import lombok.RequiredArgsConstructor;
 
-    public AuditTrailEntryRepository() {
-        super(AuditTrailEntry.class);
+@Action(commandPublishing = Publishing.ENABLED)
+@RequiredArgsConstructor
+public class Counter_bumpUsingMixin {
+
+    private final Counter counter;
+
+    public Counter act() {
+        return counter.doBump();
     }
 }
diff --git a/extensions/security/audittrail/persistence-jdo/src/main/java/org/apache/isis/audittrail/jdo/dom/AuditTrailEntryRepository.java b/extensions/security/audittrail/applib/src/test/java/org/apache/isis/extensions/audittrail/applib/integtests/model/Counter_bumpUsingMixinWithCommandPublishingDisabled.java
similarity index 64%
copy from extensions/security/audittrail/persistence-jdo/src/main/java/org/apache/isis/audittrail/jdo/dom/AuditTrailEntryRepository.java
copy to extensions/security/audittrail/applib/src/test/java/org/apache/isis/extensions/audittrail/applib/integtests/model/Counter_bumpUsingMixinWithCommandPublishingDisabled.java
index 55e16bd6e3..fbb3e98f99 100644
--- a/extensions/security/audittrail/persistence-jdo/src/main/java/org/apache/isis/audittrail/jdo/dom/AuditTrailEntryRepository.java
+++ b/extensions/security/audittrail/applib/src/test/java/org/apache/isis/extensions/audittrail/applib/integtests/model/Counter_bumpUsingMixinWithCommandPublishingDisabled.java
@@ -17,16 +17,21 @@
  * under the License.
  *
  */
-package org.apache.isis.audittrail.jdo.dom;
 
-import org.springframework.stereotype.Service;
+package org.apache.isis.extensions.audittrail.applib.integtests.model;
 
-import org.apache.isis.audittrail.applib.dom.AuditTrailEntry;
+import org.apache.isis.applib.annotation.Action;
+import org.apache.isis.applib.annotation.Publishing;
 
-@Service
-public class AuditTrailEntryRepository extends org.apache.isis.audittrail.applib.dom.AuditTrailEntryRepository<AuditTrailEntry> {
+import lombok.RequiredArgsConstructor;
 
-    public AuditTrailEntryRepository() {
-        super(AuditTrailEntry.class);
+@Action(commandPublishing = Publishing.DISABLED)
+@RequiredArgsConstructor
+public class Counter_bumpUsingMixinWithCommandPublishingDisabled {
+
+    private final Counter counter;
+
+    public Counter act() {
+        return counter.doBump();
     }
 }
diff --git a/extensions/security/audittrail/persistence-jdo/pom.xml b/extensions/security/audittrail/persistence-jdo/pom.xml
index 8bd78c7c09..90a69cff6a 100644
--- a/extensions/security/audittrail/persistence-jdo/pom.xml
+++ b/extensions/security/audittrail/persistence-jdo/pom.xml
@@ -58,6 +58,8 @@
             <scope>provided</scope>
         </dependency>
 
+        <!-- testing -->
+
         <dependency>
             <groupId>org.apache.isis.extensions</groupId>
             <artifactId>isis-extensions-audittrail-applib</artifactId>
diff --git a/extensions/security/audittrail/persistence-jdo/src/main/java/org/apache/isis/audittrail/jdo/IsisModuleExtAuditTrailPersistenceJdo.java b/extensions/security/audittrail/persistence-jdo/src/main/java/org/apache/isis/audittrail/jdo/IsisModuleExtAuditTrailPersistenceJdo.java
index ee75372760..3e77926c9b 100644
--- a/extensions/security/audittrail/persistence-jdo/src/main/java/org/apache/isis/audittrail/jdo/IsisModuleExtAuditTrailPersistenceJdo.java
+++ b/extensions/security/audittrail/persistence-jdo/src/main/java/org/apache/isis/audittrail/jdo/IsisModuleExtAuditTrailPersistenceJdo.java
@@ -23,7 +23,7 @@ package org.apache.isis.audittrail.jdo;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.context.annotation.Import;
 
-import org.apache.isis.audittrail.applib.IsisModuleExtAuditTrailApplib;
+import org.apache.isis.extensions.audittrail.applib.IsisModuleExtAuditTrailApplib;
 import org.apache.isis.audittrail.jdo.dom.AuditTrailEntry;
 import org.apache.isis.audittrail.jdo.dom.AuditTrailEntryRepository;
 import org.apache.isis.persistence.jdo.datanucleus.IsisModulePersistenceJdoDatanucleus;
diff --git a/extensions/security/audittrail/persistence-jdo/src/main/java/org/apache/isis/audittrail/jdo/dom/AuditTrailEntry.java b/extensions/security/audittrail/persistence-jdo/src/main/java/org/apache/isis/audittrail/jdo/dom/AuditTrailEntry.java
index b3a95053f2..81ec27d41b 100644
--- a/extensions/security/audittrail/persistence-jdo/src/main/java/org/apache/isis/audittrail/jdo/dom/AuditTrailEntry.java
+++ b/extensions/security/audittrail/persistence-jdo/src/main/java/org/apache/isis/audittrail/jdo/dom/AuditTrailEntry.java
@@ -42,7 +42,7 @@ import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.Editing;
 import org.apache.isis.applib.jaxb.PersistentEntityAdapter;
 import org.apache.isis.applib.services.bookmark.Bookmark;
-import org.apache.isis.audittrail.applib.dom.AuditTrailEntry.Nq;
+import org.apache.isis.extensions.audittrail.applib.dom.AuditTrailEntry.Nq;
 
 import lombok.Getter;
 import lombok.Setter;
@@ -145,7 +145,7 @@ import lombok.Setter;
         editing = Editing.DISABLED
 )
 public class AuditTrailEntry
-extends org.apache.isis.audittrail.applib.dom.AuditTrailEntry {
+extends org.apache.isis.extensions.audittrail.applib.dom.AuditTrailEntry {
 
     static final String FQCN = "org.apache.isis.audittrail.jdo.dom.AuditTrailEntry";
 
diff --git a/extensions/security/audittrail/persistence-jdo/src/main/java/org/apache/isis/audittrail/jdo/dom/AuditTrailEntryRepository.java b/extensions/security/audittrail/persistence-jdo/src/main/java/org/apache/isis/audittrail/jdo/dom/AuditTrailEntryRepository.java
index 55e16bd6e3..3fcc3bb3ed 100644
--- a/extensions/security/audittrail/persistence-jdo/src/main/java/org/apache/isis/audittrail/jdo/dom/AuditTrailEntryRepository.java
+++ b/extensions/security/audittrail/persistence-jdo/src/main/java/org/apache/isis/audittrail/jdo/dom/AuditTrailEntryRepository.java
@@ -21,10 +21,10 @@ package org.apache.isis.audittrail.jdo.dom;
 
 import org.springframework.stereotype.Service;
 
-import org.apache.isis.audittrail.applib.dom.AuditTrailEntry;
+import org.apache.isis.extensions.audittrail.applib.dom.AuditTrailEntry;
 
 @Service
-public class AuditTrailEntryRepository extends org.apache.isis.audittrail.applib.dom.AuditTrailEntryRepository<AuditTrailEntry> {
+public class AuditTrailEntryRepository extends org.apache.isis.extensions.audittrail.applib.dom.AuditTrailEntryRepository<AuditTrailEntry> {
 
     public AuditTrailEntryRepository() {
         super(AuditTrailEntry.class);
diff --git a/extensions/security/audittrail/persistence-jdo/src/test/java/org/apache/isis/audittrail/jdo/AuditTrail_IntegTest.java b/extensions/security/audittrail/persistence-jdo/src/test/java/org/apache/isis/extensions/audittrail/jdo/integtests/AuditTrail_IntegTest.java
similarity index 77%
rename from extensions/security/audittrail/persistence-jdo/src/test/java/org/apache/isis/audittrail/jdo/AuditTrail_IntegTest.java
rename to extensions/security/audittrail/persistence-jdo/src/test/java/org/apache/isis/extensions/audittrail/jdo/integtests/AuditTrail_IntegTest.java
index 6536dd103a..f4629b8d03 100644
--- a/extensions/security/audittrail/persistence-jdo/src/test/java/org/apache/isis/audittrail/jdo/AuditTrail_IntegTest.java
+++ b/extensions/security/audittrail/persistence-jdo/src/test/java/org/apache/isis/extensions/audittrail/jdo/integtests/AuditTrail_IntegTest.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.audittrail.jdo;
+package org.apache.isis.extensions.audittrail.jdo.integtests;
 
 import org.springframework.boot.SpringBootConfiguration;
 import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
@@ -26,18 +26,25 @@ import org.springframework.context.annotation.PropertySource;
 import org.springframework.context.annotation.PropertySources;
 import org.springframework.test.context.ActiveProfiles;
 
+import org.apache.isis.extensions.audittrail.applib.integtests.AuditTrail_IntegTestAbstract;
+import org.apache.isis.audittrail.jdo.IsisModuleExtAuditTrailPersistenceJdo;
 import org.apache.isis.core.config.presets.IsisPresets;
 import org.apache.isis.core.runtimeservices.IsisModuleCoreRuntimeServices;
+import org.apache.isis.extensions.audittrail.jdo.integtests.model.Counter;
 import org.apache.isis.security.bypass.IsisModuleSecurityBypass;
-import org.apache.isis.sessionlog.applib.AuditTrailIntegTestAbstract;
 
 @SpringBootTest(
         classes = AuditTrail_IntegTest.AppManifest.class
 )
 @ActiveProfiles("test")
-public class AuditTrail_IntegTest extends AuditTrailIntegTestAbstract {
+public class AuditTrail_IntegTest extends AuditTrail_IntegTestAbstract {
 
 
+    @Override
+    protected org.apache.isis.extensions.audittrail.applib.integtests.model.Counter newCounter(String name) {
+        return Counter.builder().name(name).build();
+    }
+
     @SpringBootConfiguration
     @EnableAutoConfiguration
     @Import({
diff --git a/extensions/security/audittrail/persistence-jdo/src/test/java/org/apache/isis/extensions/audittrail/jdo/integtests/model/Counter.java b/extensions/security/audittrail/persistence-jdo/src/test/java/org/apache/isis/extensions/audittrail/jdo/integtests/model/Counter.java
new file mode 100644
index 0000000000..d0775f9b29
--- /dev/null
+++ b/extensions/security/audittrail/persistence-jdo/src/test/java/org/apache/isis/extensions/audittrail/jdo/integtests/model/Counter.java
@@ -0,0 +1,64 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+
+package org.apache.isis.extensions.audittrail.jdo.integtests.model;
+
+import javax.inject.Named;
+import javax.jdo.annotations.Column;
+import javax.jdo.annotations.DatastoreIdentity;
+import javax.jdo.annotations.IdGeneratorStrategy;
+import javax.jdo.annotations.PersistenceCapable;
+
+import org.apache.isis.applib.annotation.DomainObject;
+import org.apache.isis.applib.annotation.Nature;
+
+import lombok.AccessLevel;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+
+@PersistenceCapable(
+        schema = "public",
+        table = "Counter"
+)
+@DatastoreIdentity(strategy = IdGeneratorStrategy.IDENTITY, column = "id")
+@Named("audittrail.test.Counter")
+@DomainObject(nature = Nature.ENTITY)
+@NoArgsConstructor
+@Builder
+@AllArgsConstructor(access = AccessLevel.PRIVATE)
+public class Counter extends org.apache.isis.extensions.audittrail.applib.integtests.model.Counter {
+
+    @Column(allowsNull = "false")
+    @Getter @Setter
+    private String name;
+
+    @Column(allowsNull = "true")
+    @Getter @Setter
+    private Long num;
+
+    @Column(allowsNull = "true")
+    @Getter @Setter
+    private Long num2;
+
+
+}
diff --git a/extensions/security/sessionlog/persistence-jpa/src/main/java/org/apache/isis/sessionlog/jpa/dom/SessionLogEntryRepository.java b/extensions/security/audittrail/persistence-jdo/src/test/java/org/apache/isis/extensions/audittrail/jdo/integtests/model/CounterRepository.java
similarity index 71%
copy from extensions/security/sessionlog/persistence-jpa/src/main/java/org/apache/isis/sessionlog/jpa/dom/SessionLogEntryRepository.java
copy to extensions/security/audittrail/persistence-jdo/src/test/java/org/apache/isis/extensions/audittrail/jdo/integtests/model/CounterRepository.java
index fc0609083a..0ccf52308a 100644
--- a/extensions/security/sessionlog/persistence-jpa/src/main/java/org/apache/isis/sessionlog/jpa/dom/SessionLogEntryRepository.java
+++ b/extensions/security/audittrail/persistence-jdo/src/test/java/org/apache/isis/extensions/audittrail/jdo/integtests/model/CounterRepository.java
@@ -18,14 +18,15 @@
  *
  */
 
-package org.apache.isis.sessionlog.jpa.dom;
+package org.apache.isis.extensions.audittrail.jdo.integtests.model;
 
-import org.springframework.stereotype.Service;
+import org.springframework.stereotype.Repository;
 
-@Service
-public class SessionLogEntryRepository extends org.apache.isis.sessionlog.applib.dom.SessionLogEntryRepository<SessionLogEntry> {
+@Repository
+public class CounterRepository
+        extends org.apache.isis.extensions.audittrail.applib.integtests.model.CounterRepository<Counter> {
 
-    public SessionLogEntryRepository() {
-        super(SessionLogEntry.class);
+    public CounterRepository() {
+        super(Counter.class);
     }
 }
diff --git a/extensions/security/audittrail/persistence-jpa/src/main/java/org/apache/isis/audittrail/jpa/IsisModuleExtAuditTrailPersistenceJpa.java b/extensions/security/audittrail/persistence-jpa/src/main/java/org/apache/isis/extensions/audittrail/jpa/IsisModuleExtAuditTrailPersistenceJpa.java
similarity index 86%
rename from extensions/security/audittrail/persistence-jpa/src/main/java/org/apache/isis/audittrail/jpa/IsisModuleExtAuditTrailPersistenceJpa.java
rename to extensions/security/audittrail/persistence-jpa/src/main/java/org/apache/isis/extensions/audittrail/jpa/IsisModuleExtAuditTrailPersistenceJpa.java
index 44eec06f3b..b597434e6e 100644
--- a/extensions/security/audittrail/persistence-jpa/src/main/java/org/apache/isis/audittrail/jpa/IsisModuleExtAuditTrailPersistenceJpa.java
+++ b/extensions/security/audittrail/persistence-jpa/src/main/java/org/apache/isis/extensions/audittrail/jpa/IsisModuleExtAuditTrailPersistenceJpa.java
@@ -18,20 +18,19 @@
  *
  */
 
-package org.apache.isis.audittrail.jpa;
+package org.apache.isis.extensions.audittrail.jpa;
 
 import org.springframework.boot.autoconfigure.domain.EntityScan;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.context.annotation.Import;
 
-import org.apache.isis.audittrail.applib.IsisModuleExtAuditTrailApplib;
-import org.apache.isis.audittrail.jpa.dom.AuditTrailEntry;
-import org.apache.isis.audittrail.jpa.dom.AuditTrailEntryRepository;
+import org.apache.isis.extensions.audittrail.applib.IsisModuleExtAuditTrailApplib;
+import org.apache.isis.extensions.audittrail.jpa.dom.AuditTrailEntry;
+import org.apache.isis.extensions.audittrail.jpa.dom.AuditTrailEntryRepository;
 import org.apache.isis.persistence.jpa.eclipselink.IsisModulePersistenceJpaEclipselink;
 import org.apache.isis.testing.fixtures.applib.IsisModuleTestingFixturesApplib;
 import org.apache.isis.testing.fixtures.applib.fixturescripts.FixtureScript;
 import org.apache.isis.testing.fixtures.applib.modules.ModuleWithFixtures;
-import org.apache.isis.testing.fixtures.applib.teardown.jdo.TeardownFixtureJdoAbstract;
 import org.apache.isis.testing.fixtures.applib.teardown.jpa.TeardownFixtureJpaAbstract;
 
 
diff --git a/extensions/security/audittrail/persistence-jpa/src/main/java/org/apache/isis/audittrail/jpa/dom/AuditTrailEntry.java b/extensions/security/audittrail/persistence-jpa/src/main/java/org/apache/isis/extensions/audittrail/jpa/dom/AuditTrailEntry.java
similarity index 96%
rename from extensions/security/audittrail/persistence-jpa/src/main/java/org/apache/isis/audittrail/jpa/dom/AuditTrailEntry.java
rename to extensions/security/audittrail/persistence-jpa/src/main/java/org/apache/isis/extensions/audittrail/jpa/dom/AuditTrailEntry.java
index bdc2ec9efb..d9045f906b 100644
--- a/extensions/security/audittrail/persistence-jpa/src/main/java/org/apache/isis/audittrail/jpa/dom/AuditTrailEntry.java
+++ b/extensions/security/audittrail/persistence-jpa/src/main/java/org/apache/isis/extensions/audittrail/jpa/dom/AuditTrailEntry.java
@@ -18,7 +18,7 @@
  *
  */
 
-package org.apache.isis.audittrail.jpa.dom;
+package org.apache.isis.extensions.audittrail.jpa.dom;
 
 import java.util.UUID;
 
@@ -33,7 +33,6 @@ import javax.persistence.Index;
 import javax.persistence.NamedQueries;
 import javax.persistence.NamedQuery;
 import javax.persistence.Table;
-import javax.persistence.UniqueConstraint;
 import javax.persistence.Version;
 import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
 
@@ -41,13 +40,12 @@ import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.Editing;
 import org.apache.isis.applib.jaxb.PersistentEntityAdapter;
 import org.apache.isis.applib.services.bookmark.Bookmark;
-import org.apache.isis.audittrail.applib.dom.AuditTrailEntry.Nq;
+import org.apache.isis.extensions.audittrail.applib.dom.AuditTrailEntry.Nq;
 import org.apache.isis.persistence.jpa.applib.integration.IsisEntityListener;
 import org.apache.isis.persistence.jpa.integration.typeconverters.applib.IsisBookmarkConverter;
 import org.apache.isis.persistence.jpa.integration.typeconverters.java.util.JavaUtilUuidConverter;
 
 import lombok.Getter;
-import lombok.NoArgsConstructor;
 import lombok.Setter;
 @Entity
 @Table(
@@ -145,7 +143,7 @@ import lombok.Setter;
         editing = Editing.DISABLED
 )
 public class AuditTrailEntry
-extends org.apache.isis.audittrail.applib.dom.AuditTrailEntry {
+extends org.apache.isis.extensions.audittrail.applib.dom.AuditTrailEntry {
 
     static final String FQCN = "org.apache.isis.audittrail.jdo.dom.AuditTrailEntry";
 
diff --git a/extensions/security/audittrail/persistence-jpa/src/main/java/org/apache/isis/audittrail/jpa/dom/AuditTrailEntryRepository.java b/extensions/security/audittrail/persistence-jpa/src/main/java/org/apache/isis/extensions/audittrail/jpa/dom/AuditTrailEntryRepository.java
similarity index 78%
rename from extensions/security/audittrail/persistence-jpa/src/main/java/org/apache/isis/audittrail/jpa/dom/AuditTrailEntryRepository.java
rename to extensions/security/audittrail/persistence-jpa/src/main/java/org/apache/isis/extensions/audittrail/jpa/dom/AuditTrailEntryRepository.java
index fdb7284daf..597d0cf08a 100644
--- a/extensions/security/audittrail/persistence-jpa/src/main/java/org/apache/isis/audittrail/jpa/dom/AuditTrailEntryRepository.java
+++ b/extensions/security/audittrail/persistence-jpa/src/main/java/org/apache/isis/extensions/audittrail/jpa/dom/AuditTrailEntryRepository.java
@@ -17,14 +17,14 @@
  * under the License.
  *
  */
-package org.apache.isis.audittrail.jpa.dom;
+package org.apache.isis.extensions.audittrail.jpa.dom;
 
 import org.springframework.stereotype.Service;
 
-import org.apache.isis.audittrail.applib.dom.AuditTrailEntry;
+import org.apache.isis.extensions.audittrail.applib.dom.AuditTrailEntry;
 
 @Service
-public class AuditTrailEntryRepository extends org.apache.isis.audittrail.applib.dom.AuditTrailEntryRepository<AuditTrailEntry> {
+public class AuditTrailEntryRepository extends org.apache.isis.extensions.audittrail.applib.dom.AuditTrailEntryRepository<AuditTrailEntry> {
 
     public AuditTrailEntryRepository() {
         super(AuditTrailEntry.class);
diff --git a/extensions/security/audittrail/persistence-jpa/src/test/java/org/apache/isis/audittrail/jpa/AuditTrail_IntegTest.java b/extensions/security/audittrail/persistence-jpa/src/test/java/org/apache/isis/extensions/audittrail/jpa/integtests/AuditTrail_IntegTest.java
similarity index 63%
rename from extensions/security/audittrail/persistence-jpa/src/test/java/org/apache/isis/audittrail/jpa/AuditTrail_IntegTest.java
rename to extensions/security/audittrail/persistence-jpa/src/test/java/org/apache/isis/extensions/audittrail/jpa/integtests/AuditTrail_IntegTest.java
index 089e6b04f8..1c16f421c3 100644
--- a/extensions/security/audittrail/persistence-jpa/src/test/java/org/apache/isis/audittrail/jpa/AuditTrail_IntegTest.java
+++ b/extensions/security/audittrail/persistence-jpa/src/test/java/org/apache/isis/extensions/audittrail/jpa/integtests/AuditTrail_IntegTest.java
@@ -16,8 +16,13 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.audittrail.jpa;
+package org.apache.isis.extensions.audittrail.jpa.integtests;
 
+import javax.inject.Inject;
+
+import org.assertj.core.api.Assumptions;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.BeforeEach;
 import org.springframework.boot.SpringBootConfiguration;
 import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
 import org.springframework.boot.test.context.SpringBootTest;
@@ -26,16 +31,25 @@ import org.springframework.context.annotation.PropertySource;
 import org.springframework.context.annotation.PropertySources;
 import org.springframework.test.context.ActiveProfiles;
 
-import org.apache.isis.audittrail.applib.AuditTrailIntegTestAbstract;
+import org.apache.isis.core.config.beans.IsisBeanTypeRegistry;
+import org.apache.isis.extensions.audittrail.applib.integtests.AuditTrail_IntegTestAbstract;
 import org.apache.isis.core.config.presets.IsisPresets;
 import org.apache.isis.core.runtimeservices.IsisModuleCoreRuntimeServices;
+import org.apache.isis.extensions.audittrail.jpa.IsisModuleExtAuditTrailPersistenceJpa;
+import org.apache.isis.extensions.audittrail.jpa.integtests.model.Counter;
 import org.apache.isis.security.bypass.IsisModuleSecurityBypass;
 
 @SpringBootTest(
         classes = AuditTrail_IntegTest.AppManifest.class
 )
 @ActiveProfiles("test")
-public class AuditTrail_IntegTest extends AuditTrailIntegTestAbstract {
+public class AuditTrail_IntegTest extends AuditTrail_IntegTestAbstract {
+
+
+    @Override
+    protected org.apache.isis.extensions.audittrail.applib.integtests.model.Counter newCounter(String name) {
+        return Counter.builder().name(name).build();
+    }
 
 
     @SpringBootConfiguration
@@ -51,5 +65,11 @@ public class AuditTrail_IntegTest extends AuditTrailIntegTestAbstract {
     public static class AppManifest {
     }
 
+    @BeforeEach()
+    void checkStack() {
+        // currently disabled for JPA, since EntityPropertyChangePublisher still to be implemented.
+        Assumptions.assumeThat(isisBeanTypeRegistry.determineCurrentPersistenceStack().isJpa()).isFalse();
+    }
 
+    @Inject IsisBeanTypeRegistry isisBeanTypeRegistry;
 }
diff --git a/extensions/security/audittrail/persistence-jpa/src/test/java/org/apache/isis/extensions/audittrail/jpa/integtests/model/Counter.java b/extensions/security/audittrail/persistence-jpa/src/test/java/org/apache/isis/extensions/audittrail/jpa/integtests/model/Counter.java
new file mode 100644
index 0000000000..f477634eb2
--- /dev/null
+++ b/extensions/security/audittrail/persistence-jpa/src/test/java/org/apache/isis/extensions/audittrail/jpa/integtests/model/Counter.java
@@ -0,0 +1,70 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+
+package org.apache.isis.extensions.audittrail.jpa.integtests.model;
+
+import javax.inject.Named;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+import org.apache.isis.applib.annotation.DomainObject;
+import org.apache.isis.applib.annotation.Nature;
+
+import lombok.AccessLevel;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+
+@Entity
+@Table(
+        schema = "public",
+        name = "Counter"
+)
+@Named("audittrail.test.Counter")
+@DomainObject(nature = Nature.ENTITY)
+@NoArgsConstructor
+@Builder
+@AllArgsConstructor(access = AccessLevel.PRIVATE)
+public class Counter extends org.apache.isis.extensions.audittrail.applib.integtests.model.Counter {
+
+    @Id
+    @GeneratedValue
+    @Getter @Setter
+    private Long id;
+
+    @Column(nullable = false)
+    @Getter @Setter
+    private String name;
+
+    @Column(nullable = true)
+    @Getter @Setter
+    private Long num;
+
+    @Column(nullable = true)
+    @Getter @Setter
+    private Long num2;
+
+
+}
diff --git a/extensions/security/sessionlog/persistence-jpa/src/main/java/org/apache/isis/sessionlog/jpa/dom/SessionLogEntryRepository.java b/extensions/security/audittrail/persistence-jpa/src/test/java/org/apache/isis/extensions/audittrail/jpa/integtests/model/CounterRepository.java
similarity index 71%
copy from extensions/security/sessionlog/persistence-jpa/src/main/java/org/apache/isis/sessionlog/jpa/dom/SessionLogEntryRepository.java
copy to extensions/security/audittrail/persistence-jpa/src/test/java/org/apache/isis/extensions/audittrail/jpa/integtests/model/CounterRepository.java
index fc0609083a..e50a02554a 100644
--- a/extensions/security/sessionlog/persistence-jpa/src/main/java/org/apache/isis/sessionlog/jpa/dom/SessionLogEntryRepository.java
+++ b/extensions/security/audittrail/persistence-jpa/src/test/java/org/apache/isis/extensions/audittrail/jpa/integtests/model/CounterRepository.java
@@ -18,14 +18,16 @@
  *
  */
 
-package org.apache.isis.sessionlog.jpa.dom;
+package org.apache.isis.extensions.audittrail.jpa.integtests.model;
 
-import org.springframework.stereotype.Service;
+import org.springframework.stereotype.Repository;
 
-@Service
-public class SessionLogEntryRepository extends org.apache.isis.sessionlog.applib.dom.SessionLogEntryRepository<SessionLogEntry> {
+@Repository
+public class CounterRepository
+        extends org.apache.isis.extensions.commandlog.applib.integtest.model.CounterRepository<Counter> {
 
-    public SessionLogEntryRepository() {
-        super(SessionLogEntry.class);
+    public CounterRepository() {
+        super(Counter.class);
     }
+
 }
diff --git a/extensions/security/sessionlog/applib/src/main/java/org/apache/isis/sessionlog/applib/IsisModuleExtSessionLogApplib.java b/extensions/security/sessionlog/applib/src/main/java/org/apache/isis/extensions/sessionlog/applib/IsisModuleExtSessionLogApplib.java
similarity index 87%
rename from extensions/security/sessionlog/applib/src/main/java/org/apache/isis/sessionlog/applib/IsisModuleExtSessionLogApplib.java
rename to extensions/security/sessionlog/applib/src/main/java/org/apache/isis/extensions/sessionlog/applib/IsisModuleExtSessionLogApplib.java
index 1cfa3b478d..270dcfbcd9 100644
--- a/extensions/security/sessionlog/applib/src/main/java/org/apache/isis/sessionlog/applib/IsisModuleExtSessionLogApplib.java
+++ b/extensions/security/sessionlog/applib/src/main/java/org/apache/isis/extensions/sessionlog/applib/IsisModuleExtSessionLogApplib.java
@@ -18,14 +18,14 @@
  *
  */
 
-package org.apache.isis.sessionlog.applib;
+package org.apache.isis.extensions.sessionlog.applib;
 
 import org.springframework.context.annotation.Configuration;
 import org.springframework.context.annotation.Import;
 
-import org.apache.isis.sessionlog.applib.app.SessionLogMenu;
-import org.apache.isis.sessionlog.applib.spiimpl.SessionSubscriberForSessionLog;
-import org.apache.isis.sessionlog.applib.spiimpl.SessionLogServiceInitializer;
+import org.apache.isis.extensions.sessionlog.applib.app.SessionLogMenu;
+import org.apache.isis.extensions.sessionlog.applib.spiimpl.SessionSubscriberForSessionLog;
+import org.apache.isis.extensions.sessionlog.applib.spiimpl.SessionLogServiceInitializer;
 
 
 @Configuration
diff --git a/extensions/security/sessionlog/applib/src/main/java/org/apache/isis/sessionlog/applib/app/SessionLogMenu.java b/extensions/security/sessionlog/applib/src/main/java/org/apache/isis/extensions/sessionlog/applib/app/SessionLogMenu.java
similarity index 92%
rename from extensions/security/sessionlog/applib/src/main/java/org/apache/isis/sessionlog/applib/app/SessionLogMenu.java
rename to extensions/security/sessionlog/applib/src/main/java/org/apache/isis/extensions/sessionlog/applib/app/SessionLogMenu.java
index 5a3e0be002..a126a31655 100644
--- a/extensions/security/sessionlog/applib/src/main/java/org/apache/isis/sessionlog/applib/app/SessionLogMenu.java
+++ b/extensions/security/sessionlog/applib/src/main/java/org/apache/isis/extensions/sessionlog/applib/app/SessionLogMenu.java
@@ -18,7 +18,7 @@
  *
  */
 
-package org.apache.isis.sessionlog.applib.app;
+package org.apache.isis.extensions.sessionlog.applib.app;
 
 import java.time.LocalDate;
 import java.util.List;
@@ -35,9 +35,9 @@ import org.apache.isis.applib.annotation.DomainServiceLayout;
 import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.NatureOfService;
 import org.apache.isis.applib.annotation.SemanticsOf;
-import org.apache.isis.sessionlog.applib.IsisModuleExtSessionLogApplib;
-import org.apache.isis.sessionlog.applib.dom.SessionLogEntry;
-import org.apache.isis.sessionlog.applib.dom.SessionLogEntryRepository;
+import org.apache.isis.extensions.sessionlog.applib.IsisModuleExtSessionLogApplib;
+import org.apache.isis.extensions.sessionlog.applib.dom.SessionLogEntry;
+import org.apache.isis.extensions.sessionlog.applib.dom.SessionLogEntryRepository;
 
 import lombok.RequiredArgsConstructor;
 
diff --git a/extensions/security/sessionlog/applib/src/main/java/org/apache/isis/sessionlog/applib/contributions/HasUsername_recentSessionsForUser.java b/extensions/security/sessionlog/applib/src/main/java/org/apache/isis/extensions/sessionlog/applib/contributions/HasUsername_recentSessionsForUser.java
similarity index 87%
rename from extensions/security/sessionlog/applib/src/main/java/org/apache/isis/sessionlog/applib/contributions/HasUsername_recentSessionsForUser.java
rename to extensions/security/sessionlog/applib/src/main/java/org/apache/isis/extensions/sessionlog/applib/contributions/HasUsername_recentSessionsForUser.java
index 025b1158a3..93fb4ea29e 100644
--- a/extensions/security/sessionlog/applib/src/main/java/org/apache/isis/sessionlog/applib/contributions/HasUsername_recentSessionsForUser.java
+++ b/extensions/security/sessionlog/applib/src/main/java/org/apache/isis/extensions/sessionlog/applib/contributions/HasUsername_recentSessionsForUser.java
@@ -18,7 +18,7 @@
  *
  */
 
-package org.apache.isis.sessionlog.applib.contributions;
+package org.apache.isis.extensions.sessionlog.applib.contributions;
 
 import java.util.Collections;
 import java.util.List;
@@ -30,9 +30,9 @@ import org.apache.isis.applib.annotation.ActionLayout;
 import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.SemanticsOf;
 import org.apache.isis.applib.mixins.security.HasUsername;
-import org.apache.isis.sessionlog.applib.IsisModuleExtSessionLogApplib;
-import org.apache.isis.sessionlog.applib.dom.SessionLogEntry;
-import org.apache.isis.sessionlog.applib.dom.SessionLogEntryRepository;
+import org.apache.isis.extensions.sessionlog.applib.IsisModuleExtSessionLogApplib;
+import org.apache.isis.extensions.sessionlog.applib.dom.SessionLogEntry;
+import org.apache.isis.extensions.sessionlog.applib.dom.SessionLogEntryRepository;
 
 import lombok.RequiredArgsConstructor;
 
diff --git a/extensions/security/sessionlog/applib/src/main/java/org/apache/isis/sessionlog/applib/dom/SessionLogEntry-expired.png b/extensions/security/sessionlog/applib/src/main/java/org/apache/isis/extensions/sessionlog/applib/dom/SessionLogEntry-expired.png
similarity index 100%
rename from extensions/security/sessionlog/applib/src/main/java/org/apache/isis/sessionlog/applib/dom/SessionLogEntry-expired.png
rename to extensions/security/sessionlog/applib/src/main/java/org/apache/isis/extensions/sessionlog/applib/dom/SessionLogEntry-expired.png
diff --git a/extensions/security/sessionlog/applib/src/main/java/org/apache/isis/sessionlog/applib/dom/SessionLogEntry-login.png b/extensions/security/sessionlog/applib/src/main/java/org/apache/isis/extensions/sessionlog/applib/dom/SessionLogEntry-login.png
similarity index 100%
rename from extensions/security/sessionlog/applib/src/main/java/org/apache/isis/sessionlog/applib/dom/SessionLogEntry-login.png
rename to extensions/security/sessionlog/applib/src/main/java/org/apache/isis/extensions/sessionlog/applib/dom/SessionLogEntry-login.png
diff --git a/extensions/security/sessionlog/applib/src/main/java/org/apache/isis/sessionlog/applib/dom/SessionLogEntry-logout.png b/extensions/security/sessionlog/applib/src/main/java/org/apache/isis/extensions/sessionlog/applib/dom/SessionLogEntry-logout.png
similarity index 100%
rename from extensions/security/sessionlog/applib/src/main/java/org/apache/isis/sessionlog/applib/dom/SessionLogEntry-logout.png
rename to extensions/security/sessionlog/applib/src/main/java/org/apache/isis/extensions/sessionlog/applib/dom/SessionLogEntry-logout.png
diff --git a/extensions/security/sessionlog/applib/src/main/java/org/apache/isis/sessionlog/applib/dom/SessionLogEntry.java b/extensions/security/sessionlog/applib/src/main/java/org/apache/isis/extensions/sessionlog/applib/dom/SessionLogEntry.java
similarity index 98%
rename from extensions/security/sessionlog/applib/src/main/java/org/apache/isis/sessionlog/applib/dom/SessionLogEntry.java
rename to extensions/security/sessionlog/applib/src/main/java/org/apache/isis/extensions/sessionlog/applib/dom/SessionLogEntry.java
index e648816e91..df740afc52 100644
--- a/extensions/security/sessionlog/applib/src/main/java/org/apache/isis/sessionlog/applib/dom/SessionLogEntry.java
+++ b/extensions/security/sessionlog/applib/src/main/java/org/apache/isis/extensions/sessionlog/applib/dom/SessionLogEntry.java
@@ -18,14 +18,13 @@
  *
  */
 
-package org.apache.isis.sessionlog.applib.dom;
+package org.apache.isis.extensions.sessionlog.applib.dom;
 
 import java.lang.annotation.ElementType;
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
 import java.lang.annotation.Target;
 import java.sql.Timestamp;
-import java.text.SimpleDateFormat;
 import java.time.format.DateTimeFormatter;
 import java.util.List;
 import java.util.UUID;
@@ -48,11 +47,9 @@ import org.apache.isis.applib.annotation.SemanticsOf;
 import org.apache.isis.applib.annotation.Where;
 import org.apache.isis.applib.layout.component.CssClassFaPosition;
 import org.apache.isis.applib.mixins.security.HasUsername;
-import org.apache.isis.applib.mixins.system.DomainChangeRecord;
-import org.apache.isis.applib.mixins.system.HasInteractionId;
 import org.apache.isis.applib.services.session.SessionSubscriber;
 import org.apache.isis.applib.util.ObjectContracts;
-import org.apache.isis.sessionlog.applib.IsisModuleExtSessionLogApplib;
+import org.apache.isis.extensions.sessionlog.applib.IsisModuleExtSessionLogApplib;
 
 import lombok.experimental.UtilityClass;
 
diff --git a/extensions/security/sessionlog/applib/src/main/java/org/apache/isis/sessionlog/applib/dom/SessionLogEntry.layout.fallback.xml b/extensions/security/sessionlog/applib/src/main/java/org/apache/isis/extensions/sessionlog/applib/dom/SessionLogEntry.layout.fallback.xml
similarity index 100%
rename from extensions/security/sessionlog/applib/src/main/java/org/apache/isis/sessionlog/applib/dom/SessionLogEntry.layout.fallback.xml
rename to extensions/security/sessionlog/applib/src/main/java/org/apache/isis/extensions/sessionlog/applib/dom/SessionLogEntry.layout.fallback.xml
diff --git a/extensions/security/sessionlog/applib/src/main/java/org/apache/isis/sessionlog/applib/dom/SessionLogEntryRepository.java b/extensions/security/sessionlog/applib/src/main/java/org/apache/isis/extensions/sessionlog/applib/dom/SessionLogEntryRepository.java
similarity index 99%
rename from extensions/security/sessionlog/applib/src/main/java/org/apache/isis/sessionlog/applib/dom/SessionLogEntryRepository.java
rename to extensions/security/sessionlog/applib/src/main/java/org/apache/isis/extensions/sessionlog/applib/dom/SessionLogEntryRepository.java
index 1c3ebbdf1f..4d1c703815 100644
--- a/extensions/security/sessionlog/applib/src/main/java/org/apache/isis/sessionlog/applib/dom/SessionLogEntryRepository.java
+++ b/extensions/security/sessionlog/applib/src/main/java/org/apache/isis/extensions/sessionlog/applib/dom/SessionLogEntryRepository.java
@@ -18,7 +18,7 @@
  *
  */
 
-package org.apache.isis.sessionlog.applib.dom;
+package org.apache.isis.extensions.sessionlog.applib.dom;
 
 import java.sql.Timestamp;
 import java.time.LocalDate;
diff --git a/extensions/security/sessionlog/applib/src/main/java/org/apache/isis/sessionlog/applib/spiimpl/SessionLogServiceInitializer.java b/extensions/security/sessionlog/applib/src/main/java/org/apache/isis/extensions/sessionlog/applib/spiimpl/SessionLogServiceInitializer.java
similarity index 89%
rename from extensions/security/sessionlog/applib/src/main/java/org/apache/isis/sessionlog/applib/spiimpl/SessionLogServiceInitializer.java
rename to extensions/security/sessionlog/applib/src/main/java/org/apache/isis/extensions/sessionlog/applib/spiimpl/SessionLogServiceInitializer.java
index e39197bfc1..ebd74e812a 100644
--- a/extensions/security/sessionlog/applib/src/main/java/org/apache/isis/sessionlog/applib/spiimpl/SessionLogServiceInitializer.java
+++ b/extensions/security/sessionlog/applib/src/main/java/org/apache/isis/extensions/sessionlog/applib/spiimpl/SessionLogServiceInitializer.java
@@ -18,7 +18,7 @@
  *
  */
 
-package org.apache.isis.sessionlog.applib.spiimpl;
+package org.apache.isis.extensions.sessionlog.applib.spiimpl;
 
 import javax.inject.Inject;
 
@@ -28,8 +28,8 @@ import org.apache.isis.applib.events.metamodel.MetamodelListener;
 import org.apache.isis.applib.services.clock.ClockService;
 import org.apache.isis.applib.services.iactnlayer.InteractionService;
 import org.apache.isis.core.config.IsisConfiguration;
-import org.apache.isis.sessionlog.applib.dom.SessionLogEntry;
-import org.apache.isis.sessionlog.applib.dom.SessionLogEntryRepository;
+import org.apache.isis.extensions.sessionlog.applib.dom.SessionLogEntry;
+import org.apache.isis.extensions.sessionlog.applib.dom.SessionLogEntryRepository;
 
 import lombok.RequiredArgsConstructor;
 import lombok.val;
diff --git a/extensions/security/sessionlog/applib/src/main/java/org/apache/isis/sessionlog/applib/spiimpl/SessionSubscriberForSessionLog.java b/extensions/security/sessionlog/applib/src/main/java/org/apache/isis/extensions/sessionlog/applib/spiimpl/SessionSubscriberForSessionLog.java
similarity index 90%
rename from extensions/security/sessionlog/applib/src/main/java/org/apache/isis/sessionlog/applib/spiimpl/SessionSubscriberForSessionLog.java
rename to extensions/security/sessionlog/applib/src/main/java/org/apache/isis/extensions/sessionlog/applib/spiimpl/SessionSubscriberForSessionLog.java
index 3104ad34f7..34e8c131ca 100644
--- a/extensions/security/sessionlog/applib/src/main/java/org/apache/isis/sessionlog/applib/spiimpl/SessionSubscriberForSessionLog.java
+++ b/extensions/security/sessionlog/applib/src/main/java/org/apache/isis/extensions/sessionlog/applib/spiimpl/SessionSubscriberForSessionLog.java
@@ -18,7 +18,7 @@
  *
  */
 
-package org.apache.isis.sessionlog.applib.spiimpl;
+package org.apache.isis.extensions.sessionlog.applib.spiimpl;
 
 import java.sql.Timestamp;
 import java.util.Date;
@@ -34,9 +34,9 @@ import org.springframework.stereotype.Service;
 import org.apache.isis.applib.annotation.PriorityPrecedence;
 import org.apache.isis.applib.services.clock.ClockService;
 import org.apache.isis.applib.services.session.SessionSubscriber;
-import org.apache.isis.sessionlog.applib.IsisModuleExtSessionLogApplib;
-import org.apache.isis.sessionlog.applib.dom.SessionLogEntry;
-import org.apache.isis.sessionlog.applib.dom.SessionLogEntryRepository;
+import org.apache.isis.extensions.sessionlog.applib.IsisModuleExtSessionLogApplib;
+import org.apache.isis.extensions.sessionlog.applib.dom.SessionLogEntry;
+import org.apache.isis.extensions.sessionlog.applib.dom.SessionLogEntryRepository;
 
 import lombok.RequiredArgsConstructor;
 import lombok.val;
diff --git a/extensions/security/sessionlog/applib/src/test/java/org/apache/isis/sessionlog/applib/SessionLogIntegTestAbstract.java b/extensions/security/sessionlog/applib/src/test/java/org/apache/isis/extensions/sessionlog/applib/integtests/SessionLogIntegTestAbstract.java
similarity index 96%
rename from extensions/security/sessionlog/applib/src/test/java/org/apache/isis/sessionlog/applib/SessionLogIntegTestAbstract.java
rename to extensions/security/sessionlog/applib/src/test/java/org/apache/isis/extensions/sessionlog/applib/integtests/SessionLogIntegTestAbstract.java
index 10963f788f..fab72f52e6 100644
--- a/extensions/security/sessionlog/applib/src/test/java/org/apache/isis/sessionlog/applib/SessionLogIntegTestAbstract.java
+++ b/extensions/security/sessionlog/applib/src/test/java/org/apache/isis/extensions/sessionlog/applib/integtests/SessionLogIntegTestAbstract.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.sessionlog.applib;
+package org.apache.isis.extensions.sessionlog.applib.integtests;
 
 import java.sql.Timestamp;
 import java.time.Duration;
@@ -36,8 +36,8 @@ import org.springframework.beans.factory.annotation.Qualifier;
 
 import org.apache.isis.applib.annotation.Value;
 import org.apache.isis.applib.services.session.SessionSubscriber;
-import org.apache.isis.sessionlog.applib.dom.SessionLogEntry;
-import org.apache.isis.sessionlog.applib.dom.SessionLogEntryRepository;
+import org.apache.isis.extensions.sessionlog.applib.dom.SessionLogEntry;
+import org.apache.isis.extensions.sessionlog.applib.dom.SessionLogEntryRepository;
 import org.apache.isis.testing.integtestsupport.applib.IsisIntegrationTestAbstract;
 
 import lombok.Getter;
diff --git a/extensions/security/sessionlog/persistence-jdo/src/main/java/org/apache/isis/sessionlog/jdo/IsisModuleExtSessionLogPersistenceJdo.java b/extensions/security/sessionlog/persistence-jdo/src/main/java/org/apache/isis/extensions/sessionlog/jdo/IsisModuleExtSessionLogPersistenceJdo.java
similarity index 87%
rename from extensions/security/sessionlog/persistence-jdo/src/main/java/org/apache/isis/sessionlog/jdo/IsisModuleExtSessionLogPersistenceJdo.java
rename to extensions/security/sessionlog/persistence-jdo/src/main/java/org/apache/isis/extensions/sessionlog/jdo/IsisModuleExtSessionLogPersistenceJdo.java
index c53ae226ea..ccc3c24e45 100644
--- a/extensions/security/sessionlog/persistence-jdo/src/main/java/org/apache/isis/sessionlog/jdo/IsisModuleExtSessionLogPersistenceJdo.java
+++ b/extensions/security/sessionlog/persistence-jdo/src/main/java/org/apache/isis/extensions/sessionlog/jdo/IsisModuleExtSessionLogPersistenceJdo.java
@@ -18,15 +18,15 @@
  *
  */
 
-package org.apache.isis.sessionlog.jdo;
+package org.apache.isis.extensions.sessionlog.jdo;
 
 import org.springframework.context.annotation.Configuration;
 import org.springframework.context.annotation.Import;
 
 import org.apache.isis.persistence.jdo.datanucleus.IsisModulePersistenceJdoDatanucleus;
-import org.apache.isis.sessionlog.applib.IsisModuleExtSessionLogApplib;
-import org.apache.isis.sessionlog.jdo.dom.SessionLogEntry;
-import org.apache.isis.sessionlog.jdo.dom.SessionLogEntryRepository;
+import org.apache.isis.extensions.sessionlog.applib.IsisModuleExtSessionLogApplib;
+import org.apache.isis.extensions.sessionlog.jdo.dom.SessionLogEntry;
+import org.apache.isis.extensions.sessionlog.jdo.dom.SessionLogEntryRepository;
 import org.apache.isis.testing.fixtures.applib.IsisModuleTestingFixturesApplib;
 import org.apache.isis.testing.fixtures.applib.fixturescripts.FixtureScript;
 import org.apache.isis.testing.fixtures.applib.modules.ModuleWithFixtures;
diff --git a/extensions/security/sessionlog/persistence-jdo/src/main/java/org/apache/isis/sessionlog/jdo/dom/SessionLogEntry.java b/extensions/security/sessionlog/persistence-jdo/src/main/java/org/apache/isis/extensions/sessionlog/jdo/dom/SessionLogEntry.java
similarity index 95%
rename from extensions/security/sessionlog/persistence-jdo/src/main/java/org/apache/isis/sessionlog/jdo/dom/SessionLogEntry.java
rename to extensions/security/sessionlog/persistence-jdo/src/main/java/org/apache/isis/extensions/sessionlog/jdo/dom/SessionLogEntry.java
index 512dff9bc2..cc2b546a2f 100644
--- a/extensions/security/sessionlog/persistence-jdo/src/main/java/org/apache/isis/sessionlog/jdo/dom/SessionLogEntry.java
+++ b/extensions/security/sessionlog/persistence-jdo/src/main/java/org/apache/isis/extensions/sessionlog/jdo/dom/SessionLogEntry.java
@@ -18,7 +18,7 @@
  *
  */
 
-package org.apache.isis.sessionlog.jdo.dom;
+package org.apache.isis.extensions.sessionlog.jdo.dom;
 
 import java.sql.Timestamp;
 import java.util.UUID;
@@ -34,7 +34,7 @@ import javax.jdo.annotations.Query;
 import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.Editing;
 import org.apache.isis.applib.services.session.SessionSubscriber;
-import org.apache.isis.sessionlog.applib.dom.SessionLogEntry.Nq;
+import org.apache.isis.extensions.sessionlog.applib.dom.SessionLogEntry.Nq;
 
 import lombok.Getter;
 import lombok.Setter;
@@ -138,9 +138,9 @@ import lombok.Setter;
 @DomainObject(
         editing = Editing.DISABLED
 )
-public class SessionLogEntry extends org.apache.isis.sessionlog.applib.dom.SessionLogEntry {
+public class SessionLogEntry extends org.apache.isis.extensions.sessionlog.applib.dom.SessionLogEntry {
 
-    public static final String FQCN = "org.apache.isis.sessionlog.jdo.dom.SessionLogEntry";
+    public static final String FQCN = "org.apache.isis.extensions.sessionlog.jdo.dom.SessionLogEntry";
 
     public SessionLogEntry(
             final UUID sessionGuid,
diff --git a/extensions/security/sessionlog/persistence-jpa/src/main/java/org/apache/isis/sessionlog/jpa/dom/SessionLogEntryRepository.java b/extensions/security/sessionlog/persistence-jdo/src/main/java/org/apache/isis/extensions/sessionlog/jdo/dom/SessionLogEntryRepository.java
similarity index 83%
rename from extensions/security/sessionlog/persistence-jpa/src/main/java/org/apache/isis/sessionlog/jpa/dom/SessionLogEntryRepository.java
rename to extensions/security/sessionlog/persistence-jdo/src/main/java/org/apache/isis/extensions/sessionlog/jdo/dom/SessionLogEntryRepository.java
index fc0609083a..56244fa413 100644
--- a/extensions/security/sessionlog/persistence-jpa/src/main/java/org/apache/isis/sessionlog/jpa/dom/SessionLogEntryRepository.java
+++ b/extensions/security/sessionlog/persistence-jdo/src/main/java/org/apache/isis/extensions/sessionlog/jdo/dom/SessionLogEntryRepository.java
@@ -18,12 +18,12 @@
  *
  */
 
-package org.apache.isis.sessionlog.jpa.dom;
+package org.apache.isis.extensions.sessionlog.jdo.dom;
 
 import org.springframework.stereotype.Service;
 
 @Service
-public class SessionLogEntryRepository extends org.apache.isis.sessionlog.applib.dom.SessionLogEntryRepository<SessionLogEntry> {
+public class SessionLogEntryRepository extends org.apache.isis.extensions.sessionlog.applib.dom.SessionLogEntryRepository<SessionLogEntry> {
 
     public SessionLogEntryRepository() {
         super(SessionLogEntry.class);
diff --git a/extensions/security/sessionlog/persistence-jdo/src/test/java/org/apache/isis/sessionlog/jdo/SessionLog_IntegTest.java b/extensions/security/sessionlog/persistence-jdo/src/test/java/org/apache/isis/sessionlog/jdo/integtests/SessionLog_IntegTest.java
similarity index 86%
rename from extensions/security/sessionlog/persistence-jdo/src/test/java/org/apache/isis/sessionlog/jdo/SessionLog_IntegTest.java
rename to extensions/security/sessionlog/persistence-jdo/src/test/java/org/apache/isis/sessionlog/jdo/integtests/SessionLog_IntegTest.java
index 0ae5371dea..0d391005cc 100644
--- a/extensions/security/sessionlog/persistence-jdo/src/test/java/org/apache/isis/sessionlog/jdo/SessionLog_IntegTest.java
+++ b/extensions/security/sessionlog/persistence-jdo/src/test/java/org/apache/isis/sessionlog/jdo/integtests/SessionLog_IntegTest.java
@@ -16,12 +16,8 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.sessionlog.jdo;
+package org.apache.isis.sessionlog.jdo.integtests;
 
-import javax.inject.Inject;
-
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
 import org.springframework.boot.SpringBootConfiguration;
 import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
 import org.springframework.boot.test.context.SpringBootTest;
@@ -33,10 +29,8 @@ import org.springframework.test.context.ActiveProfiles;
 import org.apache.isis.core.config.presets.IsisPresets;
 import org.apache.isis.core.runtimeservices.IsisModuleCoreRuntimeServices;
 import org.apache.isis.security.bypass.IsisModuleSecurityBypass;
-import org.apache.isis.sessionlog.applib.SessionLogIntegTestAbstract;
-import org.apache.isis.sessionlog.jdo.dom.SessionLogEntryRepository;
-
-import lombok.Getter;
+import org.apache.isis.extensions.sessionlog.applib.integtests.SessionLogIntegTestAbstract;
+import org.apache.isis.extensions.sessionlog.jdo.IsisModuleExtSessionLogPersistenceJdo;
 
 @SpringBootTest(
         classes = SessionLog_IntegTest.AppManifest.class
diff --git a/extensions/security/sessionlog/persistence-jpa/src/main/java/org/apache/isis/sessionlog/jpa/IsisModuleExtSessionLogPersistenceJpa.java b/extensions/security/sessionlog/persistence-jpa/src/main/java/org/apache/isis/extensions/sessionlog/jpa/IsisModuleExtSessionLogPersistenceJpa.java
similarity index 85%
rename from extensions/security/sessionlog/persistence-jpa/src/main/java/org/apache/isis/sessionlog/jpa/IsisModuleExtSessionLogPersistenceJpa.java
rename to extensions/security/sessionlog/persistence-jpa/src/main/java/org/apache/isis/extensions/sessionlog/jpa/IsisModuleExtSessionLogPersistenceJpa.java
index 8c84444c62..49a4f22f8d 100644
--- a/extensions/security/sessionlog/persistence-jpa/src/main/java/org/apache/isis/sessionlog/jpa/IsisModuleExtSessionLogPersistenceJpa.java
+++ b/extensions/security/sessionlog/persistence-jpa/src/main/java/org/apache/isis/extensions/sessionlog/jpa/IsisModuleExtSessionLogPersistenceJpa.java
@@ -18,21 +18,20 @@
  *
  */
 
-package org.apache.isis.sessionlog.jpa;
+package org.apache.isis.extensions.sessionlog.jpa;
 
 import org.springframework.boot.autoconfigure.domain.EntityScan;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.context.annotation.Import;
 
 import org.apache.isis.persistence.jpa.eclipselink.IsisModulePersistenceJpaEclipselink;
-import org.apache.isis.sessionlog.applib.IsisModuleExtSessionLogApplib;
-import org.apache.isis.sessionlog.jpa.dom.SessionLogEntry;
-import org.apache.isis.sessionlog.jpa.dom.SessionLogEntryPK;
-import org.apache.isis.sessionlog.jpa.dom.SessionLogEntryRepository;
+import org.apache.isis.extensions.sessionlog.applib.IsisModuleExtSessionLogApplib;
+import org.apache.isis.extensions.sessionlog.jpa.dom.SessionLogEntry;
+import org.apache.isis.extensions.sessionlog.jpa.dom.SessionLogEntryPK;
+import org.apache.isis.extensions.sessionlog.jpa.dom.SessionLogEntryRepository;
 import org.apache.isis.testing.fixtures.applib.IsisModuleTestingFixturesApplib;
 import org.apache.isis.testing.fixtures.applib.fixturescripts.FixtureScript;
 import org.apache.isis.testing.fixtures.applib.modules.ModuleWithFixtures;
-import org.apache.isis.testing.fixtures.applib.teardown.jdo.TeardownFixtureJdoAbstract;
 import org.apache.isis.testing.fixtures.applib.teardown.jpa.TeardownFixtureJpaAbstract;
 
 
diff --git a/extensions/security/sessionlog/persistence-jpa/src/main/java/org/apache/isis/sessionlog/jpa/dom/SessionLogEntry.java b/extensions/security/sessionlog/persistence-jpa/src/main/java/org/apache/isis/extensions/sessionlog/jpa/dom/SessionLogEntry.java
similarity index 96%
rename from extensions/security/sessionlog/persistence-jpa/src/main/java/org/apache/isis/sessionlog/jpa/dom/SessionLogEntry.java
rename to extensions/security/sessionlog/persistence-jpa/src/main/java/org/apache/isis/extensions/sessionlog/jpa/dom/SessionLogEntry.java
index e83f639224..5172df323f 100644
--- a/extensions/security/sessionlog/persistence-jpa/src/main/java/org/apache/isis/sessionlog/jpa/dom/SessionLogEntry.java
+++ b/extensions/security/sessionlog/persistence-jpa/src/main/java/org/apache/isis/extensions/sessionlog/jpa/dom/SessionLogEntry.java
@@ -18,7 +18,7 @@
  *
  */
 
-package org.apache.isis.sessionlog.jpa.dom;
+package org.apache.isis.extensions.sessionlog.jpa.dom;
 
 import java.sql.Timestamp;
 import java.util.UUID;
@@ -28,7 +28,6 @@ import javax.persistence.Column;
 import javax.persistence.EmbeddedId;
 import javax.persistence.Entity;
 import javax.persistence.EntityListeners;
-import javax.persistence.Id;
 import javax.persistence.NamedQueries;
 import javax.persistence.NamedQuery;
 import javax.persistence.Table;
@@ -38,7 +37,7 @@ import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.Editing;
 import org.apache.isis.applib.services.session.SessionSubscriber;
 import org.apache.isis.persistence.jpa.applib.integration.IsisEntityListener;
-import org.apache.isis.sessionlog.applib.dom.SessionLogEntry.Nq;
+import org.apache.isis.extensions.sessionlog.applib.dom.SessionLogEntry.Nq;
 
 import lombok.Getter;
 import lombok.Setter;
@@ -144,7 +143,7 @@ import lombok.Setter;
 @DomainObject(
         editing = Editing.DISABLED
 )
-public class SessionLogEntry extends org.apache.isis.sessionlog.applib.dom.SessionLogEntry {
+public class SessionLogEntry extends org.apache.isis.extensions.sessionlog.applib.dom.SessionLogEntry {
 
     public SessionLogEntry(
             final UUID sessionGuid,
diff --git a/extensions/security/sessionlog/persistence-jpa/src/main/java/org/apache/isis/sessionlog/jpa/dom/SessionLogEntryPK.java b/extensions/security/sessionlog/persistence-jpa/src/main/java/org/apache/isis/extensions/sessionlog/jpa/dom/SessionLogEntryPK.java
similarity index 95%
rename from extensions/security/sessionlog/persistence-jpa/src/main/java/org/apache/isis/sessionlog/jpa/dom/SessionLogEntryPK.java
rename to extensions/security/sessionlog/persistence-jpa/src/main/java/org/apache/isis/extensions/sessionlog/jpa/dom/SessionLogEntryPK.java
index 55f25d0d74..73dbe5d170 100644
--- a/extensions/security/sessionlog/persistence-jpa/src/main/java/org/apache/isis/sessionlog/jpa/dom/SessionLogEntryPK.java
+++ b/extensions/security/sessionlog/persistence-jpa/src/main/java/org/apache/isis/extensions/sessionlog/jpa/dom/SessionLogEntryPK.java
@@ -18,7 +18,7 @@
  *
  */
 
-package org.apache.isis.sessionlog.jpa.dom;
+package org.apache.isis.extensions.sessionlog.jpa.dom;
 
 import java.io.Serializable;
 import java.util.UUID;
@@ -31,7 +31,7 @@ import org.springframework.stereotype.Component;
 
 import org.apache.isis.applib.services.bookmark.IdStringifier;
 import org.apache.isis.persistence.jpa.integration.typeconverters.java.util.JavaUtilUuidConverter;
-import org.apache.isis.sessionlog.applib.dom.SessionLogEntry;
+import org.apache.isis.extensions.sessionlog.applib.dom.SessionLogEntry;
 
 import lombok.AccessLevel;
 import lombok.AllArgsConstructor;
diff --git a/extensions/security/sessionlog/persistence-jdo/src/main/java/org/apache/isis/sessionlog/jdo/dom/SessionLogEntryRepository.java b/extensions/security/sessionlog/persistence-jpa/src/main/java/org/apache/isis/extensions/sessionlog/jpa/dom/SessionLogEntryRepository.java
similarity index 83%
rename from extensions/security/sessionlog/persistence-jdo/src/main/java/org/apache/isis/sessionlog/jdo/dom/SessionLogEntryRepository.java
rename to extensions/security/sessionlog/persistence-jpa/src/main/java/org/apache/isis/extensions/sessionlog/jpa/dom/SessionLogEntryRepository.java
index d13bcb502a..bfe9ea07d0 100644
--- a/extensions/security/sessionlog/persistence-jdo/src/main/java/org/apache/isis/sessionlog/jdo/dom/SessionLogEntryRepository.java
+++ b/extensions/security/sessionlog/persistence-jpa/src/main/java/org/apache/isis/extensions/sessionlog/jpa/dom/SessionLogEntryRepository.java
@@ -18,12 +18,12 @@
  *
  */
 
-package org.apache.isis.sessionlog.jdo.dom;
+package org.apache.isis.extensions.sessionlog.jpa.dom;
 
 import org.springframework.stereotype.Service;
 
 @Service
-public class SessionLogEntryRepository extends org.apache.isis.sessionlog.applib.dom.SessionLogEntryRepository<SessionLogEntry> {
+public class SessionLogEntryRepository extends org.apache.isis.extensions.sessionlog.applib.dom.SessionLogEntryRepository<SessionLogEntry> {
 
     public SessionLogEntryRepository() {
         super(SessionLogEntry.class);
diff --git a/extensions/security/sessionlog/persistence-jpa/src/test/java/org/apache/isis/sessionlog/jpa/SessionLog_IntegTest.java b/extensions/security/sessionlog/persistence-jpa/src/test/java/org/apache/isis/extensions/sessionlog/jpa/integtests/SessionLog_IntegTest.java
similarity index 89%
rename from extensions/security/sessionlog/persistence-jpa/src/test/java/org/apache/isis/sessionlog/jpa/SessionLog_IntegTest.java
rename to extensions/security/sessionlog/persistence-jpa/src/test/java/org/apache/isis/extensions/sessionlog/jpa/integtests/SessionLog_IntegTest.java
index f10ee7b58f..08589a307d 100644
--- a/extensions/security/sessionlog/persistence-jpa/src/test/java/org/apache/isis/sessionlog/jpa/SessionLog_IntegTest.java
+++ b/extensions/security/sessionlog/persistence-jpa/src/test/java/org/apache/isis/extensions/sessionlog/jpa/integtests/SessionLog_IntegTest.java
@@ -16,9 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.sessionlog.jpa;
-
-import javax.inject.Inject;
+package org.apache.isis.extensions.sessionlog.jpa.integtests;
 
 import org.springframework.boot.SpringBootConfiguration;
 import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
@@ -31,10 +29,8 @@ import org.springframework.test.context.ActiveProfiles;
 import org.apache.isis.core.config.presets.IsisPresets;
 import org.apache.isis.core.runtimeservices.IsisModuleCoreRuntimeServices;
 import org.apache.isis.security.bypass.IsisModuleSecurityBypass;
-import org.apache.isis.sessionlog.applib.SessionLogIntegTestAbstract;
-import org.apache.isis.sessionlog.jpa.dom.SessionLogEntryRepository;
-
-import lombok.Getter;
+import org.apache.isis.extensions.sessionlog.applib.integtests.SessionLogIntegTestAbstract;
+import org.apache.isis.extensions.sessionlog.jpa.IsisModuleExtSessionLogPersistenceJpa;
 
 @SpringBootTest(
         classes = SessionLog_IntegTest.AppManifest.class