Title: CS551 Object Oriented Middleware IV Dynamic Requests Chap' 6 of EDO
1CS551 Object Oriented Middleware (IV) Dynamic
Requests (Chap. 6 of EDO)
- Yugi Lee
- STB 555
- (816) 235-5932
- yugi_at_cstp.umkc.edu
- www.cstp.umkc.edu/yugi
2Outline
- Motivating Examples
- 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
3What is a 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
4Motivating Example Object Browser
Use run-time type information to find out about
object types attribute names Use dynamic
invocation interfaces to obtain attribute values
5Motivating Example Generic Bridge
- Generic and request-level bridge
6Motivating Example Scripting
7Commonalities
- 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
8Dynamic 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
9Dynamic Requests in CORBA
10Dynamic Requests in CORBA
- Dynamic invocation interface (DII) supports
dynamic creation of requests. - Requests are objects themselves.
- 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.
11Dynamic Request in CORBA
12Dynamic 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
13Dynamic Request in COM
14Dual Interfaces
- Are accessible both via stubs and via dynamic
invocation - Example Interface Player
- object,dual,uuid(75DA6450-DD0E-00d1-8B59-0089C739
15CB - 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!
15Transparency 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
16Reflection 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
17CORBA 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)
18Abstract Syntax Trees (ASTs)
- Interface repository persistently stores ASTs of
IDL modules, interfaces, types, operations etc.
SoccerMgmt
module SoccerMgmt
ModuleDef
Player
Team
InterfaceDef
InterfaceDef
PlayerList
void add(in short number, in Player p)
raises(InvalidNumber)
add
TypedefDef
OperationDef
InvalidNumber
members
ExceptionDef
AttributeDef
19AST Node Types
Repository
20COM Type Library
- COMs provision of run-time type information
- Raw information generated by MIDL compiler
- Stored in tokenized form (.TLB files)
- Main interfaces
1
0
..
ITypeLib
ITypeInfo
21ITypeLib
- 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
22ITypeInfo
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) ...
23Static 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.
24Dynamic 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!
25Key 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