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

Dan Haywood updated ISIS-866:
-----------------------------
    Description: 
For @RequestScoped services, Isis creates a proxy that implements the 
RequestScopedService interface (in Isis core-runtime), which defines 
__isis_startRequest and __isis_stopRequest.  These methods are then called when 
the Isis session (=request scope) is created so that the proxy can instantiate 
a service for the duration of the request, bound to the thread-local.

HOWEVER...

The underlying service doesn't actually know it has been created/a request is 
started.  It isn't possible to put logic in the constructor, because that stuff 
is also called by the proxy wrapper.

SO...

... a bit of research shows that the JEE way of doing this is to call methods 
annotated @PostConstruct and @PreDestroy.  So that's what we should do too.


  was:
For @RequestScoped services, Isis creates a proxy that implements the 
RequestScopedService interface (in Isis core-runtime), which defines 
__isis_startRequest and __isis_stopRequest.  These methods are then called when 
the Isis session (=request scope) is created so that the proxy can instantiate 
a service for the duration of the request, bound to the thread-local.

HOWEVER...

The underlying service doesn't actually know it has been created/a request is 
started.  It isn't possible to put logic in the constructor, because that stuff 
is also called by the proxy wrapper.

SO...

Define a new interface (in applib) that can be optionally implemented by 
@RequestScoped services (or might even be an equivalent facet); if the service 
implements, then have the proxy wrapper call it.  eg:

public interface RequestScoped {
    public void startRequest();
    public void endRequest();
}



> Request-scoped service should be told when the request is starting and 
> stopping.
> --------------------------------------------------------------------------------
>
>                 Key: ISIS-866
>                 URL: https://issues.apache.org/jira/browse/ISIS-866
>             Project: Isis
>          Issue Type: Improvement
>          Components: Core
>    Affects Versions: core-1.6.0
>            Reporter: Dan Haywood
>            Assignee: Dan Haywood
>            Priority: Minor
>             Fix For: core-1.7.0
>
>
> For @RequestScoped services, Isis creates a proxy that implements the 
> RequestScopedService interface (in Isis core-runtime), which defines 
> __isis_startRequest and __isis_stopRequest.  These methods are then called 
> when the Isis session (=request scope) is created so that the proxy can 
> instantiate a service for the duration of the request, bound to the 
> thread-local.
> HOWEVER...
> The underlying service doesn't actually know it has been created/a request is 
> started.  It isn't possible to put logic in the constructor, because that 
> stuff is also called by the proxy wrapper.
> SO...
> ... a bit of research shows that the JEE way of doing this is to call methods 
> annotated @PostConstruct and @PreDestroy.  So that's what we should do too.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to