TUSCANY-3834: Update so that exceptions during stop processing use the Monitor to log the exception

git-svn-id: https://svn.apache.org/repos/asf/tuscany/sca-java-1.x/trunk@1072965 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 af3e606..3f79a23 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
@@ -57,6 +57,10 @@
 import org.apache.tuscany.sca.interfacedef.InterfaceContractMapper;
 import org.apache.tuscany.sca.interfacedef.java.JavaInterfaceFactory;
 import org.apache.tuscany.sca.invocation.MessageFactory;
+import org.apache.tuscany.sca.monitor.Monitor;
+import org.apache.tuscany.sca.monitor.Problem;
+import org.apache.tuscany.sca.monitor.Problem.Severity;
+import org.apache.tuscany.sca.monitor.impl.ProblemImpl;
 import org.apache.tuscany.sca.provider.BindingProviderFactory;
 import org.apache.tuscany.sca.provider.ImplementationProvider;
 import org.apache.tuscany.sca.provider.ImplementationProviderFactory;
@@ -93,6 +97,7 @@
     private final ProxyFactory proxyFactory;
     private final JavaInterfaceFactory javaInterfaceFactory;
     private final ConversationManager conversationManager;
+    private Monitor monitor;
 
     private final ComponentContextHelper componentContextHelper;
 
@@ -103,6 +108,7 @@
      * @param interfaceContractMapper
      * @param workScheduler
      * @param conversationManager TODO
+     * @param monitor 
      * @param workContext
      * @param wirePostProcessorRegistry
      */
@@ -119,7 +125,7 @@
                                   ProviderFactoryExtensionPoint providerFactories,
                                   EndpointResolverFactoryExtensionPoint endpointResolverFactories,
                                   StAXArtifactProcessorExtensionPoint processors,
-                                  ConversationManager conversationManager) {
+                                  ConversationManager conversationManager, Monitor monitor) {
         this.assemblyFactory = assemblyFactory;
         this.messageFactory = messageFactory;
         this.interfaceContractMapper = interfaceContractMapper;
@@ -132,6 +138,7 @@
         this.requestContextFactory = requestContextFactory;
         this.proxyFactory = proxyFactory;
         this.conversationManager = conversationManager;
+        this.monitor = monitor;
         this.componentContextHelper = new ComponentContextHelper(assemblyFactory, javaInterfaceFactory, processors);
     }
 
@@ -652,7 +659,7 @@
                     try {
                         stop((Composite)implementation);
                     } catch (Throwable e1) {
-                        logger.log(Level.SEVERE, e1.getMessage(), e1);
+                        error("StopException", implementation, e1);
                     }
                     rethrow(e);
                 }
@@ -707,7 +714,7 @@
                     ((ScopeContainer)provider).stop();
                 }
             } catch (Throwable e) {
-                logger.log(Level.SEVERE, e.getMessage(), e);
+                error("StopException", provider, e);
             }
         }
     }
@@ -748,7 +755,7 @@
 	                          }
 	                    }); 
 	            	} catch (Throwable ex){
-	            		logger.log(Level.SEVERE, ex.getMessage(), ex);
+	                    error("StopException", bindingProvider, ex);
 	            	}                    
                 }
             }
@@ -771,7 +778,7 @@
 	                          }
 	                    }); 
 	            	} catch (Throwable ex){
-	            		logger.log(Level.SEVERE, ex.getMessage(), ex);
+                            error("StopException", bindingProvider, ex);
 	            	}                    
                 }
             } 
@@ -788,7 +795,7 @@
 	                          }
 	                    }); 
 	            	} catch (Throwable ex){
-	            		logger.log(Level.SEVERE, ex.getMessage(), ex);
+                            error("StopException", endpointResolver, ex);
 	            	}
                 }
             }             
@@ -808,7 +815,7 @@
 	                      }
 	                });  
 	        	} catch (Throwable ex){
-	        		logger.log(Level.SEVERE, ex.getMessage(), ex);
+                            error("StopException", implementationProvider, ex);
 	        	}
             }
         }
@@ -820,7 +827,7 @@
             	try {
             		runtimeComponent.getScopeContainer().stop();
             	} catch (Throwable ex){
-            		logger.log(Level.SEVERE, ex.getMessage(), ex);
+                    error("StopException", runtimeComponent, ex);
             	}
             }
         }
@@ -1175,4 +1182,10 @@
         return conversationManager;
     }
     
+    private void error(String message, Object model, Throwable e) {
+        if (monitor != null) {
+            Problem problem = new ProblemImpl(this.getClass().getName(), "core-messages", Severity.ERROR, model, message, (Exception)e);
+            monitor.problem(problem);
+        }
+    }
 }
diff --git a/modules/core/src/main/resources/core-messages.properties b/modules/core/src/main/resources/core-messages.properties
new file mode 100644
index 0000000..5b92c78
--- /dev/null
+++ b/modules/core/src/main/resources/core-messages.properties
@@ -0,0 +1,22 @@
+#
+#
+#    Licensed to the Apache Software Foundation (ASF) under one
+#    or more contributor license agreements. See the NOTICE file
+#    distributed with this work for additional information
+#    regarding copyright ownership. The ASF licenses this file
+#    to you under the Apache License, Version 2.0 (the
+#    "License"); you may not use this file except in compliance
+#    with the License. You may obtain a copy of the License at
+#
+#    http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing,
+#    software distributed under the License is distributed on an
+#    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+#    KIND, either express or implied. See the License for the
+#    specific language governing permissions and limitations
+#    under the License.
+#
+#
+StopException = Exception during stop processing: {0}
+
diff --git a/modules/host-android/src/main/java/org/apache/tuscany/sca/host/embedded/impl/ReallySmallRuntimeBuilder.java b/modules/host-android/src/main/java/org/apache/tuscany/sca/host/embedded/impl/ReallySmallRuntimeBuilder.java
index 1111558..afe3482 100644
--- a/modules/host-android/src/main/java/org/apache/tuscany/sca/host/embedded/impl/ReallySmallRuntimeBuilder.java
+++ b/modules/host-android/src/main/java/org/apache/tuscany/sca/host/embedded/impl/ReallySmallRuntimeBuilder.java
@@ -81,6 +81,7 @@
 import org.apache.tuscany.sca.interfacedef.java.JavaInterfaceFactory;
 import org.apache.tuscany.sca.invocation.MessageFactory;
 import org.apache.tuscany.sca.monitor.Monitor;
+import org.apache.tuscany.sca.monitor.MonitorFactory;
 import org.apache.tuscany.sca.policy.IntentAttachPointTypeFactory;
 import org.apache.tuscany.sca.policy.PolicyFactory;
 import org.apache.tuscany.sca.provider.ProviderFactoryExtensionPoint;
@@ -130,11 +131,14 @@
         UtilityExtensionPoint utilities = registry.getExtensionPoint(UtilityExtensionPoint.class);
         ConversationManager conversationManager = utilities.getUtility(ConversationManager.class);
         
+        MonitorFactory monitorFactory = utilities.getUtility(MonitorFactory.class);
+        Monitor monitor = monitorFactory.createMonitor();
+
         // Create the composite activator
         CompositeActivator compositeActivator =
             new CompositeActivatorImpl(assemblyFactory, messageFactory, javaInterfaceFactory, scaBindingFactory,
                                        mapper, scopeRegistry, workScheduler, wireProcessor, requestContextFactory,
-                                       proxyFactory, providerFactories, endpointResolverFactories, processors, conversationManager);
+                                       proxyFactory, providerFactories, endpointResolverFactories, processors, conversationManager, monitor);
 
         return compositeActivator;
     }
diff --git a/modules/host-embedded/src/main/java/org/apache/tuscany/sca/host/embedded/impl/ReallySmallRuntimeBuilder.java b/modules/host-embedded/src/main/java/org/apache/tuscany/sca/host/embedded/impl/ReallySmallRuntimeBuilder.java
index 0f5aedf..ce255cd 100644
--- a/modules/host-embedded/src/main/java/org/apache/tuscany/sca/host/embedded/impl/ReallySmallRuntimeBuilder.java
+++ b/modules/host-embedded/src/main/java/org/apache/tuscany/sca/host/embedded/impl/ReallySmallRuntimeBuilder.java
@@ -81,6 +81,7 @@
 import org.apache.tuscany.sca.interfacedef.java.JavaInterfaceFactory;
 import org.apache.tuscany.sca.invocation.MessageFactory;
 import org.apache.tuscany.sca.monitor.Monitor;
+import org.apache.tuscany.sca.monitor.MonitorFactory;
 import org.apache.tuscany.sca.policy.IntentAttachPointTypeFactory;
 import org.apache.tuscany.sca.policy.PolicyFactory;
 import org.apache.tuscany.sca.provider.ProviderFactoryExtensionPoint;
@@ -130,11 +131,14 @@
         UtilityExtensionPoint utilities = registry.getExtensionPoint(UtilityExtensionPoint.class);
         ConversationManager conversationManager = utilities.getUtility(ConversationManager.class);
         
+        MonitorFactory monitorFactory = utilities.getUtility(MonitorFactory.class);
+        Monitor monitor = monitorFactory.createMonitor();
+
         // Create the composite activator
         CompositeActivator compositeActivator =
             new CompositeActivatorImpl(assemblyFactory, messageFactory, javaInterfaceFactory, scaBindingFactory,
                                        mapper, scopeRegistry, workScheduler, wireProcessor, requestContextFactory,
-                                       proxyFactory, providerFactories, endpointResolverFactories, processors, conversationManager);
+                                       proxyFactory, providerFactories, endpointResolverFactories, processors, conversationManager, monitor);
 
         return compositeActivator;
     }
diff --git a/modules/node-impl/src/main/java/org/apache/tuscany/sca/node/impl/RuntimeBuilder.java b/modules/node-impl/src/main/java/org/apache/tuscany/sca/node/impl/RuntimeBuilder.java
index f609e15..e4875fa 100644
--- a/modules/node-impl/src/main/java/org/apache/tuscany/sca/node/impl/RuntimeBuilder.java
+++ b/modules/node-impl/src/main/java/org/apache/tuscany/sca/node/impl/RuntimeBuilder.java
@@ -79,6 +79,7 @@
 import org.apache.tuscany.sca.interfacedef.java.JavaInterfaceFactory;
 import org.apache.tuscany.sca.invocation.MessageFactory;
 import org.apache.tuscany.sca.monitor.Monitor;
+import org.apache.tuscany.sca.monitor.MonitorFactory;
 import org.apache.tuscany.sca.policy.IntentAttachPointTypeFactory;
 import org.apache.tuscany.sca.policy.PolicyFactory;
 import org.apache.tuscany.sca.provider.ProviderFactoryExtensionPoint;
@@ -128,12 +129,15 @@
         UtilityExtensionPoint utilities = registry.getExtensionPoint(UtilityExtensionPoint.class);
         ConversationManager conversationManager = utilities.getUtility(ConversationManager.class);
 
+        MonitorFactory monitorFactory = utilities.getUtility(MonitorFactory.class);
+        Monitor monitor = monitorFactory.createMonitor();
+
         // Create the composite activator
         CompositeActivator compositeActivator =
             new CompositeActivatorImpl(assemblyFactory, messageFactory, javaInterfaceFactory, scaBindingFactory,
                                        mapper, scopeRegistry, workScheduler, wireProcessor, requestContextFactory,
                                        proxyFactory, providerFactories, endpointResolverFactories, processors,
-                                       conversationManager);
+                                       conversationManager, monitor);
 
         return compositeActivator;
     }