User's Guide

The Implementation Repository is still kind of in a state of flux and will probably change quite a bit this semester. Right now it works, although it is still a bit inflexible. Most of this document will change, so make sure to get the version of this document that is paired with the version of the IR that you are using.


What does the server need to do.

The IR needs information about the server to be able to direct to the right place. The current scheme uses a regular persistent IOR and replaces the host and port with that of the IR. Then when the call comes into the IR, it sends back a LOCATION_FORWARD to the client and directs it to the correct server (after starting it if necessary).

So the server needs to know the IOR of the IR in order to change the host and port in it to that of the IR. The information the IR needs to receive from the server is its poa name (which it uses as an identifier) and commands used to restart the server.


The IR_Helper class

Most of the work on the server is done in the IR_Helper class. The first thing it expects is to have the implrepo.ior file in the current directory. This file contains the IOR of the IR. IR_Helper then uses this to register itself.

Here is the small checklist I went through when I used the IR_Helper class in Airplane Test. The Cubit-style references are just refering to any server that has used the structure of the IDL_Cubit test (a lot of TAO's examples are like this).

  • Make yourself an IR_Helper object.  (If you follow the Cubit-style architecture, this will be a pointer in the Server_i class).
  • After you create the POA, construct the IR_Helper and pass it the relevant information. (Cubit-style: assign a new object within Server_i::init)
  • If you need to register, call register_server () (Cubit-style: add another option "-r" and have it set a flag.  Within Server_i::init call register_server ())
  • After you create and register your objects, call change_object to redo the references.   Then you can output the new IOR.  (Cubit-style: still within Server_i::init)
  • Right before ORB::run call notify_startup and afterwards, call notify shutdown (Cubit-style: within Server_i::run)

  • To use, or not to use the IR

    If you look at the tests, they use -r and -i flags to determine how to use the IR. The -i flag turns on the use of the Implementation Repository (so the server can be tested without the IR). The -r flag is used to register the entry in the IR for the server. Note that -r will not work in the example without -i. This does require some more work on the server side, so if you choose you can just use the IR all the time and only worry about -r.


    The implrepo.conf file

    Because with the way it is set up, and the current over-restrictiveness of the POA locks, the IR requires a special configuration file, implrepo.conf, which you need to pass to the IR via -ORBsvcconf implrepo.conf flag


    Last update to this document: $Date: 1999/01/15 05:51:07 $

    Back to Implementation Repository