0% found this document useful (0 votes)
40 views23 pages

Corba

Uploaded by

Vinay naidu Kola
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
40 views23 pages

Corba

Uploaded by

Vinay naidu Kola
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
You are on page 1/ 23

Teaching material

based on Distributed
Systems: Concepts
and Design, Edition 3, Distributed Systems Course
Addison-Wesley 2001.

CORBA case study

Copyright © George 17.1 Introduction


Coulouris, Jean Dollimore,
Tim Kindberg 2001
email: [email protected] 17.2 CORBA RMI
This material is made
available for private study
and for direct use by
17.2.1 Client and server example
individual teachers.
It may not be included in any 17.2.2 Architecture
product or employed in any
service without the written 17.2.3 CORBA IDL
permission of the authors.
17.2.4 CORBA object references
Viewing: These slides
must be viewed in
slide show mode.
17.3 Services (just a summary)
Introduction to CORBA

 The Object Management Group (OMG) was formed


in 1989. Its aims were:
– to make better use of distributed systems
– to use object-oriented programming
– to allow objects in different programming languages to communicate
with one another
 The object request broker (ORB) enables clients to
invoke methods in a remote object
 CORBA is a specification of an architecture
supporting this.
– CORBA 1 in 1990 and CORBA 2 in 1996.

2 •
Don't be put off by GIOP and IIOP
Introduction to CORBA They are just names for familiar things

The main components of CORBA’s RMI framework are:


1. An interface definition language known as IDL.
2. An architecture.
3. The General Inter-ORB protocol (GIOP) defines
• an external GIOP
data representation,
is just aboutcalled CDR data representation
external
 specifies formats
and aforRequest-reply
the messages inprotocol
a request-reply protocol.
• including messages
allowing forforobjects
enquiring
to about the location of an
be activated
object, for cancelling requests and for reporting errors.
4. The Internet Inter-ORB protocol (IIOP) defines a standard
form for remoteIIOP
object references.
is just about remote object references
• IIOP is GIOP implemented in TCP/IP
 CORBA services - generic services useful in distributed
applications e.g. Naming
The Service,
architecture EventforService.
allows mixed languages
and object activation (added to Figure 5.6)
3 •
CORBA RMI

 CORBA RMI is a multi-language RMI system.


 The programmer needs to learn the following new concepts:
– the object model offered by CORBA;
– the interface definition language and its mapping onto the implementation language.
(e.g. a struct in IDL is mapped onto what in Java?)
 CORBA's object model
– similar to the remote object model in Chapter 5 (what are the main features?)
– clients are not necessarily objects (why not?)– a client can be any program that
sends request messages to remote objects and receives replies.
 The term CORBA object is used to refer to remote objects.
– a CORBA object implements an IDL interface, has a remote object reference and its
methods can be invoked remotely.
 A CORBA object can be implemented by a language without classes.
– the class concept does not exist in CORBA.
– therefore classes cannot be defined in CORBA IDL, which means that instances of
classes cannot be passed as arguments.

4 •
CORBA IDL interfaces Shape and ShapeList
struct Rectangle{ struct GraphicalObject {
long width; string type;
long height; Rectangle enclosing;
long x; boolean isFilled;
long y; this struct is used in };
}; defining another struct. this struct is used as a parameter or result
type in methods in the remote interfaces.
interface Shape {
long getVersion() ;
GraphicalObject getAllState() ; // returns state of the GraphicalObject
}; an interface specifies a name and a set of methods

typedef sequence <Shape, 100> All; sequences and arrays in typedefs


interface ShapeList {
exception FullException{ }; interface ShapeList
Shape newShape(in GraphicalObject g) raises (FullException);
All allShapes(); // returns sequence of remote object references
long getVersion() ;
the};parameter of newShape is an in parameter and Exceptions defined by raises and set
of type Graphical Object The return value is an by throw. They can have arguments.
Figure
extra out 17.1 of type Shape. No classes can
parameter
be passed as arguments or results
5 •
Parameters in CORBA IDL

 Passing CORBA objects:


– Any parameter or return value whose type is specified by the name of a IDL
interface, e.g. Shape, is a reference to a CORBA object (see newShape)
– and the value of a remote object reference is passed.
 Passing CORBA primitive and constructed types:
– Arguments of primitive and constructed types are copied and passed by value.
On arrival, a new value is created in the recipient’s process. E.g., the struct
GraphicalObject (argument of newShape and result of getAllState)
 Note: the method allShapes returns an array of remote object
references as follows:
typedef sequence <Shape, 100> All;
All allShapes();
 Type Object - is a supertype of all IDL interfaces (its values
are object references). When would it be useful? Hint:
– Think about the name server

6 •
CORBA Naming Service (see Section17.3.1)

 It is a binder that provides methods including


– rebind for servers to register the remote object references of CORBA objects
by name (e.g. rebind (path, Object) e.g of 2nd argument?
– resolve for clients to look them up by name.(e.g.Object = resolve(path))
– these methods belong to an interface called NamingContext (Fig 17.10)
 The names are structured in a hierarchy,
– a path is an array of NameComponent (a struct with a name in it)
– the path starts from an initial context provided by CORBA
– This makes access in a simple example seem rather complex!
 The name service is present in all CORBA installations. (It’s
role is like the Java RMI registry)
 Its use will be shown in program examples

7 •
Illustration of programming CORBA

 We illustrate CORBA with a Java client and server


 The interface compiler is called idltojava
– when given an IDL interface, it produces
 server skeletons for each class (e.g. _ShapeListImplBase)
 proxy classes (e.g. _ShapeListStub)
 a Java class for each struct e.g. Rectangle, GraphicalObject
 helper classes (narrow method) and holder classes (for out arguments)
 the equivalent Java interfaces (e.g. ShapeList below)

public interface ShapeList extends org.omg.CORBA.Object {


Shape newShape(GraphicalObject g) throws ShapeListPackage.FullException;
Shape[] allShapes();
int getVersion();
Figure 17.2
}
8 •
The ShapeListServant class of the Java server program for the
CORBA interface ShapeList. Figure 17.3

This  A has
class Javatoserver hasCORBA
create classes for its
objects
import org.omg.CORBA.*;
IDL interfaces (e.g. Shape and
of type
class ShapeListServant extends _ShapeListImplBase { Shape. HowHere
ShapeList). does it do
is the that?
class
ORB theOrb;
private Shape theList[]; ShapeListServant
a servant class extends the corresponding
private int version;
private static int n=0; skeleton class (e.g. ShapeListImplBase)
public ShapeListServant(ORB orb){
theOrb = orb; CORBA objects are instances of servant classes.
// initialize the other instance variables
}
In non-OO languages implementations of CORBA
public Shape newShape(GraphicalObject g) objects can’t be classes. What might
throws ShapeListPackage.FullException { they be in C?
version++;
Shape s = new ShapeServant( g, version);
if(n >=100) throw new ShapeListPackage.FullException();
theList[n++] = s;
a servant class implements the methods in the
theOrb.connect(s);
return s;
interface (ShapeList). newShape is a factory
} method. It creates new CORBA objects. It uses the
public Shape[] allShapes(){ ... } connect method to inform the ORB about the new
public int getVersion() { ... } CORBA object. (it has a remote reference module)
} 9 •
Java class ShapeListServer (the server class)
import org.omg.CosNaming.*; The server class contains the main method
1. itimport
gets org.omg.CosNaming.NamingContextPackage.*;
a reference to the Naming Service
2. narrows it to NamingContext- from Object
import org.omg.CORBA.*;
3. makes a NameComponent
public class ShapeListServer { containing the it creates and initialises the ORB
name “ShapeList”
public static void main(String args[]) {
4. makes a try{
path
ORB orb = ORB.init(args, null);
5. uses rebind to register the name and object
reference ShapeListServant shapeRef = new ShapeListServant(orb);
orb.connect(shapeRef);
it creates an instance of ShapeListServant class - a Java
org.omg.CORBA.Object object - which
objRef = is made a CORBA object
by using the connect method to register it with the ORB
orb.resolve_initial_references("NameService");
NamingContext ncRef = NamingContextHelper.narrow(objRef);
NameComponent nc = new NameComponent("ShapeList", "");
NameComponent path[] = {nc};
ncRef.rebind(path, shapeRef); it waits for client requests
java.lang.Object sync = new java.lang.Object(); Figure 17.4
synchronized (sync) { sync.wait();}
10 •
Java client program for CORBA interfaces Shape and
ShapeList

import org.omg.CosNaming.*;
1. it contacts the NamingService for initial context
import org.omg.CosNaming.NamingContextPackage.*;
import org.omg.CORBA.*; 2. Narrows it to NamingContext
it creates and initialises an ORB
public class ShapeListClient{ 3. It makes a name component
4. {It makes a path
public static void main(String args[])
try{ 5. It gets a reference to the CORBA object called
ORB orb = ORB.init(args, null); “ShapeList”, using resolve and narrows it
org.omg.CORBA.Object objRef =
orb.resolve_initial_references("NameService");
it uses one ofinthe remote references in the array to
it invokes the allShapes
NamingContext ncRef method the CORBA object
= NamingContextHelper.narrow(objRef); to get an array
containing remote invoke
references thetogetAllState
all of the method in the corresponding
GraphicalObjects currently
NameComponent nc = new NameComponent("ShapeList",
CORBA object whose type is Shape "");
stored by the serverpath
NameComponent [] = { nc };
the value returned is of type GraphicalObject
ShapeList shapeListRef =
ShapeListHelper.narrow(ncRef.resolve(path));
Shape[] sList = shapeListRef.allShapes();
GraphicalObject g = sList[0].getAllState();
} catch(org.omg.CORBA.SystemException e) {...}
} Figure 17.5
11 •
The main components of the CORBA architecture

DynamicClient stubs/proxies
Skeletons
invocation interface is designed to allow clients

ORB The CORBA
core– these
Object
are architecture
inadapter
the client
–skeleton language.
classes (for OO languages) are generated in the
In some applications (e.g. browsers), a client without the appropriate
to invoke
The proxy
role ofclass
the IDLmethods
Implementation
– an –may
ORBan language
compiler
object
needisadapter
core tosimilar
invoke
in
forofthe
the
repository CORBA
bridgesserver
client
toathat ofthe
method
by
language
thegap
in
objects
an between
IDL compiler.
uses
communication an IDL interface to
a remote object.module of Figure 5.6.
Interface –
In addition, repository
generate
clients
an
CORBA doesfor
and
ORB
one
–remote
objects
core
activates
CORBA of
notobject-oriented
allow
the
can
registered
objects
provides
classes
following:
methodbe
an with
for
invocations
implemented
servers on
IDL interfaces
interface
proxies
are
demand
that
to be indispatched
and aand
includes variety
downloaded locates
the viaprogramming
of the appropriate
running
following:
at run time servers
skeleton to a particular
languages servant,
the class of a proxy
inlanguages
theasinterface uses the
repository theprogramming
provides
object adapterlanguage
information name interfaces
about
to of the
registered
register andcorresponding
IDL interfaces
activate servant
servers. classes.
to clients
- operations Javaenabling
RMI. it to be started and stopped;
and–servers
it has –itfor
that
the does –the
procedural
require
followingthe work languages
it.skeleton
More of about
additionalthe athis
unmarshalsset later.
remote ofreference
components
stub
the procedures.
arguments
and
compared
in requestmodules
despatcherto
messages
Figure 5.6 in Fig. 5.6
- operations
The dynamic –toas before,
more
convert
invocation
andabout
between this
marshals
the client later
interface
remote is object
CORBA’s
exceptions
stubs/proxies references
and alternative.
results and
in strings;
(we
reply
marshal the arguments in will discuss
messages.
 –more
object about
adapter, the object
implementation adapter later.
repository and interface repository
it later with
- operations the Interface
invocation
to provide requests
argument Repository)
and
listsunmarshal
for requests exceptions
using dynamic and results in replies.
invocation.

client server
implementation interface
repository repository object skeleton
adapter

client proxy Request ORB Servant


ORB
program for A core core A
Reply

or dynamic invocation
Figure 17.6 or dynamic skeleton
12 •
Object adapter
 an object adapter bridges the gap between
– CORBA objects with IDL interfaces and
– the programming language interfaces of the corresponding servant (classes).
– it does the work of the remote reference and despatcher modules in Fig. 5.6.
 An object adapter has the following tasks:
– it creates remote object references for CORBA objects;
– it dispatches each RMI via a skeleton to the appropriate servant;
– it activates objects.
 An object adapter gives each CORBA object a unique object name.
– the same name is used each time an object is activated.
 it is specified by the application program or generated by the object adapter.
– Each active CORBA object is registered with its object adapter,
 which keeps a remote object table to maps names of CORBA objects to servants.
 Each object adapter has its own name - specified by the application
program or generated automatically.

13 •
Implementation repository

 Implementation repository
– it activates registered servers on demand and locates running servers
– it uses the object adapter name to register and activate servers.
– it stores a mapping from the names of object adapters to the
pathnames of files containing object implementations.
 when a server program is installed it can be registered with the
implementation repository.
 when an object implementation is activated in a server, the hostname and
port number of the server are added to the mapping.
– Implementation repository entry:

object adapter pathname of object hostname and port number


name implementation of server

- not all CORBA objects (e.g. call backs) need be activated on demand
- access control information can be stored in an implementation repository
14 •
Interface repository

 it provides information about registered IDL interfaces


– for an interface of a given type it can supply the names of the methods and for
each method, the names and types of the arguments and exceptions.
– a facility for reflection in CORBA.
– if a client has a remote reference to a CORBA object, it can ask the interface
repository about its methods and their parameter types
– the client can use the dynamic invocation interface to construct an invocation
with suitable arguments and send it to the server.
 the IDL compiler gives a type identifier to each IDL type
 a type identifier is included in remote object references
 this type identifier is called the repository ID
– because the interface repository stoes interfaces against their IDs
 applications that use static invocation with client proxies and
IDL skeletons do not require an interface repository.
– Not all ORBs provide an interface repository.

15 •
CORBA IDL

 IDL provides facilities for defining modules,


interfaces, types, attributes and method signatures.
– examples of all of the above, except modules, in Figures 5.2 and 17.1.
 IDL has the same lexical rules as C++ but has
additional keywords to support distribution,
– for example interface, any, attribute, in, out, inout, readonly, raises.
 It allows standard C++ pre-processing facilities. e.g.
typedef for All in Figure 17.7.
 The grammar of IDL is a subset of ANSI C++ with
additional constructs to support method signatures.

16 •
IDL module Whiteboard

 Modules allow interfaces and associated definitions


to be grouped.
 A module defines a naming scope.

module Whiteboard {
Figure 17.7 struct Rectangle{
...} ;
struct GraphicalObject {
...};
interface Shape {
...};
typedef sequence <Shape, 100> All;
interface ShapeList {
...};
};
17 •
we saw raises in the newShape
IDL method signatures method of ShapeList

[oneway] <return_type> <method_name> (parameter1,..., parameterL)


[raises (except1,..., exceptN)]
[context (name1,..., nameM)]
 each parameter is labelled as in, out or inout, e.g.
– void getPerson(in string name, out Person p);
 oneway e.g. oneway void callback(in int version)
– the client will not be blocked and maybe semantics is used
– at-most-once call semantics is the default
 Inheritance - IDL interfaces may extend one or more
interfaces
– all IDL interfaces are compatible with Object
 ee can use type Object for parameters that may be of any type e.g. bind and
resolve in the Naming Service
– an extended interface may add new methods, types, constants and exceptions
– It may redefine types, constants and exceptions but not methods

18 •
Figure 17.8
IDL constructed types – 1

Type Examples Use


sequence typedef sequence <Shape, 100> All; Defines a type for a variable-length
typedef sequence <Shape> All sequence of elements of a specified
bounded and unbounded sequences IDL type. An upper bound on the
of Shapes length may be specified.
string String name; Defines a sequences of characters,
typedef string<8> SmallString; terminated by the null character. An
unbounded and bounded upper bound on the length may be
sequences of characters specified.

array typedef octet uniqueId[12]; Defines a type for a multi-dimensional


typedef GraphicalObject GO[10][8] fixed-length sequence of elements of a
specified IDL type.

this figure continues on the next slide


See Fig 5.1 for an example of string
19 •
Figure 17.8
IDL constructed types – 2

Type Examples Use


record struct GraphicalObject { Defines a type for a record containing a
string type; group of related entities. Structs are
Rectangle enclosing; passed by value in arguments and
boolean isFilled; results.
};
enumerated enum Rand The enumerated type in IDL maps a
(Exp, Number, Name); type name onto a small set of integer
values.
union union Exp switch (Rand) { The IDL discriminated union allows
case Exp: string vote; one of a given set of types to be passed
case Number: long n; as an argument. The header is
case Name: string s; parameterized by an enum, which
}; specifies which member is in use.

20 •
17.2.4 CORBA remote object references

 'interoperable object references' (IORs) – CORBA 2.0


– suitable whether or not the object is activatable.
 Transient IORs are for objects that last as long as the host process
– they contain the address of the server hosting the CORBA object
 The server ORB core receives the request message containing the object adapter name and
object name of the target. It uses the object adapter name to locate the object adapter,
which uses the object name to locate the servant.
 Persistent IORs last between activations
– they contain the address of the implementation repository
– the implementation repository receives the request and uses the object adapter name
to activate the object, then gives the server address to the client
– the client sends subsequent invocations to the server

IOR format Page 684


IDL interface type name Protocol and address details Object key
interface repository IIOP host domain port number adapter name object name
identifier name
21 •
CORBA services include the following

 Naming Service (it would be a good idea to study it!)


 Event Service and Notification Service:
– in ES suppliers and consumers communicate via an event channel
– NS extends this to allow filtering and typed events
 Security service:
– authentication of principals and access control of CORBA objects with policies
– auditing by servers, facilities for non-repudiation
 Trading service:
– allows CORBA objects to be located by attribute
 Transaction service and concurrency control service
– TS provides flat or nested transactions
– CCS provides locking of CORBA objects
 Persistent object service:
– for storing the state of CORBA objects in a passive form and retrieving it

22 •
Summary

 CORBA addresses heterogeneity:


– RMI between a client and a remote remote object in different languages.
– GIOP
 specifies an external data representation called CDR – clients and servers can have
different hardware.
 specifies OS independent operations for request-reply protocol
 specifies a standard form for remote object references.
– IIOP implements the request-reply protocol over TCP/IP.
 Object adapter
– relates request messages to implementations of CORBA objects
 Implementation repository
– enables CORBA objects to be activated on demand
 Interface repository
– allows dynamic invocation of CORBA objects
 IDL for defining interfaces
23 •

You might also like