You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by sl...@apache.org on 2011/02/09 19:25:22 UTC

svn commit: r1069015 - in /tuscany/sca-java-2.x/trunk: modules/core/src/main/java/org/apache/tuscany/sca/core/assembly/impl/ modules/core/src/main/java/org/apache/tuscany/sca/core/scope/impl/ testing/itest/ testing/itest/java-lifecycle-exceptions/ test...

Author: slaws
Date: Wed Feb  9 18:25:21 2011
New Revision: 1069015

URL: http://svn.apache.org/viewvc?rev=1069015&view=rev
Log:
TUSCANY-3834 - ensure that exceptions in @Destroy operations are handled and allow the top process to continue for other components

Added:
    tuscany/sca-java-2.x/trunk/testing/itest/java-lifecycle-exceptions/   (with props)
    tuscany/sca-java-2.x/trunk/testing/itest/java-lifecycle-exceptions/pom.xml
    tuscany/sca-java-2.x/trunk/testing/itest/java-lifecycle-exceptions/src/
    tuscany/sca-java-2.x/trunk/testing/itest/java-lifecycle-exceptions/src/main/
    tuscany/sca-java-2.x/trunk/testing/itest/java-lifecycle-exceptions/src/main/java/
    tuscany/sca-java-2.x/trunk/testing/itest/java-lifecycle-exceptions/src/main/java/itest/
    tuscany/sca-java-2.x/trunk/testing/itest/java-lifecycle-exceptions/src/main/java/itest/ConstructorException.java
    tuscany/sca-java-2.x/trunk/testing/itest/java-lifecycle-exceptions/src/main/java/itest/DestroyCompositeScopeException.java
    tuscany/sca-java-2.x/trunk/testing/itest/java-lifecycle-exceptions/src/main/java/itest/InitCompositeScopeException.java
    tuscany/sca-java-2.x/trunk/testing/itest/java-lifecycle-exceptions/src/main/java/itest/InitStatelessScopeException.java
    tuscany/sca-java-2.x/trunk/testing/itest/java-lifecycle-exceptions/src/main/java/itest/OkImpl.java
    tuscany/sca-java-2.x/trunk/testing/itest/java-lifecycle-exceptions/src/main/java/itest/Service.java
    tuscany/sca-java-2.x/trunk/testing/itest/java-lifecycle-exceptions/src/main/resources/
    tuscany/sca-java-2.x/trunk/testing/itest/java-lifecycle-exceptions/src/main/resources/test.composite
    tuscany/sca-java-2.x/trunk/testing/itest/java-lifecycle-exceptions/src/test/
    tuscany/sca-java-2.x/trunk/testing/itest/java-lifecycle-exceptions/src/test/java/
    tuscany/sca-java-2.x/trunk/testing/itest/java-lifecycle-exceptions/src/test/java/itest/
    tuscany/sca-java-2.x/trunk/testing/itest/java-lifecycle-exceptions/src/test/java/itest/InitTestCase.java
Modified:
    tuscany/sca-java-2.x/trunk/modules/core/src/main/java/org/apache/tuscany/sca/core/assembly/impl/CompositeActivatorImpl.java
    tuscany/sca-java-2.x/trunk/modules/core/src/main/java/org/apache/tuscany/sca/core/scope/impl/CompositeScopeContainer.java
    tuscany/sca-java-2.x/trunk/testing/itest/pom.xml

Modified: tuscany/sca-java-2.x/trunk/modules/core/src/main/java/org/apache/tuscany/sca/core/assembly/impl/CompositeActivatorImpl.java
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/core/src/main/java/org/apache/tuscany/sca/core/assembly/impl/CompositeActivatorImpl.java?rev=1069015&r1=1069014&r2=1069015&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/modules/core/src/main/java/org/apache/tuscany/sca/core/assembly/impl/CompositeActivatorImpl.java (original)
+++ tuscany/sca-java-2.x/trunk/modules/core/src/main/java/org/apache/tuscany/sca/core/assembly/impl/CompositeActivatorImpl.java Wed Feb  9 18:25:21 2011
@@ -479,16 +479,24 @@ public class CompositeActivatorImpl impl
         } 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);
+                }                  
             }
             for (PolicyProvider policyProvider : ((RuntimeComponent)component).getPolicyProviders()) {
-                policyProvider.stop();
+                try {
+                    policyProvider.stop();
+                } catch (Throwable ex){
+                    logger.log(Level.SEVERE, ex.getMessage(), ex);
+                }  
             }
         }
 
@@ -496,7 +504,11 @@ public class CompositeActivatorImpl impl
             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);
+                }                      
             }
         }
 
@@ -549,16 +561,24 @@ public class CompositeActivatorImpl impl
         ep.getCompositeContext().getEndpointRegistry().removeEndpoint(ep);
         final ServiceBindingProvider bindingProvider = ep.getBindingProvider();
         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 (PolicyProvider policyProvider : ep.getPolicyProviders()) {
-            policyProvider.stop();
+            try {
+                policyProvider.stop();
+            } catch (Throwable ex){
+                logger.log(Level.SEVERE, ex.getMessage(), ex);
+            }                  
         }
     }
 
@@ -622,10 +642,18 @@ public class CompositeActivatorImpl impl
             compositeContext.getEndpointRegistry().removeEndpointReference(epr);
             ReferenceBindingProvider bindingProvider = epr.getBindingProvider();
             if (bindingProvider != null) {
-                bindingProvider.stop();
+                try {
+                    bindingProvider.stop();
+                } catch (Throwable ex){
+                    logger.log(Level.SEVERE, ex.getMessage(), ex);
+                }  
             }
             for (PolicyProvider policyProvider : epr.getPolicyProviders()) {
-                policyProvider.stop();
+                try {
+                    policyProvider.stop();
+                } catch (Throwable ex){
+                    logger.log(Level.SEVERE, ex.getMessage(), ex);
+                }                      
             }
         }
     }

Modified: tuscany/sca-java-2.x/trunk/modules/core/src/main/java/org/apache/tuscany/sca/core/scope/impl/CompositeScopeContainer.java
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/core/src/main/java/org/apache/tuscany/sca/core/scope/impl/CompositeScopeContainer.java?rev=1069015&r1=1069014&r2=1069015&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/modules/core/src/main/java/org/apache/tuscany/sca/core/scope/impl/CompositeScopeContainer.java (original)
+++ tuscany/sca-java-2.x/trunk/modules/core/src/main/java/org/apache/tuscany/sca/core/scope/impl/CompositeScopeContainer.java Wed Feb  9 18:25:21 2011
@@ -46,6 +46,7 @@ public class CompositeScopeContainer<KEY
             try {
                 wrapper.stop();
             } catch (TargetDestructionException e) {
+                wrapper = null;
                 throw new IllegalStateException(e);
             }
         }
@@ -59,6 +60,7 @@ public class CompositeScopeContainer<KEY
                 wrapper = createInstanceWrapper();
                 wrapper.start();
             } catch (Exception e) {
+                wrapper = null;
                 throw new ServiceUnavailableException(e);
             }
         }

Propchange: tuscany/sca-java-2.x/trunk/testing/itest/java-lifecycle-exceptions/
------------------------------------------------------------------------------
--- svn:ignore (added)
+++ svn:ignore Wed Feb  9 18:25:21 2011
@@ -0,0 +1,4 @@
+.classpath
+.project
+.settings
+target

Added: tuscany/sca-java-2.x/trunk/testing/itest/java-lifecycle-exceptions/pom.xml
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/testing/itest/java-lifecycle-exceptions/pom.xml?rev=1069015&view=auto
==============================================================================
--- tuscany/sca-java-2.x/trunk/testing/itest/java-lifecycle-exceptions/pom.xml (added)
+++ tuscany/sca-java-2.x/trunk/testing/itest/java-lifecycle-exceptions/pom.xml Wed Feb  9 18:25:21 2011
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+    * 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.    
+-->
+<project>
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>org.apache.tuscany.sca</groupId>
+        <artifactId>tuscany-itest</artifactId>
+        <version>2.0-SNAPSHOT</version>
+        <relativePath>../pom.xml</relativePath>
+    </parent>
+    <artifactId>itest-java-lifecycle-exceptions</artifactId>
+    <name>Apache Tuscany SCA iTest Java Lifecycle Exceptions</name>
+
+    <dependencies>
+        
+        <dependency>
+            <groupId>org.apache.tuscany.sca</groupId>
+            <artifactId>tuscany-base-runtime-pom</artifactId>
+            <type>pom</type>
+            <version>2.0-SNAPSHOT</version>
+        </dependency>
+        
+        <dependency>
+            <groupId>org.apache.tuscany.sca</groupId>
+            <artifactId>tuscany-implementation-java-runtime</artifactId>
+            <version>2.0-SNAPSHOT</version>
+        </dependency>        
+
+    </dependencies>
+
+</project>

Added: tuscany/sca-java-2.x/trunk/testing/itest/java-lifecycle-exceptions/src/main/java/itest/ConstructorException.java
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/testing/itest/java-lifecycle-exceptions/src/main/java/itest/ConstructorException.java?rev=1069015&view=auto
==============================================================================
--- tuscany/sca-java-2.x/trunk/testing/itest/java-lifecycle-exceptions/src/main/java/itest/ConstructorException.java (added)
+++ tuscany/sca-java-2.x/trunk/testing/itest/java-lifecycle-exceptions/src/main/java/itest/ConstructorException.java Wed Feb  9 18:25:21 2011
@@ -0,0 +1,49 @@
+/*
+ * 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.    
+ */
+
+package itest;
+
+import org.oasisopen.sca.annotation.Destroy;
+import org.oasisopen.sca.annotation.Init;
+
+public class ConstructorException implements Service {
+
+    public static boolean initRun;
+    public static boolean destroyRun;
+    public static boolean doitRun;
+    
+    public ConstructorException() {
+        throw new RuntimeException();
+    }
+    
+    public void doit() {
+        doitRun = true;
+    }
+    
+    @Init
+    public void init() {
+       initRun = true;   
+    }
+    
+    @Destroy
+    public void destroy() {
+        destroyRun = true;   
+    }
+
+}

Added: tuscany/sca-java-2.x/trunk/testing/itest/java-lifecycle-exceptions/src/main/java/itest/DestroyCompositeScopeException.java
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/testing/itest/java-lifecycle-exceptions/src/main/java/itest/DestroyCompositeScopeException.java?rev=1069015&view=auto
==============================================================================
--- tuscany/sca-java-2.x/trunk/testing/itest/java-lifecycle-exceptions/src/main/java/itest/DestroyCompositeScopeException.java (added)
+++ tuscany/sca-java-2.x/trunk/testing/itest/java-lifecycle-exceptions/src/main/java/itest/DestroyCompositeScopeException.java Wed Feb  9 18:25:21 2011
@@ -0,0 +1,58 @@
+/*
+ * 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.    
+ */
+
+package itest;
+
+import org.oasisopen.sca.annotation.Destroy;
+import org.oasisopen.sca.annotation.Init;
+import org.oasisopen.sca.annotation.Scope;
+
+@Scope("COMPOSITE")
+public class DestroyCompositeScopeException implements Service {
+
+    public static boolean initRun;
+    public static boolean destroyRun;
+    public static boolean doitRun;
+    public static int count = 0;
+    
+    public void doit() {
+        doitRun = true;
+        if (!initRun) {
+            throw new RuntimeException("initRun false");
+        }
+        if (destroyRun) {
+            throw new RuntimeException("destroyRun true");
+        }
+    }
+    
+    @Init
+    public void init() {
+        initRun = true;
+    }
+    
+    @Destroy
+    public void destroy() {
+        destroyRun = true;  
+        if (count++ < 1) {
+        	throw new NullPointerException();
+           // throw new RuntimeException("bang");
+        }
+    }
+
+}

Added: tuscany/sca-java-2.x/trunk/testing/itest/java-lifecycle-exceptions/src/main/java/itest/InitCompositeScopeException.java
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/testing/itest/java-lifecycle-exceptions/src/main/java/itest/InitCompositeScopeException.java?rev=1069015&view=auto
==============================================================================
--- tuscany/sca-java-2.x/trunk/testing/itest/java-lifecycle-exceptions/src/main/java/itest/InitCompositeScopeException.java (added)
+++ tuscany/sca-java-2.x/trunk/testing/itest/java-lifecycle-exceptions/src/main/java/itest/InitCompositeScopeException.java Wed Feb  9 18:25:21 2011
@@ -0,0 +1,57 @@
+/*
+ * 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.    
+ */
+
+package itest;
+
+import org.oasisopen.sca.annotation.Destroy;
+import org.oasisopen.sca.annotation.Init;
+import org.oasisopen.sca.annotation.Scope;
+
+@Scope("COMPOSITE")
+public class InitCompositeScopeException implements Service {
+
+    public static boolean initRun;
+    public static boolean destroyRun;
+    public static boolean doitRun;
+    public static int count = 0;
+    
+    public void doit() {
+        doitRun = true;
+        if (!initRun) {
+            throw new RuntimeException("initRun false");
+        }
+        if (destroyRun) {
+            throw new RuntimeException("destroyRun true");
+        }
+    }
+    
+    @Init
+    public void init() {
+        initRun = true;
+        if (count++ < 1) {
+            throw new RuntimeException("bang");
+        }
+    }
+    
+    @Destroy
+    public void destroy() {
+        destroyRun = true;   
+    }
+
+}

Added: tuscany/sca-java-2.x/trunk/testing/itest/java-lifecycle-exceptions/src/main/java/itest/InitStatelessScopeException.java
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/testing/itest/java-lifecycle-exceptions/src/main/java/itest/InitStatelessScopeException.java?rev=1069015&view=auto
==============================================================================
--- tuscany/sca-java-2.x/trunk/testing/itest/java-lifecycle-exceptions/src/main/java/itest/InitStatelessScopeException.java (added)
+++ tuscany/sca-java-2.x/trunk/testing/itest/java-lifecycle-exceptions/src/main/java/itest/InitStatelessScopeException.java Wed Feb  9 18:25:21 2011
@@ -0,0 +1,57 @@
+/*
+ * 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.    
+ */
+
+package itest;
+
+import org.oasisopen.sca.annotation.Destroy;
+import org.oasisopen.sca.annotation.Init;
+import org.oasisopen.sca.annotation.Scope;
+
+@Scope("STATELESS")
+public class InitStatelessScopeException implements Service {
+
+    public static boolean initRun;
+    public static boolean destroyRun;
+    public static boolean doitRun;
+    public static int count = 0;
+    
+    public void doit() {
+        doitRun = true;
+        if (!initRun) {
+            throw new RuntimeException("initRun false");
+        }
+        if (destroyRun) {
+            throw new RuntimeException("destroyRun true");
+        }
+    }
+    
+    @Init
+    public void init() {
+        initRun = true;
+        if (count++ < 1) {
+            throw new RuntimeException("bang");
+        }
+    }
+    
+    @Destroy
+    public void destroy() {
+        destroyRun = true;   
+    }
+
+}

Added: tuscany/sca-java-2.x/trunk/testing/itest/java-lifecycle-exceptions/src/main/java/itest/OkImpl.java
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/testing/itest/java-lifecycle-exceptions/src/main/java/itest/OkImpl.java?rev=1069015&view=auto
==============================================================================
--- tuscany/sca-java-2.x/trunk/testing/itest/java-lifecycle-exceptions/src/main/java/itest/OkImpl.java (added)
+++ tuscany/sca-java-2.x/trunk/testing/itest/java-lifecycle-exceptions/src/main/java/itest/OkImpl.java Wed Feb  9 18:25:21 2011
@@ -0,0 +1,52 @@
+/*
+ * 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.    
+ */
+
+package itest;
+
+import org.oasisopen.sca.annotation.Destroy;
+import org.oasisopen.sca.annotation.Init;
+
+public class OkImpl implements Service {
+
+    public static boolean initRun;
+    public static boolean destroyRun;
+    
+    public OkImpl() {
+    }
+    
+    public void doit() {
+        if (!initRun) {
+            throw new RuntimeException("initRun false");
+        }
+        if (destroyRun) {
+            throw new RuntimeException("destroyRun true");
+        }
+    }
+    
+    @Init
+    public void init() {
+       initRun = true;   
+    }
+    
+    @Destroy
+    public void destroy() {
+        destroyRun = true;   
+    }
+
+}

Added: tuscany/sca-java-2.x/trunk/testing/itest/java-lifecycle-exceptions/src/main/java/itest/Service.java
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/testing/itest/java-lifecycle-exceptions/src/main/java/itest/Service.java?rev=1069015&view=auto
==============================================================================
--- tuscany/sca-java-2.x/trunk/testing/itest/java-lifecycle-exceptions/src/main/java/itest/Service.java (added)
+++ tuscany/sca-java-2.x/trunk/testing/itest/java-lifecycle-exceptions/src/main/java/itest/Service.java Wed Feb  9 18:25:21 2011
@@ -0,0 +1,26 @@
+/*
+ * 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.    
+ */
+
+package itest;
+
+public interface Service {
+    
+    void doit();
+    
+}

Added: tuscany/sca-java-2.x/trunk/testing/itest/java-lifecycle-exceptions/src/main/resources/test.composite
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/testing/itest/java-lifecycle-exceptions/src/main/resources/test.composite?rev=1069015&view=auto
==============================================================================
--- tuscany/sca-java-2.x/trunk/testing/itest/java-lifecycle-exceptions/src/main/resources/test.composite (added)
+++ tuscany/sca-java-2.x/trunk/testing/itest/java-lifecycle-exceptions/src/main/resources/test.composite Wed Feb  9 18:25:21 2011
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * 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.    
+ -->
+<composite xmlns="http://docs.oasis-open.org/ns/opencsa/sca/200912"
+           targetNamespace="http://itest"
+           xmlns:itest="http://itest"
+           name="Test">
+
+    <component name="OkService">
+        <implementation.java class="itest.OkImpl"/>
+    </component>       
+
+    <component name="ConstructorException">
+        <implementation.java class="itest.ConstructorException"/>
+    </component>       
+
+    <component name="InitCompositeScopeException">
+        <implementation.java class="itest.InitCompositeScopeException"/>
+    </component> 
+            
+    <component name="InitStatelessScopeException">
+        <implementation.java class="itest.InitStatelessScopeException"/>
+    </component> 
+
+    <component name="DestroyCompositeScopeException">
+        <implementation.java class="itest.DestroyCompositeScopeException"/>
+    </component>  
+    
+    <component name="DestroyCompositeScopeException2">
+        <implementation.java class="itest.DestroyCompositeScopeException"/>
+    </component> 
+
+</composite>

Added: tuscany/sca-java-2.x/trunk/testing/itest/java-lifecycle-exceptions/src/test/java/itest/InitTestCase.java
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/testing/itest/java-lifecycle-exceptions/src/test/java/itest/InitTestCase.java?rev=1069015&view=auto
==============================================================================
--- tuscany/sca-java-2.x/trunk/testing/itest/java-lifecycle-exceptions/src/test/java/itest/InitTestCase.java (added)
+++ tuscany/sca-java-2.x/trunk/testing/itest/java-lifecycle-exceptions/src/test/java/itest/InitTestCase.java Wed Feb  9 18:25:21 2011
@@ -0,0 +1,161 @@
+/*
+ * 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.    
+ */
+package itest;
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+import junit.framework.Assert;
+
+import org.apache.tuscany.sca.node.Contribution;
+import org.apache.tuscany.sca.node.Node;
+import org.apache.tuscany.sca.node.NodeFactory;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+/**
+ */
+public class InitTestCase {
+
+    private Node node;
+
+    @Before
+    public void init() {
+        node = NodeFactory.newInstance().createNode("test.composite", new Contribution("test", "target/classes"));
+        node.start();
+    }
+
+    @Test
+    public void testOk() throws Exception {
+        Service client1 = node.getService(Service.class, "OkService");
+        client1.doit();
+        assertTrue(OkImpl.initRun);
+        assertTrue(OkImpl.destroyRun); // its stateless so destory is called after every service invocations
+    }
+
+    @Test
+    public void testConstructorException() throws Exception {
+        Service client1 = node.getService(Service.class, "ConstructorException");
+        try {
+            client1.doit();
+            fail();
+        } catch (RuntimeException e) {
+            // expected
+        }
+        assertFalse(ConstructorException.initRun);
+        assertFalse(ConstructorException.doitRun);
+        assertFalse(ConstructorException.destroyRun);
+    }
+
+    @Test
+    public void testInitCompositeScopeException() throws Exception {
+        Service client1 = node.getService(Service.class, "InitCompositeScopeException");
+        try {
+            client1.doit();
+            fail();
+        } catch (RuntimeException e) {
+            // expected
+        }
+        assertTrue(InitCompositeScopeException.initRun);
+        assertFalse(InitCompositeScopeException.doitRun);
+        assertTrue(InitCompositeScopeException.destroyRun);
+
+        // reset and try again to verify init init still gets run again
+        InitCompositeScopeException.initRun = false;    
+        InitCompositeScopeException.doitRun = false;    
+        InitCompositeScopeException.destroyRun = false;    
+
+        client1.doit();
+
+        assertTrue(InitCompositeScopeException.initRun);
+        assertTrue(InitCompositeScopeException.doitRun);
+        node.stop();
+        node = null;
+        assertTrue(InitCompositeScopeException.destroyRun);
+    }
+
+    @Test
+    public void testInitStatelessScopeException() throws Exception {
+        Service client1 = node.getService(Service.class, "InitStatelessScopeException");
+        try {
+            client1.doit();
+            fail();
+        } catch (RuntimeException e) {
+            // expected
+        }
+        assertTrue(InitStatelessScopeException.initRun);
+        assertFalse(InitStatelessScopeException.doitRun);
+        assertTrue(InitStatelessScopeException.destroyRun);
+
+        // reset and try again to verify init init still gets run again
+        InitStatelessScopeException.initRun = false;    
+        InitStatelessScopeException.doitRun = false;    
+        InitStatelessScopeException.destroyRun = false;    
+
+        client1.doit();
+
+        assertTrue(InitStatelessScopeException.initRun);
+        assertTrue(InitStatelessScopeException.doitRun);
+        node.stop();
+        node = null;
+        assertTrue(InitStatelessScopeException.destroyRun);
+    }
+    
+    @Test
+    public void testDestroyCompositeScopeException() throws Exception {
+        Service client1 = node.getService(Service.class, "DestroyCompositeScopeException");
+        try {
+            client1.doit();
+        } catch (RuntimeException e) {
+        	fail();
+        }
+        assertTrue(DestroyCompositeScopeException.initRun);
+        assertTrue(DestroyCompositeScopeException.doitRun);
+        assertFalse(DestroyCompositeScopeException.destroyRun);
+        
+        Service client2 = node.getService(Service.class, "DestroyCompositeScopeException2");
+        try {
+            client2.doit();
+        } catch (RuntimeException e) {
+        	fail();
+        }
+
+        // close the domain to case @Destroy to run
+        try {
+        	node.stop();
+        } catch (RuntimeException e) {
+        	e.printStackTrace();
+        	fail();
+        }
+        node = null;
+        
+        // check that it has run twice
+        // The first run having caused an exception
+        assertTrue(DestroyCompositeScopeException.destroyRun);
+        Assert.assertEquals(2, DestroyCompositeScopeException.count);
+    }    
+
+    @After
+    public void end() {
+        if (node != null) {
+            node.stop();
+        }
+    }
+}

Modified: tuscany/sca-java-2.x/trunk/testing/itest/pom.xml
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/testing/itest/pom.xml?rev=1069015&r1=1069014&r2=1069015&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/testing/itest/pom.xml (original)
+++ tuscany/sca-java-2.x/trunk/testing/itest/pom.xml Wed Feb  9 18:25:21 2011
@@ -46,21 +46,19 @@
                 <module>callback-basic</module>
                 <module>callback-complex-type</module>
                 <module>callback-multiple-wires</module>
-		    <module>callback-separatethread</module>
+                <module>callback-separatethread</module>
                 <module>callback-two-composites</module>
                 <module>callback-two-nodes</module>
                 <module>component-type</module>
                 <module>contribution-folder</module>
                 <module>contribution-zip</module>
-<!-- why commented out?              
-                <module>definitions-multiple</module>
--->
                 <module>databindings</module>
                 <module>distribution</module>
                 <module>exceptions</module>
                 <module>implementation-spring</module>
                 <module>import-export</module>
                 <module>interfaces</module>
+                <module>java-lifecycle-exceptions</module>
                 <module>jms</module>
                 <module>nodes</module>
                 <module>node-launcher-equinox</module>
@@ -86,6 +84,7 @@
                 <module>scdl</module>
                 <module>services</module>
                 <module>service-reference</module>
+                <module>spi</module>
                 <module>wires</module>              
                 <module>ws</module>
                 <module>ws-jaxws</module>