2 * Copyright (c) 2018 Pantheon Technologies s.r.o. 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 https://www.eclipse.org/legal/epl-v10.html
8 package io.lighty.controllers.tpce.module;
10 import io.lighty.core.controller.api.AbstractLightyModule;
11 import io.lighty.core.controller.api.LightyServices;
12 import java.util.Arrays;
13 import java.util.List;
14 import org.opendaylight.mdsal.binding.api.NotificationService;
15 import org.opendaylight.transportpce.servicehandler.catalog.CatalogDataStoreOperations;
16 import org.opendaylight.transportpce.servicehandler.catalog.CatalogDataStoreOperationsImpl;
17 import org.opendaylight.transportpce.common.crossconnect.CrossConnect;
18 import org.opendaylight.transportpce.common.crossconnect.CrossConnectImpl;
19 import org.opendaylight.transportpce.common.crossconnect.CrossConnectImpl121;
20 import org.opendaylight.transportpce.common.crossconnect.CrossConnectImpl221;
21 import org.opendaylight.transportpce.common.crossconnect.CrossConnectImpl710;
22 import org.opendaylight.transportpce.common.device.DeviceTransactionManagerImpl;
23 import org.opendaylight.transportpce.common.mapping.MappingUtils;
24 import org.opendaylight.transportpce.common.mapping.MappingUtilsImpl;
25 import org.opendaylight.transportpce.common.mapping.PortMapping;
26 import org.opendaylight.transportpce.common.mapping.PortMappingImpl;
27 import org.opendaylight.transportpce.common.mapping.PortMappingVersion121;
28 import org.opendaylight.transportpce.common.mapping.PortMappingVersion221;
29 import org.opendaylight.transportpce.common.mapping.PortMappingVersion710;
30 import org.opendaylight.transportpce.common.network.NetworkTransactionImpl;
31 import org.opendaylight.transportpce.common.network.NetworkTransactionService;
32 import org.opendaylight.transportpce.common.network.RequestProcessor;
33 import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfaces;
34 import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfacesImpl;
35 import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfacesImpl121;
36 import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfacesImpl221;
37 import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfacesImpl710;
38 import org.opendaylight.transportpce.nbinotifications.impl.NbiNotificationsProvider;
39 import org.opendaylight.transportpce.networkmodel.NetConfTopologyListener;
40 import org.opendaylight.transportpce.networkmodel.NetworkModelProvider;
41 import org.opendaylight.transportpce.networkmodel.NetworkUtilsImpl;
42 import org.opendaylight.transportpce.networkmodel.R2RLinkDiscovery;
43 import org.opendaylight.transportpce.networkmodel.listeners.PortMappingListener;
44 import org.opendaylight.transportpce.networkmodel.service.FrequenciesService;
45 import org.opendaylight.transportpce.networkmodel.service.FrequenciesServiceImpl;
46 import org.opendaylight.transportpce.networkmodel.service.NetworkModelService;
47 import org.opendaylight.transportpce.networkmodel.service.NetworkModelServiceImpl;
48 import org.opendaylight.transportpce.olm.OlmPowerServiceRpcImpl;
49 import org.opendaylight.transportpce.olm.OlmProvider;
50 import org.opendaylight.transportpce.olm.power.PowerMgmt;
51 import org.opendaylight.transportpce.olm.power.PowerMgmtImpl;
52 import org.opendaylight.transportpce.olm.service.OlmPowerService;
53 import org.opendaylight.transportpce.olm.service.OlmPowerServiceImpl;
54 import org.opendaylight.transportpce.pce.gnpy.consumer.GnpyConsumer;
55 import org.opendaylight.transportpce.pce.gnpy.consumer.GnpyConsumerImpl;
56 import org.opendaylight.transportpce.pce.impl.PceProvider;
57 import org.opendaylight.transportpce.pce.service.PathComputationService;
58 import org.opendaylight.transportpce.pce.service.PathComputationServiceImpl;
59 import org.opendaylight.transportpce.renderer.RendererProvider;
60 import org.opendaylight.transportpce.renderer.openroadminterface.OpenRoadmInterface121;
61 import org.opendaylight.transportpce.renderer.openroadminterface.OpenRoadmInterface221;
62 import org.opendaylight.transportpce.renderer.openroadminterface.OpenRoadmInterface710;
63 import org.opendaylight.transportpce.renderer.openroadminterface.OpenRoadmInterfaceFactory;
64 // Adding OTN interface
65 import org.opendaylight.transportpce.renderer.openroadminterface.OpenRoadmOtnInterface221;
66 import org.opendaylight.transportpce.renderer.openroadminterface.OpenRoadmOtnInterface710;
67 import org.opendaylight.transportpce.renderer.provisiondevice.DeviceRendererService;
68 import org.opendaylight.transportpce.renderer.provisiondevice.DeviceRendererServiceImpl;
69 import org.opendaylight.transportpce.renderer.provisiondevice.OtnDeviceRendererService;
71 import org.opendaylight.transportpce.renderer.provisiondevice.OtnDeviceRendererServiceImpl;
72 import org.opendaylight.transportpce.renderer.provisiondevice.RendererServiceOperations;
73 import org.opendaylight.transportpce.renderer.provisiondevice.RendererServiceOperationsImpl;
74 import org.opendaylight.transportpce.renderer.rpcs.DeviceRendererRPCImpl;
75 import org.opendaylight.transportpce.servicehandler.impl.ServicehandlerImpl;
76 import org.opendaylight.transportpce.servicehandler.impl.ServicehandlerProvider;
77 import org.opendaylight.transportpce.servicehandler.listeners.NetworkModelListenerImpl;
78 import org.opendaylight.transportpce.servicehandler.listeners.PceListenerImpl;
79 import org.opendaylight.transportpce.servicehandler.listeners.RendererListenerImpl;
80 import org.opendaylight.transportpce.servicehandler.listeners.ServiceListener;
81 import org.opendaylight.transportpce.servicehandler.service.ServiceDataStoreOperations;
82 import org.opendaylight.transportpce.servicehandler.service.ServiceDataStoreOperationsImpl;
83 import org.opendaylight.transportpce.tapi.R2RTapiLinkDiscovery;
84 import org.opendaylight.transportpce.tapi.impl.TapiProvider;
85 import org.opendaylight.transportpce.tapi.listeners.TapiNetworkModelListenerImpl;
86 import org.opendaylight.transportpce.tapi.listeners.TapiPceListenerImpl;
87 import org.opendaylight.transportpce.tapi.listeners.TapiRendererListenerImpl;
88 import org.opendaylight.transportpce.tapi.listeners.TapiServiceHandlerListenerImpl;
89 import org.opendaylight.transportpce.tapi.topology.TapiNetconfTopologyListener;
90 import org.opendaylight.transportpce.tapi.topology.TapiNetworkModelService;
91 import org.opendaylight.transportpce.tapi.topology.TapiNetworkModelServiceImpl;
92 import org.opendaylight.transportpce.tapi.topology.TapiNetworkUtilsImpl;
93 import org.opendaylight.transportpce.tapi.topology.TapiOrLinkListener;
94 import org.opendaylight.transportpce.tapi.topology.TapiPortMappingListener;
95 import org.opendaylight.transportpce.tapi.utils.TapiLink;
96 import org.opendaylight.transportpce.tapi.utils.TapiListener;
97 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev220630.TransportpceNetworkutilsService;
98 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.TransportpceOlmService;
99 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.tapinetworkutils.rev210408.TransportpceTapinetworkutilsService;
100 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.OrgOpenroadmServiceService;
101 import org.slf4j.Logger;
102 import org.slf4j.LoggerFactory;
105 public class TransportPCEImpl extends AbstractLightyModule implements TransportPCE {
106 private static final Logger LOG = LoggerFactory.getLogger(TransportPCEImpl.class);
107 private static final long MAX_DURATION_TO_SUBMIT_TRANSACTION = 1500;
109 // cannot use interface for DeviceTransactionManagerImpl
110 // because implementation has additional public methods ...
111 private final DeviceTransactionManagerImpl deviceTransactionManager;
112 private final NetworkTransactionService networkTransaction;
114 private final PceProvider pceProvider;
115 // network model beans
116 private final NetworkModelProvider networkModelProvider;
118 private final OlmProvider olmProvider;
120 private final RendererProvider rendererProvider;
121 // service-handler beans
122 private final ServicehandlerProvider servicehandlerProvider;
124 private TapiProvider tapiProvider;
125 // nbi-notifications beans
126 private NbiNotificationsProvider nbiNotificationsProvider;
128 * List of publisher topics.
130 private final List<String> publisherServiceList = Arrays.asList("PceListener", "ServiceHandlerOperations",
131 "ServiceHandler", "RendererListener");
132 private final List<String> publisherAlarmList = Arrays.asList("ServiceListener");
134 public TransportPCEImpl(LightyServices lightyServices, boolean activateNbiNotification, boolean activateTapi,
135 String olmtimer1, String olmtimer2) {
136 LOG.info("Initializing transaction providers ...");
137 deviceTransactionManager = new DeviceTransactionManagerImpl(lightyServices.getBindingMountPointService(),
138 MAX_DURATION_TO_SUBMIT_TRANSACTION);
139 networkTransaction = new NetworkTransactionImpl(lightyServices.getBindingDataBroker());
141 LOG.info("Creating network-model beans ...");
142 R2RLinkDiscovery linkDiscoveryImpl = new R2RLinkDiscovery(lightyServices.getBindingDataBroker(),
143 deviceTransactionManager, networkTransaction);
144 TransportpceNetworkutilsService networkutilsServiceImpl = new NetworkUtilsImpl(
145 lightyServices.getBindingDataBroker());
146 PortMapping portMapping = initPortMapping(lightyServices);
147 NetworkModelService networkModelService = new NetworkModelServiceImpl(networkTransaction, linkDiscoveryImpl,
148 portMapping, lightyServices.getBindingNotificationPublishService());
149 FrequenciesService networkModelWavelengthService =
150 new FrequenciesServiceImpl(lightyServices.getBindingDataBroker());
151 NetConfTopologyListener netConfTopologyListener = new NetConfTopologyListener(networkModelService,
152 lightyServices.getBindingDataBroker(), deviceTransactionManager, portMapping);
153 PortMappingListener portMappingListener = new PortMappingListener(networkModelService);
154 networkModelProvider = new NetworkModelProvider(networkTransaction, lightyServices.getBindingDataBroker(),
155 lightyServices.getRpcProviderService(), networkutilsServiceImpl, netConfTopologyListener,
156 lightyServices.getNotificationService(), networkModelWavelengthService, portMappingListener);
158 LOG.info("Creating PCE beans ...");
159 // TODO: pass those parameters through command line
160 GnpyConsumer gnpyConsumer = new GnpyConsumerImpl("http://127.0.0.1:8008",
161 "gnpy", "gnpy", lightyServices.getAdapterContext().currentSerializer());
162 PathComputationService pathComputationService = new PathComputationServiceImpl(
164 lightyServices.getBindingNotificationPublishService(),
168 pceProvider = new PceProvider(lightyServices.getRpcProviderService(), pathComputationService);
170 LOG.info("Creating OLM beans ...");
171 MappingUtils mappingUtils = new MappingUtilsImpl(lightyServices.getBindingDataBroker());
172 CrossConnect crossConnect = initCrossConnect(mappingUtils);
173 OpenRoadmInterfaces openRoadmInterfaces = initOpenRoadmInterfaces(mappingUtils, portMapping);
174 PowerMgmt powerMgmt = new PowerMgmtImpl(lightyServices.getBindingDataBroker(), openRoadmInterfaces,
175 crossConnect, deviceTransactionManager, portMapping, olmtimer1, olmtimer2);
176 OlmPowerService olmPowerService = new OlmPowerServiceImpl(lightyServices.getBindingDataBroker(), powerMgmt,
177 deviceTransactionManager, portMapping, mappingUtils, openRoadmInterfaces);
178 TransportpceOlmService olmPowerServiceRpc = new OlmPowerServiceRpcImpl(olmPowerService);
179 olmProvider = new OlmProvider(lightyServices.getRpcProviderService(), olmPowerServiceRpc);
181 LOG.info("Creating renderer beans ...");
182 OpenRoadmInterfaceFactory openRoadmInterfaceFactory = initOpenRoadmFactory(mappingUtils, openRoadmInterfaces,
184 DeviceRendererService deviceRendererService = new DeviceRendererServiceImpl(
185 lightyServices.getBindingDataBroker(), deviceTransactionManager, openRoadmInterfaceFactory,
186 openRoadmInterfaces, crossConnect, portMapping);
187 OtnDeviceRendererService otnDeviceRendererService = new OtnDeviceRendererServiceImpl(openRoadmInterfaceFactory,
188 crossConnect, openRoadmInterfaces, deviceTransactionManager, networkModelService);
189 rendererProvider = initRenderer(lightyServices, olmPowerServiceRpc, deviceRendererService,
190 otnDeviceRendererService, portMapping);
192 LOG.info("Creating service-handler beans ...");
193 RendererServiceOperations rendererServiceOperations = new RendererServiceOperationsImpl(deviceRendererService,
194 otnDeviceRendererService, olmPowerServiceRpc, lightyServices.getBindingDataBroker(),
195 lightyServices.getBindingNotificationPublishService(), portMapping);
196 ServiceDataStoreOperations serviceDataStoreOperations = new ServiceDataStoreOperationsImpl(
197 lightyServices.getBindingDataBroker());
198 RendererListenerImpl rendererListenerImpl = new RendererListenerImpl(pathComputationService,
199 lightyServices.getBindingNotificationPublishService(), networkModelService);
200 PceListenerImpl pceListenerImpl = new PceListenerImpl(rendererServiceOperations, pathComputationService,
201 lightyServices.getBindingNotificationPublishService(), serviceDataStoreOperations);
202 NetworkModelListenerImpl networkModelListenerImpl = new NetworkModelListenerImpl(
203 lightyServices.getBindingNotificationPublishService(), serviceDataStoreOperations);
204 CatalogDataStoreOperations catalogDataStoreOperations = new CatalogDataStoreOperationsImpl(
205 lightyServices.getBindingDataBroker());
206 ServicehandlerImpl servicehandler = new ServicehandlerImpl(lightyServices.getBindingDataBroker(),
207 pathComputationService, rendererServiceOperations, lightyServices.getBindingNotificationPublishService(),
208 pceListenerImpl, rendererListenerImpl, networkModelListenerImpl, serviceDataStoreOperations, catalogDataStoreOperations);
209 ServiceListener serviceListener = new ServiceListener(servicehandler, serviceDataStoreOperations,
210 lightyServices.getBindingNotificationPublishService());
211 servicehandlerProvider = new ServicehandlerProvider(lightyServices.getBindingDataBroker(),
212 lightyServices.getRpcProviderService(), lightyServices.getNotificationService(),
213 serviceDataStoreOperations, pceListenerImpl, serviceListener, rendererListenerImpl,
214 networkModelListenerImpl, servicehandler, catalogDataStoreOperations);
216 LOG.info("Creating tapi beans ...");
217 TapiLink tapiLink = new TapiLink(networkTransaction);
218 R2RTapiLinkDiscovery tapilinkDiscoveryImpl = new R2RTapiLinkDiscovery(networkTransaction,
219 deviceTransactionManager, tapiLink);
220 TapiRendererListenerImpl tapiRendererListenerImpl = new TapiRendererListenerImpl(lightyServices
221 .getBindingDataBroker(), lightyServices.getBindingNotificationPublishService());
222 TapiPceListenerImpl tapiPceListenerImpl = new TapiPceListenerImpl(lightyServices.getBindingDataBroker());
223 TapiServiceHandlerListenerImpl tapiServiceHandlerListener = new TapiServiceHandlerListenerImpl(
224 lightyServices.getBindingDataBroker());
225 TransportpceTapinetworkutilsService tapiNetworkutilsServiceImpl = new TapiNetworkUtilsImpl(
226 networkTransaction, tapiLink);
227 TapiNetworkModelService tapiNetworkModelService = new TapiNetworkModelServiceImpl(
228 tapilinkDiscoveryImpl, networkTransaction, tapiLink,
229 lightyServices.getBindingNotificationPublishService());
230 TapiNetconfTopologyListener tapiNetConfTopologyListener =
231 new TapiNetconfTopologyListener(tapiNetworkModelService);
232 TapiOrLinkListener orLinkListener = new TapiOrLinkListener(tapiLink, networkTransaction);
233 TapiPortMappingListener tapiPortMappingListener =
234 new TapiPortMappingListener(tapiNetworkModelService);
235 TapiNetworkModelListenerImpl tapiNetworkModelListenerImpl =
236 new TapiNetworkModelListenerImpl(networkTransaction,
237 lightyServices.getBindingNotificationPublishService());
239 tapiProvider = initTapi(lightyServices, servicehandler, networkTransaction, serviceDataStoreOperations,
240 tapiNetConfTopologyListener, tapiPortMappingListener, tapiNetworkutilsServiceImpl,
241 tapiPceListenerImpl, tapiRendererListenerImpl, tapiServiceHandlerListener,
242 lightyServices.getNotificationService(), orLinkListener, tapiNetworkModelListenerImpl);
244 if (activateNbiNotification) {
245 LOG.info("Creating nbi-notifications beans ...");
246 nbiNotificationsProvider = new NbiNotificationsProvider(
247 publisherServiceList, publisherAlarmList, null, null, lightyServices.getRpcProviderService(),
248 lightyServices.getNotificationService(), lightyServices.getAdapterContext().currentSerializer(),
254 protected boolean initProcedure() {
255 LOG.info("Initializing PCE provider ...");
257 LOG.info("Initializing network-model provider ...");
258 networkModelProvider.init();
259 LOG.info("Initializing OLM provider ...");
261 LOG.info("Initializing renderer provider ...");
262 rendererProvider.init();
263 LOG.info("Initializing service-handler provider ...");
264 servicehandlerProvider.init();
265 if (tapiProvider != null) {
266 LOG.info("Initializing tapi provider ...");
269 if (nbiNotificationsProvider != null) {
270 LOG.info("Initializing nbi-notifications provider ...");
271 nbiNotificationsProvider.init();
273 LOG.info("Init done.");
278 protected boolean stopProcedure() {
279 if (nbiNotificationsProvider != null) {
280 nbiNotificationsProvider.close();
281 LOG.info("Shutting down nbi-notifications provider ...");
283 if (tapiProvider != null) {
284 tapiProvider.close();
285 LOG.info("Shutting down service-handler provider ...");
287 servicehandlerProvider.close();
288 LOG.info("Shutting down renderer provider ...");
289 rendererProvider.close();
290 LOG.info("Shutting down OLM provider ...");
292 LOG.info("Shutting down network-model provider ...");
293 networkModelProvider.close();
294 LOG.info("Shutting down PCE provider ...");
296 LOG.info("Shutting down transaction providers ...");
297 networkTransaction.close();
298 deviceTransactionManager.preDestroy();
299 LOG.info("Shutdown done.");
303 private TapiProvider initTapi(LightyServices lightyServices, OrgOpenroadmServiceService servicehandler,
304 NetworkTransactionService networkTransactionService,
305 ServiceDataStoreOperations serviceDataStoreOperations,
306 TapiNetconfTopologyListener tapiNetConfTopologyListener,
307 TapiPortMappingListener tapiPortMappingListener,
308 TransportpceTapinetworkutilsService tapiNetworkutilsServiceImpl,
309 TapiPceListenerImpl pceListenerImpl, TapiRendererListenerImpl rendererListenerImpl,
310 TapiServiceHandlerListenerImpl serviceHandlerListenerImpl,
311 NotificationService notificationService, TapiOrLinkListener orLinkListener,
312 TapiNetworkModelListenerImpl tapiNetworkModelListenerImpl) {
313 return new TapiProvider(lightyServices.getBindingDataBroker(), lightyServices.getRpcProviderService(),
314 servicehandler, serviceDataStoreOperations, new TapiListener(), networkTransactionService,
315 tapiNetConfTopologyListener, tapiPortMappingListener, tapiNetworkutilsServiceImpl, pceListenerImpl,
316 rendererListenerImpl, serviceHandlerListenerImpl, notificationService, orLinkListener,
317 tapiNetworkModelListenerImpl);
320 private RendererProvider initRenderer(LightyServices lightyServices, TransportpceOlmService olmPowerServiceRpc,
321 DeviceRendererService deviceRendererService, OtnDeviceRendererService otnDeviceRendererService,
322 PortMapping portMapping) {
323 DeviceRendererRPCImpl deviceRendererRPC = new DeviceRendererRPCImpl(deviceRendererService,
324 otnDeviceRendererService);
325 RendererServiceOperationsImpl rendererServiceOperations = new RendererServiceOperationsImpl(
326 deviceRendererService, otnDeviceRendererService, olmPowerServiceRpc,
327 lightyServices.getBindingDataBroker(), lightyServices.getBindingNotificationPublishService(),
329 return new RendererProvider(lightyServices.getRpcProviderService(), deviceRendererRPC,
330 rendererServiceOperations);
333 private OpenRoadmInterfaceFactory initOpenRoadmFactory(MappingUtils mappingUtils,
334 OpenRoadmInterfaces openRoadmInterfaces, PortMapping portMapping) {
335 OpenRoadmInterface121 openRoadmInterface121 = new OpenRoadmInterface121(portMapping, openRoadmInterfaces);
336 OpenRoadmInterface221 openRoadmInterface221 = new OpenRoadmInterface221(portMapping, openRoadmInterfaces);
337 OpenRoadmInterface710 openRoadmInterface710 = new OpenRoadmInterface710(portMapping, openRoadmInterfaces);
338 OpenRoadmOtnInterface221 openRoadmOtnInterface221 = new OpenRoadmOtnInterface221(portMapping,
339 openRoadmInterfaces);
340 OpenRoadmOtnInterface710 openRoadmOtnInterface710 = new OpenRoadmOtnInterface710(portMapping,
341 openRoadmInterfaces);
342 return new OpenRoadmInterfaceFactory(mappingUtils, openRoadmInterface121, openRoadmInterface221,
343 openRoadmInterface710, openRoadmOtnInterface221, openRoadmOtnInterface710);
346 private PortMapping initPortMapping(LightyServices lightyServices) {
347 PortMappingVersion710 portMappingVersion710 = new PortMappingVersion710(lightyServices.getBindingDataBroker(),
348 deviceTransactionManager);
349 PortMappingVersion221 portMappingVersion221 = new PortMappingVersion221(lightyServices.getBindingDataBroker(),
350 deviceTransactionManager);
351 PortMappingVersion121 portMappingVersion121 = new PortMappingVersion121(lightyServices.getBindingDataBroker(),
352 deviceTransactionManager);
353 return new PortMappingImpl(lightyServices.getBindingDataBroker(), portMappingVersion710,
354 portMappingVersion221, portMappingVersion121);
357 private OpenRoadmInterfaces initOpenRoadmInterfaces(MappingUtils mappingUtils, PortMapping portMapping) {
358 OpenRoadmInterfacesImpl121 openRoadmInterfacesImpl121 = new OpenRoadmInterfacesImpl121(
359 deviceTransactionManager);
360 OpenRoadmInterfacesImpl221 openRoadmInterfacesImpl221 = new OpenRoadmInterfacesImpl221(
361 deviceTransactionManager, portMapping);
362 OpenRoadmInterfacesImpl710 openRoadmInterfacesImpl710 = new OpenRoadmInterfacesImpl710(
363 deviceTransactionManager, portMapping);
364 return new OpenRoadmInterfacesImpl(deviceTransactionManager, mappingUtils, openRoadmInterfacesImpl121,
365 openRoadmInterfacesImpl221, openRoadmInterfacesImpl710);
368 private CrossConnect initCrossConnect(MappingUtils mappingUtils) {
369 CrossConnectImpl121 crossConnectImpl121 = new CrossConnectImpl121(deviceTransactionManager);
370 CrossConnectImpl221 crossConnectImpl221 = new CrossConnectImpl221(deviceTransactionManager);
371 CrossConnectImpl710 crossConnectImpl710 = new CrossConnectImpl710(deviceTransactionManager);
372 return new CrossConnectImpl(deviceTransactionManager, mappingUtils, crossConnectImpl121, crossConnectImpl221,
373 crossConnectImpl710);