[
https://issues.apache.org/jira/browse/ISIS-2234?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Daniel Keir Haywood updated ISIS-2234:
--------------------------------------
Fix Version/s: 2.1
(was: 2.0.0-M8)
> [Performance] During the render phase, don't populate the execution call
> graphs with results of mixins being invoked.
> ---------------------------------------------------------------------------------------------------------------------
>
> Key: ISIS-2234
> URL: https://issues.apache.org/jira/browse/ISIS-2234
> Project: Isis
> Issue Type: Improvement
> Components: Isis Viewer Wicket
> Reporter: Daniel Keir Haywood
> Assignee: Andi Huber
> Priority: Minor
> Labels: perfomance
> Fix For: 2.1
>
> Attachments: screenshot-1.png
>
>
> This is somewhat similar to ISIS-1656, which is to flush audit/publishing etc
> at the end of the ACTION phase, rather than the RENDER phase.
> More broadly stated: RENDERing shouldn't have any side-effects.
> ~~~
> Looking at the code today, we can see that in OneToOneAssociationMixedIn
> there's a hack:
> {code:java}
> @Override
> public ManagedObject get(
> final ManagedObject mixedInAdapter,
> final InteractionInitiatedBy interactionInitiatedBy) {
> val mixinAdapter = mixinAdapterFor(mixinType, mixedInAdapter);
> return getPublishingServiceInternal().withPublishingSuppressed(
> () -> mixinAction.executeInternal(
> mixinAdapter, mixedInAdapter, Can.empty(),
> interactionInitiatedBy)
> );
> }
> {code}
> which prevents the action invocation in the render phase from publishing
> anything.
> However, inspection of the internal data structures does currently show that
> the Interaction executionGraph (push, pop) gets populated, there is no
> corresponding hack... see attached screenshot, that shows a number of
> executions for all of the contributed properties of a SimpleObject. This
> isn't harmful per se, but it is odd that we spend all this effort to create
> the execution graph for it to be consumed by no-one at all.
> The bottom line is that actions don't know which phase they are being
> executed in, and so they do all this extra work.
> Perhaps the solution might be to include the phase in the InteractionContext,
> so we can therefore avoid this unnecessary work populating the executionGraph.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)