Previous | Table of Contents | Next |
The following points are the principles followed in the design of the portable Interceptor architecture.
1. Interceptors are called on all ORB mediated invocations. The following implicit object operations may or may not be ORB mediated: get_interface, is_a, non_existent, get_domain_managers, and get_component. When these are ORB mediated, Interceptors are called; when they are not ORB mediated, Interceptors are not called.
2. A request Interceptor can affect the outcome of a request by raising a system exception at any of the interception points. It can stop the request from even reaching the target by raising a system exception in the outbound path. It can alter an outcome specified by the target (exception or non-exception) by raising a system exception in the inbound path.
3. A request Interceptor can affect the outcome of a request by directing a request to a different location at any interception point other than a successful reply. That different location might include a location not otherwise reachable through the original request; that is, a location that might not be discovered by the ORB in the course of a locate request.
4. A request Interceptor cannot affect a request by changing a parameter specified by the client. That is, the Interceptor cannot modify “in? arguments.
5. A request Interceptor cannot affect a non-exception outcome by supplying the response itself. That is, the Interceptor cannot modify “out? arguments or the return value.
7. A request Interceptor may make object invocations itself before allowing the current request to execute.
9. There is no provision for making object implementations aware that any request Interceptor has been or will be called.
6. Request Interceptors are independent of other request Interceptors. That is, a request Interceptor won’t need to know, and won’t even be told, if there are request Interceptors executed before or after it. If a request Interceptor down the line (executed closer to the target than this one) affects the outcome of request, this request Interceptor will not be aware of that fact.
Corollary: request Interceptors can communicate between themselves to bypass this principle, but that’s outside of the concerns of the model.
8. There is no provision for making client implementations aware that any request
Interceptor has been or will be called.Corollary: A client and a request Interceptor can communicate between themselves to bypass this principle, but that is outside of the concerns of the model.
Corollary: An object implementation and a request Interceptor can communicate between themselves to bypass this principle,
but that is outside of the concerns of the model.
10. To ensure the integrity of the effect of each request Interceptor, a set of general flow rules are specified that govern
the flow of processing through a list of interceptors. See below.