/** * Inject the given resources plus all available transport acceptors and connectors into every available acceptor * and connector. * @param resources Resources that should be injected (in addition to available transport acceptors and connectors) * @return A map containing the given input resources plus entries for the acceptor and connector of each available * transport. This can be used to inject resources into other objects which require acceptors or connectors to be injected. */ public Map<String, Object> injectResources(Map<String, Object> resources) { Map<String, Object> allResources = new HashMap<>(resources); for (Entry<String, Transport> entry : transportsByName.entrySet()) { allResources.put(entry.getKey() + ".acceptor", entry.getValue().getAcceptor()); allResources.put(entry.getKey() + ".connector", entry.getValue().getConnector()); } for (Transport transport : transportsByName.values()) { BridgeAcceptor acceptor = transport.getAcceptor(); if (acceptor != null) { injectResources(acceptor, allResources); } BridgeConnector connector = transport.getConnector(); if (connector != null) { injectResources(transport.getConnector(), allResources); } for (Object extension: transport.getExtensions()) { injectResources(extension, allResources); } } return allResources; }
private void injectResources(Collection<ServiceContext> services, BridgeServiceFactory bridgeServiceFactory, Map<String, Object> dependencyContexts, Map<String, Object> injectables) { // add all of the transport acceptors, connectors and extensions injectables = bridgeServiceFactory.getTransportFactory().injectResources(injectables); // inject services for (ServiceContext serviceContext : services) { injectResources(serviceContext.getService(), injectables); } // in case any of the DependencyContexts have dependencies on each other, // or the other resources added to the map, inject resources for them as well. for (Object obj : dependencyContexts.values()) { injectResources(obj, injectables); } }