FileDocCategorySizeDatePackage
NamingContextImpl.javaAPI DocJava SE 5 API52870Fri Aug 26 14:54:26 BST 2005com.sun.corba.se.impl.naming.pcosnaming

NamingContextImpl

public class NamingContextImpl extends NamingContextExtPOA implements Serializable, com.sun.corba.se.impl.naming.cosnaming.NamingContextDataStore
Class NamingContextImpl implements the org.omg.CosNaming::NamingContext and NamingContextExt interface.

The operations bind(), rebind(), bind_context() and rebind_context() are all really implemented by doBind(). resolve() is really implemented by doResolve(), unbind() by doUnbind(). list(), new_context() and destroy() uses the NamingContextDataStore interface directly. All the doX() methods are public static. They synchronize on the NamingContextDataStore object.

None of the methods here are Synchronized because These methods will be invoked from Super class's doBind( ), doResolve( ) which are already Synchronized.

Fields Summary
private transient com.sun.corba.se.spi.orb.ORB
orb
private final String
objKey
private final Hashtable
theHashtable
private transient NameService
theNameServiceHandle
private transient ServantManagerImpl
theServantManagerImplHandle
private transient com.sun.corba.se.impl.naming.cosnaming.InterOperableNamingImpl
insImpl
private transient com.sun.corba.se.impl.logging.NamingSystemException
readWrapper
private transient com.sun.corba.se.impl.logging.NamingSystemException
updateWrapper
private static org.omg.PortableServer.POA
biPOA
private static boolean
debug
Constructors Summary
public NamingContextImpl(com.sun.corba.se.spi.orb.ORB orb, String objKey, NameService theNameService, ServantManagerImpl theServantManagerImpl)
Create a naming context servant. Runs the super constructor.

param
orb an ORB object.
param
objKey as String
param
TheNameService as NameService
param
TheServantManagerImpl as ServantManagerImpl
exception
java.lang.Exception a Java exception.


                                        

         
             
	 
    
	super();

	this.orb = orb;
	readWrapper = NamingSystemException.get( orb, 
	    CORBALogDomains.NAMING_READ ) ;
	updateWrapper = NamingSystemException.get( orb, 
	    CORBALogDomains.NAMING_UPDATE ) ;

	debug = true ; // orb.namingDebugFlag ;
	this.objKey = objKey;
	theNameServiceHandle = theNameService;
	theServantManagerImplHandle = theServantManagerImpl;
	insImpl = 
            new com.sun.corba.se.impl.naming.cosnaming.InterOperableNamingImpl(); 
    
Methods Summary
public voidBind(NameComponent n, org.omg.CORBA.Object obj, BindingType bt)
Implements all flavors of binding( bind and bindcontext) This method will be called from the superclass's doBind( ) method which takes care of all the conditions before calling this method. i.e., It checks whether the Name is already Bounded, Then in the case of rebind it calls Unbind first. This method does one level binding only, To have n-level binding with compound names, doBind( ) calls this method recursively.

param
n a sequence of NameComponents which is the name under which the object will be bound.
param
obj the object reference to be bound.
param
bt Type of binding (as object or as context).
exception
org.omg.CosNaming.NamingContextPackage.NotFound raised if the NameComoponent list is invalid
exception
org.omg.CosNaming.NamingContextPackage.CannotProceed Could not proceed in resolving the Name from the given NameComponent
exception
org.omg.CosNaming.NamingContextPackage.AlreadyBound An object is already bound under the supplied name.
exception
org.omg.CORBA.SystemException One of a fixed set of CORBA system exceptions
see
Resolve
see
Unbind

	if( obj == null ) {
	    // Raise a Valid Exception and Return
	    return;
	}

	InternalBindingKey key = new InternalBindingKey(n);
	InternalBindingValue value;

	try {
	    if( bt.value() == BindingType._nobject ) {
		// If the BindingType is an ObjectRef then Stringify this ref and
		// Store it in InternalBindingValue instance. This is required 
		// because the Object References has to be stored in file
		value = new InternalBindingValue(bt, orb.object_to_string(obj) );
		value.setObjectRef( obj );
	    } else {
		// If the BindingType is a NamingContext then get it's object key
		// from the NameService and store it in the Internal Binding Value instance
		String theNCKey = theNameServiceHandle.getObjectKey( obj );
		value = new InternalBindingValue( bt, theNCKey );
		value.setObjectRef( obj );
	    }

	    InternalBindingValue oldValue =
		(InternalBindingValue)this.theHashtable.put(key,value);

	    if( oldValue != null) {
		// There was an entry with this name in the Hashtable and hence throw CTX_ALREADY_BOUND
		// exception
		throw updateWrapper.namingCtxRebindAlreadyBound() ;
	    } else {
		try {
		    // Everything went smooth so update the NamingContext file with the
		    // latest Hashtable image
		    theServantManagerImplHandle.updateContext( objKey, this );
		} catch( Exception e ) {
		    // Something went wrong while updating the context
		    // so speak the error
		    throw updateWrapper.bindUpdateContextFailed( e ) ;
		}
	    }
	} catch( Exception e ) {
	    // Something went wrong while Binding the Object Reference
	    // Speak the error again.
	    throw updateWrapper.bindFailure( e ) ;
	}
    
public voidDestroy()
Destroys the NamingContext.

	// XXX note that orb.disconnect is illegal here, since the
	// POA is used.  However, there may be some associated state
	// that needs to be cleaned up in ServerManagerImpl which we will
	// look into further at another time.
	/*
	// XXX This needs to be replaced by cleaning up the
	// file that backs up the naming context.  No explicit
	// action is necessary at the POA level, since this is
	// created with the non-retain policy.
	/*
	try { orb.disconnect(
	    theNameServiceHandle.getObjectReferenceFromKey( this.objKey ) );
	} catch( org.omg.CORBA.SystemException e ) {
	    throw e;
	} catch( Exception e ) {
	    throw updateWrapper.transNcDestroyGotEx( e ) ;
	}
	*/
    
public booleanIsEmpty()
This is a Debugging Method

	return this.theHashtable.isEmpty();
    
public voidList(int how_many, BindingListHolder bl, BindingIteratorHolder bi)
List the contents of this NamingContext. It creates a new PersistentBindingIterator object and passes it a clone of the hash table and an orb object. It then uses the newly created object to return the required number of bindings.

param
how_many The number of requested bindings in the BindingList.
param
bl The BindingList as an out parameter.
param
bi The BindingIterator as an out parameter.
exception
org.omg.CORBA.SystemException One of a fixed set of CORBA system exceptions.

        if( biPOA == null ) {
            createbiPOA( );
        }
        try {
            PersistentBindingIterator bindingIterator =
                new PersistentBindingIterator(this.orb,
                (Hashtable)this.theHashtable.clone(), biPOA);
            // Have it set the binding list
            bindingIterator.list(how_many,bl);

            byte[] objectId = biPOA.activate_object( bindingIterator );
            org.omg.CORBA.Object obj = biPOA.id_to_reference( objectId );

            // Get the object reference for the binding iterator servant
            org.omg.CosNaming.BindingIterator bindingRef =
                org.omg.CosNaming.BindingIteratorHelper.narrow( obj );

            bi.value = bindingRef;
        } catch (org.omg.CORBA.SystemException e) {
            throw e;
        } catch( Exception e ) {
	    throw readWrapper.transNcListGotExc( e ) ;
        }
    
public NamingContextNewContext()
Create a NamingContext object and return its object reference.

return
an object reference for a new NamingContext object implemented by this Name Server.
exception
org.omg.CORBA.SystemException One of a fixed set of CORBA system exceptions.

	try {
	    return  theNameServiceHandle.NewContext( );
	} catch( org.omg.CORBA.SystemException e ) {
	    throw e;
	} catch( Exception e ) {
	    throw updateWrapper.transNcNewctxGotExc( e ) ;
	}
     
public org.omg.CORBA.ObjectResolve(NameComponent n, BindingTypeHolder bth)
This method resolves the NamingContext or Object Reference for one level The doResolve( ) method calls Resolve( ) recursively to resolve n level Names.

param
n a sequence of NameComponents which is the name to be resolved.
param
bt Type of binding (as object or as context).
return
the object reference bound under the supplied name.
exception
org.omg.CosNaming.NamingContextPackage.NotFound Neither a NamingContext or a Corba Object reference not found under this Name
exception
org.omg.CosNaming.NamingContextPackage.CannotProceed Could not proceed in resolving the the supplied name.
exception
org.omg.CosNaming.NamingContextPackage.InvalidName The supplied name is invalid (i.e., has length less than 1).
exception
org.omg.CORBA.SystemException One of a fixed set of CORBA system exceptions.
see
Bind

	if( ( n.id.length() == 0 ) &&( n.kind.length() == 0 ) ) {
	    // If the NameComponent list has no entry then it means the current
	    // context was requested
	    bth.value = BindingType.ncontext;
	    return theNameServiceHandle.getObjectReferenceFromKey( 	
		this.objKey );
	}

	InternalBindingKey key = new InternalBindingKey(n);
	InternalBindingValue value = 
            (InternalBindingValue) this.theHashtable.get(key);

	if( value == null ) {
	    // No entry was found for the given name and hence return NULL 
	    // NamingContextDataStore throws appropriate exception if
	    // required.
	    return null;
	}

	Object theObjectFromStringifiedReference = null;
	bth.value = value.theBindingType;

	try {
	    // Check whether the entry found in the Hashtable starts with NC
	    // Which means it's a name context. So get the NamingContext reference
	    // from ServantManager, which would either return from the cache or
	    // read it from the File.
	    if( value.strObjectRef.startsWith( "NC" ) ) {
		bth.value = BindingType.ncontext;
		return theNameServiceHandle.getObjectReferenceFromKey( value.strObjectRef );
	    } else { 
		// Else, It is a Object Reference. Check whether Object Reference
		// can be obtained directly, If not then convert the stringified
		// reference to object and return.
		theObjectFromStringifiedReference = value.getObjectRef( );

		if (theObjectFromStringifiedReference == null ) {
		    try {
			theObjectFromStringifiedReference = 
			orb.string_to_object( value.strObjectRef );  	
			value.setObjectRef( theObjectFromStringifiedReference );
		    } catch( Exception e ) {
			throw readWrapper.resolveConversionFailure( 
			    CompletionStatus.COMPLETED_MAYBE, e );
		    }
		}
	    }
	} catch ( Exception e ) {
	    throw readWrapper.resolveFailure( 
		CompletionStatus.COMPLETED_MAYBE, e );
	}

	return theObjectFromStringifiedReference;
    
public org.omg.CORBA.ObjectUnbind(NameComponent n)
This method Unbinds the NamingContext or Object Reference for one level The doUnbind( ) method from superclass calls Unbind() to recursively Unbind using compound Names.

param
n a sequence of NameComponents which is the name to be resolved.
return
the object reference bound under the supplied name.
exception
org.omg.CosNaming.NamingContextPackage.NotFound Neither a NamingContext or a Corba Object reference not found under this Name
exception
org.omg.CosNaming.NamingContextPackage.CannotProceed Could not proceed in resolving the the supplied name.
exception
org.omg.CosNaming.NamingContextPackage.InvalidName The supplied name is invalid (i.e., has length less than 1).
exception
org.omg.CORBA.SystemException One of a fixed set of CORBA system exceptions.
see
Bind

	try {
	    InternalBindingKey key = new InternalBindingKey(n);
	    InternalBindingValue value = null;

	    try {
		value = (InternalBindingValue) this.theHashtable.remove(key);
	    } catch( Exception e ) {
		// Ignore the exception in Hashtable.remove
	    }

	    theServantManagerImplHandle.updateContext( objKey, this );

	    if( value == null ) {
		return null;
	    }

	    if( value.strObjectRef.startsWith( "NC" ) ) {
		theServantManagerImplHandle.readInContext( value.strObjectRef );
		Object theObjectFromStringfiedReference = 
		theNameServiceHandle.getObjectReferenceFromKey( value.strObjectRef );
		return theObjectFromStringfiedReference;
	    } else {
		Object theObjectFromStringifiedReference = value.getObjectRef( );

		if( theObjectFromStringifiedReference == null ) { 
		    theObjectFromStringifiedReference =
		    orb.string_to_object( value.strObjectRef );  	
		}

		return theObjectFromStringifiedReference;
	    }
	} catch( Exception e ) {
	    throw updateWrapper.unbindFailure( CompletionStatus.COMPLETED_MAYBE, e );
	} 
    
public voidbind(NameComponent[] n, org.omg.CORBA.Object obj)
Bind an object under a name in this NamingContext. If the name contains multiple (n) components, n-1 will be resolved in this NamingContext and the object bound in resulting NamingContext. An exception is thrown if a binding with the supplied name already exists. If the object to be bound is a NamingContext it will not participate in a recursive resolve.

param
n a sequence of NameComponents which is the name under which the object will be bound.
param
obj the object reference to be bound.
exception
org.omg.CosNaming.NamingContextPackage.NotFound A name with multiple components was supplied, but the first component could not be resolved.
exception
org.omg.CosNaming.NamingContextPackage.CannotProceed Could not proceed in resolving the n-1 components of the supplied name.
exception
org.omg.CosNaming.NamingContextPackage.InvalidName The supplied name is invalid (i.e., has length less than 1).
exception
org.omg.CosNaming.NamingContextPackage.AlreadyBound The supplied name is already bound.
exception
org.omg.CORBA.SystemException One of a fixed set of CORBA system exceptions.
see
doBind

        if( obj == null ) {
	    throw updateWrapper.objectIsNull() ;
        }

        if (debug)
            dprint("bind " + nameToString(n) + " to " + obj);
        // doBind implements all four flavors of binding
        NamingContextDataStore impl = (NamingContextDataStore)this;
        doBind(impl,n,obj,false,BindingType.nobject);
    
public voidbind_context(NameComponent[] n, NamingContext nc)
Bind a NamingContext under a name in this NamingContext. If the name contains multiple (n) components, n-1 will be resolved in this NamingContext and the object bound in resulting NamingContext. An exception is thrown if a binding with the supplied name already exists. The NamingContext will participate in recursive resolving.

param
n a sequence of NameComponents which is the name under which the object will be bound.
param
obj the NamingContect object reference to be bound.
exception
org.omg.CosNaming.NamingContextPackage.NotFound A name with multiple components was supplied, but the first component could not be resolved.
exception
org.omg.CosNaming.NamingContextPackage.CannotProceed Could not proceed in resolving the n-1 components of the supplied name.
exception
org.omg.CosNaming.NamingContextPackage.InvalidName The supplied name is invalid (i.e., has length less than 1).
exception
org.omg.CosNaming.NamingContextPackage.AlreadyBound An object is already bound under the supplied name.
exception
org.omg.CORBA.SystemException One of a fixed set of CORBA system exceptions.
see
doBind

        if( nc == null ) {
	    throw updateWrapper.objectIsNull() ;
        }
        // doBind implements all four flavors of binding
        NamingContextDataStore impl = (NamingContextDataStore)this;
        doBind(impl,n,nc,false,BindingType.ncontext);
    
public NamingContextbind_new_context(NameComponent[] n)
Create a new NamingContext, bind it in this Naming Context and return its object reference. This is equivalent to using new_context() followed by bind_context() with the supplied name and the object reference for the newly created NamingContext.

param
n a sequence of NameComponents which is the name to be unbound.
return
an object reference for a new NamingContext object implemented by this Name Server, bound to the supplied name.
exception
org.omg.CosNaming.NamingContextPackage.AlreadyBound An object is already bound under the supplied name.
exception
org.omg.CosNaming.NamingContextPackage.NotFound A name with multiple components was supplied, but the first component could not be resolved.
exception
org.omg.CosNaming.NamingContextPackage.CannotProceed Could not proceed in resolving the n-1 components of the supplied name.
exception
org.omg.CosNaming.NamingContextPackage.InvalidName The supplied name is invalid (i.e., has length less than 1).
exception
org.omg.CORBA.SystemException One of a fixed set of CORBA system exceptions.
see
new_context
see
bind_context

        NamingContext nc = null;
        NamingContext rnc = null;
        try {
            if (debug)
                dprint("bind_new_context " + nameToString(n));
            // The obvious solution:
            nc = this.new_context();
            this.bind_context(n,nc);
            rnc = nc;
            nc = null;
        } finally {
            try {
                if(nc != null)
                    nc.destroy();
            } catch (org.omg.CosNaming.NamingContextPackage.NotEmpty e) {
            }
        }
        return rnc;
    
private synchronized voidcreatebiPOA()

        if( biPOA != null ) {
            return;
        }
        try {
            POA rootPOA = (POA) orb.resolve_initial_references(
		ORBConstants.ROOT_POA_NAME );
            rootPOA.the_POAManager().activate( );

            int i = 0;
            Policy[] poaPolicy = new Policy[3];
            poaPolicy[i++] = rootPOA.create_lifespan_policy(
                LifespanPolicyValue.TRANSIENT);
            poaPolicy[i++] = rootPOA.create_id_assignment_policy(
                IdAssignmentPolicyValue.SYSTEM_ID);
            poaPolicy[i++] = rootPOA.create_servant_retention_policy(
                ServantRetentionPolicyValue.RETAIN);
            biPOA = rootPOA.create_POA("BindingIteratorPOA", null, poaPolicy );
            biPOA.the_POAManager().activate( );
        } catch( Exception e ) {
	    throw readWrapper.namingCtxBindingIteratorCreate( e ) ;
        }
    
public voiddestroy()
Destroy this NamingContext object. If this NamingContext contains no bindings, the NamingContext is deleted.

exception
org.omg.CosNaming.NamingContextPackage.NotEmpty This NamingContext is not empty (i.e., contains bindings).
exception
org.omg.CORBA.SystemException One of a fixed set of CORBA system exceptions.

        if (debug)
            dprint("destroy ");
        NamingContextDataStore impl = (NamingContextDataStore)this;
        synchronized (impl) {
            if (impl.IsEmpty() == true)
                // The context is empty so it can be destroyed
                impl.Destroy();
            else
                // This context is not empty!
                throw new org.omg.CosNaming.NamingContextPackage.NotEmpty();
        }
    
private voiddoBind(com.sun.corba.se.impl.naming.cosnaming.NamingContextDataStore impl, NameComponent[] n, org.omg.CORBA.Object obj, boolean rebind, org.omg.CosNaming.BindingType bt)
Implements all four flavors of binding. It uses Resolve() to check if a binding already exists (for bind and bind_context), and unbind() to ensure that a binding does not already exist. If the length of the name is 1, then Bind() is called with the name and the object to bind. Otherwise, the first component of the name is resolved in this NamingContext and the appropriate form of bind passed to the resulting NamingContext. This method is static for maximal reuse - even for extended naming context implementations where the recursive semantics still apply.

param
impl an implementation of NamingContextDataStore
param
n a sequence of NameComponents which is the name under which the object will be bound.
param
obj the object reference to be bound.
param
rebind Replace an existing binding or not.
param
bt Type of binding (as object or as context).
exception
org.omg.CosNaming.NamingContextPackage.NotFound A name with multiple components was supplied, but the first component could not be resolved.
exception
org.omg.CosNaming.NamingContextPackage.CannotProceed Could not proceed in resolving the first component of the supplied name.
exception
org.omg.CosNaming.NamingContextPackage.InvalidName The supplied name is invalid (i.e., has length less than 1).
exception
org.omg.CosNaming.NamingContextPackage.AlreadyBound An object is already bound under the supplied name.
exception
org.omg.CORBA.SystemException One of a fixed set of CORBA system exceptions.
see
resolve
see
unbind
see
bind
see
bind_context
see
rebind
see
rebind_context

        // Valid name?
        if (n.length < 1)
            throw new org.omg.CosNaming.NamingContextPackage.InvalidName();

    // At bottom level?
        if (n.length == 1) {
            // The identifier must be set
            if( (n[0].id.length() == 0) && (n[0].kind.length() == 0) ) 
                throw new org.omg.CosNaming.NamingContextPackage.InvalidName();

            // Ensure synchronization of backend
            synchronized (impl) {
                // Yes: bind object in this context under the name
                BindingTypeHolder bth = new BindingTypeHolder();
                if (rebind) {
                    org.omg.CORBA.Object objRef = impl.Resolve( n[0], bth );
                    if( objRef != null ) {
                        // Refer Naming Service Doc:00-11-01 section 2.2.3.4
                        // If there is an object already bound with the name
                        // and the binding type is not ncontext a NotFound
                        // Exception with a reason of not a context has to be
                        // raised.
                        // Fix for bug Id: 4384628
                        if ( bth.value.value() == BindingType.nobject.value() ) {
                            if ( bt.value() == BindingType.ncontext.value() ) {
                                throw new NotFound(NotFoundReason.not_context, n);
                            }
                        } else {
                            // Previously a Context was bound and now trying to
                            // bind Object. It is invalid.
                            if ( bt.value() == BindingType.nobject.value() ) {
                                throw new NotFound(NotFoundReason.not_object, n);
                            }
                        }
                        impl.Unbind(n[0]);
                    }
                } else {
                    if (impl.Resolve(n[0],bth) != null)
                        throw new org.omg.CosNaming.NamingContextPackage.AlreadyBound();
                }

                // Now there are no other bindings under this name
                impl.Bind(n[0],obj,bt);
            }
        } else {
            // No: bind in a different context
            NamingContext context = resolveFirstAsContext(impl,n);

            // Compute tail
            NameComponent[] tail = new NameComponent[n.length - 1];
            System.arraycopy(n,1,tail,0,n.length-1);
            
      // How should we propagate the bind
            switch (bt.value()) {
            case BindingType._nobject:
                {
                    // Bind as object
                    if (rebind)
                        context.rebind(tail,obj);
                    else
                        context.bind(tail,obj);
                }
                break;
            case BindingType._ncontext:
                {
                    // Narrow to a naming context using Java casts. It must work.
                    NamingContext objContext = (NamingContext)obj;
                    // Bind as context
                    if (rebind)
                        context.rebind_context(tail,objContext);
                    else
                        context.bind_context(tail,objContext);
                }
                break;
            default:
                // This should not happen
		throw updateWrapper.namingCtxBadBindingtype() ;
            }
        }
    
public static org.omg.CORBA.ObjectdoResolve(com.sun.corba.se.impl.naming.cosnaming.NamingContextDataStore impl, NameComponent[] n)
Implements resolving names in this NamingContext. The first component of the supplied name is resolved in this NamingContext by calling Resolve(). If there are no more components in the name, the resulting object reference is returned. Otherwise, the resulting object reference must have been bound as a context and be narrowable to a NamingContext. If this is the case, the remaining components of the name is resolved in the resulting NamingContext. This method is static for maximal reuse - even for extended naming context implementations where the recursive semantics still apply.

param
impl an implementation of NamingContextDataStore
param
n a sequence of NameComponents which is the name to be resolved.
return
the object reference bound under the supplied name.
exception
org.omg.CosNaming.NamingContextPackage.NotFound A name with multiple components was supplied, but the first component could not be resolved.
exception
org.omg.CosNaming.NamingContextPackage.CannotProceed Could not proceed in resolving the first component of the supplied name.
exception
org.omg.CosNaming.NamingContextPackage.InvalidName The supplied name is invalid (i.e., has length less than 1).
exception
org.omg.CORBA.SystemException One of a fixed set of CORBA system exceptions.
see
resolve

        org.omg.CORBA.Object obj = null;
        BindingTypeHolder bth = new BindingTypeHolder();

        // Length must be greater than 0
        if (n.length < 1)
            throw new org.omg.CosNaming.NamingContextPackage.InvalidName();

        // The identifier must be set
        if (n.length == 1) {
            synchronized (impl) {
                // Resolve first level in this context
                obj = impl.Resolve(n[0],bth);
            }
            if (obj == null) {
                // Object was not found
                throw new org.omg.CosNaming.NamingContextPackage.NotFound(NotFoundReason.missing_node,n);
            }
            return obj;
        } else {
            // n.length > 1
            if ( (n[1].id.length() == 0) && (n[1].kind.length() == 0 ) )
                throw new org.omg.CosNaming.NamingContextPackage.InvalidName();

            NamingContext context = resolveFirstAsContext(impl,n);

            // Compute restOfName = name[1..length]
            NameComponent[] tail = new NameComponent[n.length -1];
            System.arraycopy(n,1,tail,0,n.length-1);

            // Resolve rest of name in context
            return context.resolve(tail);
        }
    
public static voiddoUnbind(com.sun.corba.se.impl.naming.cosnaming.NamingContextDataStore impl, NameComponent[] n)
Implements unbinding bound names in this NamingContext. If the name contains only one component, the name is unbound in this NamingContext using Unbind(). Otherwise, the first component of the name is resolved in this NamingContext and unbind passed to the resulting NamingContext. This method is static for maximal reuse - even for extended naming context implementations where the recursive semantics still apply.

param
impl an implementation of NamingContextDataStore
param
n a sequence of NameComponents which is the name to be unbound.
exception
org.omg.CosNaming.NamingContextPackage.NotFound A name with multiple components was supplied, but the first component could not be resolved.
exception
org.omg.CosNaming.NamingContextPackage.CannotProceed Could not proceed in resolving the n-1 components of the supplied name.
exception
org.omg.CosNaming.NamingContextPackage.InvalidName The supplied name is invalid (i.e., has length less than 1).
exception
org.omg.CORBA.SystemException One of a fixed set of CORBA system exceptions.
see
resolve

	// Name valid?
        if (n.length < 1)
            throw new org.omg.CosNaming.NamingContextPackage.InvalidName();

        // Unbind here?
        if (n.length == 1) {
            // The identifier must be set
            if ( (n[0].id.length() == 0) && (n[0].kind.length() == 0 ) )
                throw new org.omg.CosNaming.NamingContextPackage.InvalidName();

            org.omg.CORBA.Object objRef = null;
            synchronized (impl) {
                // Yes: unbind in this context
                objRef = impl.Unbind(n[0]);
            }

            if (objRef == null)
                // It was not bound
                throw new org.omg.CosNaming.NamingContextPackage.NotFound(NotFoundReason.missing_node,n);
            // Done
            return;
        } else {
            // No: unbind in a different context

      // Resolve first  - must be resolveable
            NamingContext context = resolveFirstAsContext(impl,n);
	    
            // Compute tail
            NameComponent[] tail = new NameComponent[n.length - 1];
            System.arraycopy(n,1,tail,0,n.length-1);

      // Propagate unbind to this context
            context.unbind(tail);
        }
    
private static voiddprint(java.lang.String msg)

        NamingUtils.dprint("NamingContextImpl("  +
                           Thread.currentThread().getName() + " at " +
                           System.currentTimeMillis() +
                           " ems): " + msg);
    
com.sun.corba.se.impl.naming.cosnaming.InterOperableNamingImplgetINSImpl()

	if( insImpl == null )
	{
            // insImpl will be null if the NamingContext graph is rebuilt from
            // the persistence store.
	    insImpl = 
                new com.sun.corba.se.impl.naming.cosnaming.InterOperableNamingImpl();
	}
	return insImpl;
    
public org.omg.PortableServer.POAgetNSPOA()

        return theNameServiceHandle.getNSPOA( );
    
public voidlist(int how_many, BindingListHolder bl, BindingIteratorHolder bi)
List the contents of this NamingContest. A sequence of bindings is returned (a BindingList) containing up to the number of requested bindings, and a BindingIterator object reference is returned for iterating over the remaining bindings.

param
how_many The number of requested bindings in the BindingList.
param
bl The BindingList as an out parameter.
param
bi The BindingIterator as an out parameter.
exception
org.omg.CORBA.SystemException One of a fixed set of CORBA system exceptions.
see
BindingListHolder
see
BindingIteratorImpl

        if (debug)
            dprint("list(" + how_many + ")");
        // List actually generates the list
        NamingContextDataStore impl = (NamingContextDataStore)this;
        synchronized (impl) {
            impl.List(how_many,bl,bi);
        }
        if (debug && bl.value != null)
            dprint("list(" + how_many + ") -> bindings[" + bl.value.length +
                   "] + iterator: " + bi.value);
    
public static java.lang.StringnameToString(NameComponent[] name)

        StringBuffer s = new StringBuffer("{");
        if (name != null || name.length > 0) {
            for (int i=0;i<name.length;i++) {
                if (i>0)
                    s.append(",");
                s.append("[").
                    append(name[i].id).
                    append(",").
                    append(name[i].kind).
                    append("]");
            }
        }
        s.append("}");
        return s.toString();
    
public synchronized NamingContextnew_context()
Create a NamingContext object and return its object reference.

return
an object reference for a new NamingContext object implemented by this Name Server.
exception
org.omg.CORBA.SystemException One of a fixed set of CORBA system exceptions.

        // Create actually creates a new naming context
        if (debug)
            dprint("new_context()");
        NamingContextDataStore impl = (NamingContextDataStore)this;
        synchronized (impl) {
            return impl.NewContext();
        }
    
public voidprintSize()
This is a Debugging Method

	System.out.println( "Hashtable Size = " + theHashtable.size( ) );
	java.util.Enumeration e = theHashtable.keys( );
	for( ; e.hasMoreElements(); )
	{
	      InternalBindingValue thevalue = 
			(InternalBindingValue) this.theHashtable.get(e.nextElement());
		if( thevalue != null )
		{
			System.out.println( "value = " + thevalue.strObjectRef);
		}
	}
    
public voidrebind(NameComponent[] n, org.omg.CORBA.Object obj)
Bind an object under a name in this NamingContext. If the name contains multiple (n) components, n-1 will be resolved in this NamingContext and the object bound in resulting NamingContext. If a binding under the supplied name already exists it will be unbound first. If the object to be bound is a NamingContext it will not participate in a recursive resolve.

param
n a sequence of NameComponents which is the name under which the object will be bound.
param
obj the object reference to be bound.
exception
org.omg.CosNaming.NamingContextPackage.NotFound A name with multiple components was supplied, but the first component could not be resolved.
exception
org.omg.CosNaming.NamingContextPackage.CannotProceed Could not proceed in resolving the n-1 components of the supplied name.
exception
org.omg.CosNaming.NamingContextPackage.InvalidName The supplied name is invalid (i.e., has length less than 1).
exception
org.omg.CORBA.SystemException One of a fixed set of CORBA system exceptions.
see
doBind

        if( obj == null )
        {
	    throw updateWrapper.objectIsNull() ;
        }
        try {
            if (debug)
                dprint("rebind " + nameToString(n) + " to " + obj);
            // doBind implements all four flavors of binding
            NamingContextDataStore impl = (NamingContextDataStore)this;
            doBind(impl,n,obj,true,BindingType.nobject);
        } catch (org.omg.CosNaming.NamingContextPackage.AlreadyBound ex) {
            // This should not happen
	    throw updateWrapper.namingCtxRebindAlreadyBound( ex ) ;
        }
    
public voidrebind_context(NameComponent[] n, NamingContext nc)
Bind a NamingContext under a name in this NamingContext. If the name contains multiple (n) components, the first n-1 components will be resolved in this NamingContext and the object bound in resulting NamingContext. If a binding under the supplied name already exists it will be unbound first. The NamingContext will participate in recursive resolving.

param
n a sequence of NameComponents which is the name under which the object will be bound.
param
obj the object reference to be bound.
exception
org.omg.CosNaming.NamingContextPackage.NotFound A name with multiple components was supplied, but the first component could not be resolved.
exception
org.omg.CosNaming.NamingContextPackage.CannotProceed Could not proceed in resolving the n-1 components of the supplied name.
exception
org.omg.CosNaming.NamingContextPackage.InvalidName The supplied name is invalid (i.e., has length less than 1).
exception
org.omg.CORBA.SystemException One of a fixed set of CORBA system exceptions.
see
doBind

        try {
            if (debug)
                dprint("rebind_context " + nameToString(n) + " to " + nc);
            // doBind implements all four flavors of binding
            NamingContextDataStore impl = (NamingContextDataStore)this;
            doBind(impl,n,nc,true,BindingType.ncontext);
        } catch (org.omg.CosNaming.NamingContextPackage.AlreadyBound ex) {
            // This should not happen
	    throw updateWrapper.namingCtxRebindAlreadyBound( ex ) ;
        }
    
public org.omg.CORBA.Objectresolve(NameComponent[] n)
Resolve a name in this NamingContext and return the object reference bound to the name. If the name contains multiple (n) components, the first component will be resolved in this NamingContext and the remaining components resolved in the resulting NamingContext, provided that the NamingContext bound to the first component of the name was bound with bind_context().

param
n a sequence of NameComponents which is the name to be resolved.
return
the object reference bound under the supplied name.
exception
org.omg.CosNaming.NamingContextPackage.NotFound A name with multiple components was supplied, but the first component could not be resolved.
exception
org.omg.CosNaming.NamingContextPackage.CannotProceed Could not proceed in resolving the n-1 components of the supplied name.
exception
org.omg.CosNaming.NamingContextPackage.InvalidName The supplied name is invalid (i.e., has length less than 1).
exception
org.omg.CORBA.SystemException One of a fixed set of CORBA system exceptions.
see
doResolve

        if (debug)
            dprint("resolve " + nameToString(n));
        // doResolve actually resolves
        NamingContextDataStore impl = (NamingContextDataStore)this;
        return doResolve(impl,n);
    
protected static NamingContextresolveFirstAsContext(com.sun.corba.se.impl.naming.cosnaming.NamingContextDataStore impl, NameComponent[] n)
Implements resolving a NameComponent in this context and narrowing it to CosNaming::NamingContext. It will throw appropriate exceptions if not found or not narrowable.

param
impl an implementation of NamingContextDataStore
param
n a NameComponents which is the name to be found.
exception
org.omg.CosNaming.NamingContextPackage.NotFound The first component could not be resolved.
exception
org.omg.CosNaming.NamingContextPackage.CannotProceed Could not proceed in resolving the first component of the supplied name.
exception
org.omg.CORBA.SystemException One of a fixed set of CORBA system exceptions.
see
resolve

        org.omg.CORBA.Object topRef = null;
        BindingTypeHolder bth = new BindingTypeHolder();
        NamingContext context = null;

        synchronized (impl) {
            // Resolve first  - must be resolveable
            topRef = impl.Resolve(n[0],bth);
            if (topRef == null) {
		// It was not bound
                throw new org.omg.CosNaming.NamingContextPackage.NotFound(NotFoundReason.missing_node,n);
            }
        }

        // Was it bound as a context?
        if (bth.value != BindingType.ncontext) {
            // It was not a context
            throw new org.omg.CosNaming.NamingContextPackage.NotFound(NotFoundReason.not_context,n);
        }

        // Narrow to a naming context
        try {
            context = NamingContextHelper.narrow(topRef);
        } catch (org.omg.CORBA.BAD_PARAM ex) {
            // It was not a context
            throw new org.omg.CosNaming.NamingContextPackage.NotFound(NotFoundReason.not_context,n);
        }

        // Hmm. must be ok
        return context;
    
public org.omg.CORBA.Objectresolve_str(java.lang.String sn)
This operation resolves the Stringified name into the object reference.

param
sn Stringified Name of the object

exception
org.omg.CosNaming.NamingContextPackage.NotFound Indicates there is no object reference for the given name.

exception
org.omg.CosNaming.NamingContextPackage.CannotProceed Indicates that the given compound name is incorrect

exception
org.omg.CosNaming.NamingContextExtPackage.InvalidName Indicates the name does not identify a binding.

        org.omg.CORBA.Object theObject = null;
        // Name valid?
        if  ( (sn == null ) || (sn.length() == 0) )
        {
                throw new org.omg.CosNaming.NamingContextPackage.InvalidName();
        }
        org.omg.CosNaming.NameComponent[] theNameComponents =
                getINSImpl().convertToNameComponent( sn );
        if( ( theNameComponents == null ) || (theNameComponents.length == 0 ) )
        {
                throw new org.omg.CosNaming.NamingContextPackage.InvalidName();
        }
        theObject = resolve( theNameComponents );
        return theObject;
    
public voidsetORB(com.sun.corba.se.spi.orb.ORB theOrb)

	orb = theOrb;
    
public voidsetRootNameService(NameService theNameService)

	theNameServiceHandle = theNameService;
    
public voidsetServantManagerImpl(ServantManagerImpl theServantManagerImpl)

	theServantManagerImplHandle = theServantManagerImpl;
    
public org.omg.CosNaming.NameComponent[]to_name(java.lang.String sn)
This operation converts a Stringified Name into an equivalent array of Name Components.

param
sn Stringified Name of the object

exception
org.omg.CosNaming.NamingContextExtPackage.InvalidName Indicates the name does not identify a binding.

        // Name valid?
        if  ( (sn == null ) || (sn.length() == 0) )
        {
                throw new org.omg.CosNaming.NamingContextPackage.InvalidName();
        }
        org.omg.CosNaming.NameComponent[] theNameComponents =
                getINSImpl().convertToNameComponent( sn );
        if( ( theNameComponents == null ) || (theNameComponents.length == 0 ) )
        {
                throw new org.omg.CosNaming.NamingContextPackage.InvalidName();
        }
        for( int i = 0; i < theNameComponents.length; i++ ) {
            // If there is a name component whose id and kind null or
            // zero length string, then an invalid name exception needs to be
            // raised.
            if ( ( ( theNameComponents[i].id  == null )
                 ||( theNameComponents[i].id.length() == 0 ) )
               &&( ( theNameComponents[i].kind == null )
                 ||( theNameComponents[i].kind.length() == 0 ) ) ) {
                throw new InvalidName();
            }     
        }
        return theNameComponents;
    
public java.lang.Stringto_string(org.omg.CosNaming.NameComponent[] n)
This operation creates a stringified name from the array of Name components.

param
n Name of the object

exception
org.omg.CosNaming.NamingContextExtPackage.InvalidName Indicates the name does not identify a binding.

        // Name valid?
        if ( (n == null ) || (n.length == 0) )
        {
                throw new org.omg.CosNaming.NamingContextPackage.InvalidName();
        }

        String theStringifiedName = getINSImpl().convertToString( n );

        if( theStringifiedName == null )
        {
                throw new org.omg.CosNaming.NamingContextPackage.InvalidName();
        }

        return theStringifiedName;
    
public java.lang.Stringto_url(java.lang.String addr, java.lang.String sn)
This operation creates a URL based "iiopname://" format name from the Stringified Name of the object.

param
addr internet based address of the host machine where Name Service is running

param
sn Stringified Name of the object

exception
org.omg.CosNaming.NamingContextExtPackage.InvalidName Indicates the name does not identify a binding.

exception
org.omg.CosNaming.NamingContextPackage.InvalidAddress Indicates the internet based address of the host machine is incorrect

        // Name valid?
        if  ( (sn == null ) || (sn.length() == 0) )
        {
                throw new org.omg.CosNaming.NamingContextPackage.InvalidName();
        }
        if( addr == null )
        {
                throw new org.omg.CosNaming.NamingContextExtPackage.InvalidAddress();
        }
        String urlBasedAddress = null; 
        try {
            urlBasedAddress = getINSImpl().createURLBasedAddress( addr, sn );
        } catch (Exception e ) { 
            urlBasedAddress = null;
        }
        // Extra check to see that corba name url created is valid as per
        // INS spec grammer.
        try {
            INSURLHandler.getINSURLHandler().parseURL( urlBasedAddress );
        } catch( BAD_PARAM e ) {
            throw new
                org.omg.CosNaming.NamingContextExtPackage.InvalidAddress();
        }
        return urlBasedAddress;
    
public voidunbind(NameComponent[] n)
Remove a binding from this NamingContext. If the name contains multiple (n) components, the first n-1 components will be resolved from this NamingContext and the final component unbound in the resulting NamingContext.

param
n a sequence of NameComponents which is the name to be unbound.
exception
org.omg.CosNaming.NamingContextPackage.NotFound A name with multiple components was supplied, but the first component could not be resolved.
exception
org.omg.CosNaming.NamingContextPackage.CannotProceed Could not proceed in resolving the n-1 components of the supplied name.
exception
org.omg.CosNaming.NamingContextPackage.InvalidName The supplied name is invalid (i.e., has length less than 1).
exception
org.omg.CORBA.SystemException One of a fixed set of CORBA system exceptions.
see
doUnbind

        if (debug)
            dprint("unbind " + nameToString(n));
        // doUnbind actually unbinds
        NamingContextDataStore impl = (NamingContextDataStore)this;
        doUnbind(impl,n);