FileDocCategorySizeDatePackage
TransientNameServer.javaAPI DocJava SE 5 API7909Fri Aug 26 14:54:26 BST 2005com.sun.corba.se.impl.naming.cosnaming

TransientNameServer

public class TransientNameServer extends Object
Class TransientNameServer is a standalone application which implements a transient name service. It uses the TransientNameService class for the name service implementation, and the BootstrapServer for implementing bootstrapping, i.e., to get the initial NamingContext.

The BootstrapServer uses a Properties object specify the initial service object references supported; such as Properties object is created containing only a "NameService" entry together with the stringified object reference for the initial NamingContext. The BootstrapServer's listening port is set by first checking the supplied arguments to the name server (-ORBInitialPort), and if not set, defaults to the standard port number. The BootstrapServer is created supplying the Properties object, using no external File object for storage, and the derived initial port number.

see
TransientNameService
see
BootstrapServer

Fields Summary
private static boolean
debug
static NamingSystemException
wrapper
Constructors Summary
private TransientNameServer()
Private constructor since no object of this type should be instantiated.

Methods Summary
public static voidinitDebug(java.lang.String[] args)

	// If debug was compiled to be true for testing purposes,
	// don't change it.
	if (debug)
	    return ;
	    
	for (int ctr=0; ctr<args.length; ctr++)
	    if (args[ctr].equalsIgnoreCase( "-debug" )) {
		debug = true ;
	    return ;
        }
	debug = false ;
    
private static org.omg.CORBA.ObjectinitializeRootNamingContext(org.omg.CORBA.ORB orb)

        org.omg.CORBA.Object rootContext = null;
        try {
	    com.sun.corba.se.spi.orb.ORB coreORB =
		(com.sun.corba.se.spi.orb.ORB)orb ; 
		
            TransientNameService tns = new TransientNameService(coreORB );
            return tns.initialNamingContext();
        } catch (org.omg.CORBA.SystemException e) {
	    throw wrapper.transNsCannotCreateInitialNcSys( e ) ;
        } catch (Exception e) {
	    throw wrapper.transNsCannotCreateInitialNc( e ) ;
        }
    
public static voidmain(java.lang.String[] args)
Main startup routine. It instantiates a TransientNameService object and a BootstrapServer object, and then allows invocations to happen.

param
args an array of strings representing the startup arguments.

	initDebug( args ) ;

        boolean invalidHostOption = false;
        boolean orbInitialPort0 = false;

	// Determine the initial bootstrap port to use
	int initialPort = 0;
	try {
	    trace( "Transient name server started with args " + args ) ;

	    // Create an ORB object
	    Properties props = System.getProperties() ;

	    props.put( ORBConstants.SERVER_ID_PROPERTY, ORBConstants.NAME_SERVICE_SERVER_ID ) ;
            props.put( "org.omg.CORBA.ORBClass", 
                "com.sun.corba.se.impl.orb.ORBImpl" );

	    try {
		// Try environment
		String ips = System.getProperty( ORBConstants.INITIAL_PORT_PROPERTY ) ;
		if (ips != null && ips.length() > 0 ) {
		    initialPort = java.lang.Integer.parseInt(ips);
                    // -Dorg.omg.CORBA.ORBInitialPort=0 is invalid
                    if( initialPort == 0 ) {
                        orbInitialPort0 = true;
			throw wrapper.transientNameServerBadPort() ;
                    }
                }
		String hostName = 
                    System.getProperty( ORBConstants.INITIAL_HOST_PROPERTY ) ;
                if( hostName != null ) {
                    invalidHostOption = true;
		    throw wrapper.transientNameServerBadHost() ;
                }
	    } catch (java.lang.NumberFormatException e) {
		// do nothing
	    }

	    // Let arguments override
	    for (int i=0;i<args.length;i++) {
		// Was the initial port specified?
		if (args[i].equals("-ORBInitialPort") &&
		    i < args.length-1) {
		    initialPort = java.lang.Integer.parseInt(args[i+1]);
                    // -ORBInitialPort 0 is invalid
                    if( initialPort == 0 ) {
                        orbInitialPort0 = true;
			throw wrapper.transientNameServerBadPort() ;
                    }
		}
                if (args[i].equals("-ORBInitialHost" ) ) { 
                    invalidHostOption = true;
		    throw wrapper.transientNameServerBadHost() ;
                }
	    }

            // If initialPort is not set, then we need to set the Default 
            // Initial Port Property for the ORB
            if( initialPort == 0 ) {
                initialPort = ORBConstants.DEFAULT_INITIAL_PORT;
                props.put( ORBConstants.INITIAL_PORT_PROPERTY,
                    java.lang.Integer.toString(initialPort) );
            }

            // Set -ORBInitialPort = Persistent Server Port so that ORBImpl
            // will start Boot Strap.
            props.put( ORBConstants.PERSISTENT_SERVER_PORT_PROPERTY, 
               java.lang.Integer.toString(initialPort) );

	    org.omg.CORBA.ORB corb = ORB.init( args, props ) ;
	    trace( "ORB object returned from init: " + corb ) ;
  
            org.omg.CORBA.Object ns = initializeRootNamingContext( corb ) ;
	    ((com.sun.corba.se.org.omg.CORBA.ORB)corb).register_initial_reference( 
		"NamingService", ns ) ;

	    String stringifiedIOR = null;
 
            if( ns != null ) {
	        stringifiedIOR = corb.object_to_string(ns) ;
            } else {
	         NamingUtils.errprint(CorbaResourceUtil.getText(
                     "tnameserv.exception", initialPort));
                 NamingUtils.errprint(CorbaResourceUtil.getText(
                     "tnameserv.usage"));
                System.exit( 1 );
            }

	    trace( "name service created" ) ;

	    // This is used for handshaking by the IBM test framework!
	    // Do not modify, unless another synchronization protocol is 
	    // used to replace this hack!

	    System.out.println(CorbaResourceUtil.getText(
                "tnameserv.hs1", stringifiedIOR));
            System.out.println(CorbaResourceUtil.getText(
                "tnameserv.hs2", initialPort));
            System.out.println(CorbaResourceUtil.getText("tnameserv.hs3"));

	    // Serve objects.
	    java.lang.Object sync = new java.lang.Object();
	    synchronized (sync) {sync.wait();}
	} catch (Exception e) {
	    if( invalidHostOption ) {
                // Let the User Know that -ORBInitialHost is not valid for
                // tnameserver
                NamingUtils.errprint( CorbaResourceUtil.getText(
                    "tnameserv.invalidhostoption" ) );
            } else if( orbInitialPort0 ) {
                // Let the User Know that -ORBInitialPort 0 is not valid for
                // tnameserver
                NamingUtils.errprint( CorbaResourceUtil.getText(
                    "tnameserv.orbinitialport0" ));
            } else {
	        NamingUtils.errprint(CorbaResourceUtil.getText(
                    "tnameserv.exception", initialPort));
                NamingUtils.errprint(CorbaResourceUtil.getText(
                    "tnameserv.usage"));
            }

	    e.printStackTrace() ;
	}
    
public static voidtrace(java.lang.String msg)


           
	if (debug)
	    System.out.println( msg ) ;