Previous Table of Contents Next


4.5.1 ORB Initialization


   When an application requires a CORBA environment it needs a mechanism to get the ORB pseudo-object reference and possibly an OA object reference (such as the root POA). This serves two purposes. First, it initializes an application into the ORB and OA environments. Second, it returns the ORB pseudo-object reference and the OA object reference to the application for use in future ORB and OA operations.

   The ORB and OA initialization operations must be ordered with ORB occurring before OA: an application cannot call OA initialization routines until ORB initialization routines have been called for the given ORB. The operation to initialize an application in the ORB and get its pseudo-object reference is not performed on an object. This is because applications do not initially have an object on which to invoke operations. The ORB initialization operation is an application’s bootstrap call into the CORBA world. The ORB_init call is part of the CORBA module but not part of the ORB interface.

   Applications can be initialized in one or more ORBs. When an ORB initialization is complete, its pseudo reference is returned and can be used to obtain other references for that ORB.

   In order to obtain an ORB pseudo-object reference, applications call the ORB_init operation. The parameters to the call comprise an identifier for the ORB for which the pseudo-object reference is required, and an arg_list, which is used to allow environment-specific data to be passed into the call. PIDL for the ORB initialization is as follows:

   // PIDL

   module CORBA { typedef sequence <string> arg_list; ORB ORB_init (inout arg_list argv, in ORBid orb_identifier);

   };

   The identifier for the ORB will be a name of type CORBA::ORBid. All ORBid strings other than the empty string are allocated by ORB administrators and are not managed by the OMG. ORB administration is the responsibility of each ORB supplier. ORB suppliers may optionally delegate this responsibility. ORBid strings other than the empty string are intended to be used to uniquely identify each ORB used within the same address space in a multi-ORB application. These special ORBid strings are specific to each ORB implementation and the ORB administrator is responsible for ensuring that the names are unambiguous.

   If an empty ORBid string is passed to ORB_init, then the arg_list arguments shall be examined to determine if they indicate an ORB reference that should be returned. This is achieved by searching the arg_list parameters for one preceded by “-ORBid? for example, “-ORBid example_orb? (the white space after the “-ORBid? tag is ignored) or “-ORBidMyFavoriteORB? (with no white space following the “-ORBid? tag). Alternatively, two sequential parameters with the first being the string “-ORBid? indicates that the second is to be treated as an ORBid parameter. If an empty string is passed and no arg_list parameters indicate the ORB reference to be returned, the default ORB for the environment will be returned.

   Other parameters of significance to the ORB can also be identified in arg_list, for example, “Hostname,? “SpawnedServer,? and so forth. To allow for other parameters to be specified without causing applications to be re-written, it is necessary to specify the parameter format that ORB parameters may take. In general, parameters shall be formatted as either one single arg_list parameter:

   –ORB<suffix><optional white space> <value>

   or as two sequential arg_list parameters:

   -ORB<suffix>

   <value>

   Regardless of whether an empty or non-empty ORBid string is passed to ORB_init, the arg_list arguments are examined to determine if any ORB parameters are given. If a non-empty ORBid string is passed to ORB_init, all ORBid parameters in the arg_list are ignored. All other -ORB<suffix> parameters in the arg_list may be of significance during the ORB initialization process.

   Before ORB_init returns, it will remove from the arg_list parameter all strings that match the -ORB<suffix> pattern described above and that are recognized by that ORB implementation, along with any associated sequential parameter strings. If any strings in arg_list that match this pattern are not recognized by the ORB implementation, ORB_init will raise the BAD_PARAM system exception instead.

   The ORB_init operation may be called any number of times and shall return the same ORB reference when the same ORBid string is passed, either explicitly as an argument to ORB_init or through the arg_list. All other -ORB<suffix> parameters in the arg_list may be considered on subsequent calls to ORB_init.

   Note – Whenever an ORB_init argument of the form -ORBxxx is specified, it is understood that the argument may be represented in different ways in different languages. For example, in Java -ORBxxx is equivalent to a property named org.omg.CORBA.ORBxxx.

   4.5.1.1 Server ID

   A Server ID must uniquely identify a server to an IMR. This specification only requires unique identification using a string of some kind. We do not intend to make more specific requirements for the structure of a server ID.

   The server ID may be specified by an ORB_init argument of the form

   -ORBServerId

   The value assigned to this property is a string. All templates created in this ORB will return this server ID in the server_id attribute.

   It is required that all ORBs in the same server share the same server ID. Specific environments may choose to implement -ORBServerId in ways that automatically enforce this requirement.

   For example, the org.omg.CORBA.ServerId system property may be set to the server ID in Java when a Java server is activated. This system property is then picked up as part of the ORB_init call for every ORB created in the server.

   4.5.1.2 Server Endpoint

   The server endpoint information is passed into ORB_init by an argument of the form

   -ORBListenEndpoints <endpoints>

   The format of the <endpoints> argument is proprietary. All that is required by this specification is that each time ORB_init is called with the same value for this argument, the resulting ORB will listen for requests on the same set of endpoints, so that persistent object references for the ORB will continue to function correctly.

   4.5.1.3 Starting Servers with No Proprietary Server Activation Support

   Any server started with the flag:

   -ORBNoProprietaryActivation

   shall avoid the use of any proprietary activation framework.