- /*
- * @(#)TransientNameService.java 1.48 03/12/19
- *
- * Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
- */
-
- package com.sun.corba.se.impl.naming.cosnaming;
-
- // Get CORBA type
- import org.omg.CORBA.INITIALIZE;
- import org.omg.CORBA.ORB;
- import org.omg.CORBA.CompletionStatus;
-
- import org.omg.CORBA.Policy;
- import org.omg.CORBA.INTERNAL;
- import org.omg.PortableServer.POA;
- import org.omg.PortableServer.LifespanPolicyValue;
- import org.omg.PortableServer.RequestProcessingPolicyValue;
- import org.omg.PortableServer.IdAssignmentPolicyValue;
- import org.omg.PortableServer.ServantRetentionPolicyValue;
-
- // Get org.omg.CosNaming types
- import org.omg.CosNaming.NamingContext;
-
- // Import transient naming context
- import com.sun.corba.se.impl.naming.cosnaming.TransientNamingContext;
- import com.sun.corba.se.impl.orbutil.ORBConstants;
-
- import com.sun.corba.se.spi.logging.CORBALogDomains;
-
- import com.sun.corba.se.impl.logging.NamingSystemException;
-
- /**
- * Class TransientNameService implements a transient name service
- * using TransientNamingContexts and TransientBindingIterators, which
- * implement the org.omg.CosNaming::NamingContext and org.omg.CosNaming::BindingIterator
- * interfaces specfied by the OMG Common Object Services Specification.
- * <p>
- * The TransientNameService creates the initial NamingContext object.
- * @see NamingContextImpl
- * @see BindingIteratorImpl
- * @see TransientNamingContext
- * @see TransientBindingIterator
- */
- public class TransientNameService
- {
- /**
- * Constructs a new TransientNameService, and creates an initial
- * NamingContext, whose object
- * reference can be obtained by the initialNamingContext method.
- * @param orb The ORB object
- * @exception org.omg.CORBA.INITIALIZE Thrown if
- * the TransientNameService cannot initialize.
- */
- public TransientNameService(com.sun.corba.se.spi.orb.ORB orb )
- throws org.omg.CORBA.INITIALIZE
- {
- // Default constructor uses "NameService" as the key for the Root Naming
- // Context. If default constructor is used then INS's object key for
- // Transient Name Service is "NameService"
- initialize( orb, "NameService" );
- }
-
- /**
- * Constructs a new TransientNameService, and creates an initial
- * NamingContext, whose object
- * reference can be obtained by the initialNamingContext method.
- * @param orb The ORB object
- * @param nameserviceName Stringified key used for INS Service registry
- * @exception org.omg.CORBA.INITIALIZE Thrown if
- * the TransientNameService cannot initialize.
- */
- public TransientNameService(com.sun.corba.se.spi.orb.ORB orb,
- String serviceName ) throws org.omg.CORBA.INITIALIZE
- {
- // This constructor gives the flexibility of providing the Object Key
- // for the Root Naming Context that is registered with INS.
- initialize( orb, serviceName );
- }
-
-
- /**
- * This method initializes Transient Name Service by associating Root
- * context with POA and registering the root context with INS Object Keymap.
- */
- private void initialize( com.sun.corba.se.spi.orb.ORB orb,
- String nameServiceName )
- throws org.omg.CORBA.INITIALIZE
- {
- NamingSystemException wrapper = NamingSystemException.get( orb,
- CORBALogDomains.NAMING ) ;
-
- 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);
-
- POA nsPOA = rootPOA.create_POA( "TNameService", null, poaPolicy );
- nsPOA.the_POAManager().activate();
-
- // Create an initial context
- TransientNamingContext initialContext =
- new TransientNamingContext(orb, null, nsPOA);
- byte[] rootContextId = nsPOA.activate_object( initialContext );
- initialContext.localRoot =
- nsPOA.id_to_reference( rootContextId );
- theInitialNamingContext = initialContext.localRoot;
- orb.register_initial_reference( nameServiceName,
- theInitialNamingContext );
- } catch (org.omg.CORBA.SystemException e) {
- throw wrapper.transNsCannotCreateInitialNcSys( e ) ;
- } catch (Exception e) {
- throw wrapper.transNsCannotCreateInitialNc( e ) ;
- }
- }
-
-
- /**
- * Return the initial NamingContext.
- * @return the object reference for the initial NamingContext.
- */
- public org.omg.CORBA.Object initialNamingContext()
- {
- return theInitialNamingContext;
- }
-
-
- // The initial naming context for this name service
- private org.omg.CORBA.Object theInitialNamingContext;
- }