summaryrefslogtreecommitdiff
path: root/java/src/IceInternal/Instance.java
diff options
context:
space:
mode:
Diffstat (limited to 'java/src/IceInternal/Instance.java')
-rw-r--r--java/src/IceInternal/Instance.java65
1 files changed, 62 insertions, 3 deletions
diff --git a/java/src/IceInternal/Instance.java b/java/src/IceInternal/Instance.java
index 3e9367fad00..55119014184 100644
--- a/java/src/IceInternal/Instance.java
+++ b/java/src/IceInternal/Instance.java
@@ -11,6 +11,36 @@ package IceInternal;
public final class Instance
{
+ private class ObserverUpdaterI implements Ice.Instrumentation.ObserverUpdater
+ {
+ ObserverUpdaterI(Instance instance)
+ {
+ _instance = instance;
+ }
+
+ @Override public void
+ updateConnectionObservers()
+ {
+ _instance.outgoingConnectionFactory().updateConnectionObservers();
+ _instance.objectAdapterFactory().updateConnectionObservers();
+ }
+
+ @Override public void
+ updateThreadObservers()
+ {
+ _instance.clientThreadPool().updateObservers();
+ ThreadPool serverThreadPool = _instance.serverThreadPool(false);
+ if(serverThreadPool != null)
+ {
+ serverThreadPool.updateObservers();
+ }
+ _instance.objectAdapterFactory().updateThreadObservers();
+ _instance.endpointHostResolver().updateObserver();
+ }
+
+ final private Instance _instance;
+ }
+
public Ice.InitializationData
initializationData()
{
@@ -159,14 +189,14 @@ public final class Instance
}
public synchronized ThreadPool
- serverThreadPool()
+ serverThreadPool(boolean create)
{
if(_state == StateDestroyed)
{
throw new Ice.CommunicatorDestroyedException();
}
- if(_serverThreadPool == null) // Lazy initialization.
+ if(_serverThreadPool == null && create) // Lazy initialization.
{
int timeout = _initData.properties.getPropertyAsInt("Ice.ServerIdleTime");
_serverThreadPool = new ThreadPool(this, "Ice.ThreadPool.Server", timeout);
@@ -726,9 +756,30 @@ public final class Instance
_adminFacetFilter.addAll(java.util.Arrays.asList(facetFilter));
}
- _adminFacets.put("Properties", new PropertiesAdminI("Properties", _initData.properties, _initData.logger));
_adminFacets.put("Process", new ProcessI(communicator));
+ MetricsAdminI admin = new MetricsAdminI(_initData.properties, _initData.logger);
+ _adminFacets.put("MetricsAdmin", admin);
+
+ PropertiesAdminI props = new PropertiesAdminI("Properties", _initData.properties, _initData.logger);
+ _adminFacets.put("Properties", props);
+
+ //
+ // Setup the communicator observer only if the user didn't already set an
+ // Ice observer resolver and if the admininistrative endpoints are set.
+ //
+ if(_initData.observer == null &&
+ (_adminFacetFilter.isEmpty() || _adminFacetFilter.contains("MetricsAdmin")) &&
+ _initData.properties.getProperty("Ice.Admin.Endpoints").length() > 0)
+ {
+ IceMX.CommunicatorObserverI observer = new IceMX.CommunicatorObserverI(admin);
+ _initData.observer = observer;
+
+ //
+ // Make sure the admin plugin receives property updates.
+ //
+ props.addUpdateCallback(admin);
+ }
}
catch(Ice.LocalException ex)
{
@@ -780,6 +831,14 @@ public final class Instance
pluginManagerImpl.loadPlugins(args);
//
+ // Set observer updater
+ //
+ if(_initData.observer != null)
+ {
+ _initData.observer.setObserverUpdater(new ObserverUpdaterI(this));
+ }
+
+ //
// Create threads.
//
try