You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@isis.apache.org by "Daniel Keir Haywood (Jira)" <ji...@apache.org> on 2020/02/12 22:39:00 UTC

[jira] [Updated] (ISIS-2232) Remove support for domain services contributing properties, collections or actions. (Use mixins instead).

     [ https://issues.apache.org/jira/browse/ISIS-2232?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Daniel Keir Haywood updated ISIS-2232:
--------------------------------------
    Fix Version/s:     (was: 2.0.0-M3)
                   2.0.0

> Remove support for domain services contributing properties, collections or actions.  (Use mixins instead).
> ----------------------------------------------------------------------------------------------------------
>
>                 Key: ISIS-2232
>                 URL: https://issues.apache.org/jira/browse/ISIS-2232
>             Project: Isis
>          Issue Type: Improvement
>            Reporter: Daniel Keir Haywood
>            Assignee: Daniel Keir Haywood
>            Priority: Minor
>             Fix For: 2.0.0
>
>
> Hit an issue where there's an error in contributed properties (from service) throwing NPE, due to mismatch of push/pop with interactoin execution graph.
> Mixins work fine.
> Rather than fix the inconsistency, think it's better to now remove that functionality (as we've planned a long while now).
>  
> Details of the problem encountered:
> in the current HEAD (2.0.0-M3-SNAPSHOT), I am getting an NPE as the result of the presence of this contributed action (nb: contributed from a service):
>  
> {code:java}
> public class SimpleObjects {
>     @Action(semantics = SemanticsOf.SAFE)
>     public SimpleObject search(final SimpleObject simpleObject) {
>         return simpleObject;
>     }
>     public List<SimpleObject> autoComplete0Search(final String search) {
>         return findByName(search);
>     }
>     ...
> }{code}
>  
> The NPE occurs in the stuff around Interaction's execution:
> h3. Stack trace:
>  * java.lang.NullPointerException
>  * 
>  * org.apache.isis.applib.util.schema.MemberExecutionDtoUtils#metricsFor(MemberExecutionDtoUtils.java:77)
>  * org.apache.isis.applib.services.iactn.Interaction$Execution$When#metricsFor(Interaction.java:640)
>  * org.apache.isis.applib.services.iactn.Interaction$Execution$When#access$200(Interaction.java:582)
>  * org.apache.isis.applib.services.iactn.Interaction$Execution$When$2#syncMetrics(Interaction.java:613)
>  * org.apache.isis.applib.services.iactn.Interaction$Execution#syncMetrics(Interaction.java:660)
>  * org.apache.isis.applib.services.iactn.Interaction$Execution#setCompletedAt(Interaction.java:503)
>  * org.apache.isis.applib.services.iactn.Interaction#pop(Interaction.java:246)
>  * org.apache.isis.applib.services.iactn.Interaction#executeInternal(Interaction.java:193)
>  * org.apache.isis.applib.services.iactn.Interaction#execute(Interaction.java:142)
>  * org.apache.isis.metamodel.facets.actions.action.invocation.ActionInvocationFacetForDomainEventAbstract#doInvoke(ActionInvocationFacetForDomainEventAbstract.java:208)
>  * org.apache.isis.metamodel.facets.actions.action.invocation.ActionInvocationFacetForDomainEventAbstract#lambda$invoke$0(ActionInvocationFacetForDomainEventAbstract.java:129)
>  * org.apache.isis.runtime.services.xactn.TransactionServiceSpring#executeWithinTransaction(TransactionServiceSpring.java:149)
>  * org.apache.isis.metamodel.facets.actions.action.invocation.ActionInvocationFacetForDomainEventAbstract#invoke(ActionInvocationFacetForDomainEventAbstract.java:128)
>  * org.apache.isis.metamodel.specloader.specimpl.ObjectActionDefault#executeInternal(ObjectActionDefault.java:423)
>  * org.apache.isis.metamodel.specloader.specimpl.ObjectActionDefault#execute(ObjectActionDefault.java:409)
>  * org.apache.isis.metamodel.specloader.specimpl.OneToOneAssociationContributee#get(OneToOneAssociationContributee.java:117)
>  * org.apache.isis.viewer.wicket.model.models.ScalarModel#setObjectFromPropertyIfVisible(ScalarModel.java:761)
>  * org.apache.isis.viewer.wicket.model.models.ScalarModel#access$200(ScalarModel.java:83)
>  * org.apache.isis.viewer.wicket.model.models.ScalarModel$Kind$1#reset(ScalarModel.java:315)
>  * org.apache.isis.viewer.wicket.model.models.ScalarModel$Kind$1#init(ScalarModel.java:305)
>  * org.apache.isis.viewer.wicket.model.models.ScalarModel#init(ScalarModel.java:729)
>  * org.apache.isis.viewer.wicket.model.models.ScalarModel#<init>(ScalarModel.java:724)
>  * org.apache.isis.viewer.wicket.model.models.EntityModel#getPropertyModel(EntityModel.java:367)
>  * org.apache.isis.viewer.wicket.ui.components.entity.fieldset.PropertyGroup#addPropertyToForm(PropertyGroup.java:215)
>  * org.apache.isis.viewer.wicket.ui.components.entity.fieldset.PropertyGroup#buildGui(PropertyGroup.java:117)
>  * org.apache.isis.viewer.wicket.ui.components.entity.fieldset.PropertyGroup#<init>(PropertyGroup.java:81)
>  
> we can see that 'pop' is called but there's no execution to work upon; the stack trace tells us that we're in the render phase and evaluating this contributed property (as an action) to reset the model of the rendered entity.
>  
> FWIW, with this mixin:
> {code:java}
> @Mixin(method = "prop")
> public class SimpleObject_search {
>     private final SimpleObject simpleObject;
>     public SimpleObject_search(SimpleObject simpleObject) {
>         this.simpleObject = simpleObject;
>     }
>     @Action(semantics = SemanticsOf.SAFE)
>     @Property
>     public SimpleObject prop() {
>         return simpleObject;
>     }
> }
>  {code}
>  
> then everything behaves itself.
>  
> That said, we do get an interaction graph being built up in the render phase, which is odd.  See ISIS-2234 for more discussion on fixing this, and also the similar ISIS-1656 which relates to auditing/publishing.
>  
>  
>  



--
This message was sent by Atlassian Jira
(v8.3.4#803005)