nn 1 | Page 15

508 DISTRIBUTED OBJECT-BASED SYSTEMS CHAP . 9
implementations and were given minimal support in the form of a basic object adapter . Unfortunately , this minimal support also led to portability problems , which by now have been solved by giving a more complete and better specification of what an object adapter should offer . Below , we take a closer look at client-side and server-side software in CORBA .
Clients
As previously mentioned , CORBA ’ s client-side software is kept to a minimum . The IDL specifications of an object are simply compiled into a proxy that marshals invocation requests into , for example , IIOP Request messages , and unmarshals the corresponding Reply messages into results that can are handed back to the invoking client .
Proxies in CORBA have no other task than to connect a client application to the underlying ORB . Instead of generating an object-specific proxy , a client can also dynamically invoke objects through the DII .
The consequence of this approach is that if an object requires a specific client-side implementation of its interfaces , it will have to either instruct the developer to use an IDL compiler that generates that software , or provide the client ’ s proxy itself . For example , an object implementation could be accompanied by a set of proxies that implement an object-specific client-side caching strategy . Of course , the latter approach is totally out of line with CORBA ’ s objective of portability and distribution transparency .
Another approach is to forget about object-specific matters and to rely on a client-side ORB that provides the necessary support . For example , instead of providing a cache contained in the client ’ s proxy , an object implementation could assume that caching is handled in a general way by the client ’ s ORB . Again , it should be clear that such an approach has inherent limitations .
What is needed is a mechanism to use the proxies as generated by an IDL compiler in combination with an existing client-side ORB , but nevertheless be able to adapt the client-side software when needed . CORBA ’ s solution to this problem is to use interceptors . As its name suggests , an interceptor is a mechanism by which an invocation can be intercepted on its way from client to server , and adapted as necessary before letting it continue . In essence , an interceptor is a piece of code that modifies an invocation request on its way from client to server , and accordingly adapts the associated response . There may be various interceptors added to an ORB . Which one is actually activated depends on the object or server that is referenced in an invocation request .
An interceptor in CORBA can be placed at either one of two different logical levels , as shown in Fig . 9-10 . A request-level interceptor is logically placed between a client ’ s proxy and the ORB . Before an invocation request is passed to the ORB , it first passes through an interceptor , which may modify the request . On the server side , a request-level interceptor is placed between the ORB and the