public ObjectName getByServiceAndRefName(String namespace, String serviceType, String refName) { Map<String, Map<String, Map<String, String>>> mappedServices = getMappedServices(); Map<String, Map<String, String>> serviceNameToRefNameToInstance = mappedServices.get(namespace); Preconditions.checkArgument( serviceNameToRefNameToInstance != null, "No service mapped to %s:%s:%s. Wrong namespace, available namespaces: %s", namespace, serviceType, refName, mappedServices.keySet()); Map<String, String> refNameToInstance = serviceNameToRefNameToInstance.get(serviceType); Preconditions.checkArgument( refNameToInstance != null, "No service mapped to %s:%s:%s. Wrong service type, available service types: %s", namespace, serviceType, refName, serviceNameToRefNameToInstance.keySet()); String instanceId = refNameToInstance.get(refName); Preconditions.checkArgument( instanceId != null, "No service mapped to %s:%s:%s. Wrong ref name, available ref names: %s", namespace, serviceType, refName, refNameToInstance.keySet()); Services.ServiceInstance serviceInstance = Services.ServiceInstance.fromString(instanceId); Preconditions.checkArgument( serviceInstance != null, "No service mapped to %s:%s:%s. Wrong ref name, available ref names: %s", namespace, serviceType, refName, refNameToInstance.keySet()); String qNameOfService = configServiceRefRegistry.getServiceInterfaceName(namespace, serviceType); try { /* Remove transaction name as this is redundant - will be stripped in DynamicWritableWrapper, and makes it hard to compare with service references got from MXBean attributes */ return ObjectNameUtil.withoutTransactionName( configServiceRefRegistry.getServiceReference(qNameOfService, refName)); } catch (InstanceNotFoundException e) { throw new IllegalArgumentException( "No serviceInstance mapped to " + refName + " under service name " + serviceType + " , " + refNameToInstance.keySet(), e); } }
public Map<String, Map<String, Map<String, String>>> getMappedServices() { Map<String, Map<String, Map<String, String>>> retVal = Maps.newHashMap(); Map<String, Map<String, ObjectName>> serviceMapping = configServiceRefRegistry.getServiceMapping(); for (Map.Entry<String, Map<String, ObjectName>> qNameToRefNameEntry : serviceMapping.entrySet()) { for (String refName : qNameToRefNameEntry.getValue().keySet()) { ObjectName on = qNameToRefNameEntry.getValue().get(refName); Services.ServiceInstance si = Services.ServiceInstance.fromObjectName(on); QName qname = QName.create(qNameToRefNameEntry.getKey()); String namespace = qname.getNamespace().toString(); Map<String, Map<String, String>> serviceToRefs = retVal.get(namespace); if (serviceToRefs == null) { serviceToRefs = Maps.newHashMap(); retVal.put(namespace, serviceToRefs); } String localName = qname.getLocalName(); Map<String, String> refsToSis = serviceToRefs.get(localName); if (refsToSis == null) { refsToSis = Maps.newHashMap(); serviceToRefs.put(localName, refsToSis); } Preconditions.checkState( !refsToSis.containsKey(refName), "Duplicate reference name %s for service %s:%s, now for instance %s", refName, namespace, localName, on); refsToSis.put(refName, si.toString()); } } return retVal; }