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;
10 import org.opendaylight.controller.config.api.LookupRegistry;
11 import org.opendaylight.controller.config.api.jmx.ObjectNameUtil;
12 import org.opendaylight.controller.config.manager.impl.jmx.TransactionJMXRegistrator;
13 import org.opendaylight.controller.config.manager.impl.jmx.TransactionModuleJMXRegistrator;
14 import org.opendaylight.controller.config.manager.impl.util.LookupBeansUtil;
16 import javax.management.InstanceAlreadyExistsException;
17 import javax.management.InstanceNotFoundException;
18 import javax.management.ObjectName;
19 import java.io.Closeable;
23 * Responsible for creating TransactionJMXRegistrator, registering transaction and all its beans,
24 * lookup of beans, closing of TransactionJMXRegistrator.
26 class ConfigTransactionLookupRegistry implements LookupRegistry, Closeable {
27 private final TransactionJMXRegistrator transactionJMXRegistrator;
28 private final TransactionIdentifier transactionIdentifier;
29 private final TransactionModuleJMXRegistrator txModuleJMXRegistrator;
31 ConfigTransactionLookupRegistry(TransactionIdentifier transactionIdentifier,
32 TransactionJMXRegistratorFactory factory) {
33 this.transactionIdentifier = transactionIdentifier;
34 this.transactionJMXRegistrator = factory.create();
35 this.txModuleJMXRegistrator = transactionJMXRegistrator.createTransactionModuleJMXRegistrator();
38 private void checkTransactionName(ObjectName objectName) {
39 String foundTransactionName = ObjectNameUtil
40 .getTransactionName(objectName);
41 if (transactionIdentifier.getName().equals(foundTransactionName) == false) {
42 throw new IllegalArgumentException("Wrong transaction name "
51 public Set<ObjectName> lookupConfigBeans() {
52 return lookupConfigBeans("*", "*");
59 public Set<ObjectName> lookupConfigBeans(String moduleName) {
60 return lookupConfigBeans(moduleName, "*");
67 public ObjectName lookupConfigBean(String moduleName, String instanceName)
68 throws InstanceNotFoundException {
69 return LookupBeansUtil.lookupConfigBean(this, moduleName, instanceName);
76 public Set<ObjectName> lookupConfigBeans(String moduleName,
77 String instanceName) {
78 ObjectName namePattern = ObjectNameUtil.createModulePattern(moduleName,
79 instanceName, transactionIdentifier.getName());
80 return txModuleJMXRegistrator.queryNames(namePattern, null);
84 public void checkConfigBeanExists(ObjectName objectName) throws InstanceNotFoundException {
85 ObjectNameUtil.checkDomain(objectName);
86 ObjectNameUtil.checkType(objectName, ObjectNameUtil.TYPE_MODULE);
87 checkTransactionName(objectName);
88 // make sure exactly one match is found:
89 LookupBeansUtil.lookupConfigBean(this, ObjectNameUtil.getFactoryName(objectName), ObjectNameUtil.getInstanceName(objectName));
92 TransactionIdentifier getTransactionIdentifier() {
93 return transactionIdentifier;
96 TransactionModuleJMXRegistrator getTxModuleJMXRegistrator() {
97 return txModuleJMXRegistrator;
100 public void close() {
101 transactionJMXRegistrator.close();
104 public void registerMBean(ConfigTransactionControllerInternal transactionController, ObjectName controllerObjectName) throws InstanceAlreadyExistsException {
105 transactionJMXRegistrator.registerMBean(transactionController, controllerObjectName);
109 interface TransactionJMXRegistratorFactory {
110 TransactionJMXRegistrator create();