Advertisement
Guest User

Untitled

a guest
May 24th, 2017
54
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5 2.26 KB | None | 0 0
  1. private void resolve(final ServiceDefinition serviceDefinition, final Map<ServiceName, ServiceDefinition> serviceDefinitions, final Set<ServiceName> processed, final Set<ServiceName> visited) throws ServiceRegistryException {
  2.         if (!visited.add(serviceDefinition.getName()))
  3.             throw new CircularDependencyException("Circular dependency discovered: " + visited);
  4.         try {
  5.             if(processed.add(serviceDefinition.getName())) {
  6.                 final ServiceBuilder<Service> builder = serviceContainer.buildService(serviceDefinition.getService());
  7.  
  8.                 for (String dependency : serviceDefinition.getDependencies()) {
  9.                     final ServiceName dependencyName = ServiceName.create(dependency);
  10.                    
  11.                     ServiceController<Service> dependencyController = registry.get(dependencyName);
  12.                     if(dependencyController != null) {
  13.                         builder.addDependency(dependencyController);
  14.                         continue;
  15.                     }
  16.                    
  17.                     final ServiceDefinition dependencyDefinition = serviceDefinitions.get(dependencyName);
  18.                     if (dependencyDefinition == null)
  19.                         throw new MissingDependencyException("Missing dependency: " + serviceDefinition.getName() + " depends on " + dependencyName + " which can not be found");
  20.  
  21.                     resolve(dependencyDefinition, serviceDefinitions, processed, visited);
  22.                     dependencyController = registry.get(dependencyName);
  23.                     if(dependencyController == null)
  24.                         throw new ResolutionException("WTF....");
  25.                    
  26.                     builder.addDependency(dependencyController);
  27.                 }
  28.  
  29.                 // We are resolved.  Lets install
  30.                 builder.addListener(new ServiceUnregisterListner(serviceDefinition.getName()));
  31.                 if (registry.putIfAbsent(serviceDefinition.getName(), builder.create()) != null) {
  32.                     throw new ServiceRegistryException("Duplicate service name provided: " + serviceDefinition.getName());
  33.                 }
  34.             }
  35.         } finally {
  36.             visited.remove(serviceDefinition.getName());
  37.         }
  38.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement