summaryrefslogtreecommitdiff
path: root/java/src/Ice/ObjectAdapterI.java
diff options
context:
space:
mode:
authorMatthew Newhook <matthew@zeroc.com>2014-10-20 11:40:05 -0230
committerMatthew Newhook <matthew@zeroc.com>2014-10-20 11:40:05 -0230
commitb51469b41167fb86ae2059a15cf0475c53fdda7b (patch)
treefc85d6ca2efd89c67e1e4e7438f437c3e08313f4 /java/src/Ice/ObjectAdapterI.java
parentFixed (ICE-5695) - IceSSL: misleading exception (diff)
downloadice-b51469b41167fb86ae2059a15cf0475c53fdda7b.tar.bz2
ice-b51469b41167fb86ae2059a15cf0475c53fdda7b.tar.xz
ice-b51469b41167fb86ae2059a15cf0475c53fdda7b.zip
Down with ant. From the gradle to the grave.
Diffstat (limited to 'java/src/Ice/ObjectAdapterI.java')
-rw-r--r--java/src/Ice/ObjectAdapterI.java1611
1 files changed, 0 insertions, 1611 deletions
diff --git a/java/src/Ice/ObjectAdapterI.java b/java/src/Ice/ObjectAdapterI.java
deleted file mode 100644
index 48ad2739082..00000000000
--- a/java/src/Ice/ObjectAdapterI.java
+++ /dev/null
@@ -1,1611 +0,0 @@
-// **********************************************************************
-//
-// Copyright (c) 2003-2014 ZeroC, Inc. All rights reserved.
-//
-// This copy of Ice is licensed to you under the terms described in the
-// ICE_LICENSE file included in this distribution.
-//
-// **********************************************************************
-
-package Ice;
-
-import java.util.Map;
-
-public final class ObjectAdapterI implements ObjectAdapter
-{
- @Override
- public String
- getName()
- {
- //
- // No mutex lock necessary, _name is immutable.
- //
- return _noConfig ? "" : _name;
- }
-
- @Override
- public Communicator
- getCommunicator()
- {
- return _communicator;
- }
-
- @Override
- public void
- activate()
- {
- IceInternal.LocatorInfo locatorInfo = null;
- boolean registerProcess = false;
- boolean printAdapterReady = false;
-
- synchronized(this)
- {
- checkForDeactivation();
-
- //
- // If we've previously been initialized we just need to activate the
- // incoming connection factories and we're done.
- //
- if(_state != StateUninitialized)
- {
- for(IceInternal.IncomingConnectionFactory factory : _incomingConnectionFactories)
- {
- factory.activate();
- }
- return;
- }
-
- //
- // One off initializations of the adapter: update the
- // locator registry and print the "adapter ready"
- // message. We set set state to StateWaitActivate to prevent
- // deactivation from other threads while these one off
- // initializations are done.
- //
- _state = StateWaitActivate;
-
- locatorInfo = _locatorInfo;
- if(!_noConfig)
- {
- final Properties properties = _instance.initializationData().properties;
- registerProcess = properties.getPropertyAsInt(_name +".RegisterProcess") > 0;
- printAdapterReady = properties.getPropertyAsInt("Ice.PrintAdapterReady") > 0;
- }
- }
-
- try
- {
- Ice.Identity dummy = new Ice.Identity();
- dummy.name = "dummy";
- updateLocatorRegistry(locatorInfo, createDirectProxy(dummy), registerProcess);
- }
- catch(Ice.LocalException ex)
- {
- //
- // If we couldn't update the locator registry, we let the
- // exception go through and don't activate the adapter to
- // allow to user code to retry activating the adapter
- // later.
- //
- synchronized(this)
- {
- _state = StateUninitialized;
- notifyAll();
- }
- throw ex;
- }
-
- if(printAdapterReady)
- {
- System.out.println(_name + " ready");
- }
-
- synchronized(this)
- {
- assert(_state == StateWaitActivate);
-
- //
- // Signal threads waiting for the activation.
- //
- _state = StateActive;
- notifyAll();
-
- for(IceInternal.IncomingConnectionFactory factory : _incomingConnectionFactories)
- {
- factory.activate();
- }
- }
- }
-
- @Override
- public synchronized void
- hold()
- {
- checkForDeactivation();
- _state = StateHeld;
- for(IceInternal.IncomingConnectionFactory factory : _incomingConnectionFactories)
- {
- factory.hold();
- }
- }
-
- @Override
- public void
- waitForHold()
- {
- if(Thread.interrupted())
- {
- throw new Ice.OperationInterruptedException();
- }
-
- java.util.List<IceInternal.IncomingConnectionFactory> incomingConnectionFactories;
- synchronized(this)
- {
- checkForDeactivation();
- incomingConnectionFactories =
- new java.util.ArrayList<IceInternal.IncomingConnectionFactory>(_incomingConnectionFactories);
- }
-
- for(IceInternal.IncomingConnectionFactory factory : incomingConnectionFactories)
- {
- try
- {
- factory.waitUntilHolding();
- }
- catch(InterruptedException ex)
- {
- throw new Ice.OperationInterruptedException();
- }
- }
- }
-
-
- @Override
- public void
- deactivate()
- {
- if(Thread.interrupted())
- {
- throw new Ice.OperationInterruptedException();
- }
-
- IceInternal.OutgoingConnectionFactory outgoingConnectionFactory;
- java.util.List<IceInternal.IncomingConnectionFactory> incomingConnectionFactories;
- IceInternal.LocatorInfo locatorInfo;
- synchronized(this)
- {
- //
- // Ignore deactivation requests if the object adapter has
- // already been deactivated.
- //
- if(_state >= StateDeactivating)
- {
- return;
- }
-
- //
- //
- // Wait for activation to complete. This is necessary to not
- // get out of order locator updates.
- //
- while(_state == StateWaitActivate)
- {
- try
- {
- wait();
- }
- catch(InterruptedException ex)
- {
- throw new Ice.OperationInterruptedException();
- }
- }
-
- if(_routerInfo != null)
- {
- //
- // Remove entry from the router manager.
- //
- _instance.routerManager().erase(_routerInfo.getRouter());
-
- //
- // Clear this object adapter with the router.
- //
- _routerInfo.setAdapter(null);
- }
-
- incomingConnectionFactories =
- new java.util.ArrayList<IceInternal.IncomingConnectionFactory>(_incomingConnectionFactories);
- outgoingConnectionFactory = _instance.outgoingConnectionFactory();
- locatorInfo = _locatorInfo;
-
- _state = StateDeactivating;
- }
-
- try
- {
- updateLocatorRegistry(locatorInfo, null, false);
- }
- catch(Ice.LocalException ex)
- {
- //
- // We can't throw exceptions in deactivate so we ignore
- // failures to update the locator registry.
- //
- }
-
- //
- // Must be called outside the thread synchronization, because
- // Connection::destroy() might block when sending a CloseConnection
- // message.
- //
- for(IceInternal.IncomingConnectionFactory factory : incomingConnectionFactories)
- {
- factory.destroy();
- }
-
- //
- // Must be called outside the thread synchronization, because
- // changing the object adapter might block if there are still
- // requests being dispatched.
- //
- outgoingConnectionFactory.removeAdapter(this);
-
- synchronized(this)
- {
- _state = StateDeactivated;
- notifyAll();
- }
- }
-
- @Override
- public void
- waitForDeactivate()
- {
- if(Thread.interrupted())
- {
- throw new Ice.OperationInterruptedException();
- }
-
- try
- {
- IceInternal.IncomingConnectionFactory[] incomingConnectionFactories;
- synchronized(this)
- {
- if(_state == StateDestroyed)
- {
- return;
- }
-
- //
- // Wait for deactivation of the adapter itself, and
- // for the return of all direct method calls using this
- // adapter.
- //
- while((_state != StateDeactivated) || _directCount > 0)
- {
- wait();
- }
-
- incomingConnectionFactories =
- _incomingConnectionFactories.toArray(new IceInternal.IncomingConnectionFactory[0]);
- }
-
- //
- // Now we wait for until all incoming connection factories are
- // finished.
- //
- for(IceInternal.IncomingConnectionFactory f : incomingConnectionFactories)
- {
- f.waitUntilFinished();
- }
- }
- catch (InterruptedException e)
- {
- throw new Ice.OperationInterruptedException();
- }
- }
-
- @Override
- public synchronized boolean
- isDeactivated()
- {
- return _state >= StateDeactivated;
- }
-
- @Override
- public void
- destroy()
- {
- if(Thread.interrupted())
- {
- throw new Ice.OperationInterruptedException();
- }
-
- //
- // Deactivate and wait for completion.
- //
- deactivate();
- waitForDeactivate();
-
- //
- // Now it's also time to clean up our servants and servant
- // locators.
- //
- _servantManager.destroy();
-
- //
- // Destroy the thread pool.
- //
- if(_threadPool != null)
- {
- _threadPool.destroy();
- try
- {
- _threadPool.joinWithAllThreads();
- }
- catch (InterruptedException e)
- {
- throw new Ice.OperationInterruptedException();
- }
- }
-
- IceInternal.ObjectAdapterFactory objectAdapterFactory;
-
- synchronized(this)
- {
- //
- // If destroy is already complete, we're done.
- //
- if(_state == StateDestroyed)
- {
- return;
- }
- //
- // Signal that destroying is complete.
- //
- _state = StateDestroyed;
- notifyAll();
-
- _incomingConnectionFactories.clear();
-
- //
- // Remove object references (some of them cyclic).
- //
- _instance = null;
- _threadPool = null;
- _routerEndpoints = null;
- _routerInfo = null;
- _publishedEndpoints = null;
- _locatorInfo = null;
- _reference = null;
-
- objectAdapterFactory = _objectAdapterFactory;
- _objectAdapterFactory = null;
- }
-
- if(objectAdapterFactory != null)
- {
- objectAdapterFactory.removeObjectAdapter(this);
- }
- }
-
- @Override
- public ObjectPrx
- add(Ice.Object object, Identity ident)
- {
- return addFacet(object, ident, "");
- }
-
- @Override
- public synchronized ObjectPrx
- addFacet(Ice.Object object, Identity ident, String facet)
- {
- checkForDeactivation();
- checkIdentity(ident);
- checkServant(object);
-
- //
- // Create a copy of the Identity argument, in case the caller
- // reuses it.
- //
- Identity id = new Identity();
- id.category = ident.category;
- id.name = ident.name;
-
- _servantManager.addServant(object, id, facet);
-
- return newProxy(id, facet);
- }
-
- @Override
- public ObjectPrx
- addWithUUID(Ice.Object object)
- {
- return addFacetWithUUID(object, "");
- }
-
- @Override
- public ObjectPrx
- addFacetWithUUID(Ice.Object object, String facet)
- {
- Identity ident = new Identity();
- ident.category = "";
- ident.name = java.util.UUID.randomUUID().toString();
-
- return addFacet(object, ident, facet);
- }
-
- @Override
- public synchronized void
- addDefaultServant(Ice.Object servant, String category)
- {
- checkServant(servant);
- checkForDeactivation();
-
- _servantManager.addDefaultServant(servant, category);
- }
-
- @Override
- public Ice.Object
- remove(Identity ident)
- {
- return removeFacet(ident, "");
- }
-
- @Override
- public synchronized Ice.Object
- removeFacet(Identity ident, String facet)
- {
- checkForDeactivation();
- checkIdentity(ident);
-
- return _servantManager.removeServant(ident, facet);
- }
-
- @Override
- public synchronized Map<String, Object>
- removeAllFacets(Identity ident)
- {
- checkForDeactivation();
- checkIdentity(ident);
-
- return _servantManager.removeAllFacets(ident);
- }
-
- @Override
- public synchronized Ice.Object
- removeDefaultServant(String category)
- {
- checkForDeactivation();
-
- return _servantManager.removeDefaultServant(category);
- }
-
- @Override
- public Ice.Object
- find(Identity ident)
- {
- return findFacet(ident, "");
- }
-
- @Override
- public synchronized Ice.Object
- findFacet(Identity ident, String facet)
- {
- checkForDeactivation();
- checkIdentity(ident);
-
- return _servantManager.findServant(ident, facet);
- }
-
- @Override
- public synchronized java.util.Map<String, Ice.Object>
- findAllFacets(Identity ident)
- {
- checkForDeactivation();
- checkIdentity(ident);
-
- return _servantManager.findAllFacets(ident);
- }
-
- @Override
- public synchronized Ice.Object
- findByProxy(ObjectPrx proxy)
- {
- checkForDeactivation();
-
- IceInternal.Reference ref = ((ObjectPrxHelperBase)proxy).__reference();
- return findFacet(ref.getIdentity(), ref.getFacet());
- }
-
- @Override
- public synchronized Ice.Object
- findDefaultServant(String category)
- {
- checkForDeactivation();
-
- return _servantManager.findDefaultServant(category);
- }
-
- @Override
- public synchronized void
- addServantLocator(ServantLocator locator, String prefix)
- {
- checkForDeactivation();
-
- _servantManager.addServantLocator(locator, prefix);
- }
-
- @Override
- public synchronized ServantLocator
- removeServantLocator(String prefix)
- {
- checkForDeactivation();
-
- return _servantManager.removeServantLocator(prefix);
- }
-
- @Override
- public synchronized ServantLocator
- findServantLocator(String prefix)
- {
- checkForDeactivation();
-
- return _servantManager.findServantLocator(prefix);
- }
-
- @Override
- public synchronized ObjectPrx
- createProxy(Identity ident)
- {
- checkForDeactivation();
- checkIdentity(ident);
-
- return newProxy(ident, "");
- }
-
- @Override
- public synchronized ObjectPrx
- createDirectProxy(Identity ident)
- {
- checkForDeactivation();
- checkIdentity(ident);
-
- return newDirectProxy(ident, "");
- }
-
- @Override
- public synchronized ObjectPrx
- createIndirectProxy(Identity ident)
- {
- checkForDeactivation();
- checkIdentity(ident);
-
- return newIndirectProxy(ident, "", _id);
- }
-
- @Override
- public synchronized void
- setLocator(LocatorPrx locator)
- {
- checkForDeactivation();
-
- _locatorInfo = _instance.locatorManager().get(locator);
- }
-
- @Override
- public synchronized LocatorPrx
- getLocator()
- {
- if(_locatorInfo == null)
- {
- return null;
- }
- else
- {
- return _locatorInfo.getLocator();
- }
- }
-
- @Override
- public void
- refreshPublishedEndpoints()
- {
- IceInternal.LocatorInfo locatorInfo = null;
- boolean registerProcess = false;
- java.util.List<IceInternal.EndpointI> oldPublishedEndpoints;
-
- synchronized(this)
- {
- checkForDeactivation();
-
- oldPublishedEndpoints = _publishedEndpoints;
- _publishedEndpoints = parsePublishedEndpoints();
-
- locatorInfo = _locatorInfo;
- if(!_noConfig)
- {
- registerProcess =
- _instance.initializationData().properties.getPropertyAsInt(_name + ".RegisterProcess") > 0;
- }
- }
-
- try
- {
- Ice.Identity dummy = new Ice.Identity();
- dummy.name = "dummy";
- updateLocatorRegistry(locatorInfo, createDirectProxy(dummy), registerProcess);
- }
- catch(Ice.LocalException ex)
- {
- synchronized(this)
- {
- //
- // Restore the old published endpoints.
- //
- _publishedEndpoints = oldPublishedEndpoints;
- throw ex;
- }
- }
- }
-
- @Override
- public synchronized Endpoint[]
- getEndpoints()
- {
- java.util.List<Endpoint> endpoints = new java.util.ArrayList<Endpoint>();
- for(IceInternal.IncomingConnectionFactory factory : _incomingConnectionFactories)
- {
- endpoints.add(factory.endpoint());
- }
- return endpoints.toArray(new Endpoint[0]);
- }
-
- @Override
- public synchronized Endpoint[]
- getPublishedEndpoints()
- {
- return _publishedEndpoints.toArray(new Endpoint[0]);
- }
-
- public boolean
- isLocal(ObjectPrx proxy)
- {
- //
- // NOTE: it's important that isLocal() doesn't perform any blocking operations as
- // it can be called for AMI invocations if the proxy has no delegate set yet.
- //
-
- IceInternal.Reference ref = ((ObjectPrxHelperBase)proxy).__reference();
- if(ref.isWellKnown())
- {
- //
- // Check the active servant map to see if the well-known
- // proxy is for a local object.
- //
- return _servantManager.hasServant(ref.getIdentity());
- }
- else if(ref.isIndirect())
- {
- //
- // Proxy is local if the reference adapter id matches this
- // adapter id or replica group id.
- //
- return ref.getAdapterId().equals(_id) || ref.getAdapterId().equals(_replicaGroupId);
- }
- else
- {
- IceInternal.EndpointI[] endpoints = ref.getEndpoints();
-
- synchronized(this)
- {
- checkForDeactivation();
-
- //
- // Proxies which have at least one endpoint in common with the
- // endpoints used by this object adapter's incoming connection
- // factories are considered local.
- //
- for(IceInternal.EndpointI endpoint : endpoints)
- {
- for(IceInternal.EndpointI p : _publishedEndpoints)
- {
- if(endpoint.equivalent(p))
- {
- return true;
- }
- }
- for(IceInternal.IncomingConnectionFactory p : _incomingConnectionFactories)
- {
- if(endpoint.equivalent(p.endpoint()))
- {
- return true;
- }
- }
- }
-
- //
- // Proxies which have at least one endpoint in common with the
- // router's server proxy endpoints (if any), are also considered
- // local.
- //
- if(_routerInfo != null && _routerInfo.getRouter().equals(proxy.ice_getRouter()))
- {
- for(IceInternal.EndpointI endpoint : endpoints)
- {
- for(IceInternal.EndpointI p : _routerEndpoints)
- {
- if(endpoint.equivalent(p))
- {
- return true;
- }
- }
- }
- }
- }
- }
-
- return false;
- }
-
- public void
- flushAsyncBatchRequests(IceInternal.CommunicatorFlushBatch outAsync)
- {
- java.util.List<IceInternal.IncomingConnectionFactory> f;
- synchronized(this)
- {
- f = new java.util.ArrayList<IceInternal.IncomingConnectionFactory>(_incomingConnectionFactories);
- }
- for(IceInternal.IncomingConnectionFactory p : f)
- {
- p.flushAsyncBatchRequests(outAsync);
- }
- }
-
- public void
- updateConnectionObservers()
- {
- java.util.List<IceInternal.IncomingConnectionFactory> f;
- synchronized(this)
- {
- f = new java.util.ArrayList<IceInternal.IncomingConnectionFactory>(_incomingConnectionFactories);
- }
- for(IceInternal.IncomingConnectionFactory p : f)
- {
- p.updateConnectionObservers();
- }
- }
-
- public void
- updateThreadObservers()
- {
- IceInternal.ThreadPool threadPool = null;
- synchronized(this)
- {
- threadPool = _threadPool;
- }
- if(threadPool != null)
- {
- threadPool.updateObservers();
- }
- }
-
- public synchronized void
- incDirectCount()
- {
- checkForDeactivation();
-
- assert(_directCount >= 0);
- ++_directCount;
- }
-
- public synchronized void
- decDirectCount()
- {
- // Not check for deactivation here!
-
- assert(_instance != null); // Must not be called after destroy().
-
- assert(_directCount > 0);
- if(--_directCount == 0)
- {
- notifyAll();
- }
- }
-
- public IceInternal.ThreadPool
- getThreadPool()
- {
- // No mutex lock necessary, _threadPool and _instance are
- // immutable after creation until they are removed in
- // destroy().
-
- // Not check for deactivation here!
-
- assert(_instance != null); // Must not be called after destroy().
-
- if(_threadPool != null)
- {
- return _threadPool;
- }
- else
- {
- return _instance.serverThreadPool(true);
- }
- }
-
- public IceInternal.ServantManager
- getServantManager()
- {
- //
- // No mutex lock necessary, _servantManager is immutable.
- //
- return _servantManager;
- }
-
- public IceInternal.ACMConfig
- getACM()
- {
- // No check for deactivation here!
- assert(_instance != null); // Must not be called after destroy().
- return _acm;
- }
-
- //
- // Only for use by IceInternal.ObjectAdapterFactory
- //
- public
- ObjectAdapterI(IceInternal.Instance instance, Communicator communicator,
- IceInternal.ObjectAdapterFactory objectAdapterFactory, String name,
- RouterPrx router, boolean noConfig)
- {
- _instance = instance;
- _communicator = communicator;
- _objectAdapterFactory = objectAdapterFactory;
- _servantManager = new IceInternal.ServantManager(instance, name);
- _name = name;
- _directCount = 0;
- _noConfig = noConfig;
-
- if(_noConfig)
- {
- _id = "";
- _replicaGroupId = "";
- _reference = _instance.referenceFactory().create("dummy -t", "");
- _acm = _instance.serverACM();
- return;
- }
-
- final Properties properties = _instance.initializationData().properties;
- java.util.List<String> unknownProps = new java.util.ArrayList<String>();
- boolean noProps = filterProperties(unknownProps);
-
- //
- // Warn about unknown object adapter properties.
- //
- if(unknownProps.size() != 0 && properties.getPropertyAsIntWithDefault("Ice.Warn.UnknownProperties", 1) > 0)
- {
- StringBuffer message = new StringBuffer("found unknown properties for object adapter `");
- message.append(_name);
- message.append("':");
- for(String p : unknownProps)
- {
- message.append("\n ");
- message.append(p);
- }
- _instance.initializationData().logger.warning(message.toString());
- }
-
- //
- // Make sure named adapter has some configuration.
- //
- if(router == null && noProps)
- {
- //
- // These need to be set to prevent finalizer from complaining.
- //
- _state = StateDestroyed;
- _instance = null;
- _incomingConnectionFactories = null;
-
- InitializationException ex = new InitializationException();
- ex.reason = "object adapter `" + _name + "' requires configuration";
- throw ex;
- }
-
- _id = properties.getProperty(_name + ".AdapterId");
- _replicaGroupId = properties.getProperty(_name + ".ReplicaGroupId");
-
- //
- // Setup a reference to be used to get the default proxy options
- // when creating new proxies. By default, create twoway proxies.
- //
- String proxyOptions = properties.getPropertyWithDefault(_name + ".ProxyOptions", "-t");
- try
- {
- _reference = _instance.referenceFactory().create("dummy " + proxyOptions, "");
- }
- catch(ProxyParseException e)
- {
- InitializationException ex = new InitializationException();
- ex.reason = "invalid proxy options `" + proxyOptions + "' for object adapter `" + _name + "'";
- throw ex;
- }
-
- _acm = new IceInternal.ACMConfig(properties, communicator.getLogger(), _name + ".ACM", instance.serverACM());
-
- try
- {
- int threadPoolSize = properties.getPropertyAsInt(_name + ".ThreadPool.Size");
- int threadPoolSizeMax = properties.getPropertyAsInt(_name + ".ThreadPool.SizeMax");
-
- //
- // Create the per-adapter thread pool, if necessary.
- //
- if(threadPoolSize > 0 || threadPoolSizeMax > 0)
- {
- _threadPool = new IceInternal.ThreadPool(_instance, _name + ".ThreadPool", 0);
- }
-
- if(router == null)
- {
- router = RouterPrxHelper.uncheckedCast(_instance.proxyFactory().propertyToProxy(name + ".Router"));
- }
- if(router != null)
- {
- _routerInfo = _instance.routerManager().get(router);
- if(_routerInfo != null)
- {
- //
- // Make sure this router is not already registered with another adapter.
- //
- if(_routerInfo.getAdapter() != null)
- {
- throw new AlreadyRegisteredException("object adapter with router",
- _instance.identityToString(router.ice_getIdentity()));
- }
-
- //
- // Add the router's server proxy endpoints to this object
- // adapter.
- //
- IceInternal.EndpointI[] endpoints = _routerInfo.getServerEndpoints();
- for(IceInternal.EndpointI endpoint : endpoints)
- {
- _routerEndpoints.add(endpoint);
- }
- java.util.Collections.sort(_routerEndpoints); // Must be sorted.
-
- //
- // Remove duplicate endpoints, so we have a list of unique
- // endpoints.
- //
- for(int i = 0; i < _routerEndpoints.size() - 1;)
- {
- IceInternal.EndpointI e1 = _routerEndpoints.get(i);
- IceInternal.EndpointI e2 = _routerEndpoints.get(i + 1);
- if(e1.equals(e2))
- {
- _routerEndpoints.remove(i);
- }
- else
- {
- ++i;
- }
- }
-
- //
- // Associate this object adapter with the router. This way,
- // new outgoing connections to the router's client proxy will
- // use this object adapter for callbacks.
- //
- _routerInfo.setAdapter(this);
-
- //
- // Also modify all existing outgoing connections to the
- // router's client proxy to use this object adapter for
- // callbacks.
- //
- _instance.outgoingConnectionFactory().setRouterInfo(_routerInfo);
- }
- }
- else
- {
- //
- // Parse the endpoints, but don't store them in the adapter. The connection
- // factory might change it, for example, to fill in the real port number.
- //
- java.util.List<IceInternal.EndpointI> endpoints =
- parseEndpoints(properties.getProperty(_name + ".Endpoints"), true);
- for(IceInternal.EndpointI endp : endpoints)
- {
- IceInternal.IncomingConnectionFactory factory =
- new IceInternal.IncomingConnectionFactory(instance, endp, this, _name);
- _incomingConnectionFactories.add(factory);
- }
- if(endpoints.size() == 0)
- {
- IceInternal.TraceLevels tl = _instance.traceLevels();
- if(tl.network >= 2)
- {
- _instance.initializationData().logger.trace(tl.networkCat,
- "created adapter `" + name + "' without endpoints");
- }
- }
-
- //
- // Parse the publsihed endpoints.
- //
- _publishedEndpoints = parsePublishedEndpoints();
- }
-
- if(properties.getProperty(_name + ".Locator").length() > 0)
- {
- setLocator(LocatorPrxHelper.uncheckedCast(
- _instance.proxyFactory().propertyToProxy(_name + ".Locator")));
- }
- else
- {
- setLocator(_instance.referenceFactory().getDefaultLocator());
- }
- }
- catch(LocalException ex)
- {
- destroy();
- throw ex;
- }
- }
-
- @Override
- protected synchronized void
- finalize()
- throws Throwable
- {
- try
- {
- if(_state < StateDeactivated)
- {
- _instance.initializationData().logger.warning("object adapter `" + getName() +
- "' has not been deactivated");
- }
- else if(_state != StateDestroyed)
- {
- _instance.initializationData().logger.warning("object adapter `" + getName() + "' has not been destroyed");
- }
- else
- {
- IceUtilInternal.Assert.FinalizerAssert(_threadPool == null);
- //IceUtilInternal.Assert.FinalizerAssert(_servantManager == null); // Not cleared, it needs to be immutable.
- //IceUtilInternal.Assert.FinalizerAssert(_incomingConnectionFactories.isEmpty());
- IceUtilInternal.Assert.FinalizerAssert(_directCount == 0);
- }
- }
- catch(java.lang.Exception ex)
- {
- }
- finally
- {
- super.finalize();
- }
- }
-
- private ObjectPrx
- newProxy(Identity ident, String facet)
- {
- if(_id.length() == 0)
- {
- return newDirectProxy(ident, facet);
- }
- else if(_replicaGroupId.length() == 0)
- {
- return newIndirectProxy(ident, facet, _id);
- }
- else
- {
- return newIndirectProxy(ident, facet, _replicaGroupId);
- }
- }
-
- private ObjectPrx
- newDirectProxy(Identity ident, String facet)
- {
- IceInternal.EndpointI[] endpoints;
-
- int sz = _publishedEndpoints.size();
- endpoints = new IceInternal.EndpointI[sz + _routerEndpoints.size()];
- _publishedEndpoints.toArray(endpoints);
-
- //
- // Now we also add the endpoints of the router's server proxy, if
- // any. This way, object references created by this object adapter
- // will also point to the router's server proxy endpoints.
- //
- for(int i = 0; i < _routerEndpoints.size(); ++i)
- {
- endpoints[sz + i] = _routerEndpoints.get(i);
- }
-
- //
- // Create a reference and return a proxy for this reference.
- //
- IceInternal.Reference ref = _instance.referenceFactory().create(ident, facet, _reference, endpoints);
- return _instance.proxyFactory().referenceToProxy(ref);
- }
-
- private ObjectPrx
- newIndirectProxy(Identity ident, String facet, String id)
- {
- //
- // Create a reference with the adapter id and return a proxy
- // for the reference.
- //
- IceInternal.Reference ref = _instance.referenceFactory().create(ident, facet, _reference, id);
- return _instance.proxyFactory().referenceToProxy(ref);
- }
-
- private void
- checkForDeactivation()
- {
- if(_state >= StateDeactivating)
- {
- ObjectAdapterDeactivatedException ex = new ObjectAdapterDeactivatedException();
- ex.name = getName();
- throw ex;
- }
- }
-
- private static void
- checkIdentity(Identity ident)
- {
- if(ident.name == null || ident.name.length() == 0)
- {
- throw new IllegalIdentityException(ident);
- }
-
- if(ident.category == null)
- {
- ident.category = "";
- }
- }
-
- private static void
- checkServant(Ice.Object servant)
- {
- if(servant == null)
- {
- throw new IllegalServantException("cannot add null servant to Object Adapter");
- }
- }
-
- private java.util.List<IceInternal.EndpointI>
- parseEndpoints(String endpts, boolean oaEndpoints)
- {
- int beg;
- int end = 0;
-
- final String delim = " \t\n\r";
-
- java.util.List<IceInternal.EndpointI> endpoints = new java.util.ArrayList<IceInternal.EndpointI>();
- while(end < endpts.length())
- {
- beg = IceUtilInternal.StringUtil.findFirstNotOf(endpts, delim, end);
- if(beg == -1)
- {
- break;
- }
-
- end = beg;
- while(true)
- {
- end = endpts.indexOf(':', end);
- if(end == -1)
- {
- end = endpts.length();
- break;
- }
- else
- {
- boolean quoted = false;
- int quote = beg;
- while(true)
- {
- quote = endpts.indexOf('\"', quote);
- if(quote == -1 || end < quote)
- {
- break;
- }
- else
- {
- quote = endpts.indexOf('\"', ++quote);
- if(quote == -1)
- {
- break;
- }
- else if(end < quote)
- {
- quoted = true;
- break;
- }
- ++quote;
- }
- }
- if(!quoted)
- {
- break;
- }
- ++end;
- }
- }
-
- if(end == beg)
- {
- ++end;
- continue;
- }
-
- String s = endpts.substring(beg, end);
- IceInternal.EndpointI endp = _instance.endpointFactoryManager().create(s, oaEndpoints);
- if(endp == null)
- {
- Ice.EndpointParseException e = new Ice.EndpointParseException();
- e.str = "invalid object adapter endpoint `" + s + "'";
- throw e;
- }
- endpoints.add(endp);
-
- ++end;
- }
-
- return endpoints;
- }
-
- private java.util.List<IceInternal.EndpointI>
- parsePublishedEndpoints()
- {
- //
- // Parse published endpoints. If set, these are used in proxies
- // instead of the connection factory Endpoints.
- //
- String endpts = _instance.initializationData().properties.getProperty(_name + ".PublishedEndpoints");
- java.util.List<IceInternal.EndpointI> endpoints = parseEndpoints(endpts, false);
- if(endpoints.isEmpty())
- {
- //
- // If the PublishedEndpoints property isn't set, we compute the published enpdoints
- // from the OA endpoints, expanding any endpoints that may be listening on INADDR_ANY
- // to include actual addresses in the published endpoints.
- //
- for(IceInternal.IncomingConnectionFactory factory : _incomingConnectionFactories)
- {
- endpoints.addAll(factory.endpoint().expand());
- }
- }
-
- if(_instance.traceLevels().network >= 1 && !endpoints.isEmpty())
- {
- StringBuffer s = new StringBuffer("published endpoints for object adapter `");
- s.append(_name);
- s.append("':\n");
- boolean first = true;
- for(IceInternal.EndpointI endpoint : endpoints)
- {
- if(!first)
- {
- s.append(":");
- }
- s.append(endpoint.toString());
- first = false;
- }
- _instance.initializationData().logger.trace(_instance.traceLevels().networkCat, s.toString());
- }
- return endpoints;
- }
-
- private void
- updateLocatorRegistry(IceInternal.LocatorInfo locatorInfo, Ice.ObjectPrx proxy, boolean registerProcess)
- {
- if(!registerProcess && _id.length() == 0)
- {
- return; // Nothing to update.
- }
-
- //
- // Call on the locator registry outside the synchronization to
- // blocking other threads that need to lock this OA.
- //
- LocatorRegistryPrx locatorRegistry = locatorInfo != null ? locatorInfo.getLocatorRegistry() : null;
- String serverId = "";
- if(registerProcess)
- {
- assert(_instance != null);
- serverId = _instance.initializationData().properties.getProperty("Ice.ServerId");
-
- if(locatorRegistry == null)
- {
- _instance.initializationData().logger.warning(
- "object adapter `" + getName() + "' cannot register the process without a locator registry");
- }
- else if(serverId.length() == 0)
- {
- _instance.initializationData().logger.warning(
- "object adapter `" + getName() + "' cannot register the process without a value for Ice.ServerId");
- }
- }
-
- if(locatorRegistry == null)
- {
- return;
- }
-
- if(_id.length() > 0)
- {
- try
- {
- if(_replicaGroupId.length() == 0)
- {
- locatorRegistry.setAdapterDirectProxy(_id, proxy);
- }
- else
- {
- locatorRegistry.setReplicatedAdapterDirectProxy(_id, _replicaGroupId, proxy);
- }
- }
- catch(AdapterNotFoundException ex)
- {
- if(_instance.traceLevels().location >= 1)
- {
- StringBuilder s = new StringBuilder(128);
- s.append("couldn't update object adapter `");
- s.append(_id);
- s.append("' endpoints with the locator registry:\n");
- s.append("the object adapter is not known to the locator registry");
- _instance.initializationData().logger.trace(_instance.traceLevels().locationCat, s.toString());
- }
-
- NotRegisteredException ex1 = new NotRegisteredException();
- ex1.kindOfObject = "object adapter";
- ex1.id = _id;
- throw ex1;
- }
- catch(InvalidReplicaGroupIdException ex)
- {
- if(_instance.traceLevels().location >= 1)
- {
- StringBuilder s = new StringBuilder(128);
- s.append("couldn't update object adapter `");
- s.append(_id);
- s.append("' endpoints with the locator registry:\n");
- s.append("the replica group `");
- s.append(_replicaGroupId);
- s.append("' is not known to the locator registry");
- _instance.initializationData().logger.trace(_instance.traceLevels().locationCat, s.toString());
- }
-
- NotRegisteredException ex1 = new NotRegisteredException();
- ex1.kindOfObject = "replica group";
- ex1.id = _replicaGroupId;
- throw ex1;
- }
- catch(AdapterAlreadyActiveException ex)
- {
- if(_instance.traceLevels().location >= 1)
- {
- StringBuilder s = new StringBuilder(128);
- s.append("couldn't update object adapter `");
- s.append(_id);
- s.append("' endpoints with the locator registry:\n");
- s.append("the object adapter endpoints are already set");
- _instance.initializationData().logger.trace(_instance.traceLevels().locationCat, s.toString());
- }
-
- ObjectAdapterIdInUseException ex1 = new ObjectAdapterIdInUseException();
- ex1.id = _id;
- throw ex1;
- }
- catch(LocalException e)
- {
- if(_instance.traceLevels().location >= 1)
- {
- StringBuilder s = new StringBuilder(128);
- s.append("couldn't update object adapter `");
- s.append(_id);
- s.append("' endpoints with the locator registry:\n");
- s.append(e.toString());
- _instance.initializationData().logger.trace(_instance.traceLevels().locationCat, s.toString());
- }
- throw e; // TODO: Shall we raise a special exception instead of a non obvious local exception?
- }
-
- if(_instance.traceLevels().location >= 1)
- {
- StringBuilder s = new StringBuilder(128);
- s.append("updated object adapter `");
- s.append(_id);
- s.append("' endpoints with the locator registry\n");
- s.append("endpoints = ");
- if(proxy != null)
- {
- Ice.Endpoint[] endpoints = proxy.ice_getEndpoints();
- for(int i = 0; i < endpoints.length; i++)
- {
- s.append(endpoints[i].toString());
- if(i + 1 < endpoints.length)
- {
- s.append(":");
- }
- }
- }
- _instance.initializationData().logger.trace(_instance.traceLevels().locationCat, s.toString());
- }
- }
-
- if(registerProcess && serverId.length() > 0)
- {
- synchronized(this)
- {
- if(_processId == null)
- {
- Process servant = new IceInternal.ProcessI(_communicator);
- _processId = addWithUUID(servant).ice_getIdentity();
- }
- }
-
- try
- {
- locatorRegistry.setServerProcessProxy(serverId,
- ProcessPrxHelper.uncheckedCast(createDirectProxy(_processId)));
- }
- catch(ServerNotFoundException ex)
- {
- if(_instance.traceLevels().location >= 1)
- {
- StringBuilder s = new StringBuilder(128);
- s.append("couldn't register server `");
- s.append(serverId);
- s.append("' with the locator registry:\n");
- s.append("the server is not known to the locator registry");
- _instance.initializationData().logger.trace(_instance.traceLevels().locationCat, s.toString());
- }
-
- NotRegisteredException ex1 = new NotRegisteredException();
- ex1.id = serverId;
- ex1.kindOfObject = "server";
- throw ex1;
- }
- catch(LocalException ex)
- {
- if(_instance.traceLevels().location >= 1)
- {
- StringBuilder s = new StringBuilder(128);
- s.append("couldn't register server `");
- s.append(serverId);
- s.append("' with the locator registry:\n");
- s.append(ex.toString());
- _instance.initializationData().logger.trace(_instance.traceLevels().locationCat, s.toString());
- }
- throw ex; // TODO: Shall we raise a special exception instead of a non-obvious local exception?
- }
-
- if(_instance.traceLevels().location >= 1)
- {
- StringBuilder s = new StringBuilder(128);
- s.append("registered server `");
- s.append(serverId);
- s.append("' with the locator registry");
- _instance.initializationData().logger.trace(_instance.traceLevels().locationCat, s.toString());
- }
- }
- }
-
- static private String[] _suffixes =
- {
- "ACM",
- "ACM.Timeout",
- "ACM.Heartbeat",
- "ACM.Close",
- "AdapterId",
- "Endpoints",
- "Locator",
- "Locator.EncodingVersion",
- "Locator.EndpointSelection",
- "Locator.ConnectionCached",
- "Locator.PreferSecure",
- "Locator.CollocationOptimized",
- "Locator.Router",
- "PublishedEndpoints",
- "RegisterProcess",
- "ReplicaGroupId",
- "Router",
- "Router.EncodingVersion",
- "Router.EndpointSelection",
- "Router.ConnectionCached",
- "Router.PreferSecure",
- "Router.CollocationOptimized",
- "Router.Locator",
- "Router.Locator.EndpointSelection",
- "Router.Locator.ConnectionCached",
- "Router.Locator.PreferSecure",
- "Router.Locator.CollocationOptimized",
- "Router.Locator.LocatorCacheTimeout",
- "Router.Locator.InvocationTimeout",
- "Router.LocatorCacheTimeout",
- "Router.InvocationTimeout",
- "ProxyOptions",
- "ThreadPool.Size",
- "ThreadPool.SizeMax",
- "ThreadPool.SizeWarn",
- "ThreadPool.StackSize",
- "ThreadPool.Serialize"
- };
-
- boolean
- filterProperties(java.util.List<String> unknownProps)
- {
- //
- // Do not create unknown properties list if Ice prefix, ie Ice, Glacier2, etc
- //
- boolean addUnknown = true;
- String prefix = _name + ".";
- for(int i = 0; IceInternal.PropertyNames.clPropNames[i] != null; ++i)
- {
- if(prefix.startsWith(IceInternal.PropertyNames.clPropNames[i] + "."))
- {
- addUnknown = false;
- break;
- }
- }
-
- boolean noProps = true;
- java.util.Map<String, String> props = _instance.initializationData().properties.getPropertiesForPrefix(prefix);
- for(String prop : props.keySet())
- {
- boolean valid = false;
- for(String suffix : _suffixes)
- {
- if(prop.equals(prefix + suffix))
- {
- noProps = false;
- valid = true;
- break;
- }
- }
-
- if(!valid && addUnknown)
- {
- unknownProps.add(prop);
- }
- }
-
- return noProps;
- }
-
- private static final int StateUninitialized = 0; // Just constructed.
- private static final int StateHeld = 1;
- private static final int StateWaitActivate = 2;
- private static final int StateActive = 3;
- private static final int StateDeactivating = 4;
- private static final int StateDeactivated = 5;
- private static final int StateDestroyed = 6;
-
- private int _state = StateUninitialized;
- private IceInternal.Instance _instance;
- private Communicator _communicator;
- private IceInternal.ObjectAdapterFactory _objectAdapterFactory;
- private IceInternal.ThreadPool _threadPool;
- private IceInternal.ACMConfig _acm;
- private IceInternal.ServantManager _servantManager;
- final private String _name;
- final private String _id;
- final private String _replicaGroupId;
- private IceInternal.Reference _reference;
- private java.util.List<IceInternal.IncomingConnectionFactory> _incomingConnectionFactories =
- new java.util.ArrayList<IceInternal.IncomingConnectionFactory>();
- private java.util.List<IceInternal.EndpointI> _routerEndpoints = new java.util.ArrayList<IceInternal.EndpointI>();
- private IceInternal.RouterInfo _routerInfo = null;
- private java.util.List<IceInternal.EndpointI> _publishedEndpoints =
- new java.util.ArrayList<IceInternal.EndpointI>();
- private IceInternal.LocatorInfo _locatorInfo;
- private int _directCount; // The number of direct proxies dispatching on this object adapter.
- private boolean _noConfig;
- private Identity _processId = null;
-}