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
andtypes
, but the former only informs types stored locally, while the later can import definition from a remote CORBA Interface Repository (receptacleremote
). Moreover, it provides facetcompiler
to interpret IDL specification and load the information into the repository. Facetindexer
provide information about the members provided by each interface, including reference basic operations and_get_*
and_set_*
attribute access methods. Multiple receptacleobservers
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 receptacleinvoker
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 (receptaclemembers
) 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 (receptaclemembers
) 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. Receptacletypes
is used to find out the interface of servants for generation of references. Multiple receptacleprofilers
is used to create IOR profiles that identify the access points provided to reach the servant when a reference for it is created. Receptaclecodec
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 receptaclecodec
. 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 (receptaclechannels
) using information provided in IOR profiles, which are decoded using services provided by multiple receptacleprofilers
. Additionally, the provided service also allows to send invocation requests and receive replies returned, which are encoded and decoded through receptaclemessenger
. If receptaclemutex
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 (receptaclechannels
). Additionally, the provided service also allows to receive invocation requests and send replies, which are encoded and decoded through receptaclemessenger
. If receptaclemutex
is connected, them it is used to request exclusive access to channels before attempts to access it. Furthermore, receptacleindexer
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 receptaclecodec
. - Value Encoder
- Component that provides support for CORBA's CDR encoding (facet
codec
). If receptacleproxies
is connected then it is used to automatically create proxies for each object reference decoded. If receptacleprofiles
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 receptacleobjects
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 (receptaclechannels
), and send invocation requests and receive replies returned. - Request Listener
- Component that provides a service (facet
listener
) to accept channels from remote ORBs (receptaclechannels
), 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
.