NonStop Software

CORBA::Object

Previous Topic | Next Topic | Contents | Index
Getting Started Guide | Administration Guide | Programmer's Guide

Subtopics

CORBA::Object Syntax
CORBA::Object Methods

All classes created from an IDL inherit the CORBA::Object. The CORBA::Object interface defines operations that can be invoked on any object reference.

CORBA::Object Syntax

The IDL definition for CORBA::Object is:

module CORBA _{
Interface Object
{
   boolean           _is_a(in string logical_type_id);
   boolean           _is_equivalent(in Object other_obj);
   boolean           _non_existent( );
   InterfaceDef      _get_interface( );
   static Objectr    _duplicate(object_prt obj);
   void              release ( );
   static Objectr    _narrow(object_prt obj);
   static Object     is_nil(  );
};
}

The C++ class definition created for the CORBA::Object IDL is:

Class Object
{
   boolean             _is_a(in string logical_type_id);
   boolean             _is_equivalent(in Object other_obj);
   boolean             _non_existent( );
   InterfaceDef_ptr    _get_interface( );
   static Object_ptr   _duplicate(object_prt obj);
   void                release ( );
   static Object_ptr   _narrow(object_prt obj);
   static Object_ptr   is_nil( );
};

CORBA::Object Methods

The following methods can be performed on any object created from an IDL object:

_duplicate (Object_ptr Obj);

When you need more than one copy of an object reference, the client may create a duplicate. If the given object reference is nil, the _duplicate function returns a nil object reference. The object returned by this call should be freed using CORBA::release or should be assigned to CORBA::Object_var for automatic destruction.


Note: The object implementation is not involved in creating the duplicate, and the implementation cannot distinguish whether the original or a duplicate was used in a particular request. For example:

CORBA::Object_ptr Account2 =
  CORBA::Object::_duplicate(Account);

_release( )

When an object reference is no longer needed by a program, its storage may be reclaimed by use of the release operation.


Note: The object implementation is not involved and neither the object itself nor any other reference to it is affected by the release operation. For example:

Account2:: release( );

_get_interface

An operation on the object reference, get_interface, returns an object in the Interface Repository, which provides type information that may be useful to a program.

_is_a

This member function is used to determine if an object is an instance of the repository type that you specify in the logical_type_id parameter. It facilitates maintaining type-safety for object references over the scope of an ORB. It returns TRUE if the object is an instance of the specified type, or if the object is an ancestor of the "most derived" type of that object.

For example:

CORBA::Boolean ab = op->_is_a("Account");

_is_equivalent

This member function is used to determine if two object references are equivalent, so far as the ORB can easily determine. It returns TRUE if the object reference is equivalent to the object reference you pass as a parameter. If two object references are identical, they are equivalent. Two different object references that refer to the same object are also equivalent.

For example:

CORBA::Object_ptr account2 = CORBA::Object::_duplicate(account1);
CORBA::Boolean b = account1->_is_equivalent(account2);

_nil( )

This member function returns a reference to a nil object belonging to a given pseudo-object class. To test whether a given object is nil, use the appropriate CORBA::is_nil member function. Calling the CORBA:is_nil routine on any _nil member function always yields CORBA_TRUE.

For example:

CORBA::Object_ptr op = CORBA::Object::_nil( );

is_nil

An object reference whose value is OBJECT_NIL denotes no object. You can test an object reference for this value by using the is_nil operation. The object implementation is not involved in the nil test.

For example:

CORBA::Object_ptr op = CORBA::Object::_nil( );
If (op::is_nil) { /* no object */ }

_non_existent( )

This member function may be used to determine if an object (that is, a proxy object) has been destroyed. It does this without invoking any application-level operation on the object and so will never affect the object itself. It returns TRUE (rather than raising CORBA::OBJECT_NOT_EXIST) if the ORB knows authoritatively that the object does not exist; otherwise, it returns FALSE.

_narrow(obj ref)

This member function defines a static member function named _narrow that returns a new object reference given an existing reference. Like CORBA::Object_duplicate, this function returns a nil object reference if the given reference is nil. Unlike _duplicate, the parameter to _narrow is a reference of an object of any interface type (object_ptr).

If the (runtime) type of the parameter object can be widened to the requested interface type, _narrow will return a valid object reference. Otherwise, _narrow returns a nil object reference.

If successful, _narrow creates a new object reference and does not consume the given object reference; the caller is responsible for releasing both the original and the new reference.

The _narrow operation can throw CORBA system exceptions.

For example:

Savings_ptr ps = new Savings("1234")
Account_ptr ap = Account::_narrow(ps);

unsigned long hash(in unsigned long maximum)

Object references are associated with ORB internal identifiers, which may indirectly be accessed by applications using the hash( ) operation. The value of this identifier does not change during the lifetime of the object reference, and so neither will any hash function of that identifier.

The value of this operation is not guaranteed to be unique; that is, another object reference may return the same hash value. However, if two object references hash differently, applications can determine that the two object references are not identical.

boolean is_equivalent(in Object other_object)

The is_equivalent( ) operation is used to determine if two object references are equivalent, so far as the ORB can easily determine. It returns TRUE if the target object reference is known to be equivalent to the other object reference passed as its parameter; otherwise, it returns FALSE.

If two object references are identical, they are equivalent. Two different object references that refer to the same object are also equivalent.


Previous Topic | Next Topic | Contents | Top
Getting Started Guide | Administration Guide | Programmer's Guide
Bibliography | Index | Glossary
© Tandem, a division of Compaq. All rights reserved. Legal notices.