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;
15 import org.opendaylight.controller.config.manager.impl.util.ModuleQNameUtil;
16 import org.opendaylight.controller.config.spi.ModuleFactory;
17 import org.osgi.framework.BundleContext;
19 import javax.management.InstanceAlreadyExistsException;
20 import javax.management.InstanceNotFoundException;
21 import javax.management.ObjectName;
22 import java.io.Closeable;
24 import java.util.Map.Entry;
28 * Responsible for creating TransactionJMXRegistrator, registering transaction and all its beans,
29 * lookup of beans, closing of TransactionJMXRegistrator.
31 class ConfigTransactionLookupRegistry implements LookupRegistry, Closeable {
32 private final TransactionJMXRegistrator transactionJMXRegistrator;
33 private final TransactionIdentifier transactionIdentifier;
34 private final TransactionModuleJMXRegistrator txModuleJMXRegistrator;
35 private final Map<String, Map.Entry<ModuleFactory, BundleContext>> allCurrentFactories;
37 ConfigTransactionLookupRegistry(TransactionIdentifier transactionIdentifier,
38 TransactionJMXRegistratorFactory factory, Map<String, Entry<ModuleFactory, BundleContext>> allCurrentFactories) {
39 this.transactionIdentifier = transactionIdentifier;
40 this.transactionJMXRegistrator = factory.create();
41 this.txModuleJMXRegistrator = transactionJMXRegistrator.createTransactionModuleJMXRegistrator();
42 this.allCurrentFactories = allCurrentFactories;
45 private void checkTransactionName(ObjectName objectName) {
46 String foundTransactionName = ObjectNameUtil
47 .getTransactionName(objectName);
48 if (transactionIdentifier.getName().equals(foundTransactionName) == false) {
49 throw new IllegalArgumentException("Wrong transaction name "
58 public Set<ObjectName> lookupConfigBeans() {
59 return lookupConfigBeans("*", "*");
66 public Set<ObjectName> lookupConfigBeans(String moduleName) {
67 return lookupConfigBeans(moduleName, "*");
74 public ObjectName lookupConfigBean(String moduleName, String instanceName)
75 throws InstanceNotFoundException {
76 return LookupBeansUtil.lookupConfigBean(this, moduleName, instanceName);
83 public Set<ObjectName> lookupConfigBeans(String moduleName,
84 String instanceName) {
85 ObjectName namePattern = ObjectNameUtil.createModulePattern(moduleName,
86 instanceName, transactionIdentifier.getName());
87 return txModuleJMXRegistrator.queryNames(namePattern, null);
91 public void checkConfigBeanExists(ObjectName objectName) throws InstanceNotFoundException {
92 ObjectNameUtil.checkDomain(objectName);
93 ObjectNameUtil.checkType(objectName, ObjectNameUtil.TYPE_MODULE);
94 checkTransactionName(objectName);
95 // make sure exactly one match is found:
96 LookupBeansUtil.lookupConfigBean(this, ObjectNameUtil.getFactoryName(objectName), ObjectNameUtil.getInstanceName(objectName));
99 TransactionIdentifier getTransactionIdentifier() {
100 return transactionIdentifier;
103 TransactionModuleJMXRegistrator getTxModuleJMXRegistrator() {
104 return txModuleJMXRegistrator;
107 public void close() {
108 transactionJMXRegistrator.close();
111 public void registerMBean(ConfigTransactionControllerInternal transactionController, ObjectName controllerObjectName) throws InstanceAlreadyExistsException {
112 transactionJMXRegistrator.registerMBean(transactionController, controllerObjectName);
116 public Set<String> getAvailableModuleFactoryQNames() {
117 return ModuleQNameUtil.getQNames(allCurrentFactories);
122 interface TransactionJMXRegistratorFactory {
123 TransactionJMXRegistrator create();