⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 namingcontextimpl.java

📁 java1.6众多例子参考
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
        } else {             readLogger.warning( LogKeywords.NAMING_RESOLVE_FAILURE +                  " Name: " + NamingUtils.getDirectoryStructuredName( n ) );        }        return obj;    }                /**     * 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     */    public  void unbind(NameComponent[] n)	throws org.omg.CosNaming.NamingContextPackage.NotFound,	       org.omg.CosNaming.NamingContextPackage.CannotProceed,	       org.omg.CosNaming.NamingContextPackage.InvalidName    {	// doUnbind actually unbinds	NamingContextDataStore impl = (NamingContextDataStore)this;	doUnbind(impl,n);        if( updateLogger.isLoggable( Level.FINE ) ) {            // isLoggable call to make sure that we save some precious             // processor cycles, if there is no need to log.            updateLogger.fine( LogKeywords.NAMING_UNBIND_SUCCESS +                 " Name: " + NamingUtils.getDirectoryStructuredName( n ) );         }    }    /**     * 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     */    public  void list(int how_many, BindingListHolder bl,         BindingIteratorHolder bi)    {	// List actually generates the list	NamingContextDataStore impl = (NamingContextDataStore)this;	synchronized (impl) {	    impl.List(how_many,bl,bi);	}        if( readLogger.isLoggable( Level.FINE ) && (bl.value != null )) {            // isLoggable call to make sure that we save some precious             // processor cycles, if there is no need to log.	    readLogger.fine ( LogKeywords.NAMING_LIST_SUCCESS +                "list(" + how_many + ") -> bindings[" + bl.value.length +	        "] + iterator: " + bi.value);        }    }    /**     * 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.     */    public synchronized NamingContext new_context()    {	// Create actually creates a new naming context        lifecycleLogger.fine( "Creating New Naming Context " ); 	NamingContextDataStore impl = (NamingContextDataStore)this;	synchronized (impl) {            NamingContext nctx = impl.NewContext();            if( nctx != null ) {                lifecycleLogger.fine( LogKeywords.LIFECYCLE_CREATE_SUCCESS );            } else {                // If naming context is null, then that must be a serious                // error.                lifecycleLogger.severe ( LogKeywords.LIFECYCLE_CREATE_FAILURE );            }            return nctx;	}    }    /**     * 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     */    public  NamingContext bind_new_context(NameComponent[] n)	throws org.omg.CosNaming.NamingContextPackage.NotFound,	       org.omg.CosNaming.NamingContextPackage.AlreadyBound,	       org.omg.CosNaming.NamingContextPackage.CannotProceed,	       org.omg.CosNaming.NamingContextPackage.InvalidName    {	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) {	    }	}        if( updateLogger.isLoggable( Level.FINE ) ) {            // isLoggable call to make sure that we save some precious             // processor cycles, if there is no need to log.	    updateLogger.fine ( LogKeywords.NAMING_BIND +                "New Context Bound To " +                 NamingUtils.getDirectoryStructuredName( n ) );        }	return rnc;    }    /**     * 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.     */    public  void destroy()	throws org.omg.CosNaming.NamingContextPackage.NotEmpty    {        lifecycleLogger.fine( "Destroying Naming Context " ); 	NamingContextDataStore impl = (NamingContextDataStore)this;	synchronized (impl) {	    if (impl.IsEmpty() == true) {		// The context is empty so it can be destroyed		impl.Destroy();                lifecycleLogger.fine ( LogKeywords.LIFECYCLE_DESTROY_SUCCESS );            }	    else {		// This context is not empty!                // Not a fatal error, warning should do.                lifecycleLogger.warning( LogKeywords.LIFECYCLE_DESTROY_FAILURE +                    " NamingContext children are not destroyed still.." );		throw new NotEmpty();            }	}    }    /**     * 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     */    public static void doBind(NamingContextDataStore impl,			      NameComponent[] n,			      org.omg.CORBA.Object obj,			      boolean rebind,			      org.omg.CosNaming.BindingType bt)	throws org.omg.CosNaming.NamingContextPackage.NotFound,	       org.omg.CosNaming.NamingContextPackage.CannotProceed,	       org.omg.CosNaming.NamingContextPackage.InvalidName,	       org.omg.CosNaming.NamingContextPackage.AlreadyBound    {	// Valid name?	if (n.length < 1)	    throw new 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 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)			// "Resistence is futile." [Borg pickup line]			throw new 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 staticWrapper.namingCtxBadBindingtype() ;	    }	}    }    /**   * 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   */    public static org.omg.CORBA.Object doResolve(NamingContextDataStore impl,

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -