- 
                            Key: CORBA3-36
- 
                            Legacy Issue Number: 4554
- 
                            Status: closed
- 
                            Source: International Business Machines ( Mr. Tim Baldwin)
- 
                            Summary:We have identified a requirement where the interceptors for one service 
 need to be able to detect recursive invocations made by some other
 interceptor during the processing of a request. As far as we have been
 able to determine there is no way to achieve this using the
 Request-scope/Thread-scope Current mechanism described in the spec.It is probably easiest to explain this using a specific example. Start 
 with some form of "transaction" service that registers client-side
 interceptors so it can detect all new request invocations and add service
 contexts that perform some form of "begin transaction" processing at the
 server. This transaction service must only perform this "begin
 transaction" once per application-level request, so it allocates a
 PICurrent slot and performs the processing described in section 21.4.4.2 to
 ensure that any recursive calls it makes itself will form part of the same
 transaction and not begin a new one.However a problem now occurs if we introduce some other service, say a 
 "security" service that has its own interceptors registered. The order in
 which these two service's interceptors run can affect what happens, but
 since interceptor ordering is undefined assume that the security
 interceptor runs first.An application makes a request on its own thread A. The send_request 
 interceptors start to run on thread B and the security interceptor runs
 first, at this point both the RSC and TSC slots for the transaction service
 are empty. The security interceptor makes a recursive request so the
 send_request interceptors run again on a new thread C. The security
 interceptor runs again and this time doesn't recurse so the transaction
 interceptor now runs on thread C. At this point it finds its RSC slot
 empty so does a "begin transaction" and sets its TSC for thread C. We've
 now finished interceptors on thread C and return to thread B and invoke
 send_request for the transaction service. Once again it finds its RSC slot
 empty and will try to "begin transaction" again. Now we have a problem as
 we have issued two "begin transactions" for the same application request.In fact it as actually the second of those two "begin transactions" that we 
 really want to do, as that represents the true start of the application's
 transaction. The first one (caused by the recursive call in the other
 interceptor) is at best redundant and wasteful and at worst wrong and
 problematic.Does anyone have any comments on this problem? 
- 
                            Reported: CORBA 2.5 — Tue, 4 Sep 2001 04:00 GMT
- 
                            Disposition: Resolved — CORBA 3.0.2
- 
                            Disposition Summary:close no change 
- 
                            Updated: Fri, 6 Mar 2015 20:58 GMT