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;
14 public interface ServiceReferenceRegistrator extends AutoCloseable {
16 String getNullableTransactionName();
18 ServiceReferenceJMXRegistration registerMBean(ServiceReferenceMXBeanImpl object,
19 ObjectName on) throws InstanceAlreadyExistsException;
24 class ServiceReferenceJMXRegistration implements AutoCloseable {
25 private final InternalJMXRegistration registration;
27 ServiceReferenceJMXRegistration(final InternalJMXRegistration registration) {
28 this.registration = registration;
37 interface ServiceReferenceTransactionRegistratorFactory {
38 ServiceReferenceRegistrator create();
41 class ServiceReferenceRegistratorImpl implements ServiceReferenceRegistrator {
42 private final InternalJMXRegistrator currentJMXRegistrator;
43 private final String nullableTransactionName;
45 public ServiceReferenceRegistratorImpl(final NestableJMXRegistrator parentRegistrator, final String nullableTransactionName){
46 currentJMXRegistrator = parentRegistrator.createChild();
47 this.nullableTransactionName = nullableTransactionName;
51 public String getNullableTransactionName() {
52 return nullableTransactionName;
57 public ServiceReferenceJMXRegistration registerMBean(final ServiceReferenceMXBeanImpl object,
58 final ObjectName on) throws InstanceAlreadyExistsException {
59 String actualTransactionName = ObjectNameUtil.getTransactionName(on);
60 boolean broken = false;
61 broken |= (nullableTransactionName == null) != (actualTransactionName == null);
62 broken |= (nullableTransactionName != null) && !nullableTransactionName.equals(actualTransactionName);
64 throw new IllegalArgumentException("Transaction name mismatch between expected "
65 + nullableTransactionName + ", got " + actualTransactionName + " in " + on);
67 if (!ObjectNameUtil.isServiceReference(on)) {
68 throw new IllegalArgumentException("Invalid type of " + on);
70 return new ServiceReferenceJMXRegistration(currentJMXRegistrator.registerMBean(object, on));
76 currentJMXRegistrator.close();
78 public interface ServiceReferenceTransactionRegistratorFactory {
79 ServiceReferenceRegistrator create();
84 class ServiceReferenceTransactionRegistratorFactoryImpl implements ServiceReferenceTransactionRegistratorFactory {
85 private final NestableJMXRegistrator parentRegistrator;
86 private final String nullableTransactionName;
88 public ServiceReferenceTransactionRegistratorFactoryImpl(final TransactionModuleJMXRegistrator parentRegistrator,
89 final String nullableTransactionName) {
90 this.parentRegistrator = parentRegistrator;
91 this.nullableTransactionName = nullableTransactionName;
94 public ServiceReferenceTransactionRegistratorFactoryImpl(final BaseJMXRegistrator baseJMXRegistrator) {
95 this.parentRegistrator = baseJMXRegistrator;
96 this.nullableTransactionName = null;
100 public ServiceReferenceRegistrator create() {
101 return new ServiceReferenceRegistratorImpl(parentRegistrator, nullableTransactionName);