CS551 Object Oriented Middleware (IV) Dynamic Requests (Chap. 6 of EDO) Yugi Lee STB #555 (816) 235-5932 [email protected] www.cstp.umkc.edu/~yugi 1 CS551 - Lecture 15 Outline • Dynamic Invocation – The CORBA Dynamic Invocation Interface – COM IDispatch Interfaces • Reflection – The CORBA Interface Repository – The COM Type Library • Designing Generic Applications – Using CORBA – Using COM CS551 - Lecture 15 2 Why Dynamic Request? • Sometimes clients need to be built before their server interfaces are defined • They need to defer request definition until they are executed • Examples: – Object browser – Generic bridges – Scripting language interpreter CS551 - Lecture 15 3 Motivating Example: Object Browser Use run-time type information to find out about object types attribute names Use dynamic invocation interfaces to obtain attribute values CS551 - Lecture 15 4 Motivating Example: Generic Bridge • Generic and request-level bridge Client Obj. Imp. DSI DII CS551 - Lecture 15 5 Motivating Example: Scripting CS551 - Lecture 15 6 Commonalities • Discovery of type information at run-time • Use of type information to build client objects that can cope with any type of server objects • Definition of object requests at run-time • Requires two primitives from middleware: – Dynamic invocation interfaces – Reflection mechanisms CS551 - Lecture 15 7 Dynamic Requests: Principles • Any object request has to identify – server object – operation name – actual parameters – data structure for operation result • In Dynamic Requests: – server object identified by object reference – operation name identified by string – actual parameters as list of name/value pairs – operation result determined by an address CS551 - Lecture 15 8 Dynamic Requests in CORBA Object Implementation Client Dynamic Invocation Client Stubs ORB Interface Implementation Skeletons ORB Core CS551 - Lecture 15 9 Object Adapter Dynamic Requests in CORBA • Dynamic invocation interface (DII) supports dynamic creation of requests (objects). • Request objects have attributes for – operation name, – parameters and – results. • Request objects have operations to – change operation parameters, – issue the request and – obtain the request results. CS551 - Lecture 15 10 Dynamic Request in CORBA :Client :Server r=create_request(…,”Op”,…) r:Request r add_arg() invoke() Op() delete() CS551 - Lecture 15 11 Dynamic Requests in COM • COM often used with interpreted scripting languages (e.g. VBScript) • Interpreters of these languages need to make dynamic requests. • Dynamic Requests in COM are defined in the IDispatch interface • Any COM server that implements IDispatch can be requested dynamically CS551 - Lecture 15 12 Dynamic Request in COM :Client :Server :ITypeInfo QueryInterface(IID_IDispatch) GetIDsOfNames(“Op”) GetIDsOfNames(“Op”) Invoke() Invoke() Op() CS551 - Lecture 15 13 Dual Interfaces • Are accessible both via stubs and via dynamic invocation • Example: Interface Player: [object,dual,uuid(75DA6450-DD0E-00d1-8B59-0089C73915CB] interface DIPlayer: IDispatch { [id(1),propget] HRESULT Name([out] BSTR val); [id(2),propget] HRESULT Number([out] short val); [id(3)] HRESULT book([in] Date val) }; • Interfaces have to be defined as dual! CS551 - Lecture 15 14 Transparency of Dynamic Invocation • In both COM and CORBA: – Client programs have to be written differently Use of dynamic invocation interfaces is not transparent to client programmers • In COM: – Interfaces of server objects have to be designed as dual Use of dynamic invocation not transparent in server design • In CORBA: – Server objects are unaware of dynamic invocation Use of DII is transparent CS551 - Lecture 15 15 Reflection Principles • How do clients discover attributes & operations that servers have? – capture type information during interface compilation – store type information persistently – provide an interface for clients to obtain type information during run-time • Reflection interfaces provided by – CORBA Interface Repository – COM Type Library CS551 - Lecture 15 16 CORBA Interface Repository • Makes type information of interfaces available at run-time. • Achieves type-safe dynamic invocations. • Supports construction of interface browser • Used by CORBA implementations themselves • Persistent storage of IDL interfaces in abstract syntax trees (ASTs) CS551 - Lecture 15 17 Abstract Syntax Trees (ASTs) • Interface repository persistently stores ASTs of IDL modules, interfaces, types, operations etc. SoccerMgmt module SoccerMgmt { ModuleDef interface Player; interface Team { typedef sequence<Player> Player Team PlayerList; InterfaceDef InterfaceDef exception Invalid {}; attribute ATMList ATMs; void add(in short number, PlayerList add in Player p); TypedefDef OperationDef raises(InvalidNumber) }; InvalidNumber members ExceptionDef AttributeDef }; CS551 - Lecture 15 18 AST Node Types IRObject Contained OperationDef ExceptionDef TypedefDef Container InterfaceDef ModuleDef ConstantDef AttributeDef CS551 - Lecture 15 19 Repository COM Type Library • • • • COM’s provision of run-time type information Raw information generated by MIDL compiler Stored in tokenized form (.TLB files) Main interfaces: ITypeLib 1 0..* ITypeInfo CS551 - Lecture 15 20 ITypeLib • Provides operations to browse through all interfaces contained in the type library – GetTypeInfoCount (returns number of TypeInfo objects in the library) – GetTypeInfo (can be used to obtain type info at a particular index number) • Locate ITypeInfo objects using the GUIDs CS551 - Lecture 15 21 ITypeInfo interface ITypeInfo : IUnknown { HRESULT GetFuncDesc( UINT index, FUNCDESC **ppFuncDesc); HRESULT GetIDsOfNames( OLECHAR **rgszNames, UINT cNames, DISPID *pMemId); HRESULT GetNames(DISPID memid, BSTR *rgBstrNames, UINT cMaxNames, UINT *pcNames); HRESULT GetTypeAttr(TYPEATTR **ppTypeAttr); HRESULT GetVarDesc(UINT index, VARDESC **ppVarDesc); HRESULT Invoke(VOID *pvInstance, DISPID memid, USHORT wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr); ... }; CS551 - Lecture 15 22 Static Invocation • Advantages: – Requests are simple to define. – Availability of operations checked by programming language compiler. – Requests can be implemented fairly efficiently. • Disadvantages: – Generic applications cannot be build. – Recompilation required after operation interface modification. CS551 - Lecture 15 23 Dynamic Invocation • Advantages: – Components can be built without having the interfaces they use, – Higher degree of concurrency through deferred synchronous execution. – Components can react to changes of interfaces. • Disadvantages: – Less efficient, – More complicated to use and – Not type safe! CS551 - Lecture 15 24 Key Points • Dynamic requests are used when static requests are not viable • Dynamic requests supported by both CORBA and COM • Dynamic requests are unsafe • Reflection mechanisms provided by COM and CORBA make dynamic requests safe • IDL compilers store type information persistently so that reflection implementations can provide them CS551 - Lecture 15 25
© Copyright 2026 Paperzz