TUSCANY-3834 - continue stopping components in the case of exceptions thrown during a previous component stop.

git-svn-id: https://svn.apache.org/repos/asf/tuscany/sca-java-1.x/trunk@1068894 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/modules/core/src/main/java/org/apache/tuscany/sca/core/assembly/CompositeActivatorImpl.java b/modules/core/src/main/java/org/apache/tuscany/sca/core/assembly/CompositeActivatorImpl.java
index c5ffbc4..af3e606 100644
--- a/modules/core/src/main/java/org/apache/tuscany/sca/core/assembly/CompositeActivatorImpl.java
+++ b/modules/core/src/main/java/org/apache/tuscany/sca/core/assembly/CompositeActivatorImpl.java
@@ -739,13 +739,17 @@
             for (Binding binding : service.getBindings()) {
                 final ServiceBindingProvider bindingProvider = ((RuntimeComponentService)service).getBindingProvider(binding);
                 if (bindingProvider != null) {
-                    // Allow bindings to read properties. Requires PropertyPermission read in security policy. 
-                    AccessController.doPrivileged(new PrivilegedAction<Object>() {
-                        public Object run() {
-                            bindingProvider.stop();
-                            return null;
-                          }
-                    });                       
+	                try {
+	                    // Allow bindings to read properties. Requires PropertyPermission read in security policy. 
+	                    AccessController.doPrivileged(new PrivilegedAction<Object>() {
+	                        public Object run() {
+	                            bindingProvider.stop();
+	                            return null;
+	                          }
+	                    }); 
+	            	} catch (Throwable ex){
+	            		logger.log(Level.SEVERE, ex.getMessage(), ex);
+	            	}                    
                 }
             }
         }
@@ -758,26 +762,34 @@
             for (Binding binding : reference.getBindings()) {
                 final ReferenceBindingProvider bindingProvider = runtimeRef.getBindingProvider(binding);
                 if (bindingProvider != null) {
-                    // Allow bindings to read properties. Requires PropertyPermission read in security policy. 
-                    AccessController.doPrivileged(new PrivilegedAction<Object>() {
-                        public Object run() {
-                            bindingProvider.stop();
-                            return null;
-                          }
-                    });                       
+	                try {
+	                    // Allow bindings to read properties. Requires PropertyPermission read in security policy. 
+	                    AccessController.doPrivileged(new PrivilegedAction<Object>() {
+	                        public Object run() {
+	                            bindingProvider.stop();
+	                            return null;
+	                          }
+	                    }); 
+	            	} catch (Throwable ex){
+	            		logger.log(Level.SEVERE, ex.getMessage(), ex);
+	            	}                    
                 }
             } 
             
             for (Endpoint endpoint : reference.getEndpoints()) {
                 final EndpointResolver endpointResolver = runtimeRef.getEndpointResolver(endpoint);
                 if (endpointResolver != null) {
-                    // Allow endpoint resolvers to do any shutdown reference manipulation
-                    AccessController.doPrivileged(new PrivilegedAction<Object>() {
-                        public Object run() {
-                            endpointResolver.stop();
-                            return null;
-                          }
-                    });                       
+	                try {
+	                    // Allow endpoint resolvers to do any shutdown reference manipulation
+	                    AccessController.doPrivileged(new PrivilegedAction<Object>() {
+	                        public Object run() {
+	                            endpointResolver.stop();
+	                            return null;
+	                          }
+	                    }); 
+	            	} catch (Throwable ex){
+	            		logger.log(Level.SEVERE, ex.getMessage(), ex);
+	            	}
                 }
             }             
         }
@@ -787,13 +799,17 @@
         } else {
             final ImplementationProvider implementationProvider = ((RuntimeComponent)component).getImplementationProvider();
             if (implementationProvider != null) {
-                // Allow bindings to read properties. Requires PropertyPermission read in security policy. 
-                AccessController.doPrivileged(new PrivilegedAction<Object>() {
-                    public Object run() {
-                        implementationProvider.stop();
-                        return null;
-                      }
-                });                       
+            	try {
+	                // Allow bindings to read properties. Requires PropertyPermission read in security policy. 
+	                AccessController.doPrivileged(new PrivilegedAction<Object>() {
+	                    public Object run() {
+	                        implementationProvider.stop();
+	                        return null;
+	                      }
+	                });  
+	        	} catch (Throwable ex){
+	        		logger.log(Level.SEVERE, ex.getMessage(), ex);
+	        	}
             }
         }
 
@@ -801,7 +817,11 @@
             ScopedRuntimeComponent runtimeComponent = (ScopedRuntimeComponent)component;
             if (runtimeComponent.getScopeContainer() != null && 
             		runtimeComponent.getScopeContainer().getLifecycleState() != ScopeContainer.STOPPED) {
-                runtimeComponent.getScopeContainer().stop();
+            	try {
+            		runtimeComponent.getScopeContainer().stop();
+            	} catch (Throwable ex){
+            		logger.log(Level.SEVERE, ex.getMessage(), ex);
+            	}
             }
         }
 
diff --git a/modules/core/src/main/java/org/apache/tuscany/sca/core/scope/CompositeScopeContainer.java b/modules/core/src/main/java/org/apache/tuscany/sca/core/scope/CompositeScopeContainer.java
index 7a19651..8c727ec 100644
--- a/modules/core/src/main/java/org/apache/tuscany/sca/core/scope/CompositeScopeContainer.java
+++ b/modules/core/src/main/java/org/apache/tuscany/sca/core/scope/CompositeScopeContainer.java
@@ -40,6 +40,7 @@
             try {
                 wrapper.stop();
             } catch (TargetDestructionException e) {
+            	wrapper = null;
                 throw new IllegalStateException(e);
             }
         }