Common Object Request Broker Architecture (CORBA)

Researched by Tom Tenhor

Index


What is CORBA?

CORBA, the Common Object Request Broker Architecture, is a distributed object standard developed and promoted by the Object Management Group (OMG), a consortium of over 800 companies. CORBA's framework allows distributed applications to be developed that are platform and language-independent. The framework also promotes the use of object-oriented design principles. The key component of the CORBA framework is the Object Request Broker or ORB. The ORB implements the object framework, or what is called an "object bus" that allows a client to call local or remote objects without regard to their location. For a detailed description of an ORB, see IBM's article Demystifying the ORB.

Object Request Broker

The Object Request Broker, commonly known as an ORB, implements the CORBA framework by acting as the middleware between client and server objects. The ORB allows the client to make the server object invocation, without regard to the location of the server object. The ORB provides location transparency for the client and server objects.

Language Independence

CORBA supports language-independence by describing object interfaces with the Interface Definition Language (IDL). IDL compilers are available to map IDL to many common languages, such as the following:

Ada COBOL
C Java
C++ Smalltalk

An example of an IDL definition for a banking application may include these definitions.

module Example
{
    interface BankServer
    {
        boolean verifyPIN( in long acctNbr, in long pin );
        void getAcctSpecifics( in long acctNbr, in string customerName,
				out double balance, out boolean isChecking );
        boolean processTransaction( in Transaction t, in long acctNbr );
    }
}

The IDL compiler takes the IDL source and creates language specific code for both the client and server who will use the object interface. A client stub will be created that acts as a proxy object, providing the client with a local proxy implementation of the object. The client stub code hides the lower level communications and data marshalling from the client code. IDL also creates a server skeleton that is the server's equivalent of the client stub code, helping to export the interface and marshall data.

The interface description is also placed in the Interface Repository (IR). There is a Dynamic Invocation Interface (DII) defined that allows a client to implement a form of run-time binding. At run-time, the client can use the DII to query the IR for the interface description to create and then invoke dynamically. A Dynamic Skeleton Interface (DSI) also exists for the server side.

Protocol Independence

CORBA defines a General Inter-ORB Protocol (GIOP) that specifies a set of messages and marshalling rules (the data representation) between ORBs. The Internet Inter-ORB Protocol or IIOP is the transport layer that defines how GIOP messages are transmitted via TCP/IP. CORBA 2.0 mandates protocol support for GIOP over IIOP in order to achieve 2.0 compliance. GIOP may also use other transports such as OSI and IPX/SPX. Expersoft has authored a paper that suggests the use of a Message-oriented Middleware (MOM) as the transport used by GIOP instead of IIOP, see Integrating CORBA with Message-oriented Middleware.

In addition to GIOP, CORBA has defined Environment-Specific Inter-ORB Protocols (ESIOPs) that can support interoperation over specific networks. The primary transport defined by CORBA for ESIOPs is DCE. DCE includes such features/services as Kerberos, time services and RPC [Orfali, 98].

CORBA Services

These services are listed as defined in the OMG's CORBAservices: Common Object Services Specification, March 1995, last updated November 1997.

Links

CORBA Overview, by Doug Schmidt

CORBA Services

The Java Tutorial - JavaTM IDL

Tutorial on Distributed Objects
CORBA White Papers