private ConnectionDescriptor getJmsDescriptor(final ServiceDescriptor serviceDescriptor) { final List<ConnectionDescriptor> serviceLocations = serviceDescriptor.getServiceLocations(); for (final ConnectionDescriptor connectionDescriptor : serviceLocations) { if (ServiceRegistryConstants.SERVICE_PROTOCOL_JMS.equals(connectionDescriptor.getProtocol())) { return connectionDescriptor; } } logger.warn("Jms descriptor not found in {}", serviceDescriptor); throw new IllegalStateException("Jms descriptor not found"); }
private boolean haveCommonElement(final Collection<String> acceptableProtocols, final ServiceDescriptor descriptor, final String clientName, final String containerName) { for (final ConnectionDescriptor connectionDescriptor : descriptor.getServiceLocations()) { final String protocol = connectionDescriptor.getProtocol(); if (acceptableProtocols.contains(protocol)) { if (ServiceRegistryConstants.SERVICE_PROTOCOL_LOCAL.equals(protocol)) { if (clientName != null && clientName.equals(containerName)) { return true; } } else { return true; } } } return false; }
@RequestMapping(value="/containers/add", method=RequestMethod.POST) public String addContainer(final Model model, @ModelAttribute("containerDescriptor") ServiceDescriptor containerDescriptor, BindingResult result) { containerDescriptorValidator.validate(containerDescriptor, result); if (result.hasErrors()) { model.addAttribute("availableServiceProtocols", ServiceRegistryConstants.ALL_KNOWN_SERVICE_PROTOCOLS); return "console.platform.container.add"; } ListIterator<ConnectionDescriptor> it = containerDescriptor.getServiceLocations().listIterator(); while (it.hasNext()) { ConnectionDescriptor conn = it.next(); if (conn.getLocation() == null || conn.getProtocol() == null) { it.remove(); } } registryManager.addContainer(containerDescriptor); return UrlBasedViewResolver.REDIRECT_URL_PREFIX + "/containers"; }
/** * Match connector based on supported protocols. First connection * description for which connector exists will be used. */ @Override public <T> ServiceProxy<T> createConnector(final ServiceDescriptor descriptor, final Class<T> localInterface) { if (descriptor == null) { logger.warn("unable to create connection to service as descriptor is null. "); return null; } final List<ConnectionDescriptor> serviceLocations = descriptor.getServiceLocations(); if (logger.isTraceEnabled()) { logger.trace("checking connections for {}.", descriptor); } if (serviceLocations != null) { for (final ConnectionDescriptor connectionDescriptor : serviceLocations) { for (final ServiceProxyFactory proxyFactory : serviceProxyFactories) { ServiceProxy<T> serviceProxy; serviceProxy = findAndCreateServiceProxy(descriptor, localInterface, connectionDescriptor, proxyFactory); if (serviceProxy != null) { return serviceProxy; } } } } throw new IllegalStateException("It's not possible to find proper connector for service" + descriptor.getServiceId()); }
@Override public void addNewConnectionDeploymentResult(final String serviceId, final InternalConnectionDeploymentResult connectionDeploymentResult) { final String protocol = connectionDeploymentResult.getConnectionDescriptor().getProtocol(); final ServiceInfo sericeInfo = getOrThrowServiceInfo(serviceId); sericeInfo.exportedProtocols.put(protocol , connectionDeploymentResult); sericeInfo.serviceDescriptor.getServiceLocations().add(connectionDeploymentResult.getConnectionDescriptor()); }
private ContainerDetails transformToContainerDetails(final ServiceDescriptor containerDescriptor) { ContainerDetails containerDetails = new ContainerDetails(); containerDetails.setName(containerDescriptor.getServiceId()); List<String> locations = new ArrayList<String>(); List<ConnectionDescriptor> serviceLocations = containerDescriptor.getServiceLocations(); if (serviceLocations != null) { for (ConnectionDescriptor connectionDescriptor : serviceLocations) { locations.add(connectionDescriptor.getLocation().toString()); } } containerDetails.setAddress(locations); return containerDetails; }
public void waitForServiceInRegistry(final ServiceDescriptor serviceDescriptor) { final ServiceRegistry serviceRegistry = getServiceRegistry(); List<ConnectionDescriptor> locations = serviceDescriptor.getServiceLocations(); if (locations == null || locations.isEmpty()) { return; } final String[] protocols = new String[locations.size()]; int i = 0; for (ConnectionDescriptor connection : locations) { String protocol = connection.getProtocol(); protocols[i++] = protocol; } try { await().pollDelay(1, TimeUnit.SECONDS).atMost(20, TimeUnit.SECONDS).pollInterval(1, TimeUnit.SECONDS).until(new Callable<Boolean>() { @Override public Boolean call() { String serviceId = serviceDescriptor.getServiceId(); String version = serviceDescriptor.getVersion(); final ServiceDescriptor descriptor = serviceRegistry.lookupService(serviceId, version, "", protocols); return descriptor != null; } }); } catch (Exception e) { logger.warn("Exception while waiting for service be visible by registry", e); } }
private ServiceDetails transformToServiceDetails(final ServiceInformation serviceInformation) { ServiceDetails serviceDetails = new ServiceDetails(); serviceDetails.setId(serviceInformation.getDescriptor().getServiceId()); serviceDetails.setGlobalId(serviceInformation.getDescriptor().getGlobalId()); serviceDetails.setStatus(serviceInformation.getState().name()); serviceDetails.setVersion(serviceInformation.getDescriptor().getVersion()); serviceDetails.setType(serviceInformation.getDescriptor().getType()); List<String> protocols = new ArrayList<String>(); List<ConnectionDescriptor> serviceLocations = serviceInformation.getDescriptor().getServiceLocations(); if (serviceLocations != null) { for (ConnectionDescriptor connectionDescriptor : serviceLocations) { protocols.add(connectionDescriptor.getProtocol()); } } serviceDetails.setProtocols(protocols); Collection<String> aliases = registryManager.findAllAliasesForService(serviceDetails.getGlobalId()); List<String> serviceDetailsAliases = new ArrayList<String>(); if (aliases != null) { for (String alias : aliases) { serviceDetailsAliases.add(alias); } } serviceDetails.setAliases(serviceDetailsAliases); serviceDetails.setManagersAvailable(ArrayUtils.isNotEmpty(serviceInformation.getManagerDescriptors())); return serviceDetails; }
@Override public ServiceDescriptorProto convertFrom(final ServiceDescriptor serviceDescriptor) { if (serviceDescriptor == null) { return null; } Builder builder = ServiceDescriptorProto.newBuilder(); Collection<Feature> features = transformMap(serviceDescriptor.getFeatures()); builder.addAllFeatures(features); if (serviceDescriptor.getGlobalId() != null) { builder.setGlobalId(serviceDescriptor.getGlobalId()); } builder.setServiceId(serviceDescriptor.getServiceId()); builder.setType(serviceDescriptor.getType()); builder.setVersion(serviceDescriptor.getVersion()); List<ConnectionDescriptor> locations = serviceDescriptor.getServiceLocations(); for (ConnectionDescriptor connectionDescriptor : locations) { ConnectionDescriptorProto connectionDescProto; connectionDescProto = transformConnectionDesc(connectionDescriptor); builder.addLocations(connectionDescProto); } return builder.build(); }
/** * Create new ServiceDescriptor based on given as a parameter and limit serviceLocations and generate service globalId * @param candidate * @param queryCriteria * @return */ private ServiceDescriptor modifyServiceDescriptor(final ServiceCandidate candidate, final QueryCriteria queryCriteria) { final ServiceDescriptor origDescriptor = candidate.getServiceInformation().getDescriptor(); final Collection<String> acceptableProtocols = queryCriteria.getAcceptableProtocols(); final ServiceDescriptor modifiedDescriptor = new ServiceDescriptor(); modifiedDescriptor.setServiceId(origDescriptor.getServiceId()); modifiedDescriptor.setType(origDescriptor.getType()); modifiedDescriptor.setVersion(origDescriptor.getVersion()); modifiedDescriptor.setFeatures(origDescriptor.getFeatures()); modifiedDescriptor.setGlobalId(origDescriptor.getGlobalId()); modifiedDescriptor.setServiceLocations(limitServiceLocations(origDescriptor.getServiceLocations(), acceptableProtocols)); modifiedDescriptor.setServicePriority(origDescriptor.getServicePriority()); return modifiedDescriptor; }