@Override public void notifyProducerRegistered(IStatsProducer producer) { log.info("Producer registered: "+producer.getProducerId()+" / "+producer); if (_cachedProducerList==null) return; synchronized(cacheLock){ ProducerReference pr = new ProducerReference(producer); _cachedProducerList.add(pr); _cachedProducerMap.put(producer.getProducerId(), pr); } }
/** * Rebuilds the caches with given producers.. */ private void rebuildProducerCache(Collection<IStatsProducer> producers){ log.debug("Rebuilding producer cache with "+producers.size()+" producers."); log.debug("Following producers known: "+producers); synchronized(cacheLock){ //lets create lists with more place to store as actually need, we will probably need it. final int approxSize = (int)(producers.size()*1.5); _cachedProducerList = new ArrayList<ProducerReference>(approxSize); _cachedProducerMap = new HashMap<String,ProducerReference>(approxSize); for (IStatsProducer sp : producers){ final ProducerReference reference = new ProducerReference(sp); _cachedProducerList.add(reference); _cachedProducerMap.put(sp.getProducerId(), reference); } } if (log.isDebugEnabled()){ log.debug("Cachedproducer list contains "+_cachedProducerList.size()+" producers: "); log.debug(String.valueOf(_cachedProducerList)); log.debug("Cached producer map contains: "+_cachedProducerMap.size()+" producers"); log.debug(String.valueOf(_cachedProducerMap)); } }
@Override public void registerProducer(IStatsProducer producer) { //null pointer exceptions in the toString method of the producer shouldn't crash here. String producerToString = null; try { producerToString = producer.toString(); } catch (Exception e) { producerToString = "Illegal to string method: " + e.getMessage() + ", " + e.getClass(); } LOGGER.info("Registry register producer: " + producer.getProducerId() + " / " + producerToString); ProducerReference previousRef = registry.putIfAbsent(producer.getProducerId(), new ProducerReference(producer)); IStatsProducer previous = (previousRef == null) ? null : previousRef.get(); if (previous != null) { LOGGER.info("Under this name a producer was already registered: " + previous); } else { for (IProducerRegistryListener listener : listeners) { listener.notifyProducerRegistered(producer); } } }