Download presentation
Presentation is loading. Please wait.
Published byRebecca Sims Modified over 9 years ago
1
CS551 - Lecture 12 1 CS551 Object Oriented Middleware (IV) Dynamic Requests (Chap. 6 of EDO) Yugi Lee STB #555 (816) 235-5932 yugi@cstp.umkc.edu www.cstp.umkc.edu/~yugi
2
2 CS551 - Lecture 12 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 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
3
3 CS551 - Lecture 12 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 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
4
4 CS551 - Lecture 12 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 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
5
5 CS551 - Lecture 12 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 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
6
6 CS551 - Lecture 12 Dynamic Invocation Dynamic Invocation Client Stubs Client Stubs ORB Interface ORB Interface Implementation Skeletons Implementation Skeletons Client Object Implementation ORB Core Object Adapter Object Adapter Dynamic Requests in CORBA
7
7 CS551 - Lecture 12 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. 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.
8
8 CS551 - Lecture 12 Dynamic Request in CORBA :Client r r r:Request :Server Op() r r =create_request(…,”Op”,…) add _arg() invoke() delete()
9
9 CS551 - Lecture 12 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 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
10
10 CS551 - Lecture 12 Dynamic Request in COM :Client :Server QueryInterface(IID_IDispatch) GetIDsOfNames(“Op”) Invoke() Op() GetIDsOfNames(“Op”) :ITypeInfo Invoke()
11
11 CS551 - Lecture 12 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! 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!
12
12 CS551 - Lecture 12 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 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
13
13 CS551 - Lecture 12 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 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
14
14 CS551 - Lecture 12 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) 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)
15
15 CS551 - Lecture 12 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: COM’s provision of run-time type information Raw information generated by MIDL compiler Stored in tokenized form (.TLB files) Main interfaces: ITypeLib ITypeInfo 1 1 0 0..*
16
16 CS551 - Lecture 12 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 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
17
17 CS551 - Lecture 12 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);... }; 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);... };
18
18 CS551 - Lecture 12 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 built. –Recompilation required after operation interface modification. 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 built. –Recompilation required after operation interface modification.
19
19 CS551 - Lecture 12 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! 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!
20
20 CS551 - Lecture 12 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 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
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.