This package defines GIOP tools for creating the applications that use this
protocol. It provides necessary support for org.omg.* and javax.rmi.* 
packages.

All GIOP tools support the --help option.

The list of the currently available tools:

* GRMIC -                RMI-IIOP stub and tie generator.
* NameService  -         GIOP transient naming service (this tool is called 
                         tnameserv in Sun's package).
* NameServicePersistent
               -         GIOP persistent naming service (this tool is called 
                         orbd in Sun's package).
* IorParser -            Parses the stringified form of the interoperable 
                         object references (IOR's).
* RMIC -                 RMI stub and tie source code generator (complements
                         the ASM based bytecode generator in the separate
                         tools package).