You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by jo...@apache.org on 2021/10/22 16:00:58 UTC

[isis] branch master updated (d1bf3be -> bc28a29)

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

joergrade pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git.


    from d1bf3be  Merge remote-tracking branch 'origin/master'
     new 59ec70a  ISIS-2348 EventStore refactored from object (Singleton) to class
     new 2c8fe0b  ISIS-2348 replay timing improved
     new bc28a29  ISIS-2348 set cursor shape to indicate system activity

The 3 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../org/apache/isis/client/kroviz/core/Session.kt  |   2 +
 .../kroviz/core/aggregator/ErrorDispatcher.kt      |   4 +-
 .../isis/client/kroviz/core/event/EventStore.kt    |   2 +-
 .../isis/client/kroviz/core/event/LogEntry.kt      |   5 +
 .../isis/client/kroviz/core/event/ReplayCommand.kt |  16 +--
 .../isis/client/kroviz/core/event/ResourceProxy.kt |  12 +-
 .../client/kroviz/core/event/RoXmlHttpRequest.kt   |  12 +-
 .../isis/client/kroviz/core/model/ObjectDM.kt      |  48 +++----
 .../isis/client/kroviz/ui/core/MenuFactory.kt      |   2 +-
 .../apache/isis/client/kroviz/ui/core/RoIconBar.kt |   2 +-
 .../apache/isis/client/kroviz/ui/core/RoMenuBar.kt |   2 +-
 .../apache/isis/client/kroviz/ui/core/UiManager.kt |  29 ++++-
 .../client/kroviz/ui/diagram/LinkTreeDiagram.kt    |   2 +-
 .../isis/client/kroviz/ui/dialog/DiagramDialog.kt  |   2 +-
 .../client/kroviz/ui/dialog/EventExportDialog.kt   |   7 +-
 .../isis/client/kroviz/ui/dialog/EventLogDetail.kt |   3 +-
 .../client/kroviz/ui/panel/DynamicMenuBuilder.kt   |   2 +-
 .../apache/isis/client/kroviz/IntegrationTest.kt   |   5 +-
 .../core/aggregator/CollectionAggregatorTest.kt    |   9 +-
 .../client/kroviz/core/event/EventStoreTest.kt     | 140 +++++++++++----------
 .../org/apache/isis/client/kroviz/to/ActionTest.kt |   7 +-
 .../isis/client/kroviz/to/ResultValueTest.kt       |   3 +-
 .../client/kroviz/ui/table/LinkTreeDiagramTest.kt  |  24 ++--
 23 files changed, 196 insertions(+), 144 deletions(-)

[isis] 02/03: ISIS-2348 replay timing improved

Posted by jo...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

joergrade pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git

commit 2c8fe0b73e0af255fda1e72407f94ae0c6c33ad2
Author: Jörg Rade <jo...@kuehne-nagel.com>
AuthorDate: Fri Oct 22 16:25:43 2021 +0200

    ISIS-2348 replay timing improved
---
 .../org/apache/isis/client/kroviz/core/event/ReplayCommand.kt  | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/event/ReplayCommand.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/event/ReplayCommand.kt
index 4aa7604..5a5cb36 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/event/ReplayCommand.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/event/ReplayCommand.kt
@@ -47,10 +47,10 @@ class ReplayCommand {
         var previous: LogEntry? = null
         userActions.forEach {
             if (it.isUserAction() && previous != null) {
+                val ms = calculateDelay(previous!!, it) // needs to be outside of launch{} - or current=previous
+                val obj = it.obj as TObject
                 AppScope.launch {
-                    val ms = calculateDelay(previous!!, it)
                     delay(ms) // non-blocking delay
-                    val obj = it.obj as TObject
                     ResourceProxy().load(obj)
                 }
             } else {
@@ -62,9 +62,9 @@ class ReplayCommand {
     }
 
     private fun calculateDelay(previous: LogEntry, current: LogEntry): Long {
-        val currentMillis = current.createdAt.getTime().toLong()
-        val previousMillis = previous.createdAt.getTime().toLong()
-        return currentMillis - previousMillis
+        val currentMs = current.createdAt.getTime()
+        val previousMs = previous.createdAt.getTime()
+        return  currentMs.minus(previousMs).toLong()
     }
 
     private fun filterReplayEvents(events: List<LogEntry>): List<LogEntry> {

[isis] 03/03: ISIS-2348 set cursor shape to indicate system activity

Posted by jo...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

joergrade pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git

commit bc28a29d4cd1afc341f1895a76cd300af32b6ffd
Author: Jörg Rade <jo...@kuehne-nagel.com>
AuthorDate: Fri Oct 22 17:59:56 2021 +0200

    ISIS-2348 set cursor shape to indicate system activity
---
 .../apache/isis/client/kroviz/core/event/LogEntry.kt  |  5 +++++
 .../isis/client/kroviz/core/event/ResourceProxy.kt    |  5 ++---
 .../apache/isis/client/kroviz/ui/core/UiManager.kt    | 19 +++++++++++++++++++
 3 files changed, 26 insertions(+), 3 deletions(-)

diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/event/LogEntry.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/event/LogEntry.kt
index 09e57ac..0aca7f4 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/event/LogEntry.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/event/LogEntry.kt
@@ -22,12 +22,14 @@ import io.kvision.html.ButtonStyle
 import io.kvision.panel.SimplePanel
 import kotlinx.serialization.Contextual
 import kotlinx.serialization.Serializable
+import org.apache.isis.client.kroviz.core.aggregator.ActionDispatcher
 import org.apache.isis.client.kroviz.core.aggregator.BaseAggregator
 import org.apache.isis.client.kroviz.to.HasLinks
 import org.apache.isis.client.kroviz.to.Link
 import org.apache.isis.client.kroviz.to.Relation
 import org.apache.isis.client.kroviz.to.TransferObject
 import org.apache.isis.client.kroviz.ui.core.Constants
+import org.apache.isis.client.kroviz.ui.core.UiManager
 import org.w3c.files.Blob
 import kotlin.js.Date
 
@@ -232,6 +234,9 @@ data class LogEntry(
     }
 
     fun addAggregator(aggregator: BaseAggregator) {
+        if (aggregator is ActionDispatcher) {
+            UiManager.setBusyCursor()
+        }
         aggregators.add(aggregator)
         nOfAggregators = aggregators.size
     }
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/event/ResourceProxy.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/event/ResourceProxy.kt
index aeb5f2d..0ef46f7 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/event/ResourceProxy.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/event/ResourceProxy.kt
@@ -46,12 +46,11 @@ class ResourceProxy {
     fun load(tObject: TObject) {
         val aggregator = ObjectAggregator(tObject.title)
         // ASSUMPTION: there can be max one LogEntry for an Object
-        val es = UiManager.getEventStore()
-        val le = es.findBy(tObject)
+        val le = UiManager.getEventStore().findBy(tObject)
         if (le != null) {
             le.addAggregator(aggregator)
             aggregator.update(le, le.subType)
-            es.addUserAction(aggregator, tObject)
+            UiManager.performUserAction(aggregator, tObject)
         }
     }
 
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/UiManager.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/UiManager.kt
index d6f9ac7..395c603 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/UiManager.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/UiManager.kt
@@ -22,6 +22,7 @@ import io.kvision.core.Widget
 import io.kvision.dropdown.ContextMenu
 import io.kvision.panel.SimplePanel
 import io.kvision.utils.ESC_KEY
+import kotlinx.browser.document
 import kotlinx.browser.window
 import org.apache.isis.client.kroviz.App
 import org.apache.isis.client.kroviz.core.Session
@@ -32,6 +33,7 @@ import org.apache.isis.client.kroviz.core.event.EventStore
 import org.apache.isis.client.kroviz.core.event.LogEntry
 import org.apache.isis.client.kroviz.core.model.CollectionDM
 import org.apache.isis.client.kroviz.core.model.ObjectDM
+import org.apache.isis.client.kroviz.to.TObject
 import org.apache.isis.client.kroviz.to.ValueType
 import org.apache.isis.client.kroviz.to.mb.Menubars
 import org.apache.isis.client.kroviz.ui.kv.override.RoTab
@@ -138,6 +140,7 @@ object UiManager {
 
     fun amendMenu(menuBars: Menubars) {
         getRoApp().roMenuBar.amendMenu(menuBars)
+        setNormalCursor()
     }
 
     fun updateStatus(entry: LogEntry) {
@@ -148,12 +151,21 @@ object UiManager {
         getRoStatusBar().updateUser(user)
     }
 
+    fun setBusyCursor() {
+        document.body?.style?.cursor = "progress"
+    }
+
+    fun setNormalCursor() {
+        document.body?.style?.cursor = "default"
+    }
+
     fun openCollectionView(aggregator: BaseAggregator) {
         val displayable = aggregator.dpm
         val title: String = StringUtils.extractTitle(displayable.title)
         val panel = RoTable(displayable as CollectionDM)
         add(title, panel, aggregator)
         displayable.isRendered = true
+        setNormalCursor()
     }
 
     fun openObjectView(aggregator: ObjectAggregator) {
@@ -165,6 +177,7 @@ object UiManager {
         val panel = RoDisplay(dm)
         add(title, panel, aggregator)
         dm.isRendered = true
+        setNormalCursor()
     }
 
     fun openDialog(panel: RoDialog) {
@@ -229,4 +242,10 @@ object UiManager {
         }
     }
 
+    fun performUserAction(aggregator: BaseAggregator, obj: TObject) {
+        setBusyCursor()
+        getEventStore().addUserAction(aggregator, obj)
+        setNormalCursor()
+    }
+
 }

[isis] 01/03: ISIS-2348 EventStore refactored from object (Singleton) to class

Posted by jo...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

joergrade pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git

commit 59ec70a50d31d8f8765b52b9deca6d5460722744
Author: Jörg Rade <jo...@kuehne-nagel.com>
AuthorDate: Fri Oct 22 12:44:01 2021 +0200

    ISIS-2348 EventStore refactored from object (Singleton) to class
---
 .../org/apache/isis/client/kroviz/core/Session.kt  |   2 +
 .../kroviz/core/aggregator/ErrorDispatcher.kt      |   4 +-
 .../isis/client/kroviz/core/event/EventStore.kt    |   2 +-
 .../isis/client/kroviz/core/event/ReplayCommand.kt |   6 +-
 .../isis/client/kroviz/core/event/ResourceProxy.kt |  13 +-
 .../client/kroviz/core/event/RoXmlHttpRequest.kt   |  12 +-
 .../isis/client/kroviz/core/model/ObjectDM.kt      |  48 +++----
 .../isis/client/kroviz/ui/core/MenuFactory.kt      |   2 +-
 .../apache/isis/client/kroviz/ui/core/RoIconBar.kt |   2 +-
 .../apache/isis/client/kroviz/ui/core/RoMenuBar.kt |   2 +-
 .../apache/isis/client/kroviz/ui/core/UiManager.kt |  10 +-
 .../client/kroviz/ui/diagram/LinkTreeDiagram.kt    |   2 +-
 .../isis/client/kroviz/ui/dialog/DiagramDialog.kt  |   2 +-
 .../client/kroviz/ui/dialog/EventExportDialog.kt   |   7 +-
 .../isis/client/kroviz/ui/dialog/EventLogDetail.kt |   3 +-
 .../client/kroviz/ui/panel/DynamicMenuBuilder.kt   |   2 +-
 .../apache/isis/client/kroviz/IntegrationTest.kt   |   5 +-
 .../core/aggregator/CollectionAggregatorTest.kt    |   9 +-
 .../client/kroviz/core/event/EventStoreTest.kt     | 140 +++++++++++----------
 .../org/apache/isis/client/kroviz/to/ActionTest.kt |   7 +-
 .../isis/client/kroviz/to/ResultValueTest.kt       |   3 +-
 .../client/kroviz/ui/table/LinkTreeDiagramTest.kt  |  24 ++--
 22 files changed, 168 insertions(+), 139 deletions(-)

diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/Session.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/Session.kt
index eee34ee..feb12f0 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/Session.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/Session.kt
@@ -18,6 +18,7 @@
  */
 package org.apache.isis.client.kroviz.core
 
+import org.apache.isis.client.kroviz.core.event.EventStore
 import org.apache.isis.client.kroviz.ui.core.UiManager
 import org.apache.isis.client.kroviz.utils.StringUtils
 
@@ -28,6 +29,7 @@ class Session {
     private var user: String = ""
     private var pw: String = ""
     var url: String = ""
+    val eventStore = EventStore()
 
     fun login(url: String, user: String, pw: String) {
         this.user = user
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/aggregator/ErrorDispatcher.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/aggregator/ErrorDispatcher.kt
index 89ccc28..35add14 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/aggregator/ErrorDispatcher.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/aggregator/ErrorDispatcher.kt
@@ -18,10 +18,10 @@
  */
 package org.apache.isis.client.kroviz.core.aggregator
 
-import org.apache.isis.client.kroviz.core.event.EventStore
 import org.apache.isis.client.kroviz.core.event.LogEntry
 import org.apache.isis.client.kroviz.core.event.ResourceSpecification
 import org.apache.isis.client.kroviz.to.HttpError
+import org.apache.isis.client.kroviz.ui.core.UiManager
 import org.apache.isis.client.kroviz.ui.dialog.ErrorDialog
 
 class ErrorDispatcher : BaseAggregator() {
@@ -31,7 +31,7 @@ class ErrorDispatcher : BaseAggregator() {
         val url = logEntry.url
         val message = error.message
         val reSpec = ResourceSpecification(url)
-        EventStore.fault(reSpec, message)
+        UiManager.getEventStore().fault(reSpec, message)
         ErrorDialog(logEntry).open()
     }
 
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/event/EventStore.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/event/EventStore.kt
index 75f6bec..a0ae52b 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/event/EventStore.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/event/EventStore.kt
@@ -37,7 +37,7 @@ import org.w3c.files.Blob
  * @see "https://en.wikipedia.org/wiki/Proxy_pattern"
  * @see "https://martinfowler.com/eaaDev/EventSourcing.html"
  */
-object EventStore {
+class EventStore {
     var log = observableListOf<LogEntry>()
     var logStartTime: Int = 0
 
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/event/ReplayCommand.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/event/ReplayCommand.kt
index d7b7ce6..4aa7604 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/event/ReplayCommand.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/event/ReplayCommand.kt
@@ -27,14 +27,16 @@ import org.apache.isis.client.kroviz.main
 import org.apache.isis.client.kroviz.to.Link
 import org.apache.isis.client.kroviz.to.Represention
 import org.apache.isis.client.kroviz.to.TObject
+import org.apache.isis.client.kroviz.ui.core.UiManager
 
 val AppScope = CoroutineScope(window.asCoroutineDispatcher())
 
 class ReplayCommand {
 
     fun execute() {
-        val expectedEvents = copyEvents(EventStore.log)
-        EventStore.reset()
+        val es = UiManager.getEventStore()
+        val expectedEvents = copyEvents(es.log)
+        es.reset()
         main() // re-creates the UI, but keeps the UiManager(singleton/object) and the session
 
         val replayEvents = filterReplayEvents(expectedEvents)
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/event/ResourceProxy.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/event/ResourceProxy.kt
index 5254e05..aeb5f2d 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/event/ResourceProxy.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/event/ResourceProxy.kt
@@ -26,6 +26,7 @@ import org.apache.isis.client.kroviz.handler.ResponseHandler
 import org.apache.isis.client.kroviz.to.Link
 import org.apache.isis.client.kroviz.to.TObject
 import org.apache.isis.client.kroviz.ui.core.Constants
+import org.apache.isis.client.kroviz.ui.core.UiManager
 import org.apache.isis.client.kroviz.ui.diagram.Node
 import org.apache.isis.client.kroviz.ui.diagram.Tree
 
@@ -45,11 +46,12 @@ class ResourceProxy {
     fun load(tObject: TObject) {
         val aggregator = ObjectAggregator(tObject.title)
         // ASSUMPTION: there can be max one LogEntry for an Object
-        val le = EventStore.findBy(tObject)
+        val es = UiManager.getEventStore()
+        val le = es.findBy(tObject)
         if (le != null) {
             le.addAggregator(aggregator)
             aggregator.update(le, le.subType)
-            EventStore.addUserAction(aggregator, tObject)
+            es.addUserAction(aggregator, tObject)
         }
     }
 
@@ -59,7 +61,7 @@ class ResourceProxy {
               isRest: Boolean = true,
               referrer: String = "") {
         val rs = ResourceSpecification(link.href, subType = subType, referrerUrl = referrer)
-        val isCached = when (val le = EventStore.findBy(rs)) {
+        val isCached = when (val le = UiManager.getEventStore().findBy(rs)) {
             null -> false
             else -> le.isCached(rs, link.method)
         }
@@ -83,7 +85,8 @@ class ResourceProxy {
     }
 
     private fun processCached(rs: ResourceSpecification, aggregator: BaseAggregator?) {
-        val le = EventStore.findBy(rs)!!
+        val es = UiManager.getEventStore()
+        val le = es.findBy(rs)!!
         le.retrieveResponse()
         if (aggregator == null) {
             ResponseHandler.handle(le)
@@ -91,7 +94,7 @@ class ResourceProxy {
             aggregator.update(le, le.subType)
         }
         le.setCached()
-        EventStore.updateStatus(le)
+        es.updateStatus(le)
     }
 
     fun invokeKroki(pumlCode: String, aggregator: SvgDispatcher) {
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/event/RoXmlHttpRequest.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/event/RoXmlHttpRequest.kt
index 00b933f..5f77a1e 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/event/RoXmlHttpRequest.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/event/RoXmlHttpRequest.kt
@@ -65,14 +65,14 @@ class RoXmlHttpRequest(val aggregator: BaseAggregator?) {
             body.isEmpty() -> xhr.send()
             else -> xhr.send(body)
         }
-        EventStore.start(rs, method, body, aggregator)
+        UiManager.getEventStore().start(rs, method, body, aggregator)
     }
 
     private fun buildBody(link: Link): String {
         return when {
             link.hasArguments() -> StringUtils.argumentsAsBody(link)
             link.method == Method.PUT.operation -> {
-                val logEntry = EventStore.findBy(aggregator!!)
+                val logEntry = UiManager.getEventStore().findBy(aggregator!!)
                 when (val obj = logEntry?.obj) {
                     is TObject -> StringUtils.propertiesAsBody(obj)
                     else -> ""
@@ -94,7 +94,7 @@ class RoXmlHttpRequest(val aggregator: BaseAggregator?) {
         xhr.send(body)
         val rs = buildResourceSpecificationAndSetupHandler(url, subType, body)
 
-        EventStore.start(rs, method, body, aggregator)
+        UiManager.getEventStore().start(rs, method, body, aggregator)
     }
 
     internal fun invokeKroki(pumlCode: String) {
@@ -108,7 +108,7 @@ class RoXmlHttpRequest(val aggregator: BaseAggregator?) {
         val rs = buildResourceSpecificationAndSetupHandler(url, Constants.subTypeJson, pumlCode)
 
         xhr.send(pumlCode)
-        EventStore.start(rs, method, pumlCode, aggregator)
+        UiManager.getEventStore().start(rs, method, pumlCode, aggregator)
     }
 
     private fun buildResourceSpecificationAndSetupHandler(
@@ -124,7 +124,7 @@ class RoXmlHttpRequest(val aggregator: BaseAggregator?) {
 
     private fun handleResult(rs: ResourceSpecification, body: String) {
         val response: Any? = xhr.response
-        val le: LogEntry? = EventStore.end(rs, body, response)
+        val le: LogEntry? = UiManager.getEventStore().end(rs, body, response)
         if (le != null) {
             when {
                 aggregator == null -> ResponseHandler.handle(le)
@@ -137,7 +137,7 @@ class RoXmlHttpRequest(val aggregator: BaseAggregator?) {
 
     private fun handleError(rs: ResourceSpecification) {
         val responseText = xhr.responseText
-        EventStore.fault(rs, responseText)
+        UiManager.getEventStore().fault(rs, responseText)
     }
 
 }
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/model/ObjectDM.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/model/ObjectDM.kt
index ec80bfb..94f4e07 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/model/ObjectDM.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/model/ObjectDM.kt
@@ -18,11 +18,10 @@
  */
 package org.apache.isis.client.kroviz.core.model
 
-import org.apache.isis.client.kroviz.core.event.EventStore
-import org.apache.isis.client.kroviz.core.event.EventStore.findBy
 import org.apache.isis.client.kroviz.core.event.ResourceProxy
 import org.apache.isis.client.kroviz.core.event.ResourceSpecification
 import org.apache.isis.client.kroviz.to.*
+import org.apache.isis.client.kroviz.ui.core.UiManager
 
 class ObjectDM(override val title: String) : DisplayModelWithLayout() {
     var data: Exposer? = null
@@ -30,7 +29,7 @@ class ObjectDM(override val title: String) : DisplayModelWithLayout() {
     private var dirty: Boolean = false
 
     override fun canBeDisplayed(): Boolean {
- //       debug()
+        //       debug()
         return when {
             isRendered -> false
             (layout == null) && (grid == null) -> false
@@ -38,7 +37,7 @@ class ObjectDM(override val title: String) : DisplayModelWithLayout() {
         }
     }
 
-    private fun debug()  {
+    private fun debug() {
         console.log("[]")
         console.log("[ODM.debug] data / collections / layout / grid / properties / icon / aggregator / logEntries")
         console.log(data)
@@ -51,10 +50,11 @@ class ObjectDM(override val title: String) : DisplayModelWithLayout() {
             val delegate = (data as Exposer).delegate
             val selfLink = delegate.getSelfLink()
             val rs = ResourceSpecification(selfLink.href)
-            val le = EventStore.findBy(rs)!!
+            val es = UiManager.getEventStore()
+            val le = es.findBy(rs)!!
             val aggt = le.getAggregator()
             console.log(aggt)
-            val logEntries = EventStore.findAllBy(aggt)
+            val logEntries = es.findAllBy(aggt)
             logEntries.forEach {
                 console.log(it)
             }
@@ -94,12 +94,13 @@ class ObjectDM(override val title: String) : DisplayModelWithLayout() {
             val getLink = tObject.links.first()
             val href = getLink.href
             val reSpec = ResourceSpecification(href)
+            val es = UiManager.getEventStore()
             //WATCHOUT this is sequence dependent: GET and PUT share the same URL - if called after PUTting, it may fail
-            val getLogEntry = findBy(reSpec)!!
+            val getLogEntry = es.findBy(reSpec)!!
             getLogEntry.setReload()
 
             val putLink = Link(method = Method.PUT.operation, href = href)
-            val logEntry = findBy(reSpec)
+            val logEntry = es.findBy(reSpec)
             val aggregator = logEntry?.getAggregator()!!
             // there may be more than one aggt - which may break this code
 
@@ -117,27 +118,28 @@ class ObjectDM(override val title: String) : DisplayModelWithLayout() {
 
     private fun createPropertyFrom(m: Member): Property {
         return Property(
-                id = m.id,
-                memberType = m.memberType,
-                links = m.links,
-                optional = m.optional,
-                title = m.id,
-                value = m.value,
-                extensions = m.extensions,
-                format = m.format,
-                disabledReason = m.disabledReason
+            id = m.id,
+            memberType = m.memberType,
+            links = m.links,
+            optional = m.optional,
+            title = m.id,
+            value = m.value,
+            extensions = m.extensions,
+            format = m.format,
+            disabledReason = m.disabledReason
         )
     }
 
     private fun createObjectFrom(resultObject: ResultObject): TObject {
         val r = resultObject.result!!
         return TObject(
-                links = r.links,
-                extensions = r.extensions!!,
-                title = r.title,
-                domainType = r.domainType,
-                instanceId = r.instanceId.toString(),
-                members = r.members)
+            links = r.links,
+            extensions = r.extensions!!,
+            title = r.title,
+            domainType = r.domainType,
+            instanceId = r.instanceId.toString(),
+            members = r.members
+        )
     }
 
 }
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/MenuFactory.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/MenuFactory.kt
index 22e9cdb..3658bcf 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/MenuFactory.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/MenuFactory.kt
@@ -104,7 +104,7 @@ object MenuFactory {
     }
 
     private fun findMenuByTitle(menuTitle: String): Menu? {
-        val menuBars = EventStore.findMenuBars()!!.obj as Menubars
+        val menuBars = UiManager.getEventStore().findMenuBars()!!.obj as Menubars
         var menu = findMenu(menuBars.primary, menuTitle)
         if (menu == null) menu = findMenu(menuBars.secondary, menuTitle)
         if (menu == null) menu = findMenu(menuBars.tertiary, menuTitle)
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/RoIconBar.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/RoIconBar.kt
index ceece35..ddc7cff 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/RoIconBar.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/RoIconBar.kt
@@ -101,7 +101,7 @@ class RoIconBar : SimplePanel() {
 
     private fun createObjectIcon(url: String): DropDown? {
         val reSpec = ResourceSpecification(url)
-        val logEntry = EventStore.findBy(reSpec)!!
+        val logEntry = UiManager.getEventStore().findBy(reSpec)!!
         return when (val obj = logEntry.obj) {
             (obj == null) -> null
             is TObject -> {
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/RoMenuBar.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/RoMenuBar.kt
index c5903da..13f1610 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/RoMenuBar.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/RoMenuBar.kt
@@ -87,7 +87,7 @@ class RoMenuBar : SimplePanel() {
         )
 
         mainMenu.add(
-            buildMenuEntry("Event Log", "History", { UiManager.add("Event Log", EventLogTable(EventStore.log)) })
+            buildMenuEntry("Event Log", "History", { UiManager.add("Event Log", EventLogTable(UiManager.getEventStore().log)) })
         )
 
         val chartTitle = "Sample Chart"
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/UiManager.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/UiManager.kt
index 16fa92f..d6f9ac7 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/UiManager.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/UiManager.kt
@@ -96,7 +96,7 @@ object UiManager {
 
     fun add(title: String, panel: SimplePanel, aggregator: BaseAggregator = UndefinedDispatcher()) {
         getRoView().addTab(title, panel)
-        EventStore.addView(title, aggregator, panel)
+        getEventStore().addView(title, aggregator, panel)
     }
 
     fun remove(panel: SimplePanel) {
@@ -126,13 +126,13 @@ object UiManager {
         tab.svg = svg
 
         val aggregator: BaseAggregator = UndefinedDispatcher()
-        EventStore.addView(title, aggregator, panel)
+        getEventStore().addView(title, aggregator, panel)
     }
 
     fun closeView(tab: SimplePanel) {
         val tt = tab.title
         if (tt != null) {
-            EventStore.closeView(tt)
+            getEventStore().closeView(tt)
         }
     }
 
@@ -189,6 +189,10 @@ object UiManager {
         }
     }
 
+    fun getEventStore() : EventStore {
+        return getSession().eventStore
+    }
+
     fun loadDomainTypes(): Boolean {
         val k = "loadDomainTypes"
         return when {
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/diagram/LinkTreeDiagram.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/diagram/LinkTreeDiagram.kt
index decb7c1..eae17e8 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/diagram/LinkTreeDiagram.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/diagram/LinkTreeDiagram.kt
@@ -48,7 +48,7 @@ object LinkTreeDiagram {
     private fun toPumlCode(node: Node, level: Int): String {
         val url = node.name
         val rs = ResourceSpecification(url)
-        val le = EventStore.findBy(rs)
+        val le = UiManager.getEventStore().findBy(rs)
         val pc = PumlCode()
         if (le != null) {
             val title = StringUtils.shortTitle(url, protocolHostPort)
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/dialog/DiagramDialog.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/dialog/DiagramDialog.kt
index ed239bc..c04544b 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/dialog/DiagramDialog.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/dialog/DiagramDialog.kt
@@ -67,7 +67,7 @@ class DiagramDialog(
     }
 
     private fun getDiagramCode(): String {
-        val logEntry = EventStore.findByDispatcher(callBack as UUID)
+        val logEntry = UiManager.getEventStore().findByDispatcher(callBack as UUID)
         return logEntry.getResponse()
     }
 
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/dialog/EventExportDialog.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/dialog/EventExportDialog.kt
index 445b9af..b41f475 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/dialog/EventExportDialog.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/dialog/EventExportDialog.kt
@@ -27,6 +27,7 @@ import org.apache.isis.client.kroviz.ui.core.RoDialog
 import io.kvision.core.StringPair
 import io.kvision.form.select.SimpleSelect
 import org.apache.isis.client.kroviz.ui.core.FormItem
+import org.apache.isis.client.kroviz.ui.core.UiManager
 
 class EventExportDialog() : Command() {
 
@@ -36,7 +37,7 @@ class EventExportDialog() : Command() {
     val events = mutableListOf<ReplayEvent>()
 
     private fun collectReplayEvents() {
-        EventStore.log.forEach { it ->
+        UiManager.getEventStore().log.forEach { it ->
             val re = buildExportEvent(it)
             when (it.state) {
                 EventState.SUCCESS_JS -> events.add(re)
@@ -102,7 +103,7 @@ class EventExportDialog() : Command() {
     }
 
     private fun collectUnfinishedEvents() {
-        EventStore.log.forEach { it ->
+        UiManager.getEventStore().log.forEach { it ->
             val re = buildExportEvent(it)
             when (it.state) {
                 EventState.RUNNING -> events.add(re)
@@ -114,7 +115,7 @@ class EventExportDialog() : Command() {
     }
 
     private fun collectAllEvents() {
-        EventStore.log.forEach { it ->
+        UiManager.getEventStore().log.forEach { it ->
             val re = buildExportEvent(it)
             events.add(re)
         }
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/dialog/EventLogDetail.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/dialog/EventLogDetail.kt
index cf63a15..8b49cc3 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/dialog/EventLogDetail.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/dialog/EventLogDetail.kt
@@ -26,6 +26,7 @@ import org.apache.isis.client.kroviz.to.bs3.Grid
 import org.apache.isis.client.kroviz.ui.core.Constants
 import org.apache.isis.client.kroviz.ui.core.FormItem
 import org.apache.isis.client.kroviz.ui.core.RoDialog
+import org.apache.isis.client.kroviz.ui.core.UiManager
 import org.apache.isis.client.kroviz.ui.diagram.JsonDiagram
 import org.apache.isis.client.kroviz.ui.diagram.LayoutDiagram
 import org.apache.isis.client.kroviz.ui.diagram.LinkTreeDiagram
@@ -41,7 +42,7 @@ class EventLogDetail(val logEntryFromTabulator: LogEntry) : Command() {
         // For a yet unknown reason, aggregators are not transmitted via tabulator.
         // As a WORKAROUND, we fetch the full blown LogEntry from the EventStore again.
         val rs = ResourceSpecification(logEntryFromTabulator.title)
-        logEntry = EventStore.findBy(rs) ?: logEntryFromTabulator  // in case of xml, we use the entry passed in
+        logEntry = UiManager.getEventStore().findBy(rs) ?: logEntryFromTabulator  // in case of xml, we use the entry passed in
     }
 
     // callback parameter
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/panel/DynamicMenuBuilder.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/panel/DynamicMenuBuilder.kt
index 7f01d61..6e9aba0 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/panel/DynamicMenuBuilder.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/panel/DynamicMenuBuilder.kt
@@ -60,7 +60,7 @@ class DynamicMenuBuilder {
 
         val title = "Chart"
         val a4 = buildMenuEntry(title, title, {
-            UiManager.add(title, ChartFactory().build(EventStore.log))
+            UiManager.add(title, ChartFactory().build(UiManager.getEventStore().log))
         })
         menu.add(a4)
 
diff --git a/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/IntegrationTest.kt b/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/IntegrationTest.kt
index 8e15ff0..8214df4 100644
--- a/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/IntegrationTest.kt
+++ b/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/IntegrationTest.kt
@@ -67,12 +67,13 @@ open class IntegrationTest {
             else -> Constants.subTypeJson
         }
         val reSpec = ResourceSpecification(response.url, subType)
-        EventStore.start(
+        val es = EventStore()
+        es.start(
                 reSpec,
                 Method.GET.operation,
                 "",
                 aggregator)
-        val le = EventStore.end(reSpec, str)!!
+        val le = es.end(reSpec, str)!!
         ResponseHandler.handle(le)
         wait(100)
         return le
diff --git a/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/core/aggregator/CollectionAggregatorTest.kt b/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/core/aggregator/CollectionAggregatorTest.kt
index fd60757..557b0a6 100644
--- a/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/core/aggregator/CollectionAggregatorTest.kt
+++ b/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/core/aggregator/CollectionAggregatorTest.kt
@@ -19,12 +19,12 @@
 package org.apache.isis.client.kroviz.core.aggregator
 
 import org.apache.isis.client.kroviz.IntegrationTest
-import org.apache.isis.client.kroviz.core.event.EventStore
 import org.apache.isis.client.kroviz.core.event.ResourceSpecification
 import org.apache.isis.client.kroviz.core.model.CollectionDM
 import org.apache.isis.client.kroviz.snapshots.simpleapp1_16_0.*
 import org.apache.isis.client.kroviz.to.Property
 import org.apache.isis.client.kroviz.to.Relation
+import org.apache.isis.client.kroviz.ui.core.UiManager
 import kotlin.test.assertEquals
 import kotlin.test.assertNotNull
 import kotlin.test.assertTrue
@@ -37,14 +37,15 @@ class CollectionAggregatorTest : IntegrationTest() {
     fun testFixtureResult() {
         if (isAppAvailable()) {
             // given
-            EventStore.reset()
+            val es = UiManager.getEventStore()
+            es.reset()
             val obs = CollectionAggregator("test")
             // when
             mockResponse(FR_OBJECT, obs)
             mockResponse(FR_OBJECT_LAYOUT, obs)
             mockResponse(FR_OBJECT_PROPERTY, obs)
             val reSpec = ResourceSpecification(FR_OBJECT_PROPERTY.url)
-            val pLe = EventStore.findBy(reSpec)!!
+            val pLe = es.findBy(reSpec)!!
             val pdLe = mockResponse(FR_PROPERTY_DESCRIPTION, obs)
             val layoutLe = mockResponse(FR_OBJECT_LAYOUT, obs)
 
@@ -81,7 +82,7 @@ class CollectionAggregatorTest : IntegrationTest() {
     fun testService() {
         if (isAppAvailable()) {
             // given
-            EventStore.reset()
+            UiManager.getEventStore().reset()
             val obs = CollectionAggregator("test")
             // when
             mockResponse(SO_LIST_ALL, obs)
diff --git a/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/core/event/EventStoreTest.kt b/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/core/event/EventStoreTest.kt
index 8ab2beb..3513b45 100644
--- a/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/core/event/EventStoreTest.kt
+++ b/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/core/event/EventStoreTest.kt
@@ -39,21 +39,22 @@ class EventStoreTest : IntegrationTest() {
         val url2 = Constants.krokiUrl + "plantuml"
         val rs2 = ResourceSpecification(url2)
         val body2 = "zwoa"
+        val es = EventStore()
 
         // when
-        EventStore.reset()
-        EventStore.start(rs1, Method.POST.operation, body = body1)
-        EventStore.start(rs2, Method.POST.operation, body = body2)
+        es.reset()
+        es.start(rs1, Method.POST.operation, body = body1)
+        es.start(rs2, Method.POST.operation, body = body2)
 
         // then
-        assertEquals(2, EventStore.log.size) //1
+        assertEquals(2, es.log.size) //1
         console.log("[EST.testFindPlantuml]")
 
-        val le1 = EventStore.findBy(rs1, body1)
+        val le1 = es.findBy(rs1, body1)
         assertNotNull(le1)  //2
         console.log("le1: ${le1.toString()}")
 
-        val le2 = EventStore.findBy(rs2, body2)
+        val le2 = es.findBy(rs2, body2)
         assertNotNull(le2)  //3
         console.log("le2: ${le2.toString()}")
 
@@ -66,7 +67,8 @@ class EventStoreTest : IntegrationTest() {
     fun testLayout() {
         if (isAppAvailable()) {
             // given
-            EventStore.reset()
+            val es = EventStore()
+            es.reset()
             val obs = CollectionAggregator("test")
 
             //when
@@ -80,25 +82,26 @@ class EventStoreTest : IntegrationTest() {
             mockResponse(SO_LAYOUT_XML, obs)
 
             // then
-            val soListLe = EventStore.findBy(soList)!!
+            val soListLe = es.findBy(soList)!!
             assertEquals(Constants.subTypeJson, soListLe.subType) // 1
 
-            val leJson = EventStore.findBy(rsJson)!!
+            val leJson = es.findBy(rsJson)!!
             assertEquals(Constants.subTypeJson, leJson.subType) // 2
 
-            val leXml = EventStore.findBy(rsXml)!!
+            val leXml = es.findBy(rsXml)!!
             assertEquals(Constants.subTypeXml, leXml.subType) // 3
             assertTrue(XmlHelper.isXml(leXml.response)) // 4
 
-            assertTrue(EventStore.log.size > 3)
+            assertTrue(es.log.size > 3)
         }
     }
 
     @Test
     fun testSecondEntry() {
         // given
-        EventStore.reset()
-        val initialSize: Int = EventStore.log.size
+        val es = EventStore()
+        es.reset()
+        val initialSize: Int = es.log.size
         val myFirst = "1"
         val myLast = "n"
         val method = Method.GET.operation
@@ -111,24 +114,24 @@ class EventStoreTest : IntegrationTest() {
         val selfSpec = ResourceSpecification(selfUrl)
         val upSpec = ResourceSpecification(upUrl)
         // when
-        EventStore.start(selfSpec, method, body = myFirst)
-        EventStore.start(upSpec, method, body = myFirst)
-        EventStore.end(selfSpec, selfStr)
-        EventStore.end(upSpec, upStr)
-        EventStore.start(selfSpec, method, body = myLast)
-        EventStore.start(upSpec, method, body = myLast)
+        es.start(selfSpec, method, body = myFirst)
+        es.start(upSpec, method, body = myFirst)
+        es.end(selfSpec, selfStr)
+        es.end(upSpec, upStr)
+        es.start(selfSpec, method, body = myLast)
+        es.start(upSpec, method, body = myLast)
         // then
-        val currentSize: Int = EventStore.log.size
+        val currentSize: Int = es.log.size
         assertEquals(4 + initialSize, currentSize)  //1
 
         // Entries with the same key can be written, but when updated or retrieved the first (oldest) entry should be used
         //when
-        val le2 = EventStore.findBy(selfSpec)!!
+        val le2 = es.findBy(selfSpec)!!
         //then
         assertEquals(myFirst, le2.request)  //2
         assertEquals(selfStr.length, le2.response.length)  //3
         //when
-        val leU = EventStore.findBy(upSpec)!!
+        val leU = es.findBy(upSpec)!!
         //then
         assertEquals(myFirst, leU.request)  //4
         assertEquals(upStr.length, leU.response.length)  //5
@@ -143,31 +146,33 @@ class EventStoreTest : IntegrationTest() {
         val i1 = "Test (1)"
         val i2 = "Test (2)"
         val agg = ObjectAggregator("testFindView")
+        val es = EventStore()
 
         // construct list with urls
-        EventStore.add(h1Spec)
-        EventStore.addView(i1, agg, VPanel())
-        EventStore.add(h2Spec)
-        EventStore.addView(i2, agg, VPanel())
+        es.add(h1Spec)
+        es.addView(i1, agg, VPanel())
+        es.add(h2Spec)
+        es.addView(i2, agg, VPanel())
 
-        val le1 = EventStore.findBy(h1Spec)!!
+        val le1 = es.findBy(h1Spec)!!
         assertEquals(h1, le1.url)   //1
 
-        val le2 = EventStore.findBy(h2Spec)!!
+        val le2 = es.findBy(h2Spec)!!
         assertEquals(h2, le2.url)   //2
 
-        val le3 = EventStore.findView(i2)
+        val le3 = es.findView(i2)
         assertNotNull(le3)                  //3
-        val le4 = EventStore.findView(i1)
+        val le4 = es.findView(i1)
         assertNotNull(le4)                 //4
 
-        EventStore.closeView(i1)
+        es.closeView(i1)
         assertTrue(le4.isClosedView())
     }
 
     @Test
     fun testFind() {
-        EventStore.reset()
+        val es = EventStore()
+        es.reset()
         val ol1 = "http://localhost:8080/restful/objects/simple.SimpleObject/51/object-layout"
         val ol1Spec = ResourceSpecification(ol1)
         val ol2 = "http://localhost:8080/restful/objects/simple.SimpleObject/52/object-layout"
@@ -177,25 +182,25 @@ class EventStoreTest : IntegrationTest() {
         val olx = "http://localhost:8080/restful/objects/simple.SimpleObject/object-layout"
 
         // construct list with urls
-        EventStore.add(ol1Spec)
-        EventStore.add(ResourceSpecification(ol2))
-        EventStore.add(ResourceSpecification(ol3))
+        es.add(ol1Spec)
+        es.add(ResourceSpecification(ol2))
+        es.add(ResourceSpecification(ol3))
 
-        val le1 = EventStore.findBy(ol1Spec)
+        val le1 = es.findBy(ol1Spec)
         assertNotNull(le1)  //1
 
-        val le2 = EventStore.findExact(ol9Spec)
+        val le2 = es.findExact(ol9Spec)
         assertEquals(null, le2)     //2
 
-        val le3 = EventStore.findEquivalent(ol9Spec)
+        val le3 = es.findEquivalent(ol9Spec)
         assertNotNull(le3)  //3
         assertEquals(ol1, le3.url)  //4
 
-        val le4 = EventStore.findBy(ol9Spec)
+        val le4 = es.findBy(ol9Spec)
         assertEquals(le3, le4)      //5
 
         val olxSpec = ResourceSpecification(olx)
-        val le5 = EventStore.findEquivalent(olxSpec)
+        val le5 = es.findEquivalent(olxSpec)
         assertNull(le5)             //6
 
         val p1 = "http://localhost:8080/restful/objects/simple.SimpleObject/11/properties/name"
@@ -204,10 +209,10 @@ class EventStoreTest : IntegrationTest() {
         val p2Spec = ResourceSpecification(p2)
         val p3 = "http://localhost:8080/restful/objects/simple.SimpleObject/13/properties/name"
         val p3Spec = ResourceSpecification(p3)
-        EventStore.add(p1Spec)
-        EventStore.add(p2Spec)
-        EventStore.add(p3Spec)
-        val le6 = EventStore.findBy(p3Spec)
+        es.add(p1Spec)
+        es.add(p2Spec)
+        es.add(p3Spec)
+        val le6 = es.findBy(p3Spec)
         assertNotNull(le6)          //7
         assertEquals(le6.url, p1)   //8
 
@@ -215,29 +220,30 @@ class EventStoreTest : IntegrationTest() {
         val pNameSpec = ResourceSpecification(pName)
         val pNotes = "http://localhost:8080/restful/domain-types/simple.SimpleObject/properties/notes"
         val pNotesSpec = ResourceSpecification(pNotes)
-        EventStore.add(pNameSpec)
-        EventStore.add(pNotesSpec)
-        val le7 = EventStore.findBy(pNotesSpec)
+        es.add(pNameSpec)
+        es.add(pNotesSpec)
+        val le7 = es.findBy(pNotesSpec)
         assertNotNull(le7)            //9
         assertEquals(le7.url, pNotes) //10
     }
 
     @Test
     fun testFindEquivalent_ConfigurationLayout() {
-        EventStore.reset()
+        val es = EventStore()
+        es.reset()
         val ol1 = "http://localhost:8080/restful/objects/isisApplib.ConfigurationProperty/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9InllcyI_Pgo8Y29uZmlndXJhdGlvblByb3BlcnR5PgogICAgPGtleT5pc2lzLnBlcnNpc3Rvci5kYXRhbnVjbGV1cy5pbXBsLmRhdGFudWNsZXVzLmNhY2hlLmxldmVsMi50eXBlPC9rZXk-CiAgICA8dmFsdWU-bm9uZTwvdmFsdWU-CjwvY29uZmlndXJhdGlvblByb3BlcnR5Pgo=/object-layout"
         val ol1Spec = ResourceSpecification(ol1)
         val ol2 = "http://localhost:8080/restful/objects/isisApplib.ConfigurationProperty/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9InllcyI_Pgo8Y29uZmlndXJhdGlvblByb3BlcnR5PgogICAgPGtleT5pc2lzLnJlZmxlY3Rvci52YWxpZGF0b3Iuc2VydmljZUFjdGlvbnNPbmx5PC9rZXk-CiAgICA8dmFsdWU-dHJ1ZTwvdmFsdWU-CjwvY29uZmlndXJhdGlvblByb3BlcnR5Pgo=/object-layout"
         val ol2Spec = ResourceSpecification(ol2)
 
         // construct list with urls
-        EventStore.add(ol1Spec)
-        EventStore.add(ol2Spec)
+        es.add(ol1Spec)
+        es.add(ol2Spec)
 
-        val le1 = EventStore.findBy(ol1Spec)
+        val le1 = es.findBy(ol1Spec)
         assertNotNull(le1)  //1
 
-        val le2 = EventStore.findEquivalent(ol2Spec)
+        val le2 = es.findEquivalent(ol2Spec)
         assertNotNull(le2)  //2
         assertEquals(ol1, le2.url)  //3
     }
@@ -245,18 +251,19 @@ class EventStoreTest : IntegrationTest() {
     @Test
     fun testAnonymousEntry() {
         // given
-        EventStore.reset()
+        val es = EventStore()
+        es.reset()
         val method = Method.POST.operation
         val url = Constants.krokiUrl
         val rs = ResourceSpecification(url)
         // when
-        EventStore.start(rs, method, body = "first invocation")
-        EventStore.start(rs, method, body = "second invocation")
-        EventStore.end(rs, "first response")
+        es.start(rs, method, body = "first invocation")
+        es.start(rs, method, body = "second invocation")
+        es.end(rs, "first response")
         // then
-        val currentSize: Int = EventStore.log.size
+        val currentSize: Int = es.log.size
         assertEquals(2, currentSize)  //1
-        val le = EventStore.findBy(rs)!!
+        val le = es.findBy(rs)!!
         assertEquals("first response", le.response)
     }
 
@@ -269,19 +276,20 @@ class EventStoreTest : IntegrationTest() {
         val rs2 = ResourceSpecification(url2)
 
         //when
-        EventStore.reset()
-        EventStore.add(rs1)
-        EventStore.add(rs2)
-        val le1 = EventStore.findBy(rs1)
-        val le2 = EventStore.findBy(rs2)
+        val es = EventStore()
+        es.reset()
+        es.add(rs1)
+        es.add(rs2)
+        val le1 = es.findBy(rs1)
+        val le2 = es.findBy(rs2)
 
         //then
-        assertEquals(2, EventStore.log.size)
+        assertEquals(2, es.log.size)
         assertNotEquals(le1, le2)
 
         //when
-        val le1eq = EventStore.findEquivalent(rs1)
-        val le2eq = EventStore.findEquivalent(rs2)
+        val le1eq = es.findEquivalent(rs1)
+        val le2eq = es.findEquivalent(rs2)
 
         //then
         assertNotEquals(le1eq, le2eq)
diff --git a/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/to/ActionTest.kt b/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/to/ActionTest.kt
index 26dea78..11abd50 100644
--- a/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/to/ActionTest.kt
+++ b/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/to/ActionTest.kt
@@ -20,11 +20,11 @@ package org.apache.isis.client.kroviz.to
 
 import org.apache.isis.client.kroviz.IntegrationTest
 import org.apache.isis.client.kroviz.core.aggregator.ActionDispatcher
-import org.apache.isis.client.kroviz.core.event.EventStore
 import org.apache.isis.client.kroviz.core.event.ResourceProxy
 import org.apache.isis.client.kroviz.core.event.ResourceSpecification
 import org.apache.isis.client.kroviz.handler.ActionHandler
 import org.apache.isis.client.kroviz.snapshots.simpleapp1_16_0.*
+import org.apache.isis.client.kroviz.ui.core.UiManager
 import org.apache.isis.client.kroviz.utils.StringUtils
 import kotlin.test.Test
 import kotlin.test.assertEquals
@@ -64,8 +64,9 @@ class ActionTest : IntegrationTest() {
             console.log(json)
             ResourceProxy().fetch(link, ActionDispatcher())
             val urlSpec = ResourceSpecification(url)
-            val le = EventStore.findBy(urlSpec)!!
-            console.log(EventStore.log)
+            val es = UiManager.getEventStore()
+            val le = es.findBy(urlSpec)!!
+            console.log(es.log)
             console.log(le)
             assertTrue(!le.isError())
         }
diff --git a/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/to/ResultValueTest.kt b/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/to/ResultValueTest.kt
index e84cf73..29a93ff 100644
--- a/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/to/ResultValueTest.kt
+++ b/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/to/ResultValueTest.kt
@@ -25,6 +25,7 @@ import org.apache.isis.client.kroviz.core.event.EventStore
 import org.apache.isis.client.kroviz.handler.ResultValueHandler
 import org.apache.isis.client.kroviz.snapshots.simpleapp1_16_0.ACTIONS_DOWNLOAD_VALUE
 import org.apache.isis.client.kroviz.snapshots.simpleapp1_16_0.ACTIONS_OPEN_SWAGGER_UI
+import org.apache.isis.client.kroviz.ui.core.UiManager
 import kotlin.test.Test
 import kotlin.test.assertEquals
 
@@ -48,7 +49,7 @@ class ResultValueTest : IntegrationTest() {
             // given
             val aggregator = ObjectAggregator("object test")
             // when
-            EventStore.reset()
+            UiManager.getEventStore().reset()
             val logEntry = mockResponse(ACTIONS_DOWNLOAD_VALUE, aggregator)
             val ro = logEntry.getTransferObject() as ResultValue
             val type = ro.resulttype
diff --git a/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/ui/table/LinkTreeDiagramTest.kt b/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/ui/table/LinkTreeDiagramTest.kt
index 90bdf8e..f1bc3c7 100644
--- a/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/ui/table/LinkTreeDiagramTest.kt
+++ b/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/ui/table/LinkTreeDiagramTest.kt
@@ -34,19 +34,21 @@ class LinkTreeDiagramTest {
 
     //@Test         //TODO rework test to use AggregatorWithLayout
     fun testLinkTreeDiagram() {
+        // given
+        val es = EventStore()
         //when
         val aggregator = SystemAggregator()
-        load(RESTFUL, "", RestfulHandler(), aggregator)
+        load(RESTFUL, "", RestfulHandler(), aggregator, es)
         val referer = RESTFUL.url
-        load(RESTFUL_SERVICES, referer, ServiceHandler(), aggregator)
-        load(RESTFUL_USER, referer, UserHandler(), aggregator)
-        load(RESTFUL_MENUBARS, referer, MenuBarsHandler(), aggregator)
-        load(RESTFUL_VERSION, referer, VersionHandler(), aggregator)
-        load(RESTFUL_DOMAIN_TYPES, referer, DomainTypesHandler(), aggregator)
+        load(RESTFUL_SERVICES, referer, ServiceHandler(), aggregator, es)
+        load(RESTFUL_USER, referer, UserHandler(), aggregator, es)
+        load(RESTFUL_MENUBARS, referer, MenuBarsHandler(), aggregator, es)
+        load(RESTFUL_VERSION, referer, VersionHandler(), aggregator, es)
+        load(RESTFUL_DOMAIN_TYPES, referer, DomainTypesHandler(), aggregator, es)
         // then
-        assertTrue(EventStore.log.size >= 6)
+        assertTrue(es.log.size >= 6)
         val rootRs = ResourceSpecification(RESTFUL.url)
-        val rootLogEntry = EventStore.findBy(rootRs)
+        val rootLogEntry = es.findBy(rootRs)
         assertNotNull(rootLogEntry)  //1
 
         // when
@@ -60,10 +62,10 @@ class LinkTreeDiagramTest {
         assertTrue(code.contains("http://localhost:8080/restful/menuBars"))
     }
 
-    private fun load(response: Response, referer: String, handler: BaseHandler, aggregator: SystemAggregator) {
+    private fun load(response: Response, referer: String, handler: BaseHandler, aggregator: SystemAggregator, es: EventStore) {
         val rs = ResourceSpecification(response.url, referrerUrl = referer)
-        EventStore.start(rs, Method.GET.operation, aggregator = aggregator)
-        val le = EventStore.end(rs, response.str)!!
+        es.start(rs, Method.GET.operation, aggregator = aggregator)
+        val le = es.end(rs, response.str)!!
         val tObj = handler.parse(response.str)!!
         le.setTransferObject(tObj)
     }