Previous section.
Book 2: Inter-Domain Management: Interaction Translation (JIDM_IT)
Copyright © 1999 The Open Group
JIDM Facilities
Overview
Ideally, all the CORBA Facilities and interfaces required to support
interworking with different
management environments would be defined in a generic way, that is,
in a way that is independent of the
Systems Management Reference Model being considered (OSI Systems
Management Reference
Model, SNMP Reference Model, etc). However, there are aspects related
to each specific
model that cannot be abstracted away. For example, the naming schema
used to name managed
objects will depend on the specific model being considered (for example, a
specific naming
schema has been defined for OSI Systems Management). Also, interfaces
used to operate on
collections of managed objects will depend on the model being
considered since expressions
used to designate such collections will vary depending on the model
(for example, use of scoping and
filtering expressions to designate subset of members of a managed
object domain has been
specifically defined for OSI Systems Management).
The adopted approach consists in defining a basic set of CORBA
Facilities, referred as
JIDM Facilities,
that will work for every Systems Management Reference
Model.
JIDM Facilities
can be extended or put together with additional complementary
facilities to build up the set of
CORBA Facilities that will be finally used to implement each of the
specific Systems Management
Reference Models. Thus, for example, when defining OSI Systems
Management
Facilities, specific OSI Management Facilities will be defined
(facilities that allow to translate
between OSI names and
CosNaming::Names, handling operations with
scoping and filtering,
etc) in addition to those defined within JIDM Facilities (facilities
defined to get references to
single managed objects given their names, etc).
The JIDM Module
The JIDM module (see
JIDM Module Definition)
comprises a collection of interfaces that
together define a basic set of services for developing Systems
Management Applications
based on CORBA. Following the JIDM reference model (see
Introduction),
these interfaces may
be used between Manager applications and JIDM Frameworks, or between
JIDM Frameworks
and Agent applications.
From the Manager application persepective the following interfaces are
used:
-
The ProxyAgent interface
-
The ProxyAgentController interface
-
The ProxyAgentFinder interface
-
The EventPort interface
-
The EventPortFactory interface
From the Agent application perspective the following additional
interfaces are used:
-
The DomainPort interface
-
The DomainPortFactory interface
-
The EventPortFinder interface
This section describes these interfaces and their operations in
detail.
Table: JIDM Module Definition
#ifndef _JIDM_IDL_
|
#define _JIDM_IDL_
|
|
#include <CosNaming.idl>
|
#include <CosLifeCycle.idl>
|
#include <CosEventChannelAdmin.idl>
|
|
#pragma prefix "omg.org"
|
|
module JIDM
|
{
|
typedef CosNaming::Name Key;
|
typedef CosLifeCycle::Criteria Criteria;
|
|
exception InvalidKey {};
|
exception InvalidCriteria {};
|
exception CannotMeetCriteria { Criteria reason; };
|
exception CannotAccess {};
|
exception AlreadyExists {};
|
exception NoEventPort {};
|
|
interface ProxyAgent {
|
enum DestructionMode {gracefully, non_gracefully};
|
readonly attribute Criteria access_criteria;
|
|
CosLifeCycle::FactoryFinder get_domain_factory_finder ();
|
CosNaming::NamingContext get_domain_naming_context ();
|
|
Criteria destroy (in DestructionMode mode, in Criteria the_criteria)
|
raises (InvalidCriteria, CannotMeetCriteria);
|
};
|
|
interface ProxyAgentController {
|
Criteria destruction_is_allowed (in Criteria the_criteria)
|
raises (InvalidCriteria,CannotMeetCriteria);
|
void destroyed (in Criteria the_criteria);
|
};
|
|
interface ProxyAgentFinder {
|
ProxyAgent access_domain (in Key k, in Criteria the_criteria)
|
raises (InvalidKey, CannotAccess, InvalidCriteria, CannotMeetCriteria);
|
};
|
interface DomainPort {
|
readonly attribute Criteria associated_criteria;
|
void destroy ();
|
};
|
|
interface DomainPortFactory {
|
DomainPort create_domain_port (in Key k, in Criteria creation_criteria)
|
raises (InvalidKey, InvalidCriteria, CannotMeetCriteria);
|
};
|
|
interface EventPort {
|
readonly attribute CosEventChannelAdmin::SupplierAdmin supplier_admin;
|
readonly attribute Criteria associated_criteria;
|
void destroy ();
|
};
|
|
interface EventPortFactory {
|
EventPort
|
create_event_port (in Key k, in Criteria creation_criteria,
|
in CosEventChannelAdmin::SupplierAdmin the_supplier_admin)
|
raises (InvalidKey, InvalidCriteria, CannotMeetCriteria, AlreadyExists);
|
};
|
|
interface EventPortFinder {
|
CosEventChannelAdmin::SupplierAdmin
|
find_event_port (in Key k, in Criteria the_criteria)
|
raises (InvalidKey, InvalidCriteria, CannotMeetCriteria, NoEventPort);
|
};
|
};
|
|
#endif /* _JIDM_IDL_ */
|
JIDM Managed Objects
The JIDM module does not define an interface for generic JIDM objects,
as it would be an
empty interface, because there is no truly generic, common operations
that could be attributed
to all kinds of managed objects.
However, every management environment must define some kind of managed
object, that is
the entity being managed in the respective environment. For example,
in OSI systems man-agement,
there is the concept of a managed object directly; in SNMP management,
there is no
concept of a managed object, but a concept of entries within the SNMP
MIB, that is equiva-lent
to a managed object.
The definition of these managed objects, in all management
environments, must support the
design principles outlined in
Design Principles.
In particular, in support of the transparency principle, the following
semantics are required of
any managed object interface:
-
If a CORBA object reference is used to request a managed object to
perform an operation
and the managed object does not exist, an OBJECT_NOT_EXIST exception
should
result.
-
If a CORBA object reference is used to request a managed object to
perform an operation
and the request causes an OBJECT_NOT_EXIST exception, the managed
object was
actually deleted. (This property helps users avoid unnecessary
failures while attempting
to re-create an object that already exists.)
-
If a CORBA object reference is used to request a managed object to
perform an operation
and the managed object exists, the operation shall not result in an
OBJECT_NOT_EXIST
exception.
The JIDM::ProxyAgent Interface
Managers that require to create and/or invoke operations on managed
objects that are members
of a given domain must first gain access to that domain. When a
manager gains access to
a managed object domain, a JIDM::ProxyAgent object (an object that
exports the JIDM::ProxyAgent
interface) is created. Several JIDM::ProxyAgents may coexist, giving
parallel access to the same
managed object domain.
Table: JIDM::ProxyAgent Interface Definition
interface ProxyAgent {
|
enum DestructionMode {gracefully, non_gracefully};
|
readonly attribute Criteria access_criteria;
|
|
CosLifeCycle::FactoryFinder get_domain_factory_finder ();
|
CosNaming::NamingContext get_domain_naming_context ();
|
|
Criteria destroy (in DestructionMode mode, in Criteria the_criteria)
|
raises (InvalidCriteria, CannotMeetCriteria);
|
};
|
Invoking operations exposed by the JIDM::ProxyAgent object, CORBA
manager objects are able to obtain references to:
-
An initial CosLifeCycle::FactoryFinder object in the managed object
domain being accessed
-
An initial CosNaming::NamingContext object in the managed object
domain being accessed
Invoking the find_factories operation exposed by the initial
CosLifeCycle::FactoryFinder object,
CORBA manager objects may find factories that enable creation of new
members of the managed object domain.
Invoking the resolve operation exposed by the initial
CosNaming::NamingContext object, CORBA
manager objects may obtain CORBA object references to existing members
of the managed
object domain.
Figure: JIDM::ProxyAgents in a CORBA Environment
The get_domain_factory_finder Operation
To create a managed object, CORBA manager objects first need to find a
reference to a suitable
factory. They do so by means of invoking the find_factories operation
exposed by the initial
CosLifeCycle::FactoryFinder object in the managed object domain where
the new managed object
is going to be created.
The
get_domain_factory_finder()
operation enables to obtain a reference
to this initial CosLifeCycle::FactoryFinder object in the domain being accessed through a given
JIDM::ProxyAgent object.
Table: CosLifeCycle::FactoryFinder Interface Definition
module CosLifeCycle {
|
....
|
typedef CosNaming::Name Key;
|
typedef Object Factory;
|
typedef sequence <factory> Factories;
|
|
exception NoFactory {
|
Key search_key;
|
};
|
|
interface FactoryFinder {
|
Factories find_factories (in Key factory_key)
|
raises (NoFactory);
|
};
|
....
|
};
|
As shown in
CosLifeCycle::FactoryFinder Interface Definition,
the find_factories operation supported by
CosLifeCycle::FactoryFinders
returns a sequence of factories which match some given key. The space
of keys is established
by convention in particular environments as explicitly declared in
reference
CORBA
(chapter 6, page 14).
Conventions adopted for JIDM facilities (that is, common to
every Systems Management
Reference Model) are described in
JIDM Conventions for Factory Finder Keys.
Additional conventions
may exist for each
specific Systems Management Reference Model being considered.
Table: JIDM Conventions for Factory Finder Keys
id field
| kind field
| Meaning
|
---|
fully scoped name of object interface
| "object interface"
| Find factories that create objects supporting the named interface
|
fully scoped name of factory interface
| "factory interface"
| Find factories supporting the named factory interface
|
Several alternatives can be followed for assigning values to the keys
that will be passed to the
find_factories()
operation.
-
Only the name of the object interface is specified.
Here, it is implicitly assumed that there is a factory interface
associated to the managed
object interface. CORBA managers know the name and operations
associated to this factory
in advance so that they can properly narrow and use the reference
returned by the
find_factories()
operation.
-
Only the name of the object factory interface is specified.
Here, references returned by the
find_factories()
operation can be
narrowed to the IDL interface
whose name has been specified. The CORBA manager object who invoked
the operation
knows the signature and semantics of operations supported by the
designated object
factory interface. This option will be the one used to obtain
references to generic factories
exporting the CosLifeCycle::GenericFactory interface or any of the
generic factory interfaces
defined in reference
SYSMANfacilities.
-
Both the name of the object and factory interfaces are specified.
This will be useful in environments where there are more than just one
factory object
interface associated to each managed object interface. Thus, the CORBA
manager object
specifies what is the interface that will be exported by the object to
be created and,
among the possible types of factories that can create objects
exporting such interface,
which is the actual interface of the factory that it wants to use for
creating the new object.
In any case, the result of passing several key values should be
interpret as the logical AND of
the conditions associated to each of the keys.
In respect to creation of managed objects, it is worth noticing that
JIDM facilities provide a
generic framework that requires to be specialized for each specific
Systems Management Reference
Model. Such specialization implies precise definition of:
-
The whole space of keys that are valid for finding factories
-
The space for keys and criteria that can be passed as arguments to
the
create_object()
operation
exposed by CosLifeCycle::GenericFactory objects.
-
Other types of interfaces that are better suited to the specific
Systems Management Reference
Model that is being considered (the OSIMgmt::ManagedObjectFactory
interface or interfaces
generated from namebinding GDMO templates in the OSI Systems
Management Reference Model, for example)
The get_domain_naming_context Operation
A CORBA manager object may obtain CORBA object references to members
of a managed
object domain as a result of invoking the resolve operation exposed by
the initial CosNaming::NamingContext object in the domain.
The resolve operation may also be
used to obtain references
to CosNaming::NamingContext objects other than the initial
CosNaming::NamingContext object.
The
get_domain_naming_context()
operation enables obtaining of a reference
to the initial CosNaming::NamingContext object in the domain
being accessed through a given
JIDM::ProxyAgent object.
The design imparts no semantics or interpretation of the names
themselves. Because the structure
of names must be common to all Systems Management Reference Models,
the structure
of names defined in the standard CosNaming Service specification (see
reference
CORBA)
has been
adopted. The actual semantics or interpretation of names is up to the
specific Systems Management
Reference Model being used. CORBA facilities defined for a given
reference model
will typically include definition of library interfaces enabling
construction of names in
CORBA Naming Service form (CosNaming::Names).
Exceptions Raised by the Resolve Operation
describes the exceptions raised by the resolve operation.
Note that this description
complies with the description given for the standard CosNaming service
in referenced document
CORBAservices.
Table: Exceptions Raised by the Resolve Operation
Exception Raised
| Description
|
---|
NotFound
| Indicates the name does not identify a binding (there is no object reference bound to the name passed as argument).
|
CannotProceed
| Indicates that implementation of the resolve operation has given up for some reason. The client, however, may be able to continue the operation using the returned name and reference, which points to a CosNaming::NamingContext.
|
InvalidName
| Indicates the name is invalid (a name of length 0 is invalid; additional restrictions apply depending on the specific management support environment).
|
Only the
resolve()
operation is guaranteed to be available in any management environment.
CORBA manager objects may not have access to the rest of operations
(bind, unbind, etc.)
exposed by the initial CosNaming::NamingContext object or any of its
subordinate CosNaming::NamingContext objects.
If a CORBA manager object invokes an operation
it cannot access,
a NO_PERMISSION exception is raised.
The access_criteria Attribute
Any JIDM::ProxyAgent object exposes the
access_criteria
attribute which allows to check which
were the terms and conditions under which access through the
JIDM::ProxyAgent object was accepted.
This attribute is represented as a Criteria, and its contents are
dependant on the specific System
Management Reference model being used.
The destroy Operation
Any JIDM::ProxyAgent object exposes the destroy operation which
enables to destroy the object.
Destroying a JIDM::ProxyAgent object means closing the session
established with the associated
managed object domain. If the JIDM::ProxyAgent object was running in a
JIDM gateway server,
destruction of the object implies disposing resources used to maintain
the associated connection
(closing an XMP descriptor, for example).
Destruction of a JIDM::ProxyAgent object can take place in one of the
following modes:
-
gracefully,
meaning that resources associated to the session are
going to be disposed in a
graceful manner. If this is not possible, a CannotDestroy exception is
raised.
-
non_gracefully,
meaning that resources associated to the session
are going to be disposed in
an abrupt manner. No user exception is expected in this case.
Graceful destruction of JIDM::ProxyAgent objects should always be
requested in the first place.
If graceful destruction were not possible, a client may request
non_graceful
destruction in
order to destroy the object.
Invokers of the destroy operation may pass a criteria that will be
analyzed to determine whether
the destruction request can be accepted or not.
If any of the destruction criteria are not understood, the
InvalidCriteria exception is raised.
If the destruction request is not accepted, the CannotMeetCriteria
exception is raised. The criteria
describing reasons for the rejection is provided with the exception.
If destruction is accepted, the destroy operation returns a Criteria
value which typically describes
the terms and conditions under which destruction has been accepted.
This criteria is initialized
with values provided by controller objects in the manager and managed
object domains.
See
The JIDM::ProxyAgentController interface
for more details.
Once a JIDM::ProxyAgent object is destroyed, references to it are not
further valid. Therefore,
invoking an operation on a JIDM::ProxyAgent object that has been
destroyed causes the standard
OBJECT_NOT_EXIST exception to be raised. In addition, invoking
operations using references
to existing managed objects, factories, factory finders and naming
contexts that were obtained
through the destroyed JIDM::ProxyAgent object causes the standard
NO_PERMISSION exception
to be raised.
The JIDM::ProxyAgentController interface
Destruction of JIDM::ProxyAgent objects in a distributed environment
requires definition of
mechanisms that enable validation of whether destruction is allowed or
not. This proposal introduces
validation through JIDM::ProxyAgentController objects.
Table: JIDM::ProxyAgentController Interface Definition
interface ProxyAgentController {
|
Criteria destruction_is_allowed (in Criteria the_criteria)
|
raises (InvalidCriteria, CannotMeetCriteria);
|
void destroyed (in Criteria the_criteria);
|
};
|
A JIDM::ProxyAgentController object may be associated with a
JIDM::ProxyAgent object during the
invocation of
access_domain()
operation in the JIDM::ProxyAgentFinder,
where it is passed in the criteria
parameter. In this case, the JIDM::ProxyAgentController plays
the role "associated at the manager side".
Following the exact matching rule of key and criteria, a maximum
of one
JIDM::ProxyAgentController object may be associated with a given
JIDM::ProxyAgent object at the
manager side.
One or more JIDM::ProxyAgentController objects may be associated with
a JIDM:ProxyAgent, at the
managed object domain. This can be done if a JIDM::DomainPort object
is initialized with a list
of JIDM::ProxyAgentController objects (see
The JIDM::DomainPort interface).
A
destroy()
operation invoked in a JIDM::ProxyAgent object will invoke
operation(s), depending on
the destruction mode, in all JIDM::ProxyAgentController objects
associated with such JIDM::ProxyAgent.
The destruction_is_allowed Operation
The
destruction_is_allowed()
operation is invoked in order to validate
if a graceful destruction of a
JIDM::ProxyAgent object may occur. Therefore, this operation is only
invoked by the ProxyAgent
when destroy has been called, with a DestructionMode of
gracefully.
If there are more than one
JIDM::ProxyAgentController objects associated to a JIDM::ProxyAgent,
they should all be consulted.
Destruction of the JIDM::ProxyAgent object is only permitted if all
JIDM::ProxyAgentController
objects accept destruction of the object.
The criteria passed as argument to the destroy operation is passed to
the JIDM::ProxyAgentController
objects as a parameter of the
destruction_is_allowed()
operation.
If destruction is allowed, the
destruction_is_allowed()
call returns a Criteria potentially specifying
the terms and conditions under which destruction is allowed. If the
Criteria is empty, destruction is allowed unconditionally.
If destruction is prohibited, the CannotMeetCriteria exception should
be raised. This exception
carries the reason why permission to destroy was not granted.
When an exception is raised by any JIDM::ProxyAgentController object
in response to this call,
this exception is automatically propagated as the result of the
destroy call that triggered this
process.
If all JIDM::ProxyAgentController objects associated to the
JIDM::ProxyAgent being destroyed allow
the destruction, then the JIDM::ProxyAgent object is effectively
destroyed. The Criteria returned
by the destroy call is the result of combining all Criteria returned
by all involved JIDM::ProxyAgentController
objects.
P
When combining several criteria into one, the shared components are
copied (once) into the
combined criteria, and those that are present in one but not other are
also copied into the combined
criteria. That is, the combination is a
union
of criteria components. The actual number
and type of values in the criteria will typically depend on the
reference model being considered>
The destroyed operation
The JIDM::ProxyAgentController
destroyed()
operation is invoked
after the JIDM::ProxyAgent has
been effectively destroyed (at this point, the JIDM::ProxyAgent object
no longer exists). This
may be as a result of a successful
graceful
destruction interaction,
as described above, or as a
result of a
non_graceful
destruction request.
This call carries the Criteria passed to the
destroy()
call in case of ungraceful destruction, or the
combined results of the corresponding
destruction_is_allowed()
calls, as described above.
If there are more than one JIDM::ProxyAgentController object
associated to a JIDM::ProxyAgent,
they will all be notified.
JIDM::ProxyAgentFinder Interface
Objects exporting the JIDM::ProxyAgentFinder interface enable to get
access to managed object
domains. CORBA managers that require to get access to a given managed
object domain
invoke the
access_domain()
operation exposed by a JIDM::ProxyAgentFinder object.
Table: JIDM::ProxyAgentFinder Interface Definition
interface ProxyAgentFinder {
|
ProxyAgent access_domain (in Key k, in Criteria the_criteria)
|
raises (InvalidKey, CannotAccess, InvalidCriteria, CannotMeetCriteria);
|
};
|
A JIDM::ProxyAgent object represents a session established with a
managed object domain.
Each session is unequivocally characterized by:
-
A key which typically identifies the specific Systems Management
Environment being
considered (for example, OSI environment, SNMP environment). This key enables
to adequately
interpret the criteria value passed as second argument to the
operation
and
-
a criteria value which contains, among other things, the title
associated to the domain
being accessed (an AEtitle in OSI environments, an IP-address or
hostname in SNMP
environments).
This means that invoking the
access_domain()
operation with two
different <key , criteria> pairs
will result in creation of two different JIDM::ProxyAgent objects.
The access_domain Operation
Two scenarios may occur when invoking the
access_domain()
operation:
-
No JIDM::ProxyAgent object exists with the same key and criteria
values passed in the invocation.
In this case, a new JIDM::ProxyAgent object is created with the key
and criteria values
associated to it. Finally, a reference to the new JIDM::ProxyAgent
object is returned.
-
A JIDM::ProxyAgent object exists with the same key and criteria
values passed in the invocation.
In this case, a reference to the already existing JIDM::ProxyAgent
object is returned.
It is worth noticing that there can be multiple sessions established
with a managed object
domain. This means that any managed object may be accessed through
multiple JIDM::ProxyAgents.
Conventions adopted for keys in JIDM are described in
JIDM Conventions for Proxy Agent Finding Keys.
Standard key values
include OSI Management and Internet Management, denoting the OSI and
SNMP-based Systems Management Environments.
Table: JIDM Conventions for Proxy Agent Finding Keys
id field
| kind field
| meaning
|
---|
OSI Management
Internet Management
| XSM environment
| Find proxy agents for the specific Systems Management Environment
|
The criteria passed as second argument to the
access_domain()
operation will contain information
needed to setup the requested session. Only the title assigned to the
domain being accessed
has been identified as required for all Systems Management Reference
Models. Wildcard
titles are supported in some specific management environments,
enabling designation of the
whole space (domain) of managed objects.
If the manager requires to excersise control upon destruction of the
ProxyAgent, a reference to a
JIDM::ProxyAgentController object must be also specified in the
Criteria (see
The JIDM::ProxyAgentController interface).
JIDM Conventions for Proxy Agent Finding Criteria
summarizes the name and meaning of criteria that may be
passed as input argument
to the access_domain operation exposed by JIDM::ProxyAgent objects.
Table: JIDM Conventions for Proxy Agent Finding Criteria
Criterion Name
| Type
| Meaning
|
---|
domain title
| domain specific type
| Title associated to the managed object domain for which access is required.
|
controller object
| JIDM::ProxyAgentControllerr
| Reference associated to a JIDM::ProxyAgentController object in the manager (OPTIONAL)
|
The actual number and type of values in the criteria will typically
depend on the reference
model being considered.
A reference to a root JIDM::ProxyAgentFinder object at the manager may
be obtained by means
of invoking the
resolve_initial_references()
operation exposed through the standard CORBA::ORB
interface. The standard CORBA::ObjectId assigned to the root
JIDM::ProxyAgentFinder object
would be JIDM::ProxyAgentFinder.
Example code for Accessing a Managed Object Domain
is an example fragment of code in a CORBA Manager program:
Example: Example code for Accessing a Managed Object Domain
CORBA::ORB_ptr my_orb;
|
Object_ptr obj;
|
JIDM::ProxyAgentFinder_ptr agent_finder;
|
JIDM::ProxyAgent_ptr agent;
|
JIDM::Key a_key;
|
JIDM::Criteria a_criteria;
|
|
// A reference to a local JIDM::ProxyAgentFinder object is
|
// obtained using standard ORB initialization services:
|
|
my_orb = ORB_init (argv, my_ORB_id);
|
obj = my_orb>resolve_initial_references (JIDM::ProxyAgentFinder);
|
agent_finder = ProxyAgentFinder::_narrow (obj);
|
|
// After assigning proper values to key and criteria arguments ...
|
a_key = ...;
|
a_criteria = ...;
|
|
// an association to the managed object domain can be established:
|
agent = agent_finder > access_domain (a_key, a_criteria);
|
Other possibilities include (but are not limited to) registration of
the root JIDM::ProxyAgentFinder
object in the local initial CosNaming::NamingContext or a local
Trader.
The JIDM::DomainPort interface
Managers that require to create and/or invoke operations on managed
objects that are members
of a given managed object domain must first gain access to that
domain. Access to a
managed object domain is controlled by JIDM::DomainPort objects. Each
JIDM::DomainPort object
has a title associated to it.
Table: JIDM::DomainPort Interface Definition
interface DomainPort {
|
readonly attribute Criteria associated_criteria;
|
void destroy ();
|
};
|
All JIDM::DomainPort objects associated to a managed object domain
(that is, associated to titles
used to refer to that managed object domain) hold references to
initial CosNaming::NamingContext
and CosLifeCycle::FactoryFinder objects in the domain.
In pure CORBA environments, when a manager object invokes the
access_domain()
operation on a
ProxyAgentFinder object, the request will finally arrive to the
JIDM::DomainPort object associated
to the title passed as one of the parameters in the criteria.
Two scenarios may occur:
-
A JIDM::ProxyAgent object exists that exactly matches the key and
criteria values passed as
arguments to the
access_domain()
operation. In this case, the
JIDM::DomainPort object finds a
reference to the JIDM::ProxyAgent object and returns it to the
invoker.
-
There is no JIDM::ProxyAgent object matching the key and criteria
values passed as arguments to the
access_domain()
operation. In this case, the JIDM::DomainPort
object creates a
new JIDM::ProxyAgent object and returns the reference to the invoker.
References to the
initial CosNaming::NamingContext and CosLifeCycle::FactoryFinder
objects in the domain will be
passed to the new JIDM::ProxyAgent object by the JIDM::DomainPort
object.
During its lifetime, a JIDM::DomainPort object will keep the
references to all JIDM::ProxyAgent
object it creates. This is necessary in order to resolve the first
scenario.
The JIDM::DomainPortFactory Interface
JIDM::DomainPort objects can be created dynamically by means of
invoking the
create_domain_port()
operation exposed by JIDM::DomainPortFactory objects.
Table: JIDM::DomainPortFactory Interface Definition
interface DomainPortFactory {
|
DomainPort create_domain_port (in Key k, in Criteria creation_criteria)
|
raises (InvalidKey, InvalidCriteria, CannotMeetCriteria);
|
};
|
The key passed as first parameter to this call follows the same
conventions that were specified in
JIDM Conventions for Proxy Agent Finding Keys.
The criteria passed as second argument to the
create_domain_port()
operation will contain information
needed to create the JIDM::DomainPort object. Only the title assigned
to the domain
being accessed has been identified as required for all Systems
Management Reference Models.
Other criteria values may be considered as default values for all the
JIDM::ProxyAgent
objects that are created by a given domain port.
If the managed domain requires to excersise control upon destruction
of the JIDM::ProxyAgent
objects, a reference to one or more JIDM::ProxyAgentController objects
must be also specified in
the Criteria.
Table: JIDM Conventions for create_domain_port Criteria
Criterion Name
| Meaning
|
---|
domain title
| Title associated to the managed object domain for which access is required.
|
controller object
| Reference associated to JIDM::ProxyAgentController object(s) in the managed domain. (OPTIONAL)
|
The JIDM::EventPort Interface
Managed objects that require to forward events to managers must first
gain access to the manager.
Access to a manager is gained through JIDM::EventPort objects. Each
JIDM::EventPort
object has a title associated to it.
Table: JIDM::EventPort Interface Definition
interface EventPort {
|
readonly attribute CosEventChannelAdmin::SupplierAdmin supplier_admin;
|
readonly attribute Criteria associated_criteria;
|
void destroy ();
|
};
|
A JIDM::EventPort object models the port through which events are
going to be received by a
given manager application. This port is created according to a certain
criteria which, among
other things, contains the title that identifies the manager domain
(see
The JIDM::EventPortFactory Interface).
Any agent/managed object that wants to send events to a manager must
set up a connection
with the CosEventChannelAdmin::SupplierAdmin object associated to the
JIDM::EventPort object with
the appropriate title.
A JIDM::EventPort therefore provides and handles access to a specific
CosEventChannelAdmin::SupplierAdmin
object in a channel (the SupplierAdmin object associated to the
EventPort). The
same CosEventChannelAdmin::SupplierAdmin object may be assotiated with
different JIDM::EventPorts,
and therefore may be accessed through several JIDM::EventPorts.
Also note that more any number of agents/managed objects may establish
sessions with the
same CosEventChannelAdmin::SupplierAdmin associated to a given
JIDM::EventPort.
JIDM::EventPorts may be destroyed by means of invoking the destroy
operation they expose.
The JIDM::EventPortFactory Interface
JIDM::EventPort objects can be created dynamically by means of
invoking the
create_event_port()
operation exposed by JIDM::EventPortFactory objects.
Table: JIDM::EventPortFactory Interface Definition
interface EventPortFactory {
|
EventPort create_event_port (in Key k, in Criteria creation_criteria,
|
in CosEventChannelAdmin::SupplierAdmin the_supplier_admin)
|
raises (InvalidKey, InvalidCriteria, CannotMeetCriteria, AlreadyExists);
|
};
|
Any manager wanting to receive events should obtain an object
reference to a CosEventChannelAdmin::SupplierAdmin of the
channel that is to be used to receive the events,
and create a
JIDM::EventPort object with the desired Criteria. The JIDM::EventPort
object receives a key, identifying
the Systems Management Reference model to be used (with the same
values specified in
JIDM Conventions for Proxy Agent Finding Keys),
a criteria containing at least the title of the
manager, and a reference to the
CosEventChannelAdmin::SupplierAdmin object. Only the title of the
manager application has been
identified as required by all System Management Reference models. The
criteria may contain
other fields associated to the specific management environment being
used.
Table: JIDM Conventions for create_event_port Criteria
Criterion Name
| Meaning
|
---|
domain title
| Title associated to the manager domain that wants to receive events.
|
Note that the manager may create a new channel (or admin) or use an
object reference to an
existing one.
A manager needs to create an EventPort just once, independently of the
agents that are or will
be interested in receiving events. This enables a manager to
receive event reports from
one or more agents through a specific title.
In addition, several manager objects could share the same
SupplierAdmin, or EventChannel
(NotificationChannel) object, and connect themselves as consumers
interested in receiving
just some kind of events.
If the creation is successful, a reference to the newly created
JIDM::EventPort object is returned.
In case of problems, the appropriate exception is raised:
-
InvalidKey in case the Key is not recognized
-
InvalidCriteria if any of the components of the Criteria is not
understood
-
CannotMeetCriteria if the conditions for creating the EventPort
cannot be met
-
AlreadyExists in case there is already an existing Event Port
registered with matching Key/Criteria
JIDM::EventPortFinder Objects
CORBA Managed objects that are members of a CORBAbased managed object
domain can
obtain references to JIDM::EventPort objects by means of invoking
operations exposed by a
JIDM::EventPortFinder object.
Table: JIDM::EventPortFinder Interface Definition
interface EventPortFinder {
|
exception NoEventPort {};
|
|
CosEventChannelAdmin::SupplierAdmin
|
find_event_port (in Key k, in Criteria the_criteria)
|
raises (InvalidKey, InvalidCriteria, CannotMeetCriteria, NoEventPort);
|
};
|
Connection to the CosEventChannelAdmin::SupplierAdmin object
associated to a given JIDM::EventPort
is gained by means of invoking the operation
find_event_port()
exposed by a JIDM::EventPortFinder
object in the agent. As a result of that invokation, a reference to
the
CosEventChannelAdmin::SupplierAdmin object that matches the
corresponding Key and Criteria is
returned. Managed objects may establish specific connections to this
CosEventChannelAdmin::SupplierAdmin object by using
operations exposed by the SupplierAdmin
interface.
It is worth noting that the JIDM::EventPortFinder object returns a
reference to the CosEventChannelAdmin::SupplierAdmin objects
associated to the JIDM::EventPort object, and not a reference to
the JIDM::EventPort itself.
Essentially, invoking the
find_event_port()
operation exposed by a
JIDM::EventPortFinder object
implies that the following steps are followed (see
Finding References to JIDM::EventPort Objects):
-
The JIDM::EventPortFinder object finds a reference to the
JIDM::EventPort object associated to
a given key and criteria
-
The JIDM::EventPortFinder finds the
CosEventChannelAdmin::SupplierAdmin object associated to
this JIDM::EventPort, and a reference to this object is returned to
the CORBA managed
object that invoked the
find_event_port()
operation.
In case the request fails, the appropriate exception is raised:
-
InvalidKey in case the Key is not recognized
-
InvalidCriteria if any of the components of the Criteria is not
understood
-
CannotMeetCriteria if the conditions for finding the EventPort
cannot be met
-
NoEventPort in case there is no Event Port registered with the
appropriate Key/Criteria
Different strategies to resolve how CORBA managed objects finally
report events can be implemented:
-
CORBA managed objects directly register themselves as PushSuppliers
or PullSuppliers
through the SupplierAdmin associated to the JIDM::EventPort
-
CORBA managed objects register themselves as PushSuppliers or
PullSuppliers in a single
object which acts as some kind of EventChannel (or
NotificationChannel) which in turn is registered
as a PushSupplier or PullSupplier as described above. This is
particularly useful when
there are more than one JIDM::EventPort objects and the CORBA managed
objects do not
need to be aware of the specific port to which events must be sent.
-
-
Figure: Finding References to JIDM::EventPort Objects
Programming Model
This section is non-normative (information only).
It presents different scenarios where the use of
this specification is
clarified. This should be considered as a high level tutorial on some
potential uses of the
JIDM model. Also, some potential implementation options are discussed.
Programming semantics
CORBA manager programs create and invoke operations on managed objects
in the same way that
they create and invoke operations on ordinary CORBA objects located in
the same CORBA
domain. Analogously, they receive events supplied by managed objects
as if they were ordinary
CORBA objects supplying events to an event channel located in the
CORBA domain.
Whether this actually happens or not is transparent to the CORBA
manager program.
This concept of transparency is specifically supported by the
fulfillment of the semantic rules
presented in
JIDM Managed Objects.
Creating Managed Objects
Creating a managed object implies performing the following actions:
-
Obtain a reference to a JIDM::ProxyAgent object that enables access
to the domain where the
managed object is going to be created.
-
Obtain a reference to the initial CosLifeCycle::FactoryFinder in
the domain.
-
Invoke the
find_factories()
operation exposed by the initial
CosLifeCycle::FactoryFinder object to
find a factory for the new managed object.
-
Select a factory among the several factory objects that may meet
the keys for finding factories
passed to the
find_factories()
operation.
-
Invoke an appropriate operation, exposed by the selected factory,
to create the managed
object.
The CORBA manager will narrow references returned by the
find_factories()
operation in order to
get visibility of the specific interface exported by each factory. Two
scenarios are possible:
CORBA Managers should know which of these two scenarios is implied
when the name of
factory object interface is not passed as key to the
find_factories()
operation.
Table: CosLifeCycle::GenericFactory Interface Definition
module CosLifeCycle {
|
...
|
typedef struct NVP {
|
CosNaming::Istring name;
|
any value;
|
} NameValuePair;
|
|
typedef sequence <NameValuePair> Criteria;
|
typedef CosNaming::Name Key;
|
|
interface GenericFactory {
|
boolean supports (in Key k);
|
Object create_object (in Key k, in Criteria the_criteria)
|
raises (NoFactory, InvalidCriteria, CannotMeetCriteria);
|
};
|
};
|
Typically, a name for the managed object is passed as argument to the
create operation. This
name would unequivocally identify the managed object within the domain
where it will be
created. The identifier of the principal interface exported by the
managed object should also
be passed to the create operation in case that it was not passed as a
key to the
find_factories()
operation.
As already mentioned in section
The JIDM::ProxyAgent Interface,
valid key values for
finding factories depend
on the specific Systems Management Reference Model being considered.
However, the overall
philosophy is common to all models.
Example Code for Creating a Managed Object
shows the code used to create a managed printer. This
fragment of code would
be the same for all reference models (for example, it would be
the same for OSI management
or SNMP-based management). Only the way in which the reference to the
JIDM::ProxyAgent
object is obtained, and the keys used to find factories or semantics of
arguments passed to the
create_object()
operation may vary.
Example: Example Code for Creating a Managed Object
JIDM::ProxyAgent_ptr agent;
|
CORBA::Object_ptr obj;
|
Printing::ManagedPrinter_ptr my_printer;
|
JIDM::Key finding_key (1);
|
CosLifeCycle::FactoryFinder_ptr ff;
|
CosLifeCycle::Factories mo_factories;
|
CosLifeCycle::GenericFactory_ptr my_factory;
|
|
// a reference to a JIDM::ProxyAgent is obtained as a result of
|
// establishing a session with the managed object domain where
|
// the printer is going to be created:
|
|
agent = ...;
|
|
// a reference to the initial CosLifeCycle::FactoryFinder object
|
// is obtained:
|
|
ff = agent > get_domain_factory_finder ();
|
|
// a key to find a factory for the managed object is constructed:
|
|
finding_key [0].id = CosLifeCycle::GenericFactory;
|
finding_key [0].kind = factory interface;
|
|
// factories for the managed object are found through the initial
|
// factory finder:
|
|
mo_factories = ff > find_factories (finding_key);
|
|
// a reference is selected and narrowed to the expected interface:
|
|
my_factory = CosLifeCycle::GenericFactory::_narrow (mo_factories [0])
|
|
// a managed printer is created and a reference to it is returned
|
// which will typically be narrowed to a specific interface
|
|
obj = my_factory > create_object (...);
|
my_printer = Printing::ManagedPrinter::_narrow (obj);
|
As shown in the example, CORBA managers will create managed objects (a
managed printer
in the example) in the same way they create CORBA objects in the local
ORB domain - that is,
by means of using standard CosLifeCycle services. Whether this
actually happens or
not depends on how the corresponding managed object domain is being
accessed:
-
Through one or several interconnected ORBs (that is, directly through
CORBA)
-
Through a JIDM gateway (a CORBA/CMIP gateway, for example).
Invoking Operations Directly Through CORBA
illustrates how CORBA manager objects will create a new
managed object in a
pure CORBA environment.
-
-
Figure: Invoking Operations Directly Through CORBA
Here, the JIDM::ProxyAgent created as a result of establishing a
session with a CORBA managed
object domain would typically hold references to the root
CosNaming::NamingContext object
and CosLifeCycle::FactoryFinder object in the domain. The following
steps are followed:
-
The CORBA manager invokes the
get_domain_factory_finder()
operation exposed by the
JIDM::ProxyAgent object. As a result, a reference to the initial
CosLifeCycle::FactoryFinder in
the domain being accessed is returned.
-
The CORBA manager object invokes the
find_factories()
operation exposed by the initial
CosLifeCycle::FactoryFinder object. As a result, a reference to a
managed object factory is
obtained and returned to the CORBA manager object that requested it.
-
The CORBA manager object invokes a suitable operation on the
managed object factory
using the CORBA object reference previously obtained. Typically, the
CORBA manager
will narrow this reference to a wellknown managed object factory
interface (the CosLifeCycle::GenericFactory interface, for example).
-
The managed object factory creates the CORBA managed object and
perform any other
required action such as registering a reference to the managed object
with a name in the
local CosNaming::NamingContext and/or notifying that a new managed
object has been created
to other objects at the managed object domain. These kinds of
side effect actions may
vary depending on the Systems Management Reference Model being
considered.
-
Finally, if everything is all right, the managed object factory
returns a reference to the
CORBA manager object. Otherwise, it returns an exception.
Invoking Operations on Managed Objects
Invoking an operation on a managed object implies performing the
following actions:
-
Obtain a reference to a JIDM::ProxyAgent object that enables access
to some domain of
which the managed object is member.
-
Obtain a reference to the initial CosNaming::NamingContext in the
domain, by means of
invoking the
get_domain_naming_context()
operation exposed by the
JIDM::ProxyAgent object.
-
Construct the name that unequivocally identifies the managed object
within the domain.
-
Invoke the resolve operation exposed by the initial
CosNaming::NamingContext object in the
domain, thus obtaining a CORBA object reference pointing to the
managed object.
-
Invoke the operation on the managed object.
Of course, steps 1 through 4 are only strictly required the first time
a managed object is
accessed. Actually, the CORBA manager object that obtains a reference
to a managed object
can register the reference in some local object service so that other
CORBA manager object
can find the reference and do not need to interact with
JIDM::ProxyAgent or CosNaming::NamingContext
objects.
Once a reference is obtained for a managed object, it is valid as long
as the managed object
exist and the associated managed object domain is accessible. A valid
object reference can be
used as many times as required. Two alternatives exist for invoking an
operation on a managed
object once a CORBA object reference is obtained for the object:
-
Use the Dynamic Invocation Interface (DII)
-
Use IDL stubs generated from definition, in OMG IDL, of interfaces
exported by the
managed object.
In the first case, the CORBA object reference obtained as a result of
resolving the name of the
managed object can be used directly. In the second case, the CORBA
object reference must
be narrowed to a specific interface exported by the managed object.
Example Code for Invoking an Operation on a Managed Object
shows the code used to invoke the reset operation exposed
by a managed printer
(that is, objects exporting the Printing::ManagedPrinter interface) using
IDL stubs generated in C++.
Example: Example Code for Invoking an Operation on a Managed Object
JIDM::ProxyAgent_ptr agent;
|
CosNaming::Name printer_name;
|
|
// a reference to a JIDM::ProxyAgent is obtained as a result of
|
// establishing a session with the managed object domain where
|
// the printer is located:
|
|
agent = ...;
|
|
// a reference to the initial CosNaming::NamingContext object is obtained:
|
|
CosNaming::NamingContext_ptr ctx = agent > get_domain_naming_context();
|
|
// the name of the printer is constructed:
|
|
printer_name = ...;
|
|
// a reference to the managed printer is obtained and
|
// narrowed to the ManagedPrinter interface:
|
|
CORBA::Object_ptr obj = ctx > resolve (printer_name);
|
Printing::ManagedPrinter_ptr my_printer = Printing::ManagedPrinter::_narrow (obj);
|
|
// Finally, the reset operation is invoked on the managed object:
|
|
my_printer > reset();
|
It must be pointed out that this fragment of code would be the same
for all Systems Management
Reference Models (for example, it would be the same
for OSI management
or SNMP-based management). Only the way in which the reference to the
JIDM::ProxyAgent object is obtained or the way in which the name of
the managed object is constructed
may vary. Thus, CORBA managers will have the illusion that managed
objects (a
managed printer in the example) are implemented as CORBA objects
directly accessible via
CORBA. Whether this actually happens or not depends on how the
corresponding managed
object domain is being accessed:
-
Through one or several interconnected ORBs (that is, directly through
CORBA)
-
Through a JIDM gateway (a CORBA/CMIP gateway, for example).
Invoking Operations Directly Through CORBA
illustrates how CORBA manager objects invoke operations on
a managed object in a pure CORBA environment.
-
-
Figure: Invoking Operations Directly Through CORBA
As already explained, the JIDM::ProxyAgent created as a result
of establishing a session
with a CORBA managed object domain would typically hold references to
the initial CosNaming::NamingContext object and
CosLifeCycle::FactoryFinder objects in the
domain. Thus, the following
steps will be followed:
-
The CORBA manager object invokes the
get_domain_naming_context()
operation exposed by
the JIDM::ProxyAgent object, in order to obtain a reference to the
initial CosNaming::NamingContext
object.
-
The CORBA manager object invokes the
resolve()
operation exposed by
the initial CosNaming::NamingContext object, passing
the name of the managed object upon
which it wants to
operate. As a result of this, a CORBA object reference to the managed
object is obtained
and returned to the CORBA manager object that requested it.
-
The CORBA manager object invokes an operation on the managed object
using the
CORBA object reference previously obtained. IDL stubs or the standard
DII can be used
for doing this. If IDL stubs are used, the CORBA manager object must
narrow the reference
to a specific OMG IDL interface.
Reception of Events at CORBA Managers
Different strategies to resolve how CORBA manager objects finally
consume events can be implemented, including but not limited to:
-
CORBA manager objects responsible of performing management
functions directly register
themselves as PushConsumers or PullConsumers at every local
JIDM::EventPort.
-
CORBA manager objects responsible of performing management
functions register
themselves as PushConsumers or PullConsumers in a single EventChannel.
The event channel
registers itself as a PushConsumer or PullConsumer in every local
JIDM::EventPort. This is particularly
useful when there are more than one JIDM::EventPort objects and the
CORBA
manager objects dont need to distinguish through which specific port
events were
received.
-
-
Figure: Event Reception at CORBA Managers
It is worth noticing that several advantages are derived from defining
JIDM::EventPort objects as
having CosEventChannelAdmin::SupplierAdmin objects. Among them, we
should mention the following:
-
Any EventChannel implementation supplied by any software provider
can be used for
receiving events from an agent.
-
Managers wanting to filter events can register a
NotificationChannel instead of an
EventChannel in order to filter events. A manager who does not want to
filter events can
use a simple EventChannel. this can be achieved transparently for
gateway/managed
domains.
-
The same EventChannel can be shared by several managers and a
manager can reuse the
EventChannel whenever he wants, independently of it is being used by
other managers.
-
Given the new NotificationChannel structure, multiple Admins per
channel are possible
(even frequent); by registering the Admin rather than the Channel
itself, the user has better
configuration possibilities.
-
Ability to globally filter on reception.
-
Easier grouping capabilities into a single channel, but keeping
separate Admins per title
(with potentially different filters).
-
Potentially support delegation facilities (an agent/manager
application could get a SupplierAdmin
from a higher level manager and register it with another title,
effectively saving
a forwarding step).
-
An EventChannel can be created in the gateway proccess (there is a
EventChannelFactory
facility being provided for doing so) or it can be created in any
other distributed
proccess and be registered in the gateway; that is: EventChannel can be
distributed and the
load of managing the final CORBA events can be balanced.
-
CORBA manager objects consume events generated by remote managed
objects in the
same way they receive other events (events generated by other CORBA
manager objects
at the same CORBA Manager, for example)
-
CORBA manager objects residing in different CORBA Managers can use
JIDM::EventPorts
to exchange events between them since they are ordinary event channels
-
multiple scenarios for handling incoming events are possible at
CORBA managers: one
or several JIDM::EventPort objects can be installed, reception of
events can be handled by
means of applying different cascading techniques, push and pull styles
of event communication
can be combined, etc.
-
-
Figure: Handling Event Reports with Event Channels (Push Model)
Handling Event Reports with Event Channels (Push Model)
represents one possible scenario, where CORBA manager
objects performing
management functions are registered as consumers at an event channel
which, in turn, has
been registered as a PushConsumer at two local JIDM::EventPort
objects. The basic algorithm being
used is defined as follows:
-
During the start up phase of the CORBA Manager Application, a
CosEventChannelAdmin::EventChannel object
is registered as a CosEventComm::PushConsumer in
every local
JIDM::EventPort. CORBA manager objects actually performing the
management functions
are registered as consumers in this channel.
-
An JIDM::EventPort object receives data associated to an event.
-
The JIDM::EventPort invokes the push operation exposed by all
objects that have been registered
as CosEventComm::PushConsumers. This includes the
CosEventChannelAdmin::EventChannel
object. Data in the event is passed in the invocation as type
any.
-
When the CosEventChannelAdmin::EventChannel object receives an
event, it invokes the push
operation exposed by all CORBA manager objects that were registered as
CosEventComm::PushConsumers in the channel.
-
The CosEventChannelAdmin::EventChannel object keeps every event it
receives until all
CORBA manager objects that were registered as
CosEventComm::PullConsumers invoke the
pull operation on the channel or a timeout expires.
-
-
Figure: Handling Event Reports with Event Channels (Pull Model)
Handling Event Reports with Event Channels (Push Model)
represents another possible scenario, where CORBA manager
objects performing
management functions are registered as consumers at one event channel
that, in turn, has been
registered as a PullConsumer at two local JIDM::EventPort objects. The
basic algorithm being followed is:
-
During the start up phase of the CORBA Manager Application, the
CosEventChannelAdmin::EventChannel objects
is registered as a CosEventComm::PullConsumers in
every local
JIDM::EventPort.
-
A JIDM::EventPort object receives data associated to an event
report.
-
The JIDM::EventPort object holds the event so that all objects
registered as CosEventComm::PullConsumers can
consume the event. They will do it by means of
invoking the pull
operation exposed by the JIDM::EventPort object.
-
When the CosEventChannelAdmin::EventChannel pulls the event, it
invokes the push operation
exposed by all CORBA manager objects that has been registered as
CosEventComm::PushConsumers
in the channel.
-
The CosEventChannelAdmin::EventChannel object also keeps every
event it pulls, until all
CORBA manager objects that have been registered as
CosEventComm::PullConsumers invoke
the pull operation on it or a timeout has expires.
Federation of JIDM::ProxyAgentFinders & JIDM::DomainPorts
To ensure that the service for finding JIDM::ProxyAgent objects is
scalable, the principle of federation
need to be adopted. Federation is essential in large-scale distributed
systems where the
existence of a centralized ownership control cannot be assumed.
The specific service used to federate JIDM::DomainPort objects in a
pure CORBA environment
is transparent to CORBA manager clients and, therefore, is out of the
scope of this specification.
Use of Traders or intermediate JIDM::ProxyAgentFinder objects
connected in a graph are
some examples of valid solutions. Furthermore, different federation
services can be supported
and combined in order to implement a complete solution.
Note that in this respect, the root JIDM::ProxyAgentFinder object that
is accessible to CORBA
managers simply represent a simple bootstraping mechanism that
encapsulate access to whatever
Federation Service is finally used. By means of standardizing this
interface, portability of
CORBA manager clients is guaranteed. On the other hand, the
JIDM::ProxyAgentFinder
interface allows easier implementation of gateways between CORBA
managers and managed
object domains that are only accessible through standard management
protocols (CMIP,
SNMP, etc).
In a pure CORBA environment, a complete solution may be implemented
based on a graph of
inter-connected JIDM::ProxyAgentFinder objects. In such solution,
there would be at least two
styles of JIDM::ProxyAgentFinder objects:
-
JIDM::DomainPort objects which actually work as factories of
JIDM::ProxyAgent objects
-
Intermediary JIDM::ProxyAgentFinder objects which pass requests on
to either
JIDM::DomainPorts or other intermediary JIDM::ProxyAgentFinder objects
By configuring intermediary JIDM::ProxyAgentFinder objects and
JIDM::DomainPort objects into a
graph, the service for finding JIDM::ProxyAgent objects can be built
so that it administers access
to a large number of managed object domains.
Whenever a manager object invokes the
access_domain()
operation, the
request would traverse
the graph until it reaches a JIDM::DomainPort object which can satisfy
the request (one which
resides in the managed object domain being accessed). As the request
traverses the graph,
each intermediary (non-terminal) JIDM::ProxyAgentFinder object would
decide which link the
request would be traversed next. Decisions will be based upon
information about each available
link, any policies in force at that node and value of parameters in
the request.
Clearly, configuration of JIDM::ProxyAgentFinder graphs and definition
of policies to traverse
these graphs requires definition of Federating interfaces (see
Appendix 6C of reference
CORBAservices
for definition of interfaces to federate CosLifeCycle::GenericFactory
objects). Again, different
federation policies can be supported and combined in order to
implement a complete
solution. One possible alternative may consist in that intermediate
JIDM::ProxyAgentFinder
objects export an interface that enables to bind a reference to an
JIDM::ProxyAgentFinder object
together with a specific filter that can be applicable to key and
criteria values passed to the
access_domain()
operation. This would allow to register one
JIDM::ProxyAgentFinder object that are
able to find references to JIDM::ProxyAgent associated to some range
of title values.
-
-
Figure: Implementing Federation with Graphs of ProxyAgentFinders
Implementing Federation with Graphs of ProxyAgentFinders
illustrates how federation of JIDM::DomainPorts would work
if a graph of intermediate
JIDM::ProxyAgentFinder objects is implemented. The following steps
would be followed:
-
A manager object invokes the
access_domain()
operation exposed by the
root JIDM::Proxy-AgentFinder
object. The manager object typically obtained a reference to this
JIDM::Proxy-AgentFinder
object using local initialization services.
-
The JIDM::ProxyAgentFinder object that first receives the
access_domain
request will typically
act as an intermediary JIDM::ProxyAgentFinder object. Based on
information available
to that object, it will decide to pass requests on to other
JIDM::ProxyAgentFinder objects.
-
The request will traverse the graph until it reaches a
JIDM::DomainPort object which resides
at the managed object domain being accessed. That object will create
or return an already
existing reference to a JIDM::ProxyAgent object which matches the key
and criteria value
passed in the request.
-
As a result of this process, a valid reference to a
JIDM::ProxyAgent object would be passed
to the manager object which requested to establish a session. Using
this reference, the
manager object is able to operate upon members of the managed object
domain or create
new members of the managed object domain.
-
-
Figure: Implementing Federation with Traders
An alternative solution may be based on the use of Traders.
Implementing Federation with Traders
illustrates how federation
of JIDM::DomainPorts would work in such case. The following steps
would be followed:
-
A manager object would invoke the
access_domain()
operation exposed
by the root
JIDM::ProxyAgentFinder object. The manager object would typically
obtain a reference to
the root JIDM::ProxyAgentFinder object using local initialization
services.
-
The root JIDM::ProxyAgentFinder object would convert the request
into an invocation of the
lookup operation exposed by a Trader object. This Trader object may be
federated with
other Trader objects.
-
The request would traverse the graph of Traders until some of them
finds a JIDM::DomainPort
object which resides at the managed object domain being accessed. A
reference to
this JIDM::DomainPort object is passed to the root
JIDM::ProxyAgentFinder object which initiated
the process.
-
The root JIDM::ProxyAgentFinder object would invoke
access_domain()
on the JIDM::DomainPort
object. As a result, a reference to a JIDM::ProxyAgent object is
returned.
-
The returned reference would finally be passed to the manager
object which requested to
establish a session. Using this reference, the manager object is able
to operate upon members
of the managed object domain or create new members of the managed
object
domain.
Federation of JIDM::EventPortFinders & JIDM::EventPorts
To ensure that the service for finding JIDM::EventPort objects is
scalable, the principle of federation
also need to be adopted. Federation is essential in large-scale
distributed systems where
the existence of a centralized ownership control cannot be assumed.
The specific service used to federate JIDM::EventPort objects in a
pure CORBA environment is
transparent to CORBA manager clients and, therefore, is out of the
scope of this specification.
Use of Traders or intermediate JIDM::EventPortFinder objects connected
in a graph are some
examples of valid solutions. Furthermore, different federation
services can be supported and
combined in order to implement a complete solution.
Note that in this respect, the root JIDM::EventPortFinder object that
is accessible to CORBA
managed objects simply represent a simple bootstraping mechanism that
encapsulate access
to whatever Federation Service is finally used. By means of
standardizing this interface, portability
of CORBA managed object implementations is guaranteed. On the other
hand, the
JIDM::EventPortFinder interface allows easier implementation of
gateways between CORBA
managers and managed object domains that are only accessible through
standard management
protocols (CMIP, SNMP, etc).
In a pure CORBA environment, a complete solution may be implemented
based on a graph of
inter-connected JIDM::EventPortFinder objects. By means of configuring
intermediary
JIDM::EventPortFinder objects into a graph, the service for finding
JIDM::EventPort objects can be
built so that it administers access to a large number of managed
object domains.
Whenever a managed object invokes the
find_event_port()
operation, the
request would traverse
the graph until it reaches the target JIDM::EventPort object. As the
request traverses the graph,
each intermediary JIDM::EventPortFinder object would decide which link
the request would be
traversed next. Decisions will be based upon information about each
available link, any policies
in force at that node and value of parameters in the request.
Clearly, configuration of JIDM::EventPortFinder graphs and definition
of policies to traverse
these graphs requires definition of Federating interfaces (see
Appendix 6C of reference
CORBAservices
for definition of interfaces to federate CosLifeCycle::GenericFactory
objects). However definition
of such interfaces is out of the scope of this specification since
they are transparent to
the clients (managed objects). Different federation policies can be
supported and combined in
order to implement a complete solution.
One possible alternative may consist in that intermediate
JIDM::EventPortFinder objects export
an interface that enables to bind a reference to an
JIDM::EventPortFinder object together with a
specific filter that can be applicable to key and criteria values
passed to the
find_event_port()
operation.
This would allow, as an example, to register one JIDM::EventPortFinder
object as being
able of finding references to JIDM::EventPort objects associated to
titles that fall within some
specific range of title values.
Finding JIDM::EventPort Objects
illustrates how federation of JIDM::EventPorts would work
if a graph of intermediate
JIDM::EventPortFinder objects is implemented. The following steps
would be followed:
-
A managed object would invoke the
find_event_port()
operation exposed
by a JIDM::EventPort-Finder
object. The managed object typically would obtain a reference to this
JIDM::EventPortFinder
object using local initialization services.
-
The JIDM::EventPortFinder object that first receives the
access_domain
request would typically
act as an intermediary JIDM::EventPortFinder object. Based on
information available to
that object, it would decide to pass requests on to another
JIDM::EventPortFinder objects.
-
The request would traverse the graph until it reaches the target
JIDM::EventPort object. The
last JIDM::EventPortFinder object in the graph would obtain a
reference to the CosEventChannelAdmin::SupplierAdmin object
in the channel and would return that reference.
-
As a result of this process, a valid reference to a
CosEventChannelAdmin::SupplierAdmin object
would be passed to the managed object which issued the request. Using
this reference,
the managed object is able to register as a push or pull supplier.
-
-
Figure: Finding JIDM::EventPort Objects
JIDM Gateways
Manager-side Gateways
Overview
JIDM gateways must be used by any CORBA Manager Application needing to
interoperate
with managed object domains that are not directly accessible via CORBA
but via other management-specific protocol
such as CMIP or SNMP. By definition, a JIDM gateway
is associated
with only one management protocol. Therefore, we can refer to
CORBA/CMIP
gateways or CORBA/SNMP gateways whenever we want to designate
explicitly which is the
specific management protocol associated with a JIDM gateway at some
given CORBA Manager Application.
A JIDM gateway runs in one CORBA server. However, one or several JIDM
gateways can
co-exist in the same CORBA server. Programs of the CORBA server have
access to both
ORB services and services encapsulating access to managementspecific
protocols provided
by JIDM gateways at the server. Besides, there can be several CORBA
servers containing
JIDM gateways in the same CORBA Manager Application.
Any JIDM gateway typically has several CORBA objects associated with
it (see
Structure of JIDM Manager-side Gateways:
-
A JIDM::ProxyAgentFinder object for establishing connections to
managed object domains
being accessed through the gateway
-
One or several JIDM::EventPort objects for receiving notification
of events from members
of managed object domains being accessed through the gateway
The JIDM::ProxyAgentFinder object is created during startup of the
CORBA server where the
JIDM gateway is going to run. JIDM::EventPort objects at the gateway
may be created during or
after startup of that server. This typically requires the existence
of an EventPortFactory
object at the gateway.
Several JIDM gateways can exist in a CORBA manager and one
JIDM::ProxyAgentFinder object
is typically associated with each of them. All of them would be
registered in a root
JIDM::ProxyAgentFinder object at the CORBA manager (see also
Structure of JIDM Manager-side Gateways).
CORBA managers
can obtain a reference to this local root JIDM::ProxyAgentFinder
object by using standard
CORBA Initialization Services.
-
-
Figure: Structure of JIDM Manager-side Gateways
As a result of establishing a connection through a JIDM gateway, a
JIDM::ProxyAgent object is
created at the gateway. JIDM::ProxyAgent objects created this way are
responsible for:
-
Creating a CosLifeCycle::FactoryFinder object that in turn enables
creation of CORBA factories
that handle creation of managed objects at the domain
-
Creating a CosNaming::NamingContext object that in turn enables
creation of CORBA proxy
managed objects for each member of the domain
-
-
Figure: JIDM::ProxyAgents in a Gateway
Access to Managed Object Domains
The following steps are followed when a CORBA manager tries to
access an external
managed object domain using a JIDM gateway (see
Finding References to JIDM::ProxyAgents in a JIDM Gateway):
-
The CORBA manager invokes the
access_domain()
operation exported by
the JIDM::ProxyAgentFinder
object located at the gateway. Information that unequivocally
identifies the managed
object domain to be accessed is passed in the invocation.
-
As a result of invoking the
access_domain()
operation, a CORBA
JIDM::ProxyAgent object is
created at the gateway. The new JIDM::ProxyAgent object is bound to a
management protocol
communication endpoint (a service access point in OSI environments).
If a specific domain
title was specified in the criteria passed as argument to the
access_domain()
operation, then a
connection is established with the managed object domain. In such a
case, the JIDM::ProxyAgent
is responsible to manage resources associated with the connection.
-
A reference to the JIDM::ProxyAgent object is returned to the CORBA
manager that
requested access to the managed object domain being considered.
-
-
Figure: Finding References to JIDM::ProxyAgents in a JIDM Gateway
Creation of Managed Objects
The following steps are followed when a CORBA manager creates a
managed object at some
domain that is accessible through a JIDM gateway (see
Creating Managed Objects through a JIDM Gateway):
-
The CORBA manager invokes the
get_domain_factory_finder()
operation
exported by the
JIDM::ProxyAgent object.
-
The CORBA manager invokes the
find_factories()
operation exported by
the returned
CosLifeCycle::FactoryFinder object, passing a valid key value.
-
The CosLifeCycle::FactoryFinder object finds references for
appropriate managed object factories
at the JIDM gateway. If there is no managed object factory matching
the key, the CosLifeCycle::FactoryFinder object creates one.
References to managed object
factories are returned to
the CORBA manager.
-
The CORBA manager invokes an operation on the managed object
factory using the
CORBA object reference it obtained. Typically, the CORBA manager
narrows this object
reference to a specific managed object factory interface supported by
the factory (the CosLifeCycle::GenericFactory interface, for example).
-
The CORBA request is received by the JIDM gateway and is translated
into an appropriate
management create request PDU. This create request PDU is sent through
the management
protocol communication endpoint held by the JIDM::ProxyAgent.
-
When the response to the request PDU is received, the invoked
operation returns with the
appropriate result values.
-
If the create operation must return an object reference then a
CORBA proxy managed
object is also created at the gateway.
-
-
Figure: Creating Managed Objects through a JIDM Gateway
Invocation of Operations on Managed Objects
The following steps are followed when a CORBA manager invokes an
operation on a managed
object that is accessible through a JIDM gateway (see
Invoking Operations on a MO through a JIDM Gateway):
-
The CORBA manager invokes the
get_domain_naming_context()
operation
exported by the
JIDM::ProxyAgent object.
-
A CORBA manager invokes the resolve operation exported by the
returned CosNaming::NamingContext object,
passing the name of the managed object upon
which it wants to operate.
-
The CosNaming::NamingContext object finds a reference to the CORBA
object acting as the
proxy of the managed object and returns it to the CORBA manager that
requested it. The
CORBA proxy managed object resides in the JIDM gateway. The
CosNaming::NamingContext
object is responsible for creating the CORBA proxy managed object if
it did not exist at
the gateway, the first time an existing managed object is accessed.
-
The CORBA manager invokes an operation on the managed object using
the CORBA
object reference to the corresponding proxy. IDL stubs or the standard
DII can be used to perform
this action. Whenever IDL stubs are used, the CORBA manager must
narrow the reference,
obtained from the CosNaming::NamingContext, to a specific OMG IDL
interface (the
Printing::ManagedPrinter interface, for example).
-
The CORBA request is received by the JIDM gateway and is translated
into an appropriate
management request PDU. This request PDU is sent through the
management protocol
communication endpoint held by the JIDM::ProxyAgent.
-
When the response to the request PDU is received, the invoked
operation returns with the
appropriate result values.
-
-
Figure: Invoking Operations on a MO through a JIDM Gateway
Event Reception
Events originated at managed object domains are always received
through JIDM::EventPort
objects at CORBA Managers. A mechanism is implemented at any JIDM
gateway that allows
event data received at a management connection endpoint to be
forwarded to the appropriate
JIDM::EventPort object.
As mentioned in
Reception of Events at CORBA Managers,
different strategies to resolve
how CORBA manager
objects finally consume events can be implemented. Just to give an
example, CORBA manager objects can register themselves directly to
JIDM::EventPorts or via some additional event channel.
-
-
Figure: Event Reporting at JIDM Manager-side Gateways
The following steps are followed when a CORBA manager receives an
event through a
JIDM::EventPort located at a gateway (see
Event Reporting at JIDM Manager-side Gateways):
-
During the start up phase of the CORBA Manager Application, one or
more application
objects register themselves either as CosEventComm::PushConsumers or
CosEventComm::PullConsumers in each of the existing JIDM::EventPorts.
-
A PDU containing a notification of an event from a managed object
is received by the
JIDM gateway through some management connection endpoint. This
management connection
endpoint is bound to a specific title and has a JIDM::EventPort object
associated
with it which finally receives the event data carried in the PDU.
-
The appropriate response (if applicable) is sent by the JIDM
gateway back to the application
that reported the event, confirming that the event was received at the
Manager Application.
-
The JIDM::EventPort invokes the push operation exported by all
CosEventComm::PushConsumers
objects connected to it. Data of the event is passed in the invocation
as an
any.
-
The JIDM::EventPort maintains the event until all
CosEventComm::PullConsumers objects connected
to the port pull the event. Data of the event is obtained by consumers
as an
any.
-
CosEventChannelAdmin::EventChannel objects can be connected as
consumers to the event
port. In such a case, manager objects performing management functions
can be connected
to the channel instead of directly to the event ports.
Agent-side Gateways
Overview
JIDM gateways must be used by any CORBA Agent Application needing to
offer a management
interface based on some management-specific protocol such as CMIP or
SNMP but not
CORBA. By definition, a JIDM gateway is associated with one single
management protocol.
Therefore, we can refer to CORBA/CMIP gateways or CORBA/SNMP gateways
whenever
we want to designate explicitly which is the specific management
protocol associated with a
JIDM gateway for some given CORBA Agent Application.
A JIDM gateway runs in one CORBA server. However, one or several JIDM
gateways can
co-exist in the same CORBA server. Programs in this server have access
to both ORB services
and services encapsulating access to management-specific protocols
provided by JIDM gateways
at the server. Besides, there can be several CORBA servers containing
JIDM gateways
in the same CORBA Agent Application.
Any JIDM gateway at a CORBA Agent Application has several objects
associated with it (see
Structure of JIDM Agent-side Gateways):
-
A JIDM::EventPortFinder CORBA object that enables CORBA managed
objects at the agent
application to establish connections to JIDM::EventPort objects at
remote Manager
Applications that are accessible through the gateway.
-
A JIDM::DomainPort object that serves requests issued from remote
Manager Applications
that want to get access to managed objects at the local managed object
domain.
These objects are created during startup of the CORBA server where
the JIDM gateway is
located.
Several JIDM gateways can exist in a CORBA Agent and a
JIDM::EventPortFinder object typically
is associated with each of them. All of them would be registered in a
root JIDM::EventPortFinder
object at the CORBA Agent (see also
Structure of JIDM Agent-side Gateways).
An initial CosLifeCycle::FactoryFinder object and
CosNaming::NamingContext object exist at any
CORBA managed object domain. Whether these two interfaces are exported
by the same
CORBA object or different CORBA objects is an implementation issue.
References to these
CORBA objects can be obtained from a JIDM gateway by using the
standard Initialization
Services and are passed to the JIDM::DomainPort object at creation
time.
-
-
Figure: Structure of JIDM Agent-side Gateways
Handling Access to Managed Objects
A JIDM::DomainPort object resides in the JIDM gateway in order to
handle access to the
managed object domain and serve association request issued from remote
Manager Applications.
Every JIDM::DomainPort object has a title associated with it. This
title is used by remote
Manager Applications to identify the managed object domain associated
with the
JIDM::DomainPort object.
When a new association request is received by the JIDM::DomainPort
object that is in a gateway,
the JIDM::DomainPort object creates a new JIDM::ProxyAgent object.
This object handles CMIS
requests received through the newly established association.
A JIDM::DomainPort object in a JIDM gateway holds references to
initial CosNaming::NamingContext
and CosLifeCycle::FactoryFinder objects located at the managed object
domain where the
JIDM gateway is located. The JIDM::DomainPort object passes copies of
these references to
each JIDM::ProxyAgent object it creates.
-
-
Figure: Access to Local Managed Objects from JIDM Gateway
Creation of Managed Objects
In CORBA Agent Applications, JIDM::ProxyAgent objects receive PDU
indications, perform
the appropriate operations, and return the appropriate PDU responses.
The following steps are
followed each time a create PDU indication is received by a JIDM
gateway:
-
A JIDM::ProxyAgent object receives a management create PDU
indication through the
management connection endpoint it holds.
-
The JIDM::ProxyAgent object finds an appropriate factory by
invoking the
find_factories()
operation provided by a CosLifeCycle::FactoryFinder object.
-
The JIDM::ProxyAgent object narrows the obtained Factory object
reference to a new object
reference associated with a specific factory interface. Next, it
invokes the operation for creating
managed objects exported by the factory being referenced.
-
The Factory object creates a new CORBA managed object, instance of
the managed
object type specified in the management create PDU indication.
-
The Factory object may bind a name (the one passed as the Managed
object instance field
in the management create PDU indication, but in IDL form) to the new
CORBA managed
object.
-
The Factory object may inform other CORBA managed objects, in the
same managed
object domain, that the new managed object has been created.
-
When the operation invoked by the JIDM::ProxyAgent object returns
(or when an exception
is raised), the JIDM::ProxyAgent object constructs and sends an
appropriate create PDU
response to the remote Manager Application.
-
-
Figure: Management Create PDU Indications
Invocation of Operations on Managed Objects
JIDM::ProxyAgent objects receive indications on single objects,
perform the appropriate operations,
and return the appropriate management PDU responses. The following
steps are followed
each time a PDU indication, corresponding to a management operation,
is received by
a JIDM gateway:
-
A JIDM::ProxyAgent object receives a management PDU indication,
referred to a single
managed object, through the management connection endpoint it holds. A
name that
unequivocally identifies the managed object is typically passed in the
indication.
-
The JIDM::ProxyAgent object finds a CORBA object reference to the
target managed object
by invoking the resolve operation exported by a local NamingContext
object. The name of
the target managed object is passed in the invocation, once it is
translated to IDL form.
-
The JIDM::ProxyAgent object invokes the appropriate operation on
the managed object. In
a Dynamic JIDM gateway, this may be accomplished by using the Dynamic
Invocation API
provided by the local ORB.
-
When the management operation invoked by the JIDM::ProxyAgent
object returns (or when
an exception is raised), the JIDM::ProxyAgent object constructs and
sends an appropriate PDU
response to the remote Manager Application.
-
-
Figure: Invoking Operations on Single Managed Objects
Event Reporting
Using operations exported by JIDM::EventPortFinder objects located at
a JIDM gateway,
CORBA managed objects are able to find references to several
CosEventChannelAdmin::SupplierAdmin
objects, each of which points to a JIDM::EventPort associated with
remote managers.
A managed object report events to a given destination (AEtitle) by
registering as a supplier in
the corresponding JIDM::EventPort (via the standard
CosEventChannelAdmin::SupplierAdmin interface
returned by a JIDM::EventPortFinder object) and then supplying
events to that channel.
Note that any managed object may register itself as a
CosEventComm::PushConsumer or a CosEventComm::PullConsumer
in a remote JIDM::EventPort.
As explained in
The JIDM::EventPortFactory Interface,
different strategies to resolve how
CORBA managed objects
finally report events can be implemented.
Sending Event Reports
illustrates one
possible scenario where
CORBA managed objects register themselves as PushSuppliers or
PullSuppliers in a single object
(called EventReporter) which in turn is registered as a PushSupplier
in one or more remote
JIDM::EventPorts. Basic steps are summarized as follows:
-
At creation time, the EventReporter object invokes the
find_event_port()
operation exported by
a JIDM::EventPortFinder object in order to find references associated
with CosEventChannel::SupplierAdmin interfaces
supported by a remote JIDM::EventPort object.
It can try to find
references for:
-
Various JIDM::EventPorts, each of which is bound to one title
contained in the list of
destinations defined for the EventReporter object.
-
A single JIDM::EventPort bound to a wildcard address (only valid if
automatic event
forwarding recipient manager resolution is supported).
-
The JIDM::EventPortFinder object creates a proxy JIDM::EventPort
object if it does not exist in
the gateway. At the time it creates a given proxy JIDM::EventPort
object, it performs the
necessary initial operations to obtain the reference to the
CosEventChannelAdmin::SupplierAdmin
object associated with the new JIDM::EventPort object.
The EventReporter object registers itself as a
CosEventComm::PushSupplier for each destination.
-
The EventReporter registers itself as a CosEventComm::PushConsumer
in every local event channel
that is necessary.
-
CORBA managed objects report events by using the standard event
notification services.
-
Each event notification being generated is finally received by some
event channel, connected
to the EventReporter object.
-
The EventReporter object supplies the event to JIDM::EventPort
objects corresponding to the
different destinations.
-
The proxy associated with each JIDM::EventPort in the JIDM gateway
constructs an appropriate
eventreport request PDU and sends it through the management
communication
endpoint it holds.
-
-
Figure: Sending Event Reports
Footnotes
- 0.
- See the discussion on the term title in
Design Principles.
Why not acquire a nicely bound hard copy?
Click here to return to the publication details or order a copy
of this publication.