[ 
https://issues.apache.org/jira/browse/TUSCANY-2215?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12604979#action_12604979
 ] 

Jean-Sebastien Delfino commented on TUSCANY-2215:
-------------------------------------------------

The problem is that the runtime currently does not track the lifecycle of 
requests and therefore has no way to detect the end of a request.

I think that the following needs to be done:

- Define a proper eventing mechanism (at the moment the stuff in 
org.apache.tuscany.sca.core.event is not used) to signal lifecycle events on 
composite, conversation, request and stateless scopes

- Use this mechanism consistently in to track the state of these scopes (the 
different scope containers seem to be using different mechanisms at the moment, 
for example ConversationalScopeContainer has introduced a set of specific 
eventing methods, which the other scopes do not use).

- Make sure that entry / exit points (e.g binding providers) send the right 
begin/end scope events, this is not in place at all at the moment, except for 
conversation events in some specific cases.

I recommend a serious cleanup of the whole event mechanism (which could 
potentially be rewritten as it's not used and mostly dead code anyway), the 
scope management mechanism, and a pass through all binding providers and 
component implementation providers to ensure that they generate or react to 
scope events correctly.

As a starting point, the Event and Scope interfaces are SPIs, they should be in 
a different package, in a different module: core-spi.


> Destory method is not called if scope type is request
> -----------------------------------------------------
>
>                 Key: TUSCANY-2215
>                 URL: https://issues.apache.org/jira/browse/TUSCANY-2215
>             Project: Tuscany
>          Issue Type: Bug
>          Components: Java SCA Core Runtime
>    Affects Versions: Java-SCA-Next
>            Reporter: Gilbert Kwan
>             Fix For: Java-SCA-Next
>
>
> Destroy method was not called for @Scope("REQUEST").
> Service Definition:
> =============
> @Scope("REQUEST")
> public class AServiceImpl implements AService {
>    @Init
>    public void init() {
>        System.out.println("init()");
>    }
>    @Destroy
>    public void destroy() {
>        System.out.println("destroy()");
>    }
>    public void xxx() {
>        System.out.println("xxx()");    }
> }
> Client called:
> =========
>       System.out.println("Setting up");
>       domain = SCADomain.newInstance(compositeName);
>       aService = domain.getService(AService.class, "AService");
>       aService.xxx();
>        System.out.println("Cleaning up");
>        if (domain != null)
>            domain.close();
> Output:
> ======
> Setting up
> init()
> xxx()
> Cleaning up
> When changed to other scope type, the destroy method could be called.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to