X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-distributed-datastore%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fcluster%2Fdatastore%2Fjmx%2Fmbeans%2Fshard%2FShardMBeanFactory.java;h=4a7752aec1535454913894ef31de0f2ce427e647;hp=a3359086b6efdc6eea954eeb6168eb1edf906ff8;hb=ed6019236d78a69577888f60064c3714eaa80f6a;hpb=6d73d16b194435ea1ea783a37d1b51fc1f558a1f diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/jmx/mbeans/shard/ShardMBeanFactory.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/jmx/mbeans/shard/ShardMBeanFactory.java index a3359086b6..4a7752aec1 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/jmx/mbeans/shard/ShardMBeanFactory.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/jmx/mbeans/shard/ShardMBeanFactory.java @@ -1,26 +1,45 @@ +/* + * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ package org.opendaylight.controller.cluster.datastore.jmx.mbeans.shard; -import java.util.HashMap; -import java.util.Map; +import com.google.common.cache.Cache; +import com.google.common.cache.CacheBuilder; +import java.util.concurrent.Callable; +import java.util.concurrent.ExecutionException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** - * @author: syedbahm - * Date: 7/16/14 + * @author Basheeruddin syedbahm@cisco.com + * */ public class ShardMBeanFactory { - private static Map shardMBeans= new HashMap(); - public static ShardStats getShardStatsMBean(String shardName){ - if(shardMBeans.containsKey(shardName)){ - return shardMBeans.get(shardName); - }else { - ShardStats shardStatsMBeanImpl = new ShardStats(shardName); + private static final Logger LOG = LoggerFactory.getLogger(ShardMBeanFactory.class); - if(shardStatsMBeanImpl.registerMBean()) { - shardMBeans.put(shardName, shardStatsMBeanImpl); - } - return shardStatsMBeanImpl; - } - } + private static final Cache shardMBeansCache = + CacheBuilder.newBuilder().weakValues().build(); + public static ShardStats getShardStatsMBean(final String shardName, final String mxBeanType) { + final String finalMXBeanType = mxBeanType != null ? mxBeanType : "DistDataStore"; + try { + return shardMBeansCache.get(shardName, new Callable() { + @Override + public ShardStats call() throws Exception { + ShardStats shardStatsMBeanImpl = new ShardStats(shardName, finalMXBeanType); + shardStatsMBeanImpl.registerMBean(); + return shardStatsMBeanImpl; + } + }); + } catch(ExecutionException e) { + LOG.error(String.format("Could not create MXBean for shard: %s", shardName), e); + // Just return an instance that isn't registered. + return new ShardStats(shardName, finalMXBeanType); + } + } }