X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fconfig%2Fconfig-manager%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fconfig%2Fmanager%2Fimpl%2Fjmx%2FServiceReferenceRegistrator.java;fp=opendaylight%2Fconfig%2Fconfig-manager%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fconfig%2Fmanager%2Fimpl%2Fjmx%2FServiceReferenceRegistrator.java;h=160ee1888a4121bb9fbff66621fde7190bc015b4;hb=81282cf3711693da7dde667c6bbf18cb40e81ad0;hp=0000000000000000000000000000000000000000;hpb=df3615ff3fd59b4c28175b9f359e8caa3a14f914;p=controller.git diff --git a/opendaylight/config/config-manager/src/main/java/org/opendaylight/controller/config/manager/impl/jmx/ServiceReferenceRegistrator.java b/opendaylight/config/config-manager/src/main/java/org/opendaylight/controller/config/manager/impl/jmx/ServiceReferenceRegistrator.java new file mode 100644 index 0000000000..160ee1888a --- /dev/null +++ b/opendaylight/config/config-manager/src/main/java/org/opendaylight/controller/config/manager/impl/jmx/ServiceReferenceRegistrator.java @@ -0,0 +1,103 @@ +/* + * Copyright (c) 2013 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.config.manager.impl.jmx; + +import org.opendaylight.controller.config.api.jmx.ObjectNameUtil; +import org.opendaylight.controller.config.manager.impl.jmx.InternalJMXRegistrator.InternalJMXRegistration; + +import javax.management.InstanceAlreadyExistsException; +import javax.management.ObjectName; + +public interface ServiceReferenceRegistrator extends AutoCloseable { + + public String getNullableTransactionName(); + + ServiceReferenceJMXRegistration registerMBean(ServiceReferenceMXBeanImpl object, + ObjectName on) throws InstanceAlreadyExistsException; + + @Override + void close(); + + public static class ServiceReferenceJMXRegistration implements AutoCloseable { + private final InternalJMXRegistration registration; + + ServiceReferenceJMXRegistration(InternalJMXRegistration registration) { + this.registration = registration; + } + + @Override + public void close() { + registration.close(); + } + } + + public static interface ServiceReferenceTransactionRegistratorFactory { + public ServiceReferenceRegistrator create(); + } + + public static class ServiceReferenceRegistratorImpl implements ServiceReferenceRegistrator { + private final InternalJMXRegistrator currentJMXRegistrator; + private final String nullableTransactionName; + + public ServiceReferenceRegistratorImpl(NestableJMXRegistrator parentRegistrator, String nullableTransactionName){ + currentJMXRegistrator = parentRegistrator.createChild(); + this.nullableTransactionName = nullableTransactionName; + } + + public String getNullableTransactionName() { + return nullableTransactionName; + } + + + public ServiceReferenceJMXRegistration registerMBean(ServiceReferenceMXBeanImpl object, + ObjectName on) throws InstanceAlreadyExistsException { + String actualTransactionName = ObjectNameUtil.getTransactionName(on); + boolean broken = false; + broken |= (nullableTransactionName == null) != (actualTransactionName == null); + broken |= (nullableTransactionName != null) && nullableTransactionName.equals(actualTransactionName) == false; + if (broken) { + throw new IllegalArgumentException("Transaction name mismatch between expected " + + nullableTransactionName + ", got " + actualTransactionName + " in " + on); + } + if (ObjectNameUtil.isServiceReference(on) == false) { + throw new IllegalArgumentException("Invalid type of " + on); + } + return new ServiceReferenceJMXRegistration(currentJMXRegistrator.registerMBean(object, on)); + } + + + @Override + public void close() { + currentJMXRegistrator.close(); + } + public static interface ServiceReferenceTransactionRegistratorFactory { + public ServiceReferenceRegistrator create(); + } + } + + + public static class ServiceReferenceTransactionRegistratorFactoryImpl implements ServiceReferenceTransactionRegistratorFactory { + private final NestableJMXRegistrator parentRegistrator; + private final String nullableTransactionName; + + public ServiceReferenceTransactionRegistratorFactoryImpl(TransactionModuleJMXRegistrator parentRegistrator, + String nullableTransactionName) { + this.parentRegistrator = parentRegistrator; + this.nullableTransactionName = nullableTransactionName; + } + + public ServiceReferenceTransactionRegistratorFactoryImpl(BaseJMXRegistrator baseJMXRegistrator) { + this.parentRegistrator = baseJMXRegistrator; + this.nullableTransactionName = null; + } + + public ServiceReferenceRegistrator create() { + return new ServiceReferenceRegistratorImpl(parentRegistrator, nullableTransactionName); + } + } +}