--- old/src/java.corba/share/classes/com/sun/corba/se/impl/oa/poa/POAFactory.java 2018-01-30 20:18:38.000000000 -0500 +++ /dev/null 2018-01-30 20:18:38.000000000 -0500 @@ -1,248 +0,0 @@ -/* - * Copyright (c) 2002, 2009, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -package com.sun.corba.se.impl.oa.poa ; - -import java.util.Set ; -import java.util.HashSet ; -import java.util.Collections ; -import java.util.Iterator ; -import java.util.Map ; -import java.util.WeakHashMap ; - -import org.omg.CORBA.OBJECT_NOT_EXIST ; -import org.omg.CORBA.TRANSIENT ; - -import org.omg.CORBA.ORBPackage.InvalidName ; - -import org.omg.PortableServer.Servant ; -import org.omg.PortableServer.POA ; -import org.omg.PortableServer.POAManager ; - -import com.sun.corba.se.spi.oa.ObjectAdapter ; -import com.sun.corba.se.spi.oa.ObjectAdapterFactory ; - -import com.sun.corba.se.spi.ior.ObjectAdapterId ; - -import com.sun.corba.se.spi.orb.ORB ; - -import com.sun.corba.se.spi.orbutil.closure.Closure ; -import com.sun.corba.se.spi.orbutil.closure.ClosureFactory ; - -import com.sun.corba.se.spi.protocol.PIHandler ; - -import com.sun.corba.se.spi.logging.CORBALogDomains ; - -import com.sun.corba.se.impl.logging.POASystemException ; -import com.sun.corba.se.impl.logging.OMGSystemException ; - -import com.sun.corba.se.impl.orbutil.ORBConstants ; - -import com.sun.corba.se.impl.oa.poa.POAManagerImpl ; - -public class POAFactory implements ObjectAdapterFactory -{ - // Maps servants to POAs for deactivating servants when unexportObject is called. - // Maintained by POAs activate_object and deactivate_object. - private Map exportedServantsToPOA = new WeakHashMap(); - - private Set poaManagers ; - private int poaManagerId ; - private int poaId ; - private POAImpl rootPOA ; - private DelegateImpl delegateImpl; - private ORB orb ; - private POASystemException wrapper ; - private OMGSystemException omgWrapper ; - private boolean isShuttingDown = false; - - public POASystemException getWrapper() - { - return wrapper ; - } - - /** All object adapter factories must have a no-arg constructor. - */ - public POAFactory() - { - poaManagers = Collections.synchronizedSet(new HashSet(4)); - poaManagerId = 0 ; - poaId = 0 ; - rootPOA = null ; - delegateImpl = null ; - orb = null ; - } - - public synchronized POA lookupPOA (Servant servant) - { - return (POA)exportedServantsToPOA.get(servant); - } - - public synchronized void registerPOAForServant(POA poa, Servant servant) - { - exportedServantsToPOA.put(servant, poa); - } - - public synchronized void unregisterPOAForServant(POA poa, Servant servant) - { - exportedServantsToPOA.remove(servant); - } - -// Implementation of ObjectAdapterFactory interface - - public void init( ORB orb ) - { - this.orb = orb ; - wrapper = POASystemException.get( orb, - CORBALogDomains.OA_LIFECYCLE ) ; - omgWrapper = OMGSystemException.get( orb, - CORBALogDomains.OA_LIFECYCLE ) ; - delegateImpl = new DelegateImpl( orb, this ) ; - registerRootPOA() ; - - POACurrent poaCurrent = new POACurrent(orb); - orb.getLocalResolver().register( ORBConstants.POA_CURRENT_NAME, - ClosureFactory.makeConstant( poaCurrent ) ) ; - } - - public ObjectAdapter find( ObjectAdapterId oaid ) - { - POA poa=null; - try { - boolean first = true ; - Iterator iter = oaid.iterator() ; - poa = getRootPOA(); - while (iter.hasNext()) { - String name = (String)(iter.next()) ; - - if (first) { - if (!name.equals( ORBConstants.ROOT_POA_NAME )) - throw wrapper.makeFactoryNotPoa( name ) ; - first = false ; - } else { - poa = poa.find_POA( name, true ) ; - } - } - } catch ( org.omg.PortableServer.POAPackage.AdapterNonExistent ex ){ - throw omgWrapper.noObjectAdaptor( ex ) ; - } catch ( OBJECT_NOT_EXIST ex ) { - throw ex; - } catch ( TRANSIENT ex ) { - throw ex; - } catch ( Exception ex ) { - throw wrapper.poaLookupError( ex ) ; - } - - if ( poa == null ) - throw wrapper.poaLookupError() ; - - return (ObjectAdapter)poa; - } - - public void shutdown( boolean waitForCompletion ) - { - // It is important to copy the list of POAManagers first because - // pm.deactivate removes itself from poaManagers! - Iterator managers = null ; - synchronized (this) { - isShuttingDown = true ; - managers = (new HashSet(poaManagers)).iterator(); - } - - while ( managers.hasNext() ) { - try { - ((POAManager)managers.next()).deactivate(true, waitForCompletion); - } catch ( org.omg.PortableServer.POAManagerPackage.AdapterInactive e ) {} - } - } - -// Special methods used to manipulate global POA related state - - public synchronized void removePoaManager( POAManager manager ) - { - poaManagers.remove(manager); - } - - public synchronized void addPoaManager( POAManager manager ) - { - poaManagers.add(manager); - } - - synchronized public int newPOAManagerId() - { - return poaManagerId++ ; - } - - public void registerRootPOA() - { - // We delay the evaluation of makeRootPOA until - // a call to resolve_initial_references( "RootPOA" ). - // The Future guarantees that makeRootPOA is only called once. - Closure rpClosure = new Closure() { - public Object evaluate() { - return POAImpl.makeRootPOA( orb ) ; - } - } ; - - orb.getLocalResolver().register( ORBConstants.ROOT_POA_NAME, - ClosureFactory.makeFuture( rpClosure ) ) ; - } - - - public synchronized POA getRootPOA() - { - if (rootPOA == null) { - // See if we are trying to getRootPOA while shutting down the ORB. - if (isShuttingDown) { - throw omgWrapper.noObjectAdaptor( ) ; - } - - try { - Object obj = orb.resolve_initial_references( - ORBConstants.ROOT_POA_NAME ) ; - rootPOA = (POAImpl)obj ; - } catch (InvalidName inv) { - throw wrapper.cantResolveRootPoa( inv ) ; - } - } - - return rootPOA; - } - - public org.omg.PortableServer.portable.Delegate getDelegateImpl() - { - return delegateImpl ; - } - - synchronized public int newPOAId() - { - return poaId++ ; - } - - public ORB getORB() - { - return orb ; - } -}