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.protocol.bgp.parser.spi.BGPExtensionProviderContext;
82 import org.opendaylight.protocol.bgp.parser.spi.MessageRegistry;
83 import org.opendaylight.protocol.bgp.rib.spi.RIBExtensionProviderContext;
84 import org.opendaylight.protocol.bgp.rib.spi.SimpleRIBExtensionProviderContext;
85 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address;
86 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev130925.RibId;
87 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.BgpId;
88 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.ClusterIdentifier;
89 import org.opendaylight.yangtools.concepts.ListenerRegistration;
90 import org.opendaylight.yangtools.sal.binding.generator.api.ClassLoadingStrategy;
91 import org.opendaylight.yangtools.sal.binding.generator.impl.GeneratedClassLoadingStrategy;
92 import org.opendaylight.yangtools.yang.binding.DataObject;
93 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
94 import org.opendaylight.yangtools.yang.common.RpcResult;
95 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
96 import org.opendaylight.yangtools.yang.model.api.SchemaContextListener;
97 import org.opendaylight.yangtools.yang.parser.spi.meta.ReactorException;
98 import org.opendaylight.yangtools.yang.parser.stmt.reactor.CrossSourceStatementReactor;
99 import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.YangInferencePipeline;
100 import org.osgi.framework.Bundle;
101 import org.osgi.framework.BundleListener;
102 import org.osgi.framework.Filter;
103 import org.osgi.framework.ServiceListener;
104 import org.osgi.framework.ServiceReference;
106 public abstract class AbstractRIBImplModuleTest extends AbstractConfigTest {
108 private static final String INSTANCE_NAME = "rib-impl";
109 private static final String FACTORY_NAME = RIBImplModuleFactory.NAME;
110 private static final String TRANSACTION_NAME = "testTransaction";
112 protected static final RibId RIB_ID = new RibId("test");
113 protected static final Ipv4Address BGP_ID = new Ipv4Address("192.168.1.1");
114 protected static final Ipv4Address CLUSTER_ID = new Ipv4Address("192.168.1.2");
116 private static final String SESSION_RS_INSTANCE_NAME = "session-reconnect-strategy-factory";
117 private static final String TCP_RS_INSTANCE_NAME = "tcp-reconnect-strategy-factory";
118 private static final String RIB_EXTENSIONS_INSTANCE_NAME = "rib-extensions-impl";
119 private static final String DOM_BROKER_INSTANCE_NAME = "dom-broker-impl";
120 private static final String BINDING_ASYNC_BROKER_INSTANCE_NAME = "binding-async-broker-instance";
121 private static final String DOM_ASYNC_DATA_BROKER_INSTANCE = "dom-inmemory-data-broker";
122 private static final String BINDING_BROKER_INSTANCE_NAME = "binding-broker-impl";
123 private static final String COMPATIBLE_DATA_BROKER_INSTANCE_NAME = "binding-data-compatible-broker-instance";
124 private static final String NOTIFICATION_BROKER_INSTANCE_NAME = "notification-broker-impl";
127 private ReadWriteTransaction mockedTransaction;
130 private DataBroker mockedDataProvider;
133 private CheckedFuture<Void, TransactionCommitFailedException> mockedFuture;
136 private RpcResult<TransactionStatus> mockedResult;
138 @SuppressWarnings("unchecked")
140 public void setUp() throws Exception {
141 MockitoAnnotations.initMocks(this);
143 final List<ModuleFactory> moduleFactories = getModuleFactories();
144 super.initConfigTransactionManagerImpl(new HardcodedModuleFactoriesResolver(this.mockedContext, moduleFactories.toArray(new ModuleFactory[moduleFactories.size()])));
146 doAnswer(new Answer<Filter>() {
148 public Filter answer(final InvocationOnMock invocation) {
149 final String str = invocation.getArgumentAt(0, String.class);
150 final Filter mockFilter = mock(Filter.class);
151 doReturn(str).when(mockFilter).toString();
154 }).when(mockedContext).createFilter(anyString());
156 final ServiceReference<?> emptyServiceReference = mock(ServiceReference.class, "Empty");
157 final ServiceReference<?> classLoadingStrategySR = mock(ServiceReference.class, "ClassLoadingStrategy");
158 final ServiceReference<?> dataProviderServiceReference = mock(ServiceReference.class, "Data Provider");
160 Mockito.doNothing().when(this.mockedContext).addServiceListener(any(ServiceListener.class), Mockito.anyString());
161 Mockito.doNothing().when(this.mockedContext).removeServiceListener(any(ServiceListener.class));
163 Mockito.doNothing().when(this.mockedContext).addBundleListener(any(BundleListener.class));
164 Mockito.doNothing().when(this.mockedContext).removeBundleListener(any(BundleListener.class));
166 Mockito.doReturn(new Bundle[] {}).when(this.mockedContext).getBundles();
168 Mockito.doReturn(new ServiceReference[] {}).when(this.mockedContext).getServiceReferences(Matchers.anyString(), Matchers.anyString());
170 Mockito.doReturn("Empty reference").when(emptyServiceReference).toString();
171 Mockito.doReturn("Data Provider Service Reference").when(dataProviderServiceReference).toString();
172 Mockito.doReturn("Class loading stategy reference").when(classLoadingStrategySR).toString();
174 Mockito.doReturn(emptyServiceReference).when(this.mockedContext).getServiceReference(any(Class.class));
175 Mockito.doReturn(dataProviderServiceReference).when(this.mockedContext).getServiceReference(DataBroker.class);
176 Mockito.doReturn(classLoadingStrategySR).when(this.mockedContext).getServiceReference(GeneratedClassLoadingStrategy.class);
177 Mockito.doReturn(classLoadingStrategySR).when(this.mockedContext).getServiceReference(ClassLoadingStrategy.class);
179 Mockito.doReturn(this.mockedDataProvider).when(this.mockedContext).getService(dataProviderServiceReference);
180 Mockito.doReturn(GeneratedClassLoadingStrategy.getTCCLClassLoadingStrategy()).when(this.mockedContext).getService(classLoadingStrategySR);
181 Mockito.doReturn(null).when(this.mockedContext).getService(emptyServiceReference);
183 Mockito.doReturn(this.mockedTransaction).when(this.mockedDataProvider).newReadWriteTransaction();
185 Mockito.doReturn(null).when(this.mockedTransaction).read(Mockito.eq(LogicalDatastoreType.OPERATIONAL), any(InstanceIdentifier.class));
186 Mockito.doNothing().when(this.mockedTransaction).put(Mockito.eq(LogicalDatastoreType.OPERATIONAL), any(InstanceIdentifier.class), any(DataObject.class));
187 Mockito.doNothing().when(this.mockedTransaction).delete(Mockito.eq(LogicalDatastoreType.OPERATIONAL), any(InstanceIdentifier.class));
189 Mockito.doReturn(this.mockedFuture).when(this.mockedTransaction).submit();
190 Mockito.doReturn(TRANSACTION_NAME).when(this.mockedTransaction).getIdentifier();
192 Mockito.doReturn(null).when(this.mockedFuture).get();
194 final SchemaContext context = parseYangStreams(getFilesAsByteSources(getYangModelsPaths()));
195 final SchemaService mockedSchemaService = mock(SchemaService.class);
196 doReturn(context).when(mockedSchemaService).getGlobalContext();
197 doAnswer(new Answer<ListenerRegistration<SchemaContextListener>>() {
199 public ListenerRegistration<SchemaContextListener> answer(InvocationOnMock invocation) {
200 invocation.getArgumentAt(0, SchemaContextListener.class).onGlobalContextUpdated(context);
201 ListenerRegistration<SchemaContextListener> reg = mock(ListenerRegistration.class);
202 doNothing().when(reg).close();
205 }).when(mockedSchemaService).registerSchemaContextListener(any(SchemaContextListener.class));
207 setupMockService(SchemaService.class, mockedSchemaService);
208 setupMockService(YangTextSourceProvider.class, mock(YangTextSourceProvider.class));
210 BindingToNormalizedNodeCodecFactory.getOrCreateInstance(
211 GeneratedClassLoadingStrategy.getTCCLClassLoadingStrategy(), mockedSchemaService);
213 BGPExtensionProviderContext mockContext = mock(BGPExtensionProviderContext.class);
214 doReturn(mock(MessageRegistry.class)).when(mockContext).getMessageRegistry();
215 setupMockService(BGPExtensionProviderContext.class, mockContext);
217 setupMockService(EventLoopGroup.class, NioEventLoopGroupCloseable.newInstance(0));
218 setupMockService(EventExecutor.class, AutoCloseableEventExecutor.CloseableEventExecutorMixin.globalEventExecutor());
220 setupMockService(DOMNotificationService.class, mock(DOMNotificationService.class));
221 setupMockService(DOMNotificationPublishService.class, mock(DOMNotificationPublishService.class));
222 setupMockService(DOMRpcService.class, mock(DOMRpcService.class));
223 setupMockService(DOMRpcProviderService.class, mock(DOMRpcProviderService.class));
224 setupMockService(DOMMountPointService.class, mock(DOMMountPointService.class));
226 setupMockService(RIBExtensionProviderContext.class, new SimpleRIBExtensionProviderContext());
229 protected void setupMockService(final Class<?> serviceInterface, final Object instance) throws Exception {
230 final ServiceReference<?> mockServiceRef = mock(ServiceReference.class);
231 doReturn(new ServiceReference[]{mockServiceRef}).when(mockedContext).
232 getServiceReferences(anyString(), contains(serviceInterface.getName()));
233 doReturn(new ServiceReference[]{mockServiceRef}).when(mockedContext).
234 getServiceReferences(serviceInterface.getName(), null);
235 doReturn(instance).when(mockedContext).getService(mockServiceRef);
238 private static SchemaContext parseYangStreams(final Collection<ByteSource> streams) {
239 final CrossSourceStatementReactor.BuildAction reactor = YangInferencePipeline.RFC6020_REACTOR
242 return reactor.buildEffective(streams);
243 } catch (final ReactorException | IOException e) {
244 throw new RuntimeException("Unable to build schema context from " + streams, e);
248 protected List<ModuleFactory> getModuleFactories() {
249 return Lists.newArrayList(new RIBImplModuleFactory(), new GlobalEventExecutorModuleFactory(),
250 new BGPDispatcherImplModuleFactory(), new NettyThreadgroupModuleFactory(),
251 new SimpleBGPExtensionProviderContextModuleFactory(),
252 new RIBExtensionsImplModuleFactory(), new DomBrokerImplModuleFactory(), new RuntimeMappingModuleFactory(),
253 new HashedWheelTimerModuleFactory(), new BindingAsyncDataBrokerImplModuleFactory(),
254 new DomInmemoryDataBrokerModuleFactory(), new SchemaServiceImplSingletonModuleFactory(),
255 new NotificationBrokerImplModuleFactory(), new ForwardedCompatibleDataBrokerImplModuleFactory(),
256 new BindingBrokerImplModuleFactory());
260 protected BundleContextServiceRegistrationHandler getBundleContextServiceRegistrationHandler(final Class<?> serviceType) {
261 if (serviceType.equals(SchemaContextListener.class)) {
262 return new BundleContextServiceRegistrationHandler() {
264 public void handleServiceRegistration(final Class<?> clazz, final Object serviceInstance, final Dictionary<String, ?> props) {
265 final SchemaContextListener listener = (SchemaContextListener) serviceInstance;
266 final SchemaContext context = parseYangStreams(getFilesAsByteSources(getYangModelsPaths()));
267 listener.onGlobalContextUpdated(context);
272 return super.getBundleContextServiceRegistrationHandler(serviceType);
276 public void closeAllModules() throws Exception {
277 super.destroyAllConfigBeans();
281 protected CommitStatus createInstance() throws Exception {
282 final ConfigTransactionJMXClient transaction = this.configRegistryClient.createTransaction();
283 createRIBImplModuleInstance(transaction);
284 return transaction.commit();
287 protected CommitStatus createRIBImplModuleInstance(final RibId ribId, final Long localAs, final Ipv4Address bgpId, final Ipv4Address clusterId) throws Exception {
288 final ConfigTransactionJMXClient transaction = this.configRegistryClient.createTransaction();
289 createRIBImplModuleInstance(transaction, ribId, localAs, bgpId, clusterId, createAsyncDataBrokerInstance(transaction));
290 return transaction.commit();
293 private ObjectName createRIBImplModuleInstance(final ConfigTransactionJMXClient transaction, final RibId ribId, final Long localAs,
294 final Ipv4Address bgpId, final Ipv4Address clusterId, final ObjectName dataBroker) throws Exception {
295 final ObjectName nameCreated = transaction.createModule(FACTORY_NAME, INSTANCE_NAME);
296 final RIBImplModuleMXBean mxBean = transaction.newMXBeanProxy(nameCreated, RIBImplModuleMXBean.class);
297 mxBean.setDataProvider(dataBroker);
298 mxBean.setDomDataProvider(lookupDomAsyncDataBroker(transaction));
299 mxBean.setCodecTreeFactory(lookupMappingServiceInstance(transaction));
300 mxBean.setBgpDispatcher(BGPDispatcherImplModuleTest.createInstance(transaction));
301 mxBean.setExtensions(createRibExtensionsInstance(transaction));
302 mxBean.setRibId(ribId);
303 mxBean.setLocalAs(localAs);
304 mxBean.setBgpRibId(bgpId != null ? new BgpId(bgpId) : null);
305 mxBean.setClusterId(clusterId != null ? new ClusterIdentifier(clusterId) : null);
309 protected ObjectName createRIBImplModuleInstance(final ConfigTransactionJMXClient transaction) throws Exception {
310 return createRIBImplModuleInstance(transaction, RIB_ID, 5000L, BGP_ID, CLUSTER_ID,
311 createAsyncDataBrokerInstance(transaction));
314 public ObjectName createRIBImplModuleInstance(final ConfigTransactionJMXClient transaction, final ObjectName dataBroker)
316 return createRIBImplModuleInstance(transaction, RIB_ID, 5000L, BGP_ID, CLUSTER_ID, dataBroker);
319 public ObjectName createAsyncDataBrokerInstance(final ConfigTransactionJMXClient transaction) throws InstanceAlreadyExistsException, InstanceNotFoundException {
320 final ObjectName nameCreated = transaction.createModule(BindingAsyncDataBrokerImplModuleFactory.NAME, BINDING_ASYNC_BROKER_INSTANCE_NAME);
321 final BindingAsyncDataBrokerImplModuleMXBean mxBean = transaction.newMXBeanProxy(nameCreated, BindingAsyncDataBrokerImplModuleMXBean.class);
322 mxBean.setBindingMappingService(lookupMappingServiceInstance(transaction));
323 mxBean.setDomAsyncBroker(lookupDomAsyncDataBroker(transaction));
324 mxBean.setSchemaService(lookupSchemaServiceInstance(transaction));
328 public static ObjectName lookupDomAsyncDataBroker(final ConfigTransactionJMXClient transaction) throws InstanceAlreadyExistsException {
330 return transaction.lookupConfigBean(DomInmemoryDataBrokerModuleFactory.NAME, DOM_BROKER_INSTANCE_NAME);
331 } catch (final InstanceNotFoundException e) {
333 final ObjectName nameCreated = transaction.createModule(DomInmemoryDataBrokerModuleFactory.NAME, DOM_BROKER_INSTANCE_NAME);
334 final DomInmemoryDataBrokerModuleMXBean mxBean = transaction.newMXBeanProxy(nameCreated, DomInmemoryDataBrokerModuleMXBean.class);
335 mxBean.setSchemaService(lookupSchemaServiceInstance(transaction));
337 } catch (final InstanceAlreadyExistsException e1) {
338 throw new IllegalStateException(e1);
343 private static ObjectName lookupMappingServiceInstance(final ConfigTransactionJMXClient transaction) {
345 return transaction.lookupConfigBean(RuntimeMappingModuleFactory.NAME, RuntimeMappingModuleFactory.SINGLETON_NAME);
346 } catch (final InstanceNotFoundException e) {
348 return transaction.createModule(RuntimeMappingModuleFactory.NAME, RuntimeMappingModuleFactory.SINGLETON_NAME);
349 } catch (final InstanceAlreadyExistsException e1) {
350 throw new IllegalStateException(e1);
355 private static ObjectName lookupSchemaServiceInstance(final ConfigTransactionJMXClient transaction) {
357 return transaction.lookupConfigBean(SchemaServiceImplSingletonModuleFactory.NAME, SchemaServiceImplSingletonModuleFactory.SINGLETON_NAME);
358 } catch (final InstanceNotFoundException e) {
360 return transaction.createModule(SchemaServiceImplSingletonModuleFactory.NAME, SchemaServiceImplSingletonModuleFactory.SINGLETON_NAME);
361 } catch (final InstanceAlreadyExistsException e1) {
362 throw new IllegalStateException(e1);
367 private static ObjectName createRibExtensionsInstance(final ConfigTransactionJMXClient transaction) throws InstanceAlreadyExistsException {
368 final ObjectName nameCreated = transaction.createModule(RIBExtensionsImplModuleFactory.NAME, RIB_EXTENSIONS_INSTANCE_NAME);
369 transaction.newMXBeanProxy(nameCreated, RIBExtensionsImplModuleMXBean.class);
373 public List<String> getYangModelsPaths() {
374 final List<String> paths = Lists.newArrayList("/META-INF/yang/bgp-rib.yang", "/META-INF/yang/ietf-inet-types@2013-07-15.yang",
375 "/META-INF/yang/bgp-message.yang", "/META-INF/yang/bgp-multiprotocol.yang", "/META-INF/yang/bgp-types.yang",
376 "/META-INF/yang/network-concepts.yang", "/META-INF/yang/ieee754.yang", "/META-INF/yang/yang-ext.yang");
380 // TODO move back to AbstractConfigTest
381 private static Collection<ByteSource> getFilesAsByteSources(final List<String> paths) {
382 final Collection<ByteSource> resources = new ArrayList<>();
383 final List<String> failedToFind = new ArrayList<>();
384 for (final String path : paths) {
385 final URL url = AbstractRIBImplModuleTest.class.getResource(path);
387 failedToFind.add(path);
389 resources.add(Resources.asByteSource(url));
392 Assert.assertEquals("Some files were not found", Collections.<String> emptyList(), failedToFind);
397 public ObjectName createBindingBrokerImpl(final ConfigTransactionJMXClient transaction, final ObjectName dataBrokerON,
398 final ObjectName notificationBrokerON) throws Exception {
399 final ObjectName objectName = transaction.createModule(BindingBrokerImplModuleFactory.NAME, BINDING_BROKER_INSTANCE_NAME);
400 final BindingBrokerImplModuleMXBean mxBean = transaction.newMXBeanProxy(objectName, BindingBrokerImplModuleMXBean.class);
401 mxBean.setDataBroker(dataBrokerON);
402 mxBean.setNotificationService(notificationBrokerON);
403 mxBean.setBindingMappingService(lookupMappingServiceInstance(transaction));
404 mxBean.setDomAsyncBroker(lookupDomBrokerInstance(transaction));
408 public static ObjectName lookupDomBrokerInstance(final ConfigTransactionJMXClient transaction) throws InstanceAlreadyExistsException {
410 return transaction.lookupConfigBean(DomBrokerImplModuleFactory.NAME, DOM_BROKER_INSTANCE_NAME);
411 } catch (final InstanceNotFoundException e) {
413 final ObjectName nameCreated = transaction.createModule(DomBrokerImplModuleFactory.NAME, DOM_BROKER_INSTANCE_NAME);
414 final DomBrokerImplModuleMXBean mxBean = transaction.newMXBeanProxy(nameCreated, DomBrokerImplModuleMXBean.class);
415 mxBean.setAsyncDataBroker(lookupDomAsyncDataBroker(transaction));
417 } catch (final InstanceAlreadyExistsException e1) {
418 throw new IllegalStateException(e1);
423 public ObjectName createCompatibleDataBrokerInstance(final ConfigTransactionJMXClient transaction)
424 throws InstanceAlreadyExistsException, InstanceNotFoundException {
425 final ObjectName nameCreated = transaction.createModule(ForwardedCompatibleDataBrokerImplModuleFactory.NAME, COMPATIBLE_DATA_BROKER_INSTANCE_NAME);
426 final ForwardedCompatibleDataBrokerImplModuleMXBean mxBean = transaction.newMXBeanProxy(nameCreated, ForwardedCompatibleDataBrokerImplModuleMXBean.class);
427 mxBean.setDataBroker(lookupDataBrokerInstance(transaction));
431 private static ObjectName lookupDataBrokerInstance(final ConfigTransactionJMXClient transaction) {
433 return transaction.lookupConfigBean(BindingAsyncDataBrokerImplModuleFactory.NAME, BINDING_ASYNC_BROKER_INSTANCE_NAME);
434 } catch (final InstanceNotFoundException e) {
436 return transaction.createModule(RuntimeMappingModuleFactory.NAME, RuntimeMappingModuleFactory.SINGLETON_NAME);
437 } catch (final InstanceAlreadyExistsException e1) {
438 throw new IllegalStateException(e1);
443 public ObjectName createNotificationBrokerInstance(final ConfigTransactionJMXClient transaction) throws Exception {
444 final ObjectName objectName = transaction.createModule(NotificationBrokerImplModuleFactory.NAME, NOTIFICATION_BROKER_INSTANCE_NAME);