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 public String getNullableTransactionName();
18 ServiceReferenceJMXRegistration registerMBean(ServiceReferenceMXBeanImpl object,
19 ObjectName on) throws InstanceAlreadyExistsException;
24 public static class ServiceReferenceJMXRegistration implements AutoCloseable {
25 private final InternalJMXRegistration registration;
27 ServiceReferenceJMXRegistration(InternalJMXRegistration registration) {
28 this.registration = registration;
37 public static interface ServiceReferenceTransactionRegistratorFactory {
38 public ServiceReferenceRegistrator create();
41 public static class ServiceReferenceRegistratorImpl implements ServiceReferenceRegistrator {
42 private final InternalJMXRegistrator currentJMXRegistrator;
43 private final String nullableTransactionName;
45 public ServiceReferenceRegistratorImpl(NestableJMXRegistrator parentRegistrator, String nullableTransactionName){
46 currentJMXRegistrator = parentRegistrator.createChild();
47 this.nullableTransactionName = nullableTransactionName;
50 public String getNullableTransactionName() {
51 return nullableTransactionName;
55 public ServiceReferenceJMXRegistration registerMBean(ServiceReferenceMXBeanImpl object,
56 ObjectName on) throws InstanceAlreadyExistsException {
57 String actualTransactionName = ObjectNameUtil.getTransactionName(on);
58 boolean broken = false;
59 broken |= (nullableTransactionName == null) != (actualTransactionName == null);
60 broken |= (nullableTransactionName != null) && nullableTransactionName.equals(actualTransactionName) == false;
62 throw new IllegalArgumentException("Transaction name mismatch between expected "
63 + nullableTransactionName + ", got " + actualTransactionName + " in " + on);
65 if (ObjectNameUtil.isServiceReference(on) == false) {
66 throw new IllegalArgumentException("Invalid type of " + on);
68 return new ServiceReferenceJMXRegistration(currentJMXRegistrator.registerMBean(object, on));
74 currentJMXRegistrator.close();
76 public static interface ServiceReferenceTransactionRegistratorFactory {
77 public ServiceReferenceRegistrator create();
82 public static class ServiceReferenceTransactionRegistratorFactoryImpl implements ServiceReferenceTransactionRegistratorFactory {
83 private final NestableJMXRegistrator parentRegistrator;
84 private final String nullableTransactionName;
86 public ServiceReferenceTransactionRegistratorFactoryImpl(TransactionModuleJMXRegistrator parentRegistrator,
87 String nullableTransactionName) {
88 this.parentRegistrator = parentRegistrator;
89 this.nullableTransactionName = nullableTransactionName;
92 public ServiceReferenceTransactionRegistratorFactoryImpl(BaseJMXRegistrator baseJMXRegistrator) {
93 this.parentRegistrator = baseJMXRegistrator;
94 this.nullableTransactionName = null;
97 public ServiceReferenceRegistrator create() {
98 return new ServiceReferenceRegistratorImpl(parentRegistrator, nullableTransactionName);