diff options
author | Benoit Foucher <benoit@zeroc.com> | 2014-09-12 13:24:38 +0200 |
---|---|---|
committer | Benoit Foucher <benoit@zeroc.com> | 2014-09-12 13:24:38 +0200 |
commit | abeebf67ba35156606bbaabf073b496900f836cf (patch) | |
tree | 430212c34a1a1d4922fa11426e9fbd537fb98e52 /java/src | |
parent | Fixed dependencies (diff) | |
download | ice-abeebf67ba35156606bbaabf073b496900f836cf.tar.bz2 ice-abeebf67ba35156606bbaabf073b496900f836cf.tar.xz ice-abeebf67ba35156606bbaabf073b496900f836cf.zip |
Fixed ICE-5620: metrics admin creation in IceBox, fixed bug where timer wasn't instrumented
Diffstat (limited to 'java/src')
-rw-r--r-- | java/src/Ice/CommunicatorI.java | 2 | ||||
-rw-r--r-- | java/src/Ice/ConnectionI.java | 16 | ||||
-rw-r--r-- | java/src/IceBox/ServiceManagerI.java | 51 | ||||
-rw-r--r-- | java/src/IceInternal/CommunicatorObserverI.java | 26 | ||||
-rw-r--r-- | java/src/IceInternal/EndpointHostResolver.java | 38 | ||||
-rw-r--r-- | java/src/IceInternal/Incoming.java | 2 | ||||
-rw-r--r-- | java/src/IceInternal/Instance.java | 173 | ||||
-rw-r--r-- | java/src/IceInternal/MetricsAdminI.java | 8 | ||||
-rw-r--r-- | java/src/IceInternal/ObserverHelper.java | 5 | ||||
-rw-r--r-- | java/src/IceInternal/OutgoingConnectionFactory.java | 2 | ||||
-rw-r--r-- | java/src/IceInternal/ThreadPool.java | 2 |
11 files changed, 194 insertions, 131 deletions
diff --git a/java/src/Ice/CommunicatorI.java b/java/src/Ice/CommunicatorI.java index 3f0dcbebe8f..0e06c1959e5 100644 --- a/java/src/Ice/CommunicatorI.java +++ b/java/src/Ice/CommunicatorI.java @@ -154,7 +154,7 @@ public final class CommunicatorI implements Communicator public Ice.Instrumentation.CommunicatorObserver getObserver() { - return _instance.getObserver(); + return _instance.initializationData().observer; } @Override diff --git a/java/src/Ice/ConnectionI.java b/java/src/Ice/ConnectionI.java index 29a2bd5543c..cb3383bfb56 100644 --- a/java/src/Ice/ConnectionI.java +++ b/java/src/Ice/ConnectionI.java @@ -245,9 +245,11 @@ public final class ConnectionI extends IceInternal.EventHandler implements Conne return; } - assert (_instance.getObserver() != null); - _observer = _instance.getObserver().getConnectionObserver(initConnectionInfo(), _endpoint, - toConnectionState(_state), _observer); + assert (_instance.initializationData().observer != null); + _observer = _instance.initializationData().observer.getConnectionObserver(initConnectionInfo(), + _endpoint, + toConnectionState(_state), + _observer); if(_observer != null) { _observer.attach(); @@ -1881,14 +1883,16 @@ public final class ConnectionI extends IceInternal.EventHandler implements Conne } } - if(_instance.getObserver() != null) + if(_instance.initializationData().observer != null) { Ice.Instrumentation.ConnectionState oldState = toConnectionState(_state); Ice.Instrumentation.ConnectionState newState = toConnectionState(state); if(oldState != newState) { - _observer = _instance.getObserver().getConnectionObserver(initConnectionInfo(), _endpoint, newState, - _observer); + _observer = _instance.initializationData().observer.getConnectionObserver(initConnectionInfo(), + _endpoint, + newState, + _observer); if(_observer != null) { _observer.attach(); diff --git a/java/src/IceBox/ServiceManagerI.java b/java/src/IceBox/ServiceManagerI.java index 1f4cc9210d9..17d789f0fd9 100644 --- a/java/src/IceBox/ServiceManagerI.java +++ b/java/src/IceBox/ServiceManagerI.java @@ -354,27 +354,16 @@ public class ServiceManagerI extends _ServiceManagerDisp } // - // If Ice metrics are enabled on the IceBox communicator, we also enable them on the - // shared communicator. - // - IceInternal.MetricsAdminI metricsAdmin = null; - if(_communicator.getObserver() instanceof IceInternal.CommunicatorObserverI) + // If Ice metrics are enabled on the IceBox communicator, we also enable them on + // the service communicator. + // + if(_communicator.findAdminFacet("Metrics") != null && + initData.properties.getProperty("Ice.Admin.Metrics").isEmpty()) { - metricsAdmin = new IceInternal.MetricsAdminI(initData.properties, Ice.Util.getProcessLogger()); - initData.observer = new IceInternal.CommunicatorObserverI(metricsAdmin); + initData.properties.setProperty("Ice.Admin.Metrics", "1"); } _sharedCommunicator = Ice.Util.initialize(initData); - - // - // Ensure the metrics admin plugin uses the same property set as the - // communicator. This is necessary to correctly deal with runtime - // property updates. - // - if(metricsAdmin != null) - { - metricsAdmin.setProperties(_sharedCommunicator.getProperties()); - } } for(StartServiceInfo s : servicesInfo) @@ -564,16 +553,12 @@ public class ServiceManagerI extends _ServiceManagerDisp // commnunicator property set. // Ice.Communicator communicator; - IceInternal.MetricsAdminI metricsAdmin = null; + Ice.Object metricsAdmin = null; if(_communicator.getProperties().getPropertyAsInt("IceBox.UseSharedCommunicator." + service) > 0) { assert(_sharedCommunicator != null); communicator = _sharedCommunicator; - if(communicator.getObserver() instanceof IceInternal.CommunicatorObserverI) - { - IceInternal.CommunicatorObserverI o = (IceInternal.CommunicatorObserverI)communicator.getObserver(); - metricsAdmin = o.getMetricsAdmin(); - } + metricsAdmin = _sharedCommunicator.findAdminFacet("Metrics"); } else { @@ -615,11 +600,11 @@ public class ServiceManagerI extends _ServiceManagerDisp // // If Ice metrics are enabled on the IceBox communicator, we also enable them on // the service communicator. - // - if(_communicator.getObserver() instanceof IceInternal.CommunicatorObserverI) + // + if(_communicator.findAdminFacet("Metrics") != null && + initData.properties.getProperty("Ice.Admin.Metrics").isEmpty()) { - metricsAdmin = new IceInternal.MetricsAdminI(initData.properties, initData.logger); - initData.observer = new IceInternal.CommunicatorObserverI(metricsAdmin); + initData.properties.setProperty("Ice.Admin.Metrics", "1"); } // @@ -630,15 +615,7 @@ public class ServiceManagerI extends _ServiceManagerDisp info.args = serviceArgs.value; communicator = info.communicator; - // - // Ensure the metrics admin plugin uses the same property set as the - // communicator. This is necessary to correctly deal with runtime - // property updates. - // - if(metricsAdmin != null) - { - metricsAdmin.setProperties(communicator.getProperties()); - } + metricsAdmin = communicator.findAdminFacet("Metrics"); } catch(Throwable ex) { @@ -672,7 +649,7 @@ public class ServiceManagerI extends _ServiceManagerDisp _communicator.addAdminFacet(metricsAdmin, "IceBox.Service." + info.name + ".Metrics"); // Ensure the metrics admin facet is notified of property updates. - propAdmin.addUpdateCallback(metricsAdmin); + propAdmin.addUpdateCallback((Ice.PropertiesAdminUpdateCallback)metricsAdmin); } // diff --git a/java/src/IceInternal/CommunicatorObserverI.java b/java/src/IceInternal/CommunicatorObserverI.java index 12360515ef4..76e7e2b7d6c 100644 --- a/java/src/IceInternal/CommunicatorObserverI.java +++ b/java/src/IceInternal/CommunicatorObserverI.java @@ -593,29 +593,23 @@ public class CommunicatorObserverI implements Ice.Instrumentation.CommunicatorOb }; public - CommunicatorObserverI(IceInternal.MetricsAdminI metrics) + CommunicatorObserverI(Ice.InitializationData initData) { - this(metrics, null); - } - - public - CommunicatorObserverI(IceInternal.MetricsAdminI metrics, Ice.Instrumentation.CommunicatorObserver delegate) - { - _metrics = metrics; - _delegate = delegate; + _metrics = new MetricsAdminI(initData.properties, initData.logger); + _delegate = initData.observer; _connections = new ObserverFactoryWithDelegate<ConnectionMetrics, ConnectionObserverI, - Ice.Instrumentation.ConnectionObserver>(metrics, "Connection", ConnectionMetrics.class); + Ice.Instrumentation.ConnectionObserver>(_metrics, "Connection", ConnectionMetrics.class); _dispatch = new ObserverFactoryWithDelegate<DispatchMetrics, DispatchObserverI, - Ice.Instrumentation.DispatchObserver>(metrics, "Dispatch", DispatchMetrics.class); + Ice.Instrumentation.DispatchObserver>(_metrics, "Dispatch", DispatchMetrics.class); _invocations = new ObserverFactoryWithDelegate<InvocationMetrics, InvocationObserverI, - Ice.Instrumentation.InvocationObserver>(metrics, "Invocation", InvocationMetrics.class); + Ice.Instrumentation.InvocationObserver>(_metrics, "Invocation", InvocationMetrics.class); _threads = new ObserverFactoryWithDelegate<ThreadMetrics, ThreadObserverI, - Ice.Instrumentation.ThreadObserver>(metrics, "Thread", ThreadMetrics.class); + Ice.Instrumentation.ThreadObserver>(_metrics, "Thread", ThreadMetrics.class); _connects = new ObserverFactoryWithDelegate<Metrics, ObserverWithDelegateI, - Ice.Instrumentation.Observer>(metrics, "ConnectionEstablishment", Metrics.class); + Ice.Instrumentation.Observer>(_metrics, "ConnectionEstablishment", Metrics.class); _endpointLookups = new ObserverFactoryWithDelegate<Metrics, ObserverWithDelegateI, - Ice.Instrumentation.Observer>(metrics, "EndpointLookup", Metrics.class); + Ice.Instrumentation.Observer>(_metrics, "EndpointLookup", Metrics.class); try { @@ -811,7 +805,7 @@ public class CommunicatorObserverI implements Ice.Instrumentation.CommunicatorOb } } - public IceInternal.MetricsAdminI getMetricsAdmin() + public IceInternal.MetricsAdminI getFacet() { return _metrics; } diff --git a/java/src/IceInternal/EndpointHostResolver.java b/java/src/IceInternal/EndpointHostResolver.java index 42e845b1762..896eb21b8a1 100644 --- a/java/src/IceInternal/EndpointHostResolver.java +++ b/java/src/IceInternal/EndpointHostResolver.java @@ -48,7 +48,7 @@ class EndpointHostResolver } } - Ice.Instrumentation.CommunicatorObserver obsv = _instance.getObserver(); + Ice.Instrumentation.CommunicatorObserver obsv = _instance.initializationData().observer; Ice.Instrumentation.Observer observer = null; if(obsv != null) { @@ -142,14 +142,14 @@ class EndpointHostResolver } } - try + if(threadObserver != null) { - if(threadObserver != null) - { - threadObserver.stateChanged(Ice.Instrumentation.ThreadState.ThreadStateIdle, - Ice.Instrumentation.ThreadState.ThreadStateInUseForOther); - } + threadObserver.stateChanged(Ice.Instrumentation.ThreadState.ThreadStateIdle, + Ice.Instrumentation.ThreadState.ThreadStateInUseForOther); + } + try + { int protocol = _protocol; NetworkProxy networkProxy = _instance.networkProxy(); if(networkProxy != null) @@ -167,33 +167,27 @@ class EndpointHostResolver selType, _preferIPv6, true), - networkProxy)); - - if(threadObserver != null) - { - threadObserver.stateChanged(Ice.Instrumentation.ThreadState.ThreadStateInUseForOther, - Ice.Instrumentation.ThreadState.ThreadStateIdle); - } - + networkProxy)); + } + catch(Ice.LocalException ex) + { if(observer != null) { - observer.detach(); + observer.failed(ex.ice_name()); } + callback.exception(ex); } - catch(Ice.LocalException ex) + finally { if(threadObserver != null) { threadObserver.stateChanged(Ice.Instrumentation.ThreadState.ThreadStateInUseForOther, Ice.Instrumentation.ThreadState.ThreadStateIdle); } - if(observer != null) { - observer.failed(ex.ice_name()); observer.detach(); } - callback.exception(ex); } } }); @@ -230,7 +224,7 @@ class EndpointHostResolver synchronized void updateObserver() { - Ice.Instrumentation.CommunicatorObserver obsv = _instance.getObserver(); + Ice.Instrumentation.CommunicatorObserver obsv = _instance.initializationData().observer; if(obsv != null) { _observer = obsv.getThreadObserver("Communicator", _threadName, @@ -246,7 +240,7 @@ class EndpointHostResolver private Ice.Instrumentation.Observer getObserver(IPEndpointI endpoint) { - Ice.Instrumentation.CommunicatorObserver obsv = _instance.getObserver(); + Ice.Instrumentation.CommunicatorObserver obsv = _instance.initializationData().observer; if(obsv != null) { return obsv.getEndpointLookupObserver(endpoint); diff --git a/java/src/IceInternal/Incoming.java b/java/src/IceInternal/Incoming.java index a9b3faa8b5c..cc9742cd295 100644 --- a/java/src/IceInternal/Incoming.java +++ b/java/src/IceInternal/Incoming.java @@ -117,7 +117,7 @@ final public class Incoming extends IncomingBase implements Ice.Request _current.ctx.put(first, second); } - CommunicatorObserver obsv = _instance.getObserver(); + CommunicatorObserver obsv = _instance.initializationData().observer; if(obsv != null) { // Read the parameter encapsulation size. diff --git a/java/src/IceInternal/Instance.java b/java/src/IceInternal/Instance.java index c667a98404d..2146b5f059f 100644 --- a/java/src/IceInternal/Instance.java +++ b/java/src/IceInternal/Instance.java @@ -17,6 +17,116 @@ import Ice.CommunicatorDestroyedException; public final class Instance { + static private class ThreadObserverHelper + { + ThreadObserverHelper(String threadName) + { + _threadName = threadName; + } + + synchronized public void updateObserver(Ice.Instrumentation.CommunicatorObserver obsv) + { + assert(obsv != null); + + _observer = obsv.getThreadObserver("Communicator", + _threadName, + Ice.Instrumentation.ThreadState.ThreadStateIdle, + _observer); + if(_observer != null) + { + _observer.attach(); + } + } + + protected void beforeExecute() + { + _threadObserver = _observer; + if(_threadObserver != null) + { + _threadObserver.stateChanged(Ice.Instrumentation.ThreadState.ThreadStateIdle, + Ice.Instrumentation.ThreadState.ThreadStateInUseForOther); + } + } + + protected void afterExecute() + { + if(_threadObserver != null) + { + _threadObserver.stateChanged(Ice.Instrumentation.ThreadState.ThreadStateInUseForOther, + Ice.Instrumentation.ThreadState.ThreadStateIdle); + _threadObserver = null; + } + } + + final private String _threadName; + // + // We use a volatile to avoid synchronization when reading + // _observer. Reference assignement is atomic in Java so it + // also doesn't need to be synchronized. + // + private volatile Ice.Instrumentation.ThreadObserver _observer; + private Ice.Instrumentation.ThreadObserver _threadObserver; + }; + + static private class Timer extends java.util.concurrent.ScheduledThreadPoolExecutor + { + Timer(Ice.Properties props, String threadName) + { + super(1, Util.createThreadFactory(props, threadName)); // Single thread executor + setRemoveOnCancelPolicy(true); + setExecuteExistingDelayedTasksAfterShutdownPolicy(false); + _observerHelper = new ThreadObserverHelper(threadName); + } + + public void updateObserver(Ice.Instrumentation.CommunicatorObserver obsv) + { + _observerHelper.updateObserver(obsv); + } + + @Override + protected void beforeExecute(Thread t, Runnable r) + { + _observerHelper.beforeExecute(); + } + + @Override + protected void afterExecute(Runnable t, Throwable e) + { + _observerHelper.afterExecute(); + } + + private final ThreadObserverHelper _observerHelper; + }; + + static private class QueueExecutor extends java.util.concurrent.ThreadPoolExecutor + { + QueueExecutor(Ice.Properties props, String threadName) + { + super(1, 1, 0, TimeUnit.MILLISECONDS, new java.util.concurrent.LinkedBlockingQueue<Runnable>(), + Util.createThreadFactory(props, threadName)); + _observerHelper = new ThreadObserverHelper(threadName); + } + + public void updateObserver(Ice.Instrumentation.CommunicatorObserver obsv) + { + _observerHelper.updateObserver(obsv); + } + + @Override + protected void beforeExecute(Thread t, Runnable r) + { + _observerHelper.beforeExecute(); + } + + @Override + protected void afterExecute(Runnable t, Throwable e) + { + _observerHelper.afterExecute(); + } + + private final ThreadObserverHelper _observerHelper; + }; + private class ObserverUpdaterI implements Ice.Instrumentation.ObserverUpdater { @Override @@ -505,13 +615,6 @@ public final class Instance return result; } - public Ice.Instrumentation.CommunicatorObserver - getObserver() - { - return _observer; // Immutable - } - - public synchronized void setDefaultLocator(Ice.LocatorPrx locator) { @@ -809,8 +912,6 @@ public final class Instance } PropertiesAdminI propsAdmin = null; - MetricsAdminI metricsAdmin = null; - if(_adminEnabled) { String[] facetFilter = _initData.properties.getPropertyAsList("Ice.Admin.Facets"); @@ -821,9 +922,6 @@ public final class Instance _adminFacets.put("Process", new ProcessI(communicator)); - metricsAdmin = new MetricsAdminI(_initData.properties, _initData.logger); - _adminFacets.put("Metrics", metricsAdmin); - propsAdmin = new PropertiesAdminI("Properties", _initData.properties, _initData.logger); _adminFacets.put("Properties", propsAdmin); } @@ -832,25 +930,26 @@ public final class Instance // Setup the communicator observer only if the user didn't already set an // Ice observer resolver and Admin is enabled // - if(_adminEnabled && (_adminFacetFilter.isEmpty() || _adminFacetFilter.contains("Metrics"))) + if((_adminEnabled && (_adminFacetFilter.isEmpty() || _adminFacetFilter.contains("Metrics"))) || + _initData.properties.getPropertyAsInt("Ice.Admin.Metrics") > 0) { - _observer = new CommunicatorObserverI(metricsAdmin, _initData.observer); + CommunicatorObserverI observer = new CommunicatorObserverI(_initData); + _initData.observer = observer; + _adminFacets.put("Metrics", observer.getFacet()); // // Make sure the admin plugin receives property updates. // - propsAdmin.addUpdateCallback(metricsAdmin); - } - else - { - _observer = _initData.observer; + if(propsAdmin != null) + { + propsAdmin.addUpdateCallback(observer.getFacet()); + } } if(_initData.properties.getPropertyAsInt("Ice.BackgroundIO") > 0) { - _queueExecutor = Executors.newFixedThreadPool(1, - Util.createThreadFactory(_initData.properties, - Util.createThreadName(_initData.properties, "Ice.BackgroundIO"))); + _queueExecutor = new QueueExecutor(_initData.properties, + Util.createThreadName(_initData.properties, "Ice.BackgroundIO")); } _cacheMessageBuffers = _initData.properties.getPropertyAsIntWithDefault("Ice.CacheMessageBuffers", 2); } @@ -906,9 +1005,9 @@ public final class Instance // // Set observer updater // - if(_observer != null) + if(_initData.observer != null) { - _observer.setObserverUpdater(new ObserverUpdaterI()); + _initData.observer.setObserverUpdater(new ObserverUpdaterI()); } // @@ -916,14 +1015,7 @@ public final class Instance // try { - java.util.concurrent.ScheduledThreadPoolExecutor executor = - new java.util.concurrent.ScheduledThreadPoolExecutor(1, - Util.createThreadFactory(_initData.properties, - Util.createThreadName(_initData.properties, "Ice.Timer"))); - - executor.setRemoveOnCancelPolicy(true); - executor.setExecuteExistingDelayedTasksAfterShutdownPolicy(false); - _timer = executor; + _timer = new Timer(_initData.properties, Util.createThreadName(_initData.properties, "Ice.Timer")); } catch(RuntimeException ex) { @@ -1051,9 +1143,9 @@ public final class Instance _retryQueue.destroy(); } - if(_observer != null) + if(_initData.observer != null) { - _observer.setObserverUpdater(null); + _initData.observer.setObserverUpdater(null); } ThreadPool serverThreadPool = null; @@ -1234,6 +1326,14 @@ public final class Instance { _endpointHostResolver.updateObserver(); } + if(_timer != null) + { + _timer.updateObserver(_initData.observer); + } + if(_queueExecutor != null) + { + _queueExecutor.updateObserver(_initData.observer); + } } catch(Ice.CommunicatorDestroyedException ex) { @@ -1405,7 +1505,6 @@ public final class Instance private final ACMConfig _clientACM; // Immutable, not reset by destroy(). private final ACMConfig _serverACM; // Immutable, not reset by destroy(). private final Ice.ImplicitContextI _implicitContext; - private final Ice.Instrumentation.CommunicatorObserver _observer; private RouterManager _routerManager; private LocatorManager _locatorManager; private ReferenceFactory _referenceFactory; @@ -1420,7 +1519,7 @@ public final class Instance private ThreadPool _serverThreadPool; private EndpointHostResolver _endpointHostResolver; private RetryQueue _retryQueue; - private java.util.concurrent.ScheduledExecutorService _timer; + private Timer _timer; private EndpointFactoryManager _endpointFactoryManager; private Ice.PluginManager _pluginManager; @@ -1435,5 +1534,5 @@ public final class Instance final private boolean _useApplicationClassLoader; private static boolean _oneOfDone = false; - private ExecutorService _queueExecutor; + private QueueExecutor _queueExecutor; } diff --git a/java/src/IceInternal/MetricsAdminI.java b/java/src/IceInternal/MetricsAdminI.java index ef92f9c0a5f..8f8eec0667f 100644 --- a/java/src/IceInternal/MetricsAdminI.java +++ b/java/src/IceInternal/MetricsAdminI.java @@ -329,12 +329,6 @@ public class MetricsAdminI extends IceMX._MetricsAdminDisp implements Ice.Proper return _logger; } - public void - setProperties(Ice.Properties properties) - { - _properties = properties; - } - @Override public void updated(java.util.Map<String, String> props) @@ -403,4 +397,4 @@ public class MetricsAdminI extends IceMX._MetricsAdminDisp implements Ice.Proper private java.util.Map<String, MetricsViewI> _views = new java.util.HashMap<String, MetricsViewI>(); private java.util.Set<String> _disabledViews = new java.util.HashSet<String>(); -}
\ No newline at end of file +} diff --git a/java/src/IceInternal/ObserverHelper.java b/java/src/IceInternal/ObserverHelper.java index 9ad83d5a3d7..bb6edb015c1 100644 --- a/java/src/IceInternal/ObserverHelper.java +++ b/java/src/IceInternal/ObserverHelper.java @@ -17,7 +17,7 @@ public final class ObserverHelper static public InvocationObserver get(Instance instance, String op) { - CommunicatorObserver obsv = instance.getObserver(); + CommunicatorObserver obsv = instance.initializationData().observer; if(obsv != null) { InvocationObserver observer = obsv.getInvocationObserver(null, op, _emptyContext); @@ -39,7 +39,8 @@ public final class ObserverHelper static public InvocationObserver get(Ice.ObjectPrx proxy, String op, java.util.Map<String, String> context) { - CommunicatorObserver obsv = ((Ice.ObjectPrxHelperBase)proxy).__reference().getInstance().getObserver(); + CommunicatorObserver obsv = + ((Ice.ObjectPrxHelperBase)proxy).__reference().getInstance().initializationData().observer; if(obsv != null) { InvocationObserver observer; diff --git a/java/src/IceInternal/OutgoingConnectionFactory.java b/java/src/IceInternal/OutgoingConnectionFactory.java index 773d735faff..e2182170ffa 100644 --- a/java/src/IceInternal/OutgoingConnectionFactory.java +++ b/java/src/IceInternal/OutgoingConnectionFactory.java @@ -1071,7 +1071,7 @@ public final class OutgoingConnectionFactory assert(_iter.hasNext()); _current = _iter.next(); - Ice.Instrumentation.CommunicatorObserver obsv = _factory._instance.getObserver(); + Ice.Instrumentation.CommunicatorObserver obsv = _factory._instance.initializationData().observer; if(obsv != null) { _observer = obsv.getConnectionEstablishmentObserver(_current.endpoint, diff --git a/java/src/IceInternal/ThreadPool.java b/java/src/IceInternal/ThreadPool.java index c5c26eea65a..291f2973e3b 100644 --- a/java/src/IceInternal/ThreadPool.java +++ b/java/src/IceInternal/ThreadPool.java @@ -778,7 +778,7 @@ public final class ThreadPool updateObserver() { // Must be called with the thread pool mutex locked - Ice.Instrumentation.CommunicatorObserver obsv = _instance.getObserver(); + Ice.Instrumentation.CommunicatorObserver obsv = _instance.initializationData().observer; if(obsv != null) { _observer = obsv.getThreadObserver(_prefix, _name, _state, _observer); |