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();
}
/**