Multimedia is a key factor today. We can imagin two different ones from the word media, transport media and media of contents. Transport media includes Ethernet, TCP/IP, ATM (Asynchronous Transfer Mode, B-ISDN), 100VG-AnyLan, FibreChannel, and so on. Media of contents includes audio, video, realtime conference, Internet radio, VRML, and so on.
HORB@intends to integrate these medias in the framework of distributed object oriented computing. What does it mean? What's reality?
Many new transport medias are invented to treat multimedia. When we want to transfer realtime video, we can use isochronous transfer provided by P1394 for example. It means, when we transfer objects on P1394, we need an appropreate protocol of inter-object communication for the isochronous media. It should differ from the conbination of TCP/IP and Ethernet. As another example, if you want to write a fast parallel program on Mach operating system, you might want to define inter-object protocol dedicated to Mach's port. Or you might want to bridge HORB to another ORB product such like Sun's RMI or CORBA2.
For such demands, HORB separates inter-object communication protocol from ORB. The interface is defined as Inter-Object Communication Interface (IOCI).
IOCI enables a client to use multiple inter-object protocols and appropreate transport medias for different contents.
The interface is defined as horb.orb.IOCI and it consists of three components.
IOCIService is an interface that defines a set of methods for user oriented services that IOCI must provide. getUsername(), getHostname(), and release() are examples of the methods. Some are implemented in IOCICommon and some are implemented in the protocol dependent part.
IOCICommon is a set of methods of protocol independent part of inter-object protocol. It implements, for example, sendObject(), recvObject() and createObject(). IOCICommon is a class. When you write your own IOCI implementation, you can inherit and use this class. But the use of this class is optional. You can define your own object transfer protocol.
The last one, IOCIPDP is protocol dependent part. It should implement protocol dependent protocol such as connectServer() and sendDouble(). An example of this is BasicIOCI which is provided as default.
When you write your own IOCI, you can use existing classes.
horb.orb.TestIOCI is an implementation of IOCI. The most of it is inherited from BasicIOCI and IOCICommon. Thus it is simple.
A constractor of class HORB can take an IOCI class name as an argument in order to set it to default. You can specify different IOCI classes for HORB servers in a HORB process by the configuration file of the HORB command.