The core architecture implements the most basic concepts of the programming model provided by ORBs, such as servant and proxy creation, invocation issue and dispatching, etc. Alternatives to the core architecture may be developed to provide other programming models, such as message-based communication. The following sections describe the core architectures defined by layers defined in OiL's standard distribution.
Layer: | base |
Classes: | oil.kernel.base.* |
The base core layer defines six components that provide the most basic implementation of the core architecture. 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 typically provided by a complementary layer, such as a <%=link("RMI","RMI layer")%>.
broker
), such as proxy creation from some object reference information like CORBA's stringfied IOR or corbaloc
.
It requires a reference decoder to extract information from textual references (receptacle references
), and a factory to create proxies from this information (receptacle proxies
).proxies
).
This component basically defines the programming model provided by OiL ORBs because it defines the features provided by proxies.
The proxies use the object provided by receptacle invoker
to perform remote invocations.invoker
.
Basically, it uses the object provided by receptacle requests
to create channels to remote brokers, as well as send requests and receive replies through such channels.broker
), such as servant registration or control invocation processing.
It requires a service to register active servant implementations (receptacle objects
) and to accept the reception of remote invocations (receptacle acceptor
).objects
) and effectively performs invocations requested remotely on the proper servant implementations (facet dispatcher
).listener
) dispatched to servants (receptacle dispatcher
).
It provides an API to control acceptation of invocation requests (facet acceptor
).sockets
).Layer: | typed |
Classes: | oil.kernel.typed.* |
This layer extends the core architecture to add support for typing information about values and objects. Such support is essential for RMI technologies that rely on typing and interface information, such as CORBA or SOAP. 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 typically provided by a complementary layer, such as a <%=link("RMI","RMI layer")%>.
types
.indexer
.
This receptacle is also used to get implementation of operations that must be executed locally instead of remotely.types
and associate this information to each servant (receptacle mapper
).indexer
.
This receptacle is also used to get implementation of implicit operations that are not implemented by the servant.Layer: | cooperative |
Classes: | oil.kernel.cooperative.* |
This layer extends the base core to add support for multithreading so different clients can be served in independent threads and minimize the influence in each other response time. Moreover, it adds support to use a single proxy or remote connection by different threads transparently and without problems related to race conditions.
tasks
).
Additionally, the component also provides a access control service (facet mutex
) for the resources managed by the component, such as the channels to remote contexts.
Such service is useful for implementation of RMI protocols that might receive data while sending invocations or send data while receiving replies.mutex
) for components that require access to channels.
Additionally, this component is also extended to created threads (receptacle tasks
) so invocation requests are received and dispatched independently from each other.tasks
), and scheduling control (facet control
).