+ private void stopAlreadyStartedComponents(List<Component> aStarted) {
+ // an exception occurred, stop the successfully started
+ // components
+ for (int i = aStarted.size() - 1; i >= 0; i--) {
+ try {
+ aStarted.get(i).stop();
+ } catch (Throwable t) {
+ LOG.error(getQualifiedName() + ": error stopping "
+ + aStarted.get(i).getQualifiedName());
+ }
+ }
+ }
+
+ private void checkAllRequiredServicesAlreadyProvided(
+ List<ProvidedInterface> aAllProvided, Component aComponent) {
+ // Check if all required services are already provided by
+ // earlier
+ // systems.
+
+ for (RequiredInterface descriptor : aComponent.getRequiredInterfaces()) {
+ ProvidedInterface[] filtered = filterProvidedServices(
+ descriptor, aAllProvided);
+ if ( filtered.length == 1 ) {
+ descriptor.setProvider(filtered[0]);
+ } else if ( filtered.length > 1 ) {
+ throw new SystemAssemblyException(
+ "Service '"
+ + descriptor
+ + "' required by system '"
+ + aComponent
+ + "' matches multiple services provided by other systems: "
+ + getServers(filtered));
+ } else {
+ // filtered.length == 0
+ if ( !descriptor.isOptional()) {
+ throw new SystemAssemblyException(
+ "Service '"
+ + descriptor
+ + "' required by system '"
+ + aComponent
+ + "' is not provided by systems that are started earlier");
+ }
+ }
+ }
+ }
+