You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@isis.apache.org by "Dan Haywood (JIRA)" <ji...@apache.org> on 2014/09/25 12:01:33 UTC
[jira] [Updated] (ISIS-866) Request-scoped service should be told
when the request is starting and stopping.
[ 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)