tnameserv(1)                                         tnameserv(1)



NAME
       tnameserv - Java IDL name server starter script

SYNOPSIS
       tnameserv -ORBInitialPort port_number

DESCRIPTION
       The CORBA COS (Common Object Services) Naming Service pro-
       vides a tree-like directory  for  object  references  much
       like  a  filesystem  provides  a  directory  structure for
       files.  The Naming Service provided with  Java  IDL  is  a
       simple implementation of the COS Naming Service specifica-
       tion.

       Object references are stored in the namespace by name  and
       each  object reference-name pair is called a name binding.
       Name bindings may  be  organized  under  naming  contexts.
       Naming contexts are themselves name bindings and serve the
       same organizational function as a  file  system  subdirec-
       tory.   All  bindings  are stored under the initial naming
       context.  The initial naming context is the  only  persis-
       tent  binding  in the namespace; the rest of the namespace
       is lost if the Java IDL  name  server  process  halts  and
       restarts.

       For  an  applet  or application to use COS naming, its ORB
       must know the name and port of a  host  running  a  naming
       service  or  have  access  to a stringified initial naming
       context for that name  server.   The  naming  service  can
       either  be the Java IDL name server or another COS-compli-
       ant name service.

USAGE
   Starting the Java IDL Name Server
       You must start the Java IDL name server before an applica-
       tion or applet that uses its naming service.  Installation
       of the Java IDL product creates a script  named  tnameserv
       that  starts  the  Java  IDL  name server.  Start the name
       server so it runs in the background.

       If you do not specify otherwise, the Java IDL name  server
       listens  on  port  900  for the bootstrap protocol used to
       implement   the   ORB   resolve_initial_references()   and
       list_initial_references()  methods.   Specify  a different
       port, for example, 1050, as follows:

              example% tnameserv -ORBInitialPort 1050

       Clients of the name server must be made aware of  the  new
       port number.  Do this by setting the org.omg.CORBA.ORBIni-
       tialPort property to the new port number when creating the
       ORB object.

   Stopping the Java IDL Name Server
       To stop the Java IDL name server, use the relevant operat-
       ing system command, such as kill(1).  Note that names reg-
       istered  with the Java IDL name service disappear when the
       server is terminated.

   Sample Client: Adding Objects
       The following sample program illustrates how to add  names
       to  the  namespace.   It  is  a self-contained Name Server
       client that creates the following simple tree.

               Initial
            Naming Context
                   \
                    \
          plans      personal
                      \
                       \
               calendar   schedule

       In this example, "plans" is an object reference and  "per-
       sonal" is a naming context that contains two object refer-
       ences: "calendar" and "schedule".

       import java.util.Properties;
       import org.omg.CORBA.*;
       import org.omg.CosNaming.*;

       public class NameClient
       {
          public static void main(String args[])
          {
             try {

       In the above section, Starting the Java IDL  Name  Server,
       the  nameserver  was  started on port 1050.  The following
       code ensures that the client program is aware of this port
       number.

               Properties props = new Properties();
               props.put("org.omg.CORBA.ORBInitialPort", "1050");
               ORB orb = ORB.init(args, props);

       The  following code obtains the initial naming context and
       assigns it to ctx.  The second  line  copies  ctx  into  a
       dummy  object  reference,  objref,  that we will attach to
       various names and add into the namespace.

               NamingContext ctx = NamingContextHelper.narrow
                   (orb.resolve_initial_references("NameService"));
               NamingContext objref = ctx;

       The following code creates a name "plans" of  type  "text"
       and  binds  it  to our dummy object reference.  "plans" is
       then added under the initial naming context using  rebind.
       The  rebind  method allows us to run this program over and
       over again without getting the  exceptions  we  would  get
       from using bind.

               NameComponent nc1 = new NameComponent("plans", "text");
               NameComponent[] name1 = {nc1};
               ctx.rebind(name1, objref);
               System.out.println("plans rebind sucessful!");

       The  following  code creates a naming context called "Per-
       sonal" of type "directory".  The resulting  object  refer-
       ence,  ctx2, is bound to the name and added under the ini-
       tial naming context.

               NameComponent nc2 = new NameComponent("Personal", "directory");
               NameComponent[] name2 = {nc2};
               NamingContext ctx2 = ctx.bind_new_context(name2);
               System.out.println("new naming context added..");

       The remainder of the code binds the dummy object reference
       using  the names "schedule" and "calendar" under the "Per-
       sonal" naming context (ctx2).

               NameComponent nc3 = new NameComponent("schedule", "text");
               NameComponent[] name3 = {nc3};
               ctx2.rebind(name3, objref);
               System.out.println("schedule rebind sucessful!");

               NameComponent nc4 = new NameComponent("calender", "text");
               NameComponent[] name4 = {nc4};
               ctx2.rebind(name4, objref);
               System.out.println("calender rebind sucessful!");

           } catch (Exception e) {
               e.printStackTrace(System.err);
           }
         }
       }


   Sample Client: Browsing the Namespace
       The following sample program illustrates how to browse the
       namespace.

       import java.util.Properties;
       import org.omg.CORBA.*;
       import org.omg.CosNaming.*;

       public class NameClientList
       {
          public static void main(String args[])
          {
             try {

       In  the  above section, Starting the Java IDL Name Server,
       the nameserver was started on port  1050.   The  following
       code ensures that the client program is aware of this port
       number.

               Properties props = new Properties();
               props.put("org.omg.CORBA.ORBInitialPort", "1050");
               ORB orb = ORB.init(args, props);

       The following code obtains the initial naming context.

               NamingContext nc = NamingContextHelper.narrow
                  (orb.resolve_initial_references("NameService"));

       The list method lists the bindings in the naming  context.
       In  this case, up to 1000 bindings from the initial naming
       context will be returned  in  the  BindingListHolder;  any
       remaining  bindings  are  returned  in  the  BindingItera-
       torHolder.

               BindingListHolder bl = new BindingListHolder();
               BindingIteratorHolder blIt= new BindingIteratorHolder();
               nc.list(1000, bl, blIt);

       The following code gets the array of bindings out  of  the
       returned BindingListHolder.  If there are no bindings, the
       program ends.

               Binding bindings[] = bl.value;
               if (bindings.length == 0) return;

       The remainder of the code loops through the  bindings  and
       prints the names out.

               for (int i=0; i < bindings.length; i++) {

                   // get the object reference for each binding
                   org.omg.CORBA.Object obj = nc.resolve
                            (bindings[i].binding_name);
                   String objStr = orb.object_to_string(obj);
                   int lastIx = bindings[i].binding_name.length-1;

                   // check to see if this is a naming context
                   if (bindings[i].binding_type == BindingType.ncontext) {
                     System.out.println
                            ("Context: " + bindings[i].binding_name[lastIx].id);
                   } else {
                       System.out.println
                              ("Object: " + bindings[i].binding_name[lastIx].id);
                   }
               }

              } catch (Exception e) {
               e.printStackTrace(System.err);
              }
          }
       }


SEE ALSO
       kill(1)



                           14 July 2000              tnameserv(1)