Transcript Corba

CORBA
Chapter 17 Coulouris text
Today’s Topics
•
•
•
•
CORBA History and goals
CORBA RMI
CORBA services
The Distributed Whiteboard Revisited
CORBA History and Goals
• Object Management Group Formed in
1989
• Goals:
-- OOP on distributed systems
-- heterogeneous hardware
-- heterogeneous OS
-- different programming languages
History and Goals
• OMG Introduced the Object Request
Broker (ORB)
• The role of the ORB is to help a client find
an object, activate the object if necessary,
and call a method on the object.
• Common Object Request Broker
Architecture (CORBA) agreed to by a
group of companies in 1991
• CORBA 2.0 specification released in 1996
History and Goals
• CORBA 2.0 specification defined
standards for different implementations of
CORBA to communicate with one another
• These standards are called the General
Inter-ORB protocol (GIOP) and may run
over various transports
• GIOP over TCP/IP is called the Internet
Inter-ORB Protocol
CORBA RMI
• Main components
-- An Interface Definition language (IDL) that promotes
the use of different programming languages, stubs are
generated in the client’s language and skeletons are
generated in the server’s language
-- An architecture
-- GIOP defines an external data representation (CDR) as
well as message formats and message types
-- Message types include request and reply as
well as location requests, errors, and request
cancellations
CORBA Services
• A set of generic services that can be used
for distributed application
-- Naming Service (location by name)
-- Trading Service (location by attribute directory service)
-- Event Service
-- Security Service (authentication, ACL’s, auditing, nonrepudiation)
-- Transaction Service (begin, commit, rollback a
series of RMI calls )
-- Persistent Object Service (POS)
The Distributed Whiteboard
Example in CORBA
IDL interfaces Shape and ShapeList
struct Rectangle{ // no class in IDL
1
long width;
long height;
long x;
long y;
};
interface Shape {
long getVersion() ;
GraphicalObject getAllState() ;
};
struct GraphicalObject
{ 2
string type;
Rectangle enclosing;
boolean isFilled;
};
3
// returns state of the GraphicalObject
typedef sequence <Shape, 100> All;
// All is a 100 element array
4
interface ShapeList {
5
exception FullException{ };
6
Shape newShape(in GraphicalObject g) raises (FullException);
7
All allShapes(); // returns sequence of remote object references
8
long getVersion() ;
// parameters are in, out, or both
};
// parameters may be primitive, struct or array and
// are passed by value
// parameters whose type is an IDL interface
// is passed by remote reference
idltojava
• Run idltojava on the above interface
• The command idlj is found in
j2sdk1.4.2\bin
• The Java 2 Platform, Standard Edition, v1.4,
provides an Object Request Broker (ORB)
runtime component
• The JDK documentation states that its Java
ORB has not been tested with ORB’s written in
other languages
• JDK 1.4 provides an Orb class with a pluggable
architecture
From the JDK Doc
OMG specifies a mapping from IDL to several different programming languages,
including Java, C, C++, Lisp, Python, Smalltalk, COBOL, and Ada.
When mapped, each statement in OMG IDL is translated to a corresponding
statement in the programming language of choice.
Java interface ShapeList generated
by idltojava from CORBA interface
ShapeList
public interface ShapeList extends org.omg.CORBA.Object {
Shape newShape(GraphicalObject g) throws ShapeListPackage.FullException;
Shape[] allShapes();
int getVersion();
}
ShapeListServant class from
CORBA interface ShapeList
import org.omg.CORBA.*;
class ShapeListServant extends _ShapeListImplBase {
ORB theOrb;
private Shape theList[];
private int version;
private static int n=0;
public ShapeListServant(ORB orb){
theOrb = orb;
// initialize the other instance variables
}
public Shape newShape(GraphicalObject g) throws ShapeListPackage.FullException {
version++;
Shape s = new ShapeServant( g, version);
if(n >=100) throw new ShapeListPackage.FullException();
theList[n++] = s;
theOrb.connect(s);
return s;
}
public Shape[] allShapes(){ ... }
public int getVersion() { ... }
}
1
2
Java class ShapeListServer
import org.omg.CosNaming.*;
import org.omg.CosNaming.NamingContextPackage.*;
import org.omg.CORBA.*;
public class ShapeListServer {
public static void main(String args[]) {
try{
ORB orb = ORB.init(args, null);
ShapeListServant shapeRef = new ShapeListServant(orb);
orb.connect(shapeRef);
org.omg.CORBA.Object objRef =
orb.resolve_initial_references("NameService");
NamingContext ncRef = NamingContextHelper.narrow(objRef);
NameComponent nc = new NameComponent("ShapeList", "");
NameComponent path[] = {nc};
ncRef.rebind(path, shapeRef);
java.lang.Object sync = new java.lang.Object();
synchronized (sync) { sync.wait();}
} catch (Exception e) { ... }
}
}
1
2
3
4
5
6
7
Java client program for CORBA
interfaces Shape and ShapeList
import org.omg.CosNaming.*;
import org.omg.CosNaming.NamingContextPackage.*;
import org.omg.CORBA.*;
public class ShapeListClient{
public static void main(String args[]) {
try{
ORB orb = ORB.init(args, null);
1
org.omg.CORBA.Object objRef =
orb.resolve_initial_references("NameService");
NamingContext ncRef = NamingContextHelper.narrow(objRef);
NameComponent nc = new NameComponent("ShapeList", "");
NameComponent path [] = { nc };
ShapeList shapeListRef =
ShapeListHelper.narrow(ncRef.resolve(path));
2
Shape[] sList = shapeListRef.allShapes();
3
GraphicalObject g = sList[0].getAllState();
The main components of the
CORBA architecture
client
client proxy ORB
program for A core
or dynamic invocation
implementation
repository
Request
Reply
server
interface
repository
object skeleton
adapter
ORB
core
Servant
A
or dynamic skeleton
Naming graph in CORBA
Naming Service
initial naming context
initial naming context
B
ShapeList
initial naming context
XX
P
V
C
D
E
R
Q
S
T
U
Where are we heading?
• Working with J2EE using JBoss
• Integrating web services with J2EE
SOAP and J2EE
Slide from JAXM/JMS tutorial at Sun Microsystems
Slide from JAXM/JMS tutorial at Sun Microsystems