2 * Copyright (c) 2014 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.yang.bgp.rib.impl;
10 import static org.mockito.Matchers.any;
11 import static org.mockito.Matchers.anyString;
12 import static org.mockito.Matchers.contains;
13 import static org.mockito.Mockito.doAnswer;
14 import static org.mockito.Mockito.doNothing;
15 import static org.mockito.Mockito.doReturn;
16 import static org.mockito.Mockito.mock;
17 import com.google.common.collect.Lists;
18 import com.google.common.io.ByteSource;
19 import com.google.common.io.Resources;
20 import com.google.common.util.concurrent.CheckedFuture;
21 import io.netty.channel.EventLoopGroup;
22 import io.netty.util.concurrent.EventExecutor;
23 import java.io.IOException;
25 import java.util.ArrayList;
26 import java.util.Collection;
27 import java.util.Collections;
28 import java.util.Dictionary;
29 import java.util.List;
30 import javax.management.InstanceAlreadyExistsException;
31 import javax.management.InstanceNotFoundException;
32 import javax.management.ObjectName;
33 import org.junit.After;
34 import org.junit.Assert;
35 import org.junit.Before;
36 import org.mockito.Matchers;
37 import org.mockito.Mock;
38 import org.mockito.Mockito;
39 import org.mockito.MockitoAnnotations;
40 import org.mockito.invocation.InvocationOnMock;
41 import org.mockito.stubbing.Answer;
42 import org.opendaylight.controller.config.api.jmx.CommitStatus;
43 import org.opendaylight.controller.config.manager.impl.AbstractConfigTest;
44 import org.opendaylight.controller.config.manager.impl.factoriesresolver.HardcodedModuleFactoriesResolver;
45 import org.opendaylight.controller.config.spi.ModuleFactory;
46 import org.opendaylight.controller.config.util.ConfigTransactionJMXClient;
47 import org.opendaylight.controller.config.yang.bgp.parser.spi.SimpleBGPExtensionProviderContextModuleFactory;
48 import org.opendaylight.controller.config.yang.bgp.rib.spi.RIBExtensionsImplModuleFactory;
49 import org.opendaylight.controller.config.yang.bgp.rib.spi.RIBExtensionsImplModuleMXBean;
50 import org.opendaylight.controller.config.yang.md.sal.binding.impl.BindingAsyncDataBrokerImplModuleFactory;
51 import org.opendaylight.controller.config.yang.md.sal.binding.impl.BindingAsyncDataBrokerImplModuleMXBean;
52 import org.opendaylight.controller.config.yang.md.sal.binding.impl.BindingBrokerImplModuleFactory;
53 import org.opendaylight.controller.config.yang.md.sal.binding.impl.BindingBrokerImplModuleMXBean;
54 import org.opendaylight.controller.config.yang.md.sal.binding.impl.ForwardedCompatibleDataBrokerImplModuleFactory;
55 import org.opendaylight.controller.config.yang.md.sal.binding.impl.ForwardedCompatibleDataBrokerImplModuleMXBean;
56 import org.opendaylight.controller.config.yang.md.sal.binding.impl.NotificationBrokerImplModuleFactory;
57 import org.opendaylight.controller.config.yang.md.sal.binding.impl.RuntimeMappingModuleFactory;
58 import org.opendaylight.controller.config.yang.md.sal.dom.impl.DomBrokerImplModuleFactory;
59 import org.opendaylight.controller.config.yang.md.sal.dom.impl.DomBrokerImplModuleMXBean;
60 import org.opendaylight.controller.config.yang.md.sal.dom.impl.DomInmemoryDataBrokerModuleFactory;
61 import org.opendaylight.controller.config.yang.md.sal.dom.impl.DomInmemoryDataBrokerModuleMXBean;
62 import org.opendaylight.controller.config.yang.md.sal.dom.impl.SchemaServiceImplSingletonModuleFactory;
63 import org.opendaylight.controller.config.yang.netty.eventexecutor.AutoCloseableEventExecutor;
64 import org.opendaylight.controller.config.yang.netty.eventexecutor.GlobalEventExecutorModuleFactory;
65 import org.opendaylight.controller.config.yang.netty.threadgroup.NettyThreadgroupModuleFactory;
66 import org.opendaylight.controller.config.yang.netty.threadgroup.NioEventLoopGroupCloseable;
67 import org.opendaylight.controller.config.yang.netty.timer.HashedWheelTimerModuleFactory;
68 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
69 import org.opendaylight.controller.md.sal.binding.api.ReadWriteTransaction;
70 import org.opendaylight.controller.md.sal.binding.impl.BindingToNormalizedNodeCodecFactory;
71 import org.opendaylight.controller.md.sal.common.api.TransactionStatus;
72 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
73 import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException;
74 import org.opendaylight.controller.md.sal.dom.api.DOMMountPointService;
75 import org.opendaylight.controller.md.sal.dom.api.DOMNotificationPublishService;
76 import org.opendaylight.controller.md.sal.dom.api.DOMNotificationService;
77 import org.opendaylight.controller.md.sal.dom.api.DOMRpcProviderService;
78 import org.opendaylight.controller.md.sal.dom.api.DOMRpcService;
79 import org.opendaylight.controller.sal.core.api.model.SchemaService;
80 import org.opendaylight.controller.sal.core.api.model.YangTextSourceProvider;
81 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Address;
82 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev130925.RibId;
83 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.BgpId;
84 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.ClusterIdentifier;
85 import org.opendaylight.yangtools.concepts.ListenerRegistration;
86 import org.opendaylight.yangtools.sal.binding.generator.api.ClassLoadingStrategy;
87 import org.opendaylight.yangtools.sal.binding.generator.impl.GeneratedClassLoadingStrategy;
88 import org.opendaylight.yangtools.yang.binding.DataObject;
89 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
90 import org.opendaylight.yangtools.yang.common.RpcResult;
91 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
92 import org.opendaylight.yangtools.yang.model.api.SchemaContextListener;
93 import org.opendaylight.yangtools.yang.parser.spi.meta.ReactorException;
94 import org.opendaylight.yangtools.yang.parser.stmt.reactor.CrossSourceStatementReactor;
95 import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.YangInferencePipeline;
96 import org.osgi.framework.Bundle;
97 import org.osgi.framework.BundleListener;
98 import org.osgi.framework.Filter;
99 import org.osgi.framework.ServiceListener;
100 import org.osgi.framework.ServiceReference;
102 public abstract class AbstractRIBImplModuleTest extends AbstractConfigTest {
104 private static final String INSTANCE_NAME = "rib-impl";
105 private static final String FACTORY_NAME = RIBImplModuleFactory.NAME;
106 private static final String TRANSACTION_NAME = "testTransaction";
108 protected static final RibId RIB_ID = new RibId("test");
109 protected static final Ipv4Address BGP_ID = new Ipv4Address("192.168.1.1");
110 protected static final Ipv4Address CLUSTER_ID = new Ipv4Address("192.168.1.2");
112 private static final String SESSION_RS_INSTANCE_NAME = "session-reconnect-strategy-factory";
113 private static final String TCP_RS_INSTANCE_NAME = "tcp-reconnect-strategy-factory";
114 private static final String RIB_EXTENSIONS_INSTANCE_NAME = "rib-extensions-impl";
115 private static final String DOM_BROKER_INSTANCE_NAME = "dom-broker-impl";
116 private static final String BINDING_ASYNC_BROKER_INSTANCE_NAME = "binding-async-broker-instance";
117 private static final String DOM_ASYNC_DATA_BROKER_INSTANCE = "dom-inmemory-data-broker";
118 private static final String BINDING_BROKER_INSTANCE_NAME = "binding-broker-impl";
119 private static final String COMPATIBLE_DATA_BROKER_INSTANCE_NAME = "binding-data-compatible-broker-instance";
120 private static final String NOTIFICATION_BROKER_INSTANCE_NAME = "notification-broker-impl";
123 private ReadWriteTransaction mockedTransaction;
126 private DataBroker mockedDataProvider;
129 private CheckedFuture<Void, TransactionCommitFailedException> mockedFuture;
132 private RpcResult<TransactionStatus> mockedResult;
134 @SuppressWarnings("unchecked")
136 public void setUp() throws Exception {
137 MockitoAnnotations.initMocks(this);
139 final List<ModuleFactory> moduleFactories = getModuleFactories();
140 super.initConfigTransactionManagerImpl(new HardcodedModuleFactoriesResolver(this.mockedContext, moduleFactories.toArray(new ModuleFactory[moduleFactories.size()])));
142 doAnswer(new Answer<Filter>() {
144 public Filter answer(final InvocationOnMock invocation) {
145 final String str = invocation.getArgumentAt(0, String.class);
146 final Filter mockFilter = mock(Filter.class);
147 doReturn(str).when(mockFilter).toString();
150 }).when(mockedContext).createFilter(anyString());
152 final ServiceReference<?> emptyServiceReference = mock(ServiceReference.class, "Empty");
153 final ServiceReference<?> classLoadingStrategySR = mock(ServiceReference.class, "ClassLoadingStrategy");
154 final ServiceReference<?> dataProviderServiceReference = mock(ServiceReference.class, "Data Provider");
156 Mockito.doNothing().when(this.mockedContext).addServiceListener(any(ServiceListener.class), Mockito.anyString());
157 Mockito.doNothing().when(this.mockedContext).removeServiceListener(any(ServiceListener.class));
159 Mockito.doNothing().when(this.mockedContext).addBundleListener(any(BundleListener.class));
160 Mockito.doNothing().when(this.mockedContext).removeBundleListener(any(BundleListener.class));
162 Mockito.doReturn(new Bundle[] {}).when(this.mockedContext).getBundles();
164 Mockito.doReturn(new ServiceReference[] {}).when(this.mockedContext).getServiceReferences(Matchers.anyString(), Matchers.anyString());
166 Mockito.doReturn("Empty reference").when(emptyServiceReference).toString();
167 Mockito.doReturn("Data Provider Service Reference").when(dataProviderServiceReference).toString();
168 Mockito.doReturn("Class loading stategy reference").when(classLoadingStrategySR).toString();
170 Mockito.doReturn(emptyServiceReference).when(this.mockedContext).getServiceReference(any(Class.class));
171 Mockito.doReturn(dataProviderServiceReference).when(this.mockedContext).getServiceReference(DataBroker.class);
172 Mockito.doReturn(classLoadingStrategySR).when(this.mockedContext).getServiceReference(GeneratedClassLoadingStrategy.class);
173 Mockito.doReturn(classLoadingStrategySR).when(this.mockedContext).getServiceReference(ClassLoadingStrategy.class);
175 Mockito.doReturn(this.mockedDataProvider).when(this.mockedContext).getService(dataProviderServiceReference);
176 Mockito.doReturn(GeneratedClassLoadingStrategy.getTCCLClassLoadingStrategy()).when(this.mockedContext).getService(classLoadingStrategySR);
177 Mockito.doReturn(null).when(this.mockedContext).getService(emptyServiceReference);
179 Mockito.doReturn(this.mockedTransaction).when(this.mockedDataProvider).newReadWriteTransaction();
181 Mockito.doReturn(null).when(this.mockedTransaction).read(Mockito.eq(LogicalDatastoreType.OPERATIONAL), any(InstanceIdentifier.class));
182 Mockito.doNothing().when(this.mockedTransaction).put(Mockito.eq(LogicalDatastoreType.OPERATIONAL), any(InstanceIdentifier.class), any(DataObject.class));
183 Mockito.doNothing().when(this.mockedTransaction).delete(Mockito.eq(LogicalDatastoreType.OPERATIONAL), any(InstanceIdentifier.class));
185 Mockito.doReturn(this.mockedFuture).when(this.mockedTransaction).submit();
186 Mockito.doReturn(TRANSACTION_NAME).when(this.mockedTransaction).getIdentifier();
188 Mockito.doReturn(null).when(this.mockedFuture).get();
190 final SchemaContext context = parseYangStreams(getFilesAsByteSources(getYangModelsPaths()));
191 final SchemaService mockedSchemaService = mock(SchemaService.class);
192 doReturn(context).when(mockedSchemaService).getGlobalContext();
193 doAnswer(new Answer<ListenerRegistration<SchemaContextListener>>() {
195 public ListenerRegistration<SchemaContextListener> answer(InvocationOnMock invocation) {
196 invocation.getArgumentAt(0, SchemaContextListener.class).onGlobalContextUpdated(context);
197 ListenerRegistration<SchemaContextListener> reg = mock(ListenerRegistration.class);
198 doNothing().when(reg).close();
201 }).when(mockedSchemaService).registerSchemaContextListener(any(SchemaContextListener.class));
203 setupMockService(SchemaService.class, mockedSchemaService);
204 setupMockService(YangTextSourceProvider.class, mock(YangTextSourceProvider.class));
206 BindingToNormalizedNodeCodecFactory.getOrCreateInstance(
207 GeneratedClassLoadingStrategy.getTCCLClassLoadingStrategy(), mockedSchemaService);
209 setupMockService(EventLoopGroup.class, NioEventLoopGroupCloseable.newInstance(0));
210 setupMockService(EventExecutor.class, AutoCloseableEventExecutor.CloseableEventExecutorMixin.globalEventExecutor());
212 setupMockService(DOMNotificationService.class, mock(DOMNotificationService.class));
213 setupMockService(DOMNotificationPublishService.class, mock(DOMNotificationPublishService.class));
214 setupMockService(DOMRpcService.class, mock(DOMRpcService.class));
215 setupMockService(DOMRpcProviderService.class, mock(DOMRpcProviderService.class));
216 setupMockService(DOMMountPointService.class, mock(DOMMountPointService.class));
219 private void setupMockService(final Class<?> serviceInterface, final Object instance) throws Exception {
220 final ServiceReference<?> mockServiceRef = mock(ServiceReference.class);
221 doReturn(new ServiceReference[]{mockServiceRef}).when(mockedContext).
222 getServiceReferences(anyString(), contains(serviceInterface.getName()));
223 doReturn(new ServiceReference[]{mockServiceRef}).when(mockedContext).
224 getServiceReferences(serviceInterface.getName(), null);
225 doReturn(instance).when(mockedContext).getService(mockServiceRef);
228 private static SchemaContext parseYangStreams(final Collection<ByteSource> streams) {
229 final CrossSourceStatementReactor.BuildAction reactor = YangInferencePipeline.RFC6020_REACTOR
232 return reactor.buildEffective(streams);
233 } catch (final ReactorException | IOException e) {
234 throw new RuntimeException("Unable to build schema context from " + streams, e);
238 protected List<ModuleFactory> getModuleFactories() {
239 return Lists.newArrayList(new RIBImplModuleFactory(), new GlobalEventExecutorModuleFactory(),
240 new BGPDispatcherImplModuleFactory(), new NettyThreadgroupModuleFactory(),
241 new SimpleBGPExtensionProviderContextModuleFactory(),
242 new RIBExtensionsImplModuleFactory(), new DomBrokerImplModuleFactory(), new RuntimeMappingModuleFactory(),
243 new HashedWheelTimerModuleFactory(), new BindingAsyncDataBrokerImplModuleFactory(),
244 new DomInmemoryDataBrokerModuleFactory(), new SchemaServiceImplSingletonModuleFactory(),
245 new NotificationBrokerImplModuleFactory(), new ForwardedCompatibleDataBrokerImplModuleFactory(),
246 new BindingBrokerImplModuleFactory());
250 protected BundleContextServiceRegistrationHandler getBundleContextServiceRegistrationHandler(final Class<?> serviceType) {
251 if (serviceType.equals(SchemaContextListener.class)) {
252 return new BundleContextServiceRegistrationHandler() {
254 public void handleServiceRegistration(final Class<?> clazz, final Object serviceInstance, final Dictionary<String, ?> props) {
255 final SchemaContextListener listener = (SchemaContextListener) serviceInstance;
256 final SchemaContext context = parseYangStreams(getFilesAsByteSources(getYangModelsPaths()));
257 listener.onGlobalContextUpdated(context);
262 return super.getBundleContextServiceRegistrationHandler(serviceType);
266 public void closeAllModules() throws Exception {
267 super.destroyAllConfigBeans();
271 protected CommitStatus createInstance() throws Exception {
272 final ConfigTransactionJMXClient transaction = this.configRegistryClient.createTransaction();
273 createRIBImplModuleInstance(transaction);
274 return transaction.commit();
277 protected CommitStatus createRIBImplModuleInstance(final RibId ribId, final Long localAs, final Ipv4Address bgpId, final Ipv4Address clusterId) throws Exception {
278 final ConfigTransactionJMXClient transaction = this.configRegistryClient.createTransaction();
279 createRIBImplModuleInstance(transaction, ribId, localAs, bgpId, clusterId, createAsyncDataBrokerInstance(transaction));
280 return transaction.commit();
283 private ObjectName createRIBImplModuleInstance(final ConfigTransactionJMXClient transaction, final RibId ribId, final Long localAs,
284 final Ipv4Address bgpId, final Ipv4Address clusterId, final ObjectName dataBroker) throws Exception {
285 final ObjectName nameCreated = transaction.createModule(FACTORY_NAME, INSTANCE_NAME);
286 final RIBImplModuleMXBean mxBean = transaction.newMXBeanProxy(nameCreated, RIBImplModuleMXBean.class);
287 mxBean.setDataProvider(dataBroker);
288 mxBean.setDomDataProvider(lookupDomAsyncDataBroker(transaction));
289 mxBean.setCodecTreeFactory(lookupMappingServiceInstance(transaction));
290 mxBean.setBgpDispatcher(BGPDispatcherImplModuleTest.createInstance(transaction));
291 mxBean.setExtensions(createRibExtensionsInstance(transaction));
292 mxBean.setRibId(ribId);
293 mxBean.setLocalAs(localAs);
294 mxBean.setBgpRibId(bgpId != null ? new BgpId(bgpId) : null);
295 mxBean.setClusterId(clusterId != null ? new ClusterIdentifier(clusterId) : null);
299 protected ObjectName createRIBImplModuleInstance(final ConfigTransactionJMXClient transaction) throws Exception {
300 return createRIBImplModuleInstance(transaction, RIB_ID, 5000L, BGP_ID, CLUSTER_ID,
301 createAsyncDataBrokerInstance(transaction));
304 public ObjectName createRIBImplModuleInstance(final ConfigTransactionJMXClient transaction, final ObjectName dataBroker)
306 return createRIBImplModuleInstance(transaction, RIB_ID, 5000L, BGP_ID, CLUSTER_ID, dataBroker);
309 public ObjectName createAsyncDataBrokerInstance(final ConfigTransactionJMXClient transaction) throws InstanceAlreadyExistsException, InstanceNotFoundException {
310 final ObjectName nameCreated = transaction.createModule(BindingAsyncDataBrokerImplModuleFactory.NAME, BINDING_ASYNC_BROKER_INSTANCE_NAME);
311 final BindingAsyncDataBrokerImplModuleMXBean mxBean = transaction.newMXBeanProxy(nameCreated, BindingAsyncDataBrokerImplModuleMXBean.class);
312 mxBean.setBindingMappingService(lookupMappingServiceInstance(transaction));
313 mxBean.setDomAsyncBroker(lookupDomAsyncDataBroker(transaction));
314 mxBean.setSchemaService(lookupSchemaServiceInstance(transaction));
318 public static ObjectName lookupDomAsyncDataBroker(final ConfigTransactionJMXClient transaction) throws InstanceAlreadyExistsException {
320 return transaction.lookupConfigBean(DomInmemoryDataBrokerModuleFactory.NAME, DOM_BROKER_INSTANCE_NAME);
321 } catch (final InstanceNotFoundException e) {
323 final ObjectName nameCreated = transaction.createModule(DomInmemoryDataBrokerModuleFactory.NAME, DOM_BROKER_INSTANCE_NAME);
324 final DomInmemoryDataBrokerModuleMXBean mxBean = transaction.newMXBeanProxy(nameCreated, DomInmemoryDataBrokerModuleMXBean.class);
325 mxBean.setSchemaService(lookupSchemaServiceInstance(transaction));
327 } catch (final InstanceAlreadyExistsException e1) {
328 throw new IllegalStateException(e1);
333 private static ObjectName lookupMappingServiceInstance(final ConfigTransactionJMXClient transaction) {
335 return transaction.lookupConfigBean(RuntimeMappingModuleFactory.NAME, RuntimeMappingModuleFactory.SINGLETON_NAME);
336 } catch (final InstanceNotFoundException e) {
338 return transaction.createModule(RuntimeMappingModuleFactory.NAME, RuntimeMappingModuleFactory.SINGLETON_NAME);
339 } catch (final InstanceAlreadyExistsException e1) {
340 throw new IllegalStateException(e1);
345 private static ObjectName lookupSchemaServiceInstance(final ConfigTransactionJMXClient transaction) {
347 return transaction.lookupConfigBean(SchemaServiceImplSingletonModuleFactory.NAME, SchemaServiceImplSingletonModuleFactory.SINGLETON_NAME);
348 } catch (final InstanceNotFoundException e) {
350 return transaction.createModule(SchemaServiceImplSingletonModuleFactory.NAME, SchemaServiceImplSingletonModuleFactory.SINGLETON_NAME);
351 } catch (final InstanceAlreadyExistsException e1) {
352 throw new IllegalStateException(e1);
357 private static ObjectName createRibExtensionsInstance(final ConfigTransactionJMXClient transaction) throws InstanceAlreadyExistsException {
358 final ObjectName nameCreated = transaction.createModule(RIBExtensionsImplModuleFactory.NAME, RIB_EXTENSIONS_INSTANCE_NAME);
359 transaction.newMXBeanProxy(nameCreated, RIBExtensionsImplModuleMXBean.class);
363 public List<String> getYangModelsPaths() {
364 final List<String> paths = Lists.newArrayList("/META-INF/yang/bgp-rib.yang", "/META-INF/yang/ietf-inet-types.yang",
365 "/META-INF/yang/bgp-message.yang", "/META-INF/yang/bgp-multiprotocol.yang", "/META-INF/yang/bgp-types.yang",
366 "/META-INF/yang/network-concepts.yang", "/META-INF/yang/ieee754.yang", "/META-INF/yang/yang-ext.yang");
370 // TODO move back to AbstractConfigTest
371 private static Collection<ByteSource> getFilesAsByteSources(final List<String> paths) {
372 final Collection<ByteSource> resources = new ArrayList<>();
373 final List<String> failedToFind = new ArrayList<>();
374 for (final String path : paths) {
375 final URL url = AbstractRIBImplModuleTest.class.getResource(path);
377 failedToFind.add(path);
379 resources.add(Resources.asByteSource(url));
382 Assert.assertEquals("Some files were not found", Collections.<String> emptyList(), failedToFind);
387 public ObjectName createBindingBrokerImpl(final ConfigTransactionJMXClient transaction, final ObjectName dataBrokerON,
388 final ObjectName notificationBrokerON) throws Exception {
389 final ObjectName objectName = transaction.createModule(BindingBrokerImplModuleFactory.NAME, BINDING_BROKER_INSTANCE_NAME);
390 final BindingBrokerImplModuleMXBean mxBean = transaction.newMXBeanProxy(objectName, BindingBrokerImplModuleMXBean.class);
391 mxBean.setDataBroker(dataBrokerON);
392 mxBean.setNotificationService(notificationBrokerON);
393 mxBean.setBindingMappingService(lookupMappingServiceInstance(transaction));
394 mxBean.setDomAsyncBroker(lookupDomBrokerInstance(transaction));
398 public static ObjectName lookupDomBrokerInstance(final ConfigTransactionJMXClient transaction) throws InstanceAlreadyExistsException {
400 return transaction.lookupConfigBean(DomBrokerImplModuleFactory.NAME, DOM_BROKER_INSTANCE_NAME);
401 } catch (final InstanceNotFoundException e) {
403 final ObjectName nameCreated = transaction.createModule(DomBrokerImplModuleFactory.NAME, DOM_BROKER_INSTANCE_NAME);
404 final DomBrokerImplModuleMXBean mxBean = transaction.newMXBeanProxy(nameCreated, DomBrokerImplModuleMXBean.class);
405 mxBean.setAsyncDataBroker(lookupDomAsyncDataBroker(transaction));
407 } catch (final InstanceAlreadyExistsException e1) {
408 throw new IllegalStateException(e1);
413 public ObjectName createCompatibleDataBrokerInstance(final ConfigTransactionJMXClient transaction)
414 throws InstanceAlreadyExistsException, InstanceNotFoundException {
415 final ObjectName nameCreated = transaction.createModule(ForwardedCompatibleDataBrokerImplModuleFactory.NAME, COMPATIBLE_DATA_BROKER_INSTANCE_NAME);
416 final ForwardedCompatibleDataBrokerImplModuleMXBean mxBean = transaction.newMXBeanProxy(nameCreated, ForwardedCompatibleDataBrokerImplModuleMXBean.class);
417 mxBean.setDataBroker(lookupDataBrokerInstance(transaction));
421 private static ObjectName lookupDataBrokerInstance(final ConfigTransactionJMXClient transaction) {
423 return transaction.lookupConfigBean(BindingAsyncDataBrokerImplModuleFactory.NAME, BINDING_ASYNC_BROKER_INSTANCE_NAME);
424 } catch (final InstanceNotFoundException e) {
426 return transaction.createModule(RuntimeMappingModuleFactory.NAME, RuntimeMappingModuleFactory.SINGLETON_NAME);
427 } catch (final InstanceAlreadyExistsException e1) {
428 throw new IllegalStateException(e1);
433 public ObjectName createNotificationBrokerInstance(final ConfigTransactionJMXClient transaction) throws Exception {
434 final ObjectName objectName = transaction.createModule(NotificationBrokerImplModuleFactory.NAME, NOTIFICATION_BROKER_INSTANCE_NAME);