object-oriented network communication (oomi) dynamic requests emmerich – chapter 6. 7.03.2003

27
Object-Oriented Network Communication (OOMI) Dynamic Requests Emmerich – Chapter 6. 7.03.2003

Upload: brian-harrell

Post on 18-Jan-2016

215 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Object-Oriented Network Communication (OOMI) Dynamic Requests Emmerich – Chapter 6. 7.03.2003

Object-Oriented Network Communication

(OOMI)

Dynamic Requests Emmerich – Chapter 6.

7.03.2003

Page 2: Object-Oriented Network Communication (OOMI) Dynamic Requests Emmerich – Chapter 6. 7.03.2003

Slide 2 of 27 © Ingeniørhøjskolen i Århus

Outline

1. Dynamic InvocationThe CORBA Dynamic Invocation Interface

2. ReflectionThe CORBA Interface Repository

Page 3: Object-Oriented Network Communication (OOMI) Dynamic Requests Emmerich – Chapter 6. 7.03.2003

Slide 3 of 27 © Ingeniørhøjskolen i Århus

What 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

• These are dynamic requests

• Examples:– Object browser– Automatic test programmes

Page 4: Object-Oriented Network Communication (OOMI) Dynamic Requests Emmerich – Chapter 6. 7.03.2003

Slide 4 of 27 © Ingeniørhøjskolen i Århus

Motivating Example: Object Browser

Page 5: Object-Oriented Network Communication (OOMI) Dynamic Requests Emmerich – Chapter 6. 7.03.2003

Slide 5 of 27 © Ingeniørhøjskolen i Århus

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

Page 6: Object-Oriented Network Communication (OOMI) Dynamic Requests Emmerich – Chapter 6. 7.03.2003

Slide 6 of 27 © Ingeniørhøjskolen i Århus

1. 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

Page 7: Object-Oriented Network Communication (OOMI) Dynamic Requests Emmerich – Chapter 6. 7.03.2003

Slide 7 of 27 © Ingeniørhøjskolen i Århus

DynamicInvocation

ClientStubs

ORBInterface

Implementation Skeletons

Client Object Implementation

ORB Core

ObjectAdapter

Dynamic Requests in CORBA

Page 8: Object-Oriented Network Communication (OOMI) Dynamic Requests Emmerich – Chapter 6. 7.03.2003

Slide 8 of 27 © Ingeniørhøjskolen i Århus

Dynamic 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

Page 9: Object-Oriented Network Communication (OOMI) Dynamic Requests Emmerich – Chapter 6. 7.03.2003

Slide 9 of 27 © Ingeniørhøjskolen i Århus

Dynamic Request in CORBA

:Client

rr:Request

:Server

Op()

r=create_request(…,”Op”,…)

add_arg()

invoke()

delete()

Page 10: Object-Oriented Network Communication (OOMI) Dynamic Requests Emmerich – Chapter 6. 7.03.2003

Slide 10 of 27 © Ingeniørhøjskolen i Århus

Using DII with Java

… //obtain the obj stub – e.g. from IOR

org.omg.CORBA.Object obj = orb.string_to_object(ref) ;

// Create a DII request and set the arguments and result

org.omg.CORBA.Request r = obj._request("sayHello");

r.set_return_type(orb.get_primitive_tc(org.omg.CORBA.TCKind.tk_string));

// call the Hello server object and print results

r.invoke();

java.lang.Exception ex = r.env().exception();

//handling of exception …

// extract the result

String result;

result = r.return_value().extract_string();

System.out.println("Result from DII: " + result + "Now without stubs!");

Page 11: Object-Oriented Network Communication (OOMI) Dynamic Requests Emmerich – Chapter 6. 7.03.2003

Slide 11 of 27 © Ingeniørhøjskolen i Århus

Creating Dynamic CORBA Requests

interface Object

{

ORBstatus create_request(

in Context ctx, // operation context

in Identifier operation,// operation to exec

in NVList arg_list, // args of operation

inout NamedValue result,// operation result

out Request request // new request object

in Flags req_flags // request flags

);

...

};

Page 12: Object-Oriented Network Communication (OOMI) Dynamic Requests Emmerich – Chapter 6. 7.03.2003

Slide 12 of 27 © Ingeniørhøjskolen i Århus

Manipulating Dynamic CORBA Requestsinterface Request { Status add_arg ( in Identifier name, // argument name in TypeCode arg_type,// argument datatype in void* value, // argument to be added in long length, // length of argument value in Flags arg_flags // argument flags

);

Status invoke(

in Flags invoke_flags // invocation flags);

Status send(in Flags invoke_flags // invocation flags);

Status get_response(in Flags response_flags // response flags) raises (WrongTransaction);

Status delete();};

Page 13: Object-Oriented Network Communication (OOMI) Dynamic Requests Emmerich – Chapter 6. 7.03.2003

Slide 13 of 27 © Ingeniørhøjskolen i Århus

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

Page 14: Object-Oriented Network Communication (OOMI) Dynamic Requests Emmerich – Chapter 6. 7.03.2003

Slide 14 of 27 © Ingeniørhøjskolen i Århus

2. Reflection Principles

• How do clients discover attributes & operations that servers have?

• Need to – 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

Page 15: Object-Oriented Network Communication (OOMI) Dynamic Requests Emmerich – Chapter 6. 7.03.2003

Slide 15 of 27 © Ingeniørhøjskolen i Århus

CORBA Interface Repository Service

• Makes type information of interfaces available at run-time

• Achieves type-safe dynamic invocations• Supports construction of interface browser• Used by CORBA implementations

themselves (need a IR server running)– Not supported by Orbacus Java & SUNs ORB– Very vendor specifik implementation

• Persistent storage of IDL interfaces in abstract syntax trees (ASTs)

Page 16: Object-Oriented Network Communication (OOMI) Dynamic Requests Emmerich – Chapter 6. 7.03.2003

Slide 16 of 27 © Ingeniørhøjskolen i Århus

• Interface repository persistently stores ASTs of IDL modules, interfaces, types, operations etc.

module SoccerMgmt {

};

ModuleDef

SoccerMgmt

InterfaceDef

Player

interface Player;

InterfaceDef

Team

interface Team {

};

TypedefDef

PlayerList

typedef sequence<Player> PlayerList;

ExceptionDef

InvalidNumber

exception InvalidNumber{};

AttributeDef

members

attribute PlayerList members;

OperationDefadd void add(in short number,

in Player p); raises(InvalidNumber)

Abstract Syntax Trees (ASTs)

Page 17: Object-Oriented Network Communication (OOMI) Dynamic Requests Emmerich – Chapter 6. 7.03.2003

Slide 17 of 27 © Ingeniørhøjskolen i Århus

ContainerContainer

AST Node Types

IRObjectIRObject

ContainedContained

OperationDefOperationDef

ExceptionDefExceptionDef

TypedefDefTypedefDef AttributeDefAttributeDef

ConstantDefConstantDef

ModuleDefModuleDefInterfaceDefInterfaceDef RepositoryRepository

Page 18: Object-Oriented Network Communication (OOMI) Dynamic Requests Emmerich – Chapter 6. 7.03.2003

Slide 18 of 27 © Ingeniørhøjskolen i Århus

Container (node with children)

interface Container : IRObject {

Contained lookup(in ScopedName search_name); sequence<Contained> contents( in DefinitionKind limit_type, in boolean exclude_inherited);

sequence<Contained> lookup_name( in Identifier search_name, in long levels_to_search, in DefinitionKind limit_type, in boolean exclude_inherited); ...};

Page 19: Object-Oriented Network Communication (OOMI) Dynamic Requests Emmerich – Chapter 6. 7.03.2003

Slide 19 of 27 © Ingeniørhøjskolen i Århus

Contained (child)

interface Contained : IRObject {

attribute Identifier name;

attribute RepositoryId id;

attribute VersionSpec version;

readonly attribute Container defined_in; struct Description {

DefinitionKind kind;

any value;

};

Description describe(); ...

};

Page 20: Object-Oriented Network Communication (OOMI) Dynamic Requests Emmerich – Chapter 6. 7.03.2003

Slide 20 of 27 © Ingeniørhøjskolen i Århus

Interface Definitioninterface InterfaceDef : Container,Contained { attribute sequence<InterfaceDef> base_interfaces;

boolean is_a(in RepositoryId interface_id); struct FullInterfaceDescription {

Identifier name;

RepositoryId id;

RepositoryId defined_in;

RepositoryIdSequence base_interfaces;

sequence<OperationDescription> operations;

sequence<AttributeDescription> attributes;

...

};

FullInterfaceDescription describe_interface();

};

Page 21: Object-Oriented Network Communication (OOMI) Dynamic Requests Emmerich – Chapter 6. 7.03.2003

Slide 21 of 27 © Ingeniørhøjskolen i Århus

Locating CORBA Interface Definitions

Alternatives:

• Any interface inherits the operation

InterfaceDef get_interface() from Object

• Associative search using lookup_name()

• Navigation through the interface repository using contents and defined_in attributes

Page 22: Object-Oriented Network Communication (OOMI) Dynamic Requests Emmerich – Chapter 6. 7.03.2003

Slide 22 of 27 © Ingeniørhøjskolen i Århus

Example: Object Browser

• Use run-time type information to find out about – object types and – attribute names

• Use dynamic invocation interfaces to obtain attribute values

Page 23: Object-Oriented Network Communication (OOMI) Dynamic Requests Emmerich – Chapter 6. 7.03.2003

Slide 23 of 27 © Ingeniørhøjskolen i Århus

:Browser p:Playeri:InterfaceDef

r1: Request

i=get_interface()

name()

r1=create_request(…,“Name”,…)

describe_interface()

invoke()

r2=create_request(…,“Number”,…)

r2: Requestinvoke()

Name()

delete()

Number()

delete()

Object Browser in CORBA

Reflection part

Invocation part

Page 24: Object-Oriented Network Communication (OOMI) Dynamic Requests Emmerich – Chapter 6. 7.03.2003

Slide 24 of 27 © Ingeniørhøjskolen i Århus

CORBA Java Reflection I

// Java

import org.omg.CORBA.*; ...

org.omg.CORBA.ORB = ... // initialize the ORB

org.omg.CORBA.Object obj = ... // get object reference somehow

org.omg.CORBA.Object defObj = obj._get_interface_def();

if(defObj == null)

{ System.err.println("No Interface Repository available");

System.exit(1);

}

InterfaceDef def = InterfaceDefHelper.narrow(defObj);

org.omg.CORBA.InterfaceDefPackage.FullInterfaceDescription desc =

def.describe_interface();

Page 25: Object-Oriented Network Communication (OOMI) Dynamic Requests Emmerich – Chapter 6. 7.03.2003

Slide 25 of 27 © Ingeniørhøjskolen i Århus

CORBA Java Reflection II

int i;

System.out.println("name = " + desc.name);

System.out.println("id = " + desc.id);

System.out.println("defined_in = " + desc.defined_in);

System.out.println("version = " + desc.version);

System.out.println("operations:");

for(i = 0 ; i < desc.operations.length ; i++)

{

System.out.println(i + ": " + desc.operations[i].name);

}

System.out.println("attributes:");

for(i = 0 ; i < desc.attributes.length ; i++)

{

System.out.println(i + ": " + desc.attributes[i].name);

}

System.out.println("base_interfaces:");

for(i = 0 ; i < desc.base_interfaces.length ; i++)

{

System.out.println(i + ": " + desc.base_interfaces[i]);

}

Page 26: Object-Oriented Network Communication (OOMI) Dynamic Requests Emmerich – Chapter 6. 7.03.2003

Slide 26 of 27 © Ingeniørhøjskolen i Århus

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

Page 27: Object-Oriented Network Communication (OOMI) Dynamic Requests Emmerich – Chapter 6. 7.03.2003

Slide 27 of 27 © Ingeniørhøjskolen i Århus

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!

– And not supported by all