[ 
https://issues.apache.org/jira/browse/ISIS-801?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14066262#comment-14066262
 ] 

Dan Haywood commented on ISIS-801:
----------------------------------

Hi Ranganath,

As you've realized, I think, this service action :

public OmPermission createSitePermission(final @Named("Choose a site") OmSite 
site)

accepts a single entity and is non-void, which means it ends up being 
contributed as a property.  When the contributee entity (OmSite) is rendered, 
the contributed property is eagerly executed, resulting in the unwanted 
side-effect.

I think the solution here is for Isis only to contribute properties/collections 
for actions that have no side-effects, ie which are @ActionSemantics(Of.SAFE).  
 Should be easy enough to do.

Thx for raising this.

Dan


> Action method taking domain object paramater gets triggered automatically 
> whenever instances of that object type is accessed
> ----------------------------------------------------------------------------------------------------------------------------
>
>                 Key: ISIS-801
>                 URL: https://issues.apache.org/jira/browse/ISIS-801
>             Project: Isis
>          Issue Type: Bug
>          Components: Core, Viewer: Wicket
>    Affects Versions: core-1.5.0
>            Reporter: Ranganath Chittari
>            Assignee: Dan Haywood
>            Priority: Minor
>             Fix For: core-1.7.0
>
>
> I have application security service which creates permission to manage 
> particular entity(OmSite). Its action method is:
>     @Bookmarkable
>     @MemberOrder(sequence = "9")
>     @Named("Create Site Permission")
>     public OmPermission createSitePermission(final @Named("Choose a site") 
> OmSite site) {
>         final OmPermission obj = newTransientInstance(OmPermission.class);
>         obj.setPermission(SecurityUtil.formatSitePermission(site.getOrgId(), 
> site.getSiteId()));
>         obj.setSite(site);
>         persistIfNotAlready(obj);
>         return obj;
>     }
> As you can see this method takes OmSite instance to create a permission to 
> that instance. And OmPermission has foreign key to OmSite. This action is 
> displayed in service menu and its working fine.
> But the problem I am facing is when I access the list of OmSite objects in 
> other UI pages.  This action method is getting triggered automatically and 
> inserts bulk OmPermissions for all those List<OmSite> objects.
> This action method createSitePermission should be invoked only if it is 
> clicked manually, but it gets triggered automatically whenever OmSite is 
> accesed in some other places.
> For ex:
> an action that returns a list of these OmSite, 
> when OmSite is in a collection of some other entity,
> When new OmSite is created.
> Workaround for this issue is annotate @NotContributed  to that action method, 
> it will prevent from invoking this method whenever its parameter instance is 
> accessed.
> BR
> Ranganath Varma
> Could you please look into this issue.



--
This message was sent by Atlassian JIRA
(v6.2#6252)

Reply via email to