Author: slaws
Date: Tue May 20 08:14:54 2008
New Revision: 658275

URL: http://svn.apache.org/viewvc?rev=658275&view=rev
Log:
TUSCANY-2283 - End a conversation if a non-business exception is thrown.

Added:
    
incubator/tuscany/java/sca/vtest/java-api/conversation/lifetime/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/lifetime/BServiceBusinessException.java
   (with props)
Modified:
    
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/JDKInvocationHandler.java
    
incubator/tuscany/java/sca/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/sca/implementation/java/invocation/JavaImplementationInvoker.java
    
incubator/tuscany/java/sca/vtest/java-api/conversation/lifetime/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/lifetime/AService.java
    
incubator/tuscany/java/sca/vtest/java-api/conversation/lifetime/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/lifetime/BService.java
    
incubator/tuscany/java/sca/vtest/java-api/conversation/lifetime/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/lifetime/impl/AServiceImpl.java
    
incubator/tuscany/java/sca/vtest/java-api/conversation/lifetime/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/lifetime/impl/BServiceImpl.java
    
incubator/tuscany/java/sca/vtest/java-api/conversation/lifetime/src/test/java/org/apache/tuscany/sca/vtest/javaapi/conversation/lifetime/LifetimeTestCase.java

Modified: 
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/JDKInvocationHandler.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/JDKInvocationHandler.java?rev=658275&r1=658274&r2=658275&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/JDKInvocationHandler.java
 (original)
+++ 
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/JDKInvocationHandler.java
 Tue May 20 08:14:54 2008
@@ -286,6 +286,26 @@
             Message resp = headInvoker.invoke(msg);
             Object body = resp.getBody();
             if (resp.isFault()) {
+                // mark the conversation as ended if the exception is not a 
business exception
+                if (currentConversationID != null ){
+                    try {
+                        boolean businessException = false;
+                        
+                        for (DataType dataType : operation.getFaultTypes()){
+                            if (dataType.getPhysical() == 
((Throwable)body).getClass()){
+                                businessException = true;
+                                break;
+                            }
+                        }
+                        
+                        if (businessException == false){
+                            
operation.setConversationSequence(ConversationSequence.CONVERSATION_END);
+                        }
+                    } catch (Exception ex){
+                        // TODO - sure what the best course of action is here. 
We have
+                        //        a system exception in the middle of a 
business exception 
+                    }
+                }
                 throw (Throwable)body;
             }
             return body;

Modified: 
incubator/tuscany/java/sca/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/sca/implementation/java/invocation/JavaImplementationInvoker.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/sca/implementation/java/invocation/JavaImplementationInvoker.java?rev=658275&r1=658274&r2=658275&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/sca/implementation/java/invocation/JavaImplementationInvoker.java
 (original)
+++ 
incubator/tuscany/java/sca/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/sca/implementation/java/invocation/JavaImplementationInvoker.java
 Tue May 20 08:14:54 2008
@@ -27,6 +27,7 @@
 import org.apache.tuscany.sca.core.scope.ScopedRuntimeComponent;
 import org.apache.tuscany.sca.implementation.java.JavaImplementation;
 import org.apache.tuscany.sca.interfacedef.ConversationSequence;
+import org.apache.tuscany.sca.interfacedef.DataType;
 import org.apache.tuscany.sca.interfacedef.Operation;
 import org.apache.tuscany.sca.invocation.Invoker;
 import org.apache.tuscany.sca.invocation.Message;
@@ -120,8 +121,32 @@
             msg.setBody(ret);
         } catch (InvocationTargetException e) {
             msg.setFaultBody(e.getCause());
+            
+            if (sequence != ConversationSequence.CONVERSATION_NONE ){
+                try {
+                    // If the exception is not a business exception then end 
the conversation
+                    boolean businessException = false;
+                    
+                    for (DataType dataType : operation.getFaultTypes()){
+                        if ((dataType.getPhysical() == 
e.getCause().getClass()) &&
+                            (contextId != null) ){
+                            businessException = true;
+                            break;
+                        }
+                    }
+                    
+                    if (businessException == false){
+                        scopeContainer.remove(contextId);
+                        parameters.setConversationID(null);
+                    }
+                } catch (Exception ex){
+                    // TODO - sure what the best course of action is here. We 
have
+                    //        a system exception in the middle of a business 
exception 
+                }
+            }
+                
         } catch (Exception e) {
-            msg.setFaultBody(e);
+            msg.setFaultBody(e);           
         }
         return msg;
     }

Modified: 
incubator/tuscany/java/sca/vtest/java-api/conversation/lifetime/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/lifetime/AService.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/vtest/java-api/conversation/lifetime/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/lifetime/AService.java?rev=658275&r1=658274&r2=658275&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/vtest/java-api/conversation/lifetime/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/lifetime/AService.java
 (original)
+++ 
incubator/tuscany/java/sca/vtest/java-api/conversation/lifetime/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/lifetime/AService.java
 Tue May 20 08:14:54 2008
@@ -52,4 +52,5 @@
 
     public void testConversationEnd8();
     
+    public void testConversationEnd9();    
 }

Modified: 
incubator/tuscany/java/sca/vtest/java-api/conversation/lifetime/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/lifetime/BService.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/vtest/java-api/conversation/lifetime/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/lifetime/BService.java?rev=658275&r1=658274&r2=658275&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/vtest/java-api/conversation/lifetime/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/lifetime/BService.java
 (original)
+++ 
incubator/tuscany/java/sca/vtest/java-api/conversation/lifetime/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/lifetime/BService.java
 Tue May 20 08:14:54 2008
@@ -41,5 +41,7 @@
     public void endConversationViaCallback();
 
     public void throwNonBusinessException();
+    
+    public void throwBusinessException() throws BServiceBusinessException;
 
 }

Added: 
incubator/tuscany/java/sca/vtest/java-api/conversation/lifetime/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/lifetime/BServiceBusinessException.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/vtest/java-api/conversation/lifetime/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/lifetime/BServiceBusinessException.java?rev=658275&view=auto
==============================================================================
--- 
incubator/tuscany/java/sca/vtest/java-api/conversation/lifetime/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/lifetime/BServiceBusinessException.java
 (added)
+++ 
incubator/tuscany/java/sca/vtest/java-api/conversation/lifetime/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/lifetime/BServiceBusinessException.java
 Tue May 20 08:14:54 2008
@@ -0,0 +1,53 @@
+/*
+ * 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 org.apache.tuscany.sca.vtest.javaapi.conversation.lifetime;
+
+
+/**
+ * Denotes an error starting the runtime
+ *
+ * @version $Rev$ $Date$
+ */
+public class BServiceBusinessException extends Exception {
+
+    static final long serialVersionUID = 2096658015909178325L;
+    
+    private String message;    
+    
+    public BServiceBusinessException() {
+    }    
+    
+    public BServiceBusinessException(String message) {
+        super(message);
+        setMessage(message);
+    }
+
+    public BServiceBusinessException(Throwable cause) {
+        super(cause);
+        setMessage(cause.getMessage());
+    }
+    
+    public String getMessage() {
+        return message;
+    }
+
+    public void setMessage(String message) {
+        this.message = message;
+    }     
+}

Propchange: 
incubator/tuscany/java/sca/vtest/java-api/conversation/lifetime/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/lifetime/BServiceBusinessException.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
incubator/tuscany/java/sca/vtest/java-api/conversation/lifetime/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/lifetime/BServiceBusinessException.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Modified: 
incubator/tuscany/java/sca/vtest/java-api/conversation/lifetime/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/lifetime/impl/AServiceImpl.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/vtest/java-api/conversation/lifetime/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/lifetime/impl/AServiceImpl.java?rev=658275&r1=658274&r2=658275&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/vtest/java-api/conversation/lifetime/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/lifetime/impl/AServiceImpl.java
 (original)
+++ 
incubator/tuscany/java/sca/vtest/java-api/conversation/lifetime/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/lifetime/impl/AServiceImpl.java
 Tue May 20 08:14:54 2008
@@ -26,6 +26,7 @@
 import org.apache.tuscany.sca.vtest.javaapi.conversation.lifetime.AService;
 import 
org.apache.tuscany.sca.vtest.javaapi.conversation.lifetime.AServiceCallback;
 import org.apache.tuscany.sca.vtest.javaapi.conversation.lifetime.BService;
+import 
org.apache.tuscany.sca.vtest.javaapi.conversation.lifetime.BServiceBusinessException;
 import org.apache.tuscany.sca.vtest.javaapi.conversation.lifetime.CService;
 import org.apache.tuscany.sca.vtest.javaapi.conversation.lifetime.DService;
 import org.junit.Assert;
@@ -181,5 +182,16 @@
         delayForSeconds(2);
         b.getService().getState();
     }
+    
+    public void testConversationEnd9() {
+        String someState = "Some state";
+        b.getService().setState(someState);
+        try {
+            b.getService().throwBusinessException();
+        } catch (BServiceBusinessException e) {
+            // Expected
+        }
+        Assert.assertSame(someState, b.getService().getState());
+    }    
 
 }

Modified: 
incubator/tuscany/java/sca/vtest/java-api/conversation/lifetime/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/lifetime/impl/BServiceImpl.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/vtest/java-api/conversation/lifetime/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/lifetime/impl/BServiceImpl.java?rev=658275&r1=658274&r2=658275&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/vtest/java-api/conversation/lifetime/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/lifetime/impl/BServiceImpl.java
 (original)
+++ 
incubator/tuscany/java/sca/vtest/java-api/conversation/lifetime/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/lifetime/impl/BServiceImpl.java
 Tue May 20 08:14:54 2008
@@ -21,6 +21,7 @@
 
 import 
org.apache.tuscany.sca.vtest.javaapi.conversation.lifetime.AServiceCallback;
 import org.apache.tuscany.sca.vtest.javaapi.conversation.lifetime.BService;
+import 
org.apache.tuscany.sca.vtest.javaapi.conversation.lifetime.BServiceBusinessException;
 import org.osoa.sca.annotations.Callback;
 import org.osoa.sca.annotations.ConversationAttributes;
 import org.osoa.sca.annotations.Scope;
@@ -53,9 +54,11 @@
     }
 
     public void throwNonBusinessException() {
-       
         throw new Error();
-        
+    }
+    
+    public void throwBusinessException() throws BServiceBusinessException {
+        throw new BServiceBusinessException("Business Exception");
     }
 
 }

Modified: 
incubator/tuscany/java/sca/vtest/java-api/conversation/lifetime/src/test/java/org/apache/tuscany/sca/vtest/javaapi/conversation/lifetime/LifetimeTestCase.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/vtest/java-api/conversation/lifetime/src/test/java/org/apache/tuscany/sca/vtest/javaapi/conversation/lifetime/LifetimeTestCase.java?rev=658275&r1=658274&r2=658275&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/vtest/java-api/conversation/lifetime/src/test/java/org/apache/tuscany/sca/vtest/javaapi/conversation/lifetime/LifetimeTestCase.java
 (original)
+++ 
incubator/tuscany/java/sca/vtest/java-api/conversation/lifetime/src/test/java/org/apache/tuscany/sca/vtest/javaapi/conversation/lifetime/LifetimeTestCase.java
 Tue May 20 08:14:54 2008
@@ -171,9 +171,10 @@
      * ...Any non-business exception is thrown by a conversational operation
      */
     @Test
-    @Ignore("TUSCANY-2283")
+    //@Ignore("TUSCANY-2283")
     public void lifetime11() throws Exception {
         aService.testConversationEnd5();
+        aService.testConversationEnd9();
     }
 
     /**


Reply via email to