219 lines
11 KiB
HTML
219 lines
11 KiB
HTML
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
|
|
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
|
|
|
<head>
|
|
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
|
|
<title>OiL: RMI Architecture</title>
|
|
<style type="text/css" media="all"><!--
|
|
@import "../../oil.css";
|
|
@import "../../layout1.css";
|
|
;
|
|
--></style>
|
|
</head>
|
|
|
|
<body>
|
|
|
|
<div id="Header">An Object Request Broker in Lua </div>
|
|
<div id="Logo"><img alt="small (1K)" src="../../small.gif" height="49" width="80"></div>
|
|
|
|
<div id="Menu">
|
|
<div class="outside"><div class="inside"><ul>
|
|
<li><a href="../../index.html", title="">Home</a></li>
|
|
<li><a href="../../release/index.html", title="Installation">Install</a></li>
|
|
<li><a href="../index.html", title="User Manual">Manual</a>
|
|
<div class="outside"><div class="inside"><ul>
|
|
<li><a href="../basics/index.html", title="Basic Concepts">Basics</a></li>
|
|
<li><a href="../corba/index.html", title="CORBA Support">CORBA</a></li>
|
|
<li><a href="../ludo.html", title="LuDO Support">LuDO</a></li>
|
|
<li><a href="index.html", title="Internal Architecture">Arch</a>
|
|
<div class="outside"><div class="inside"><ul>
|
|
<li><a href="layers.html", title="Defining Layers">Layers</a></li>
|
|
<li><a href="flavors.html", title="Using Flavors">Flavors</a></li>
|
|
<li><a href="core.html", title="Core Architecture">Core</a></li>
|
|
<li><strong>RMI</strong></li>
|
|
</ul></div></div>
|
|
</li>
|
|
</ul></div></div>
|
|
</li>
|
|
<li><a href="../../about/papers.html", title="Conference Papers">Papers</a></li>
|
|
<li><a href="../../contact.html", title="Contact People">Contact</a></li>
|
|
<li><a href="http://luaforge.net/projects/oil/", title="Project at LuaForge">LuaForge</a></li>
|
|
</ul></div></div>
|
|
|
|
</div>
|
|
|
|
<div class="content">
|
|
<h1>RMI Architecture</h1>
|
|
<p>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.</p>
|
|
|
|
<h2>CORBA Support</h2>
|
|
|
|
<table>
|
|
<tr>
|
|
<td>Layer:</td>
|
|
<td><strong><code>corba</code></strong></td>
|
|
</tr>
|
|
<tr>
|
|
<td>Classes:</td>
|
|
<td>
|
|
<strong><code>oil.corba.idl.*</code></strong><br>
|
|
<strong><code>oil.corba.giop.*</code></strong><br>
|
|
<strong><code>oil.corba.iiop.*</code></strong>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
|
|
<p>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 (<a href="core.html#typed">typed</a>).
|
|
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.</p>
|
|
|
|
<center><img src="corbaarch.jpg"></center>
|
|
|
|
<dl>
|
|
<dt>Interface Repository</dt>
|
|
<dd>Component that implements a repository of CORBA's IDL typing information.
|
|
It provides access to this information through facets <code>registry</code> and <code>types</code>, but the former only informs types stored locally, while the later can import definition from a remote CORBA Interface Repository (receptacle <code>remote</code>).
|
|
Moreover, it provides facet <code>compiler</code> to interpret IDL specification and load the information into the repository.
|
|
Facet <code>indexer</code> provide information about the members provided by each interface, including reference basic operations and <code>_get_*</code> and <code>_set_*</code> attribute access methods.
|
|
Multiple receptacle <code>observers</code> is used to notify about changes in the information stored in the repository.</dd>
|
|
|
|
<dt>Proxy Indexer</dt>
|
|
<dd>Component used to find out the interface of proxies and which methods are available for each interface.
|
|
It basically use receptacle <code>types</code> to resolve interface information when it is provided or receptacle <code>invoker</code> to invoke operation <code>_interface</code> 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 <code>members</code>) as well as implicit operations, such as CORBA's reference operations: <code>_interface</code>, <code>_is_a</code>, <code>_non_existent</code>, <code>_is_equivalent</code>, etc.</dd>
|
|
|
|
<dt>Servant Indexer</dt>
|
|
<dd>Component used to store interface information of each servant and which methods are available for remote invocation of servant.
|
|
If provides facet <code>mapper</code> for registration of interface information of servants.
|
|
This component also allows indexing of methods declared in the IDL of the proxy interface (receptacle <code>members</code>) as well as implicit operations, such as CORBA's reference operations: <code>_interface</code>, <code>_is_a</code>, <code>_non_existent</code>, <code>_is_equivalent</code>, etc.</dd>
|
|
|
|
<dt>Object Referrer</dt>
|
|
<dd>Component that provides support for encoding and decoding of CORBA's textual references like stringfied IOR or <code>corbaloc</code> URL.
|
|
Receptacle <code>types</code> is used to find out the interface of servants for generation of references.
|
|
Multiple receptacle <code>profilers</code> is used to create IOR profiles that identify the access points provided to reach the servant when a reference for it is created.
|
|
Receptacle <code>codec</code> is used to encode reference information in a byte stream, <em>i.e.</em> a string.</dd>
|
|
|
|
<dt>Reference Profiler</dt>
|
|
<dd>Component that provides support to encode and decode some IOR profile (facet <code>profiler</code>) using receptacle <code>codec</code>.
|
|
Currently, OiL's standard distribution provides only one component for encoding/decoding of IIOP IOR profiles.</dd>
|
|
|
|
<dt>Operation Requester</dt>
|
|
<dd>Component that provides a service (facet <code>requests</code>) to create channels to remote ORBs (receptacle <code>channels</code>) using information provided in IOR profiles, which are decoded using services provided by multiple receptacle <code>profilers</code>.
|
|
Additionally, the provided service also allows to send invocation requests and receive replies returned, which are encoded and decoded through receptacle <code>messenger</code>.
|
|
If receptacle <code>mutex</code> is connected, them it is used to request exclusive access to channels before attempts to access it.</dd>
|
|
|
|
<dt>Request Listener</dt>
|
|
<dd>Component that provides a service (facet <code>listener</code>) to accept channels from remote ORBs (receptacle <code>channels</code>).
|
|
Additionally, the provided service also allows to receive invocation requests and send replies, which are encoded and decoded through receptacle <code>messenger</code>.
|
|
If receptacle <code>mutex</code> is connected, them it is used to request exclusive access to channels before attempts to access it.
|
|
Furthermore, receptacle <code>indexer</code> is used to retrieve typing information about each method invoked, because such information is necessary to extract the parameter values from GIOP messages.</dd>
|
|
|
|
<dt>Message Marshaler</dt>
|
|
<dd>Component that provides support to encode and decode GIOP messages (facet <code>messenger</code>) using receptacle <code>codec</code>.</dd>
|
|
|
|
<dt>Value Encoder</dt>
|
|
<dd>Component that provides support for CORBA's CDR encoding (facet <code>codec</code>).
|
|
If receptacle <code>proxies</code> is connected then it is used to automatically create proxies for each object reference decoded.
|
|
If receptacle <code>profiles</code> 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 <code>objects</code> is connected then it is used to create implicit servants (see section <a href="../corba/features.html#implicit">Implicit Servants</a>) and to retrieve servant implementation of local object references (see section <a href="../corba/features.html#resolution">Reference Resolution</a>).</dd>
|
|
|
|
<dt>Client Channels</dt>
|
|
<dd>Component that provides support to create channels to remote hosts.
|
|
Channels are implemented using sockets provided through receptacle <code>sockets</code>.</dd>
|
|
|
|
<dt>Server Channels</dt>
|
|
<dd>Component that provides support to create channels initiated by remote hosts.
|
|
Channels are implemented using sockets provided through receptacle <code>sockets</code>.</dd>
|
|
</dl>
|
|
|
|
<h2>CORBA Interception Extension</h2>
|
|
|
|
<table>
|
|
<tr>
|
|
<td>Layer:</td>
|
|
<td><strong><code>intercepted</code></strong></td>
|
|
</tr>
|
|
<tr>
|
|
<td>Classes:</td>
|
|
<td><strong><code>oil.corba.interceptors.*</code></strong></td>
|
|
</tr>
|
|
</table>
|
|
|
|
<p>This layer extends the CORBA base layer to redefine some components to use the template and port model provided by LOOP that supports <a href="http://loop.luaforge.net/manual/basics.html#intercept">port interception</a>.
|
|
This way, interceptors can be registered at specific ports of the architecture to implement invocation interception in CORBA brokers.</p>
|
|
|
|
<h2>CORBA Code Generation Extension</h2>
|
|
|
|
<table>
|
|
<tr>
|
|
<td>Layer:</td>
|
|
<td><strong><code>gencode</code></strong></td>
|
|
</tr>
|
|
<tr>
|
|
<td>Classes:</td>
|
|
<td><strong><code>oil.corba.giop.CodecGen</code></strong></td>
|
|
</tr>
|
|
</table>
|
|
|
|
<p>This layer simply redefine component <code>ValueEncoder</code> to use an alternative implementation based on dynamic generation of marshaling code for better performance of value encoding and decoding.</p>
|
|
|
|
<h2>LuDO Support</h2>
|
|
|
|
<table>
|
|
<tr>
|
|
<td>Layer:</td>
|
|
<td><strong><code>ludo</code></strong></td>
|
|
</tr>
|
|
<tr>
|
|
<td>Classes:</td>
|
|
<td>
|
|
<strong><code>oil.ludo.*</code></strong><br>
|
|
<strong><code>oil.corba.iiop.*</code></strong>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
|
|
<p>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.</p>
|
|
|
|
<!-- <center><img src="ludoarch.jpg"></center> -->
|
|
|
|
<dl>
|
|
<dt>Object Referrer</dt>
|
|
<dd>Provides support for encoding and decoding of textual references.</dd>
|
|
|
|
<dt>Operation Requester</dt>
|
|
<dd>Component that provides a service (facet <code>requests</code>) to create channels to remote ORBs (receptacle <code>channels</code>), and send invocation requests and receive replies returned.</dd>
|
|
|
|
<dt>Request Listener</dt>
|
|
<dd>Component that provides a service (facet <code>listener</code>) to accept channels from remote ORBs (receptacle <code>channels</code>), and receive invocation requests and send replies.</dd>
|
|
|
|
<dt>Value Encoder</dt>
|
|
<dd>Component that provides support for serialization of values as Lua code (facet <code>encoder</code>).</dd>
|
|
|
|
<dt>Client Channels</dt>
|
|
<dd>Component that provides support to create channels to remote hosts.
|
|
Channels are implemented using sockets provided through receptacle <code>sockets</code>.</dd>
|
|
|
|
<dt>Server Channels</dt>
|
|
<dd>Component that provides support to create channels initiated by remote hosts.
|
|
Channels are implemented using sockets provided through receptacle <code>sockets</code>.</dd>
|
|
</dl>
|
|
|
|
</div>
|
|
|
|
<div class="content">
|
|
<p><small><strong>Copyright (C) 2004-2008 Tecgraf, PUC-Rio</strong></small></p>
|
|
<small>This project is currently being maintained by <a href="http://www.tecgraf.puc-rio.br">Tecgraf</a> at <a href="http://www.puc-rio.br">PUC-Rio</a> with grants from <a href="http://www.capes.gov.br">CAPES</a> and <a href="http://www.cnpq.br">CNPq</a>.</small>
|
|
</div>
|
|
|
|
|
|
|
|
</body>
|
|
|
|
</html>
|