private void exportServices(final ServiceDeployment serviceDeployment, final LocalService service, final Class<? extends Service> serviceInterface, final ServiceDescriptor serviceDescriptor) { final Map<String, String> serviceFeatures = Collections.unmodifiableMap(serviceDescriptor.getFeatures()); serviceExportManager.exportAllProtocols(service, serviceInterface, serviceDeployment.getServiceAccesses(), serviceFeatures); }
private <T> ServiceProxy<T> findAndCreateServiceProxy(final ServiceDescriptor descriptor, final Class<T> localInterface, final ConnectionDescriptor connectionDescriptor, final ServiceProxyFactory proxyFactory) { final String[] supportedProtocols = proxyFactory.getProtocols(); for (final String proxyProtocol : supportedProtocols) { if (proxyProtocol.equals(connectionDescriptor.getProtocol())) { final String serviceId = descriptor.getServiceId(); if (proxyFactory.isApplicable(connectionDescriptor, localInterface, serviceId)) { if (logger.isTraceEnabled()) { logger.trace("connection will be created by {} using protocol {} ", proxyFactory, proxyProtocol); } return proxyFactory.buildProxy(connectionDescriptor, localInterface, serviceId, descriptor.getFeatures()); } } } return null; }
/** * Creates service descriptor for new service. */ private ServiceDescriptor createServiceDescriptor(final LocalService service, final ServiceDeployment serviceDeployment) { final ServiceDescriptor serviceDescriptor = new ServiceDescriptor(service); serviceDescriptor.setServicePriority(serviceDeployment.getServicePriority()); String bundleId = serviceDeployment.getBundleId(); String serviceDefinitionId = serviceDeployment.getServiceDefinitionId(); SpringContextServiceFactory serviceFactory = serviceFactoryContext.getServiceFactory(bundleId, serviceDefinitionId); if (serviceFactory == null) { throw new ServiceCreationException("Service of definition id '{}' and bundle id '{}' not found in bundle context.", serviceDefinitionId, bundleId); } ServiceDefinition serviceDefinition = serviceFactory.getServiceDefinition(); if (serviceDefinition.isStateful()) { serviceDescriptor.getFeatures().put("stateful", "true"); } deployedServicesData.setServiceDescriptor(service.getServiceId(), serviceDescriptor); return serviceDescriptor; }
@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; }