SEC . 9.1 CORBA 509 object adapter .
Client application
Client proxy
Invocation request
Request-level interceptor
Message-level interceptor
Client ORB
Local OS To server
Figure 9-10 . Logical placement of interceptors in CORBA .
In contrast , message-level interceptors are placed between an ORB and the underlying network . A message-level interceptor knows nothing about the message that is to be sent ; it only has GIOP messages at its disposal that it may wish to modify . A typical example of a message-level interceptor is one that implements fragmentation at the sending side , and reassembly of the original GIOP message at the receiver side , for example , using the special Fragment messages .
Interceptors are seen only by an ORB , that is , it is the ORB ’ s responsibility to invoke an interceptor . Clients and servers hardly ever see interceptors , except at the time a client binds to a server . Note that an ORB may make use of both types of interceptors at the same time . An overview of the use of interceptors in CORBA can be found in ( Narasimhan et al ., 1999 ), whereas the exact specifications are given in ( OMG , 2001b ).
Although the idea of an interceptor seems attractive at first sight , it can also be argued that it is a mechanism for breaking into an implementation to fix things that are apparently missing . For example , if CORBA had provided mechanisms to support developing and using object-specific proxies , there would be less need for interceptors . However , what is really needed are ORBs that can be easily extended . Interceptors provide a general mechanism to support extensibility , but the question is whether the two types of interceptors as provided in CORBA are really the ones we need . More on interceptors from a software architecture point of view can be found in ( Schmidt et al ., 2000 ).
Portable Object Adapter
In Chap . 3 , we described in detail the notion of an object adapter , which is a mechanism that implements a specific activation policy for a group of objects . For example , one adapter may implement a method invocation using a separate thread for each invocation , whereas another one uses only a single thread for all the