summaryrefslogtreecommitdiff
path: root/java/src/IceInternal/ObjectAdapterFactory.java
diff options
context:
space:
mode:
authorDwayne Boone <dwayne@zeroc.com>2007-01-05 18:44:54 +0000
committerDwayne Boone <dwayne@zeroc.com>2007-01-05 18:44:54 +0000
commitf6e5f4fa31eb7ca5ae0c6301b579da2752606950 (patch)
tree6198903725faacfb92fa6758a3b65a9812ff41ab /java/src/IceInternal/ObjectAdapterFactory.java
parentfix header file symlink target location for db45 (diff)
downloadice-f6e5f4fa31eb7ca5ae0c6301b579da2752606950.tar.bz2
ice-f6e5f4fa31eb7ca5ae0c6301b579da2752606950.tar.xz
ice-f6e5f4fa31eb7ca5ae0c6301b579da2752606950.zip
Added ObjectAdapter::destroy
Diffstat (limited to 'java/src/IceInternal/ObjectAdapterFactory.java')
-rw-r--r--java/src/IceInternal/ObjectAdapterFactory.java42
1 files changed, 32 insertions, 10 deletions
diff --git a/java/src/IceInternal/ObjectAdapterFactory.java b/java/src/IceInternal/ObjectAdapterFactory.java
index f9dda51e09f..6d1a76509d6 100644
--- a/java/src/IceInternal/ObjectAdapterFactory.java
+++ b/java/src/IceInternal/ObjectAdapterFactory.java
@@ -92,15 +92,6 @@ public final class ObjectAdapterFactory
Ice.ObjectAdapter adapter = (Ice.ObjectAdapter)i.next();
adapter.waitForDeactivate();
}
-
- //
- // We're done, now we can throw away the object adapters.
- //
- // For consistency with C#, we set _adapters to null
- // so that our finalizer does not try to invoke any
- // methods on member objects.
- //
- _adapters = null;
}
synchronized(this)
@@ -112,6 +103,37 @@ public final class ObjectAdapterFactory
notifyAll();
}
}
+
+ public void
+ destroy()
+ {
+ //
+ // First wait for shutdown to finish.
+ //
+ waitForShutdown();
+
+ Ice.ObjectAdapter[] adapters;
+
+ synchronized(this)
+ {
+ adapters = (Ice.ObjectAdapter[])_adapters.values().toArray(new Ice.ObjectAdapter[0]);
+
+ //
+ // For consistency with C#, we set _adapters to null
+ // so that our finalizer does not try to invoke any
+ // methods on member objects.
+ //
+ _adapters = null;
+ }
+
+ //
+ // Now we destroy each object adapter.
+ //
+ for(int i = 0; i < adapters.length; ++i)
+ {
+ adapters[i].destroy();
+ }
+ }
public synchronized Ice.ObjectAdapter
createObjectAdapter(String name, String endpoints, Ice.RouterPrx router)
@@ -179,7 +201,7 @@ public final class ObjectAdapterFactory
public synchronized void
removeObjectAdapter(String name)
{
- if(_waitForShutdown)
+ if(_waitForShutdown || _adapters == null)
{
return;
}