2 * Copyright (c) 2013 Cisco Systems, Inc. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
8 package org.opendaylight.controller.config.manager.impl.jmx;
10 import javax.management.InstanceAlreadyExistsException;
11 import javax.management.ObjectName;
12 import org.opendaylight.controller.config.api.jmx.ObjectNameUtil;
13 import org.opendaylight.controller.config.manager.impl.jmx.InternalJMXRegistrator.InternalJMXRegistration;
15 public interface ServiceReferenceRegistrator extends AutoCloseable {
17 public String getNullableTransactionName();
19 ServiceReferenceJMXRegistration registerMBean(ServiceReferenceMXBeanImpl object,
20 ObjectName on) throws InstanceAlreadyExistsException;
25 public static class ServiceReferenceJMXRegistration implements AutoCloseable {
26 private final InternalJMXRegistration registration;
28 ServiceReferenceJMXRegistration(InternalJMXRegistration registration) {
29 this.registration = registration;
38 public static interface ServiceReferenceTransactionRegistratorFactory {
39 public ServiceReferenceRegistrator create();
42 public static class ServiceReferenceRegistratorImpl implements ServiceReferenceRegistrator {
43 private final InternalJMXRegistrator currentJMXRegistrator;
44 private final String nullableTransactionName;
46 public ServiceReferenceRegistratorImpl(NestableJMXRegistrator parentRegistrator, String nullableTransactionName){
47 currentJMXRegistrator = parentRegistrator.createChild();
48 this.nullableTransactionName = nullableTransactionName;
51 public String getNullableTransactionName() {
52 return nullableTransactionName;
56 public ServiceReferenceJMXRegistration registerMBean(ServiceReferenceMXBeanImpl object,
57 ObjectName on) throws InstanceAlreadyExistsException {
58 String actualTransactionName = ObjectNameUtil.getTransactionName(on);
59 boolean broken = false;
60 broken |= (nullableTransactionName == null) != (actualTransactionName == null);
61 broken |= (nullableTransactionName != null) && nullableTransactionName.equals(actualTransactionName) == false;
63 throw new IllegalArgumentException("Transaction name mismatch between expected "
64 + nullableTransactionName + ", got " + actualTransactionName + " in " + on);
66 if (ObjectNameUtil.isServiceReference(on) == false) {
67 throw new IllegalArgumentException("Invalid type of " + on);
69 return new ServiceReferenceJMXRegistration(currentJMXRegistrator.registerMBean(object, on));
75 currentJMXRegistrator.close();
77 public static interface ServiceReferenceTransactionRegistratorFactory {
78 public ServiceReferenceRegistrator create();
83 public static class ServiceReferenceTransactionRegistratorFactoryImpl implements ServiceReferenceTransactionRegistratorFactory {
84 private final NestableJMXRegistrator parentRegistrator;
85 private final String nullableTransactionName;
87 public ServiceReferenceTransactionRegistratorFactoryImpl(TransactionModuleJMXRegistrator parentRegistrator,
88 String nullableTransactionName) {
89 this.parentRegistrator = parentRegistrator;
90 this.nullableTransactionName = nullableTransactionName;
93 public ServiceReferenceTransactionRegistratorFactoryImpl(BaseJMXRegistrator baseJMXRegistrator) {
94 this.parentRegistrator = baseJMXRegistrator;
95 this.nullableTransactionName = null;
98 public ServiceReferenceRegistrator create() {
99 return new ServiceReferenceRegistratorImpl(parentRegistrator, nullableTransactionName);