RMI Architecture

The RMI architecture implements the support for some RMI technology, such as CORBA, ICE or SOAP. The following sections describe the core architectures defined by layers defined in OiL's standard distribution.

CORBA Support

Layer: corba
Classes: oil.corba.idl.*
oil.corba.giop.*
oil.corba.iiop.*

The CORBA support layer defines a series of components that provide the support for OiL to interoperate with other CORBA ORBs. This layer complements the core layer extended with support for typing (typed). Below, there is an image that illustrates the architecture defined by this layer, followed by a brief description of each component. Components in light gray are provided by the core layer extended with typing support.

Interface Repository
Component that implements a repository of CORBA's IDL typing information. It provides access to this information through facets registry and types, but the former only informs types stored locally, while the later can import definition from a remote CORBA Interface Repository (receptacle remote). Moreover, it provides facet compiler to interpret IDL specification and load the information into the repository. Facet indexer provide information about the members provided by each interface, including reference basic operations and _get_* and _set_* attribute access methods. Multiple receptacle observers is used to notify about changes in the information stored in the repository.
Proxy Indexer
Component used to find out the interface of proxies and which methods are available for each interface. It basically use receptacle types to resolve interface information when it is provided or receptacle invoker to invoke operation _interface of CORBA to discover the interface of the remote servant. This component also allows indexing of methods declared in the IDL of the proxy interface (receptacle members) as well as implicit operations, such as CORBA's reference operations: _interface, _is_a, _non_existent, _is_equivalent, etc.
Servant Indexer
Component used to store interface information of each servant and which methods are available for remote invocation of servant. If provides facet mapper for registration of interface information of servants. This component also allows indexing of methods declared in the IDL of the proxy interface (receptacle members) as well as implicit operations, such as CORBA's reference operations: _interface, _is_a, _non_existent, _is_equivalent, etc.
Object Referrer
Component that provides support for encoding and decoding of CORBA's textual references like stringfied IOR or corbaloc URL. Receptacle types is used to find out the interface of servants for generation of references. Multiple receptacle profilers is used to create IOR profiles that identify the access points provided to reach the servant when a reference for it is created. Receptacle codec is used to encode reference information in a byte stream, i.e. a string.
Reference Profiler
Component that provides support to encode and decode some IOR profile (facet profiler) using receptacle codec. Currently, OiL's standard distribution provides only one component for encoding/decoding of IIOP IOR profiles.
Operation Requester
Component that provides a service (facet requests) to create channels to remote ORBs (receptacle channels) using information provided in IOR profiles, which are decoded using services provided by multiple receptacle profilers. Additionally, the provided service also allows to send invocation requests and receive replies returned, which are encoded and decoded through receptacle messenger. If receptacle mutex is connected, them it is used to request exclusive access to channels before attempts to access it.
Request Listener
Component that provides a service (facet listener) to accept channels from remote ORBs (receptacle channels). Additionally, the provided service also allows to receive invocation requests and send replies, which are encoded and decoded through receptacle messenger. If receptacle mutex is connected, them it is used to request exclusive access to channels before attempts to access it. Furthermore, receptacle indexer is used to retrieve typing information about each method invoked, because such information is necessary to extract the parameter values from GIOP messages.
Message Marshaler
Component that provides support to encode and decode GIOP messages (facet messenger) using receptacle codec.
Value Encoder
Component that provides support for CORBA's CDR encoding (facet codec). If receptacle proxies is connected then it is used to automatically create proxies for each object reference decoded. If receptacle profiles is connected then it is used to compare IOR profiles of object references decoded to find out whether they are references to local servants or not. It receptacle objects is connected then it is used to create implicit servants (see section Implicit Servants) and to retrieve servant implementation of local object references (see section Reference Resolution).
Client Channels
Component that provides support to create channels to remote hosts. Channels are implemented using sockets provided through receptacle sockets.
Server Channels
Component that provides support to create channels initiated by remote hosts. Channels are implemented using sockets provided through receptacle sockets.

CORBA Interception Extension

Layer: intercepted
Classes: oil.corba.interceptors.*

This layer extends the CORBA base layer to redefine some components to use the template and port model provided by LOOP that supports port interception. This way, interceptors can be registered at specific ports of the architecture to implement invocation interception in CORBA brokers.

CORBA Code Generation Extension

Layer: gencode
Classes: oil.corba.giop.CodecGen

This layer simply redefine component ValueEncoder to use an alternative implementation based on dynamic generation of marshaling code for better performance of value encoding and decoding.

LuDO Support

Layer: ludo
Classes: oil.ludo.*
oil.corba.iiop.*

The LuDO support layer defines five components that provide the support for a very simple protocol designed for use within Lua. This layer is a comprehensible example of the implementation of a RMI protocol in OiL. Below, there is a brief description of each component provided by this layer.

Object Referrer
Provides support for encoding and decoding of textual references.
Operation Requester
Component that provides a service (facet requests) to create channels to remote ORBs (receptacle channels), and send invocation requests and receive replies returned.
Request Listener
Component that provides a service (facet listener) to accept channels from remote ORBs (receptacle channels), and receive invocation requests and send replies.
Value Encoder
Component that provides support for serialization of values as Lua code (facet encoder).
Client Channels
Component that provides support to create channels to remote hosts. Channels are implemented using sockets provided through receptacle sockets.
Server Channels
Component that provides support to create channels initiated by remote hosts. Channels are implemented using sockets provided through receptacle sockets.

Copyright (C) 2004-2008 Tecgraf, PUC-Rio

This project is currently being maintained by Tecgraf at PUC-Rio.