summaryrefslogtreecommitdiffstats
path: root/branches/sca-android/vtest/java-api/conversation/lifetime/src
diff options
context:
space:
mode:
Diffstat (limited to 'branches/sca-android/vtest/java-api/conversation/lifetime/src')
-rw-r--r--branches/sca-android/vtest/java-api/conversation/lifetime/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/lifetime/AService.java56
-rw-r--r--branches/sca-android/vtest/java-api/conversation/lifetime/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/lifetime/AServiceCallback.java35
-rw-r--r--branches/sca-android/vtest/java-api/conversation/lifetime/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/lifetime/BService.java47
-rw-r--r--branches/sca-android/vtest/java-api/conversation/lifetime/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/lifetime/BServiceBusinessException.java53
-rw-r--r--branches/sca-android/vtest/java-api/conversation/lifetime/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/lifetime/CService.java34
-rw-r--r--branches/sca-android/vtest/java-api/conversation/lifetime/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/lifetime/DService.java38
-rw-r--r--branches/sca-android/vtest/java-api/conversation/lifetime/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/lifetime/impl/AServiceImpl.java197
-rw-r--r--branches/sca-android/vtest/java-api/conversation/lifetime/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/lifetime/impl/BServiceImpl.java64
-rw-r--r--branches/sca-android/vtest/java-api/conversation/lifetime/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/lifetime/impl/CServiceImpl.java40
-rw-r--r--branches/sca-android/vtest/java-api/conversation/lifetime/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/lifetime/impl/DServiceImpl.java78
-rw-r--r--branches/sca-android/vtest/java-api/conversation/lifetime/src/main/resources/lifetime.composite45
-rw-r--r--branches/sca-android/vtest/java-api/conversation/lifetime/src/test/java/org/apache/tuscany/sca/vtest/javaapi/conversation/lifetime/LifetimeTestCase.java216
12 files changed, 903 insertions, 0 deletions
diff --git a/branches/sca-android/vtest/java-api/conversation/lifetime/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/lifetime/AService.java b/branches/sca-android/vtest/java-api/conversation/lifetime/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/lifetime/AService.java
new file mode 100644
index 0000000000..8deef5df31
--- /dev/null
+++ b/branches/sca-android/vtest/java-api/conversation/lifetime/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/lifetime/AService.java
@@ -0,0 +1,56 @@
+/*
+ * 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;
+
+import org.osoa.sca.annotations.Remotable;
+
+/**
+ * Simple Remotable Service
+ */
+@Remotable
+public interface AService {
+
+ public void testConversationStarted();
+
+ public void testConversationStarted2();
+
+ public void testConversationContinue();
+
+ public void testConversationContinue2();
+
+ public void testConversationContinue3();
+
+ public void testConversationEnd();
+
+ public void testConversationEnd2();
+
+ public void testConversationEnd3();
+
+ public void testConversationEnd4();
+
+ public void testConversationEnd5();
+
+ public void testConversationEnd6();
+
+ public void testConversationEnd7();
+
+ public void testConversationEnd8();
+
+ public void testConversationEnd9();
+}
diff --git a/branches/sca-android/vtest/java-api/conversation/lifetime/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/lifetime/AServiceCallback.java b/branches/sca-android/vtest/java-api/conversation/lifetime/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/lifetime/AServiceCallback.java
new file mode 100644
index 0000000000..5a20f4d960
--- /dev/null
+++ b/branches/sca-android/vtest/java-api/conversation/lifetime/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/lifetime/AServiceCallback.java
@@ -0,0 +1,35 @@
+/*
+ * 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;
+
+import org.osoa.sca.annotations.Conversational;
+import org.osoa.sca.annotations.EndsConversation;
+import org.osoa.sca.annotations.Remotable;
+
+/**
+ * Simple Remotable Service
+ */
+@Remotable
+@Conversational
+public interface AServiceCallback {
+
+ @EndsConversation
+ public void endConversation();
+
+}
diff --git a/branches/sca-android/vtest/java-api/conversation/lifetime/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/lifetime/BService.java b/branches/sca-android/vtest/java-api/conversation/lifetime/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/lifetime/BService.java
new file mode 100644
index 0000000000..6368b1157b
--- /dev/null
+++ b/branches/sca-android/vtest/java-api/conversation/lifetime/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/lifetime/BService.java
@@ -0,0 +1,47 @@
+/*
+ * 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;
+
+import org.osoa.sca.annotations.Callback;
+import org.osoa.sca.annotations.Conversational;
+import org.osoa.sca.annotations.EndsConversation;
+import org.osoa.sca.annotations.Remotable;
+
+/**
+ * Simple Local Service
+ */
+@Remotable
+@Conversational
+@Callback(AServiceCallback.class)
+public interface BService {
+
+ public void setState(String someState);
+
+ public String getState();
+
+ @EndsConversation
+ public void endConversation();
+
+ public void endConversationViaCallback();
+
+ public void throwNonBusinessException();
+
+ public void throwBusinessException() throws BServiceBusinessException;
+
+}
diff --git a/branches/sca-android/vtest/java-api/conversation/lifetime/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/lifetime/BServiceBusinessException.java b/branches/sca-android/vtest/java-api/conversation/lifetime/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/lifetime/BServiceBusinessException.java
new file mode 100644
index 0000000000..ab186ee7eb
--- /dev/null
+++ b/branches/sca-android/vtest/java-api/conversation/lifetime/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/lifetime/BServiceBusinessException.java
@@ -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;
+ }
+}
diff --git a/branches/sca-android/vtest/java-api/conversation/lifetime/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/lifetime/CService.java b/branches/sca-android/vtest/java-api/conversation/lifetime/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/lifetime/CService.java
new file mode 100644
index 0000000000..dcc2e5d9c4
--- /dev/null
+++ b/branches/sca-android/vtest/java-api/conversation/lifetime/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/lifetime/CService.java
@@ -0,0 +1,34 @@
+/*
+ * 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;
+
+import org.osoa.sca.annotations.Conversational;
+import org.osoa.sca.annotations.Remotable;
+
+/**
+ * Simple Local Service
+ */
+@Remotable
+@Conversational
+public interface CService {
+
+ public void setState(String someState);
+ public String getState();
+
+}
diff --git a/branches/sca-android/vtest/java-api/conversation/lifetime/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/lifetime/DService.java b/branches/sca-android/vtest/java-api/conversation/lifetime/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/lifetime/DService.java
new file mode 100644
index 0000000000..06d40accd4
--- /dev/null
+++ b/branches/sca-android/vtest/java-api/conversation/lifetime/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/lifetime/DService.java
@@ -0,0 +1,38 @@
+/*
+ * 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;
+
+import org.osoa.sca.ServiceReference;
+import org.osoa.sca.annotations.Conversational;
+import org.osoa.sca.annotations.Remotable;
+
+/**
+ * Simple Local Service
+ */
+@Remotable
+@Conversational
+public interface DService {
+
+ public void setState(String someState);
+ public String getState();
+
+ public void continueConversation(ServiceReference<BService> b, Object convId);
+ public void continueConversation2(String filename, Object id, String serializedState);
+
+}
diff --git a/branches/sca-android/vtest/java-api/conversation/lifetime/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/lifetime/impl/AServiceImpl.java b/branches/sca-android/vtest/java-api/conversation/lifetime/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/lifetime/impl/AServiceImpl.java
new file mode 100644
index 0000000000..1a1574561d
--- /dev/null
+++ b/branches/sca-android/vtest/java-api/conversation/lifetime/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/lifetime/impl/AServiceImpl.java
@@ -0,0 +1,197 @@
+/*
+ * 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.impl;
+
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.ObjectOutputStream;
+
+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;
+import org.osoa.sca.ComponentContext;
+import org.osoa.sca.ConversationEndedException;
+import org.osoa.sca.ServiceReference;
+import org.osoa.sca.annotations.Context;
+import org.osoa.sca.annotations.Reference;
+import org.osoa.sca.annotations.Scope;
+import org.osoa.sca.annotations.Service;
+
+@Service(AService.class)
+@Scope("CONVERSATION")
+public class AServiceImpl implements AService, AServiceCallback {
+
+ @Context
+ public ComponentContext context;
+
+ @Reference
+ protected ServiceReference<BService> b;
+
+ @Reference
+ protected DService d;
+
+ public void testConversationStarted() {
+ b.getService().setState("Some state");
+ Assert.assertNotNull(b.getConversation().getConversationID());
+ }
+
+ public void testConversationStarted2() {
+ ServiceReference<CService> ref = context.getServiceReference(CService.class, "c");
+ ref.getService().setState("Some state");
+ Assert.assertNotNull(ref.getConversation().getConversationID());
+ }
+
+ public void testConversationContinue() {
+
+ b.getService().setState("Some state");
+ Object id = b.getConversation().getConversationID();
+ b.getService().setState("Some more state");
+ Assert.assertEquals(id, b.getConversation().getConversationID());
+ }
+
+ public void testConversationContinue2() {
+
+ b.getService().setState("Some state");
+ d.continueConversation(b, b.getConversation().getConversationID());
+
+ }
+
+ public void testConversationContinue3() {
+
+ String serializedState = "Serialized State";
+
+ String filename = "target/Serialized-Reference.txt";
+ b.getService().setState(serializedState);
+ Object id = b.getConversation().getConversationID();
+ writeReference(b, filename);
+ d.continueConversation2(filename, id, serializedState);
+
+ }
+
+ // Utilities
+
+ private void delayForSeconds(int numSeconds) {
+ try {
+ Thread.sleep(numSeconds * 1000);// millisecs
+ } catch (InterruptedException ex) {
+ throw new Error(ex);
+ }
+ }
+
+ private void writeReference(ServiceReference<BService> ref, String filename) {
+
+ FileOutputStream fos = null;
+ ObjectOutputStream out = null;
+ try {
+ fos = new FileOutputStream(filename);
+ out = new ObjectOutputStream(fos);
+ out.writeObject(ref);
+ out.close();
+ } catch (IOException ex) {
+ ex.printStackTrace();
+ }
+ }
+
+ public void testConversationEnd() {
+ String someState = "Some state";
+ b.getService().setState(someState);
+ b.getService().endConversation();
+ Assert.assertNotSame(someState, b.getService().getState());
+ }
+
+ public void testConversationEnd2() {
+ String someState = "Some state";
+ b.getService().setState(someState);
+ b.getService().endConversationViaCallback();
+ Assert.assertNotSame(someState, b.getService().getState());
+ }
+
+ public void endConversation() {
+ System.out.println("A-callback to end conversation");
+ }
+
+ public void testConversationEnd3() {
+ String someState = "Some state";
+ b.getService().setState(someState);
+ delayForSeconds(2);
+ try {
+ b.getService().getState();
+ } catch (ConversationEndedException e) {
+ b.getConversation().end();// need to clean up to avoid exception
+ }
+ Assert.assertNotSame(someState, b.getService().getState());
+ }
+
+ public void testConversationEnd4() {
+ String someState = "Some state";
+ b.getService().setState(someState);
+ b.getConversation().end();
+ Assert.assertNotSame(someState, b.getService().getState());
+ }
+
+ public void testConversationEnd5() {
+ String someState = "Some state";
+ b.getService().setState(someState);
+ try {
+ b.getService().throwNonBusinessException();
+ } catch (Error e) {
+ // Expected
+ }
+ Assert.assertNotSame(someState, b.getService().getState());
+ }
+
+ public void testConversationEnd6() {
+ String someState = "Some state";
+ b.getService().setState(someState);
+ Object id = b.getConversation().getConversationID();
+ b.getService().endConversation();
+ Assert.assertNotSame(someState, b.getService().getState());
+ Assert.assertNotSame(id, b.getConversation().getConversationID());
+ }
+
+ public void testConversationEnd7() {
+ b.getService().setState("Some state");
+ b.getService().endConversation();
+ Assert.assertNull(b.getConversationID());
+ }
+
+ public void testConversationEnd8() {
+ String someState = "Some state";
+ b.getService().setState(someState);
+ 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());
+ }
+
+}
diff --git a/branches/sca-android/vtest/java-api/conversation/lifetime/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/lifetime/impl/BServiceImpl.java b/branches/sca-android/vtest/java-api/conversation/lifetime/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/lifetime/impl/BServiceImpl.java
new file mode 100644
index 0000000000..0919734c7a
--- /dev/null
+++ b/branches/sca-android/vtest/java-api/conversation/lifetime/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/lifetime/impl/BServiceImpl.java
@@ -0,0 +1,64 @@
+/*
+ * 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.impl;
+
+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;
+import org.osoa.sca.annotations.Service;
+
+@Service(BService.class)
+@Scope("CONVERSATION")
+@ConversationAttributes(maxAge="1 seconds")
+public class BServiceImpl implements BService {
+
+ String someState;
+
+ @Callback
+ protected AServiceCallback callback;
+
+ public void setState(String someState) {
+ this.someState = someState;
+ }
+
+ public String getState() {
+ return someState;
+ }
+
+ public void endConversation() {
+ System.out.println("Someone called Bservice.endsConversation()");
+ }
+
+ public void endConversationViaCallback() {
+ callback.endConversation();
+ }
+
+ public void throwNonBusinessException() {
+ throw new Error();
+ }
+
+ public void throwBusinessException() throws BServiceBusinessException {
+ throw new BServiceBusinessException("Business Exception");
+ }
+
+}
diff --git a/branches/sca-android/vtest/java-api/conversation/lifetime/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/lifetime/impl/CServiceImpl.java b/branches/sca-android/vtest/java-api/conversation/lifetime/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/lifetime/impl/CServiceImpl.java
new file mode 100644
index 0000000000..d9910d445c
--- /dev/null
+++ b/branches/sca-android/vtest/java-api/conversation/lifetime/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/lifetime/impl/CServiceImpl.java
@@ -0,0 +1,40 @@
+/*
+ * 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.impl;
+
+import org.apache.tuscany.sca.vtest.javaapi.conversation.lifetime.CService;
+import org.osoa.sca.annotations.Scope;
+import org.osoa.sca.annotations.Service;
+
+@Service(CService.class)
+@Scope("CONVERSATION")
+public class CServiceImpl implements CService {
+
+ String someState;
+
+ public void setState(String someState) {
+ this.someState = someState;
+ }
+
+ public String getState() {
+ return someState;
+ }
+
+}
diff --git a/branches/sca-android/vtest/java-api/conversation/lifetime/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/lifetime/impl/DServiceImpl.java b/branches/sca-android/vtest/java-api/conversation/lifetime/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/lifetime/impl/DServiceImpl.java
new file mode 100644
index 0000000000..34c57e402e
--- /dev/null
+++ b/branches/sca-android/vtest/java-api/conversation/lifetime/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/lifetime/impl/DServiceImpl.java
@@ -0,0 +1,78 @@
+/*
+ * 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.impl;
+
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.ObjectInputStream;
+
+import org.apache.tuscany.sca.vtest.javaapi.conversation.lifetime.BService;
+import org.apache.tuscany.sca.vtest.javaapi.conversation.lifetime.DService;
+import org.junit.Assert;
+import org.osoa.sca.ServiceReference;
+import org.osoa.sca.annotations.Scope;
+import org.osoa.sca.annotations.Service;
+
+@Service(DService.class)
+@Scope("CONVERSATION")
+public class DServiceImpl implements DService {
+
+ String someState;
+
+ public void setState(String someState) {
+ this.someState = someState;
+ }
+
+ public String getState() {
+ return someState;
+ }
+
+ public void continueConversation(ServiceReference<BService> b, Object convId) {
+
+ b.getService().setState("Some more state");
+ Assert.assertEquals(convId, b.getConversation().getConversationID());
+ }
+
+ public void continueConversation2(String filename, Object convId, String serializedState) {
+ ServiceReference<BService> b = readReference(filename);
+ Assert.assertEquals(serializedState, b.getService().getState());
+ Assert.assertEquals(convId, b.getConversation().getConversationID());
+ }
+
+ // Utilities
+ @SuppressWarnings("unchecked")
+ private ServiceReference<BService> readReference(String filename) {
+ ServiceReference<BService> b = null;
+ FileInputStream fis = null;
+ ObjectInputStream in = null;
+ try {
+ fis = new FileInputStream(filename);
+ in = new ObjectInputStream(fis);
+ ServiceReference<BService> readObject = (ServiceReference<BService>)in.readObject();
+ b = readObject;
+ in.close();
+ } catch (IOException ex) {
+ ex.printStackTrace();
+ } catch (ClassNotFoundException ex) {
+ ex.printStackTrace();
+ }
+ return b;
+ }
+}
diff --git a/branches/sca-android/vtest/java-api/conversation/lifetime/src/main/resources/lifetime.composite b/branches/sca-android/vtest/java-api/conversation/lifetime/src/main/resources/lifetime.composite
new file mode 100644
index 0000000000..21ee8acac1
--- /dev/null
+++ b/branches/sca-android/vtest/java-api/conversation/lifetime/src/main/resources/lifetime.composite
@@ -0,0 +1,45 @@
+<?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://www.osoa.org/xmlns/sca/1.0"
+ targetNamespace="http://java-api-tests" name="Converstion-Lifetime">
+
+ <component name="AComponent">
+ <implementation.java
+ class="org.apache.tuscany.sca.vtest.javaapi.conversation.lifetime.impl.AServiceImpl" />
+ <reference name="b" target="BComponent" />
+ <reference name="d" target="DComponent" />
+ </component>
+
+ <component name="BComponent">
+ <implementation.java
+ class="org.apache.tuscany.sca.vtest.javaapi.conversation.lifetime.impl.BServiceImpl" />
+ </component>
+
+ <component name="CComponent">
+ <implementation.java
+ class="org.apache.tuscany.sca.vtest.javaapi.conversation.lifetime.impl.CServiceImpl" />
+ </component>
+
+ <component name="DComponent">
+ <implementation.java
+ class="org.apache.tuscany.sca.vtest.javaapi.conversation.lifetime.impl.DServiceImpl" />
+ </component>
+
+</composite>
diff --git a/branches/sca-android/vtest/java-api/conversation/lifetime/src/test/java/org/apache/tuscany/sca/vtest/javaapi/conversation/lifetime/LifetimeTestCase.java b/branches/sca-android/vtest/java-api/conversation/lifetime/src/test/java/org/apache/tuscany/sca/vtest/javaapi/conversation/lifetime/LifetimeTestCase.java
new file mode 100644
index 0000000000..2e5785f7d3
--- /dev/null
+++ b/branches/sca-android/vtest/java-api/conversation/lifetime/src/test/java/org/apache/tuscany/sca/vtest/javaapi/conversation/lifetime/LifetimeTestCase.java
@@ -0,0 +1,216 @@
+/*
+ * 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;
+
+import org.apache.tuscany.sca.vtest.utilities.ServiceFinder;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.junit.Ignore;
+import org.junit.Test;
+import org.osoa.sca.ConversationEndedException;
+
+/**
+ *
+ */
+public class LifetimeTestCase {
+
+ protected static String compositeName = "lifetime.composite";
+ protected static AService aService = null;
+
+ @BeforeClass
+ public static void init() throws Exception {
+ try {
+ System.out.println("Setting up");
+ ServiceFinder.init(compositeName);
+ aService = ServiceFinder.getService(AService.class, "AComponent");
+ } catch (Exception ex) {
+ ex.printStackTrace();
+ }
+ }
+
+ @AfterClass
+ public static void destroy() throws Exception {
+
+ System.out.println("Cleaning up");
+ ServiceFinder.cleanup();
+
+ }
+
+ /**
+ * Lines 475, 476
+ * <p>
+ * Conversations start on the client side when one of the following occur: A
+ * "@Reference" to a conversational service is injected, ... and then a
+ * method of the service is called
+ */
+ @Test
+ public void lifetime1() throws Exception {
+ aService.testConversationStarted();
+ }
+
+ /**
+ * Lines 477, 478, 479
+ * <p>
+ * Conversations start on the client side when one of the following occur
+ * ... A call is made to CompositeContext.getServiceReference and then a
+ * method of the service is called.
+ */
+ @Test
+ @Ignore("TUSCANY-2243")
+ public void lifetime2() throws Exception {
+ aService.testConversationStarted2();
+ }
+
+ /**
+ * Line 481, 482
+ * <p>
+ * The client can continue an existing conversation, by: Holding the service
+ * reference that was created when the conversation started
+ */
+ @Test
+ public void lifetime3() throws Exception {
+ aService.testConversationContinue();
+ }
+
+ /**
+ * Line 481, 483
+ * <p>
+ * The client can continue an existing conversation, by: ... • Getting the
+ * service reference object passed as a parameter from another service, even
+ * remotely
+ */
+ @Test
+ public void lifetime4() throws Exception {
+ // aService.testConversationContinue2();
+ }
+
+ /**
+ * Line 481, 484
+ * <p>
+ * The client can continue an existing conversation, by:<br> • Loading a
+ * service reference that had been written to some form of persistent
+ * storage
+ */
+ @Test
+ public void lifetime6() throws Exception {
+ aService.testConversationContinue3();
+ }
+
+ /**
+ * Line 487, 488
+ * <p>
+ * A conversation ends, and any state associated with the conversation is
+ * freed up, when: <br>
+ * ...A server operation that has been annotated "@EndConveration" has been
+ * called
+ */
+ @Test
+ public void lifetime7() throws Exception {
+ aService.testConversationEnd();
+ }
+
+ /**
+ * Line 487, 489
+ * <p>
+ * A conversation ends, and any state associated with the conversation is
+ * freed up, when: <br>
+ * ...The server calls an "@EndsConversation" method on the "@Callback"
+ * reference <br>
+ */
+ @Test
+ public void lifetime8() throws Exception {
+ aService.testConversationEnd2();
+ }
+
+ /**
+ * Line 487, 490
+ * <p>
+ * 487 A conversation ends, and any state associated with the conversation
+ * is freed up, when: <br>
+ * ... The server's conversation lifetime timeout occurs
+ */
+ @Test
+ public void lifetime9() throws Exception {
+ aService.testConversationEnd3();
+ }
+
+ /**
+ * Line 487, 491
+ * <p>
+ * A conversation ends, and any state associated with the conversation is
+ * freed up, when: <br>
+ * ...The client calls Conversation.end()
+ */
+ @Test
+ public void lifetime10() throws Exception {
+ aService.testConversationEnd4();
+ }
+
+ /**
+ * Line 487, 492
+ * <p>
+ * A conversation ends, and any state associated with the conversation is
+ * freed up, when: <br>
+ * ...Any non-business exception is thrown by a conversational operation
+ */
+ @Test
+ //@Ignore("TUSCANY-2283")
+ public void lifetime11() throws Exception {
+ aService.testConversationEnd5();
+ aService.testConversationEnd9();
+ }
+
+ /**
+ * Line 494, 495
+ * <p>
+ * If a method is invoked on a service reference after an
+ * "@EndsConversation" method has been called then a new conversation will
+ * automatically be started.
+ */
+ @Test
+ public void lifetime12() throws Exception {
+ aService.testConversationEnd6();
+ }
+
+ /**
+ * Line 495, 496, 497
+ * <p>
+ * If ServiceReference.getConversationID() is called after the
+ * "@EndsConversation" method: is called, but before the next conversation
+ * has been started, it will return null.
+ */
+ @Test
+ public void lifetime13() throws Exception {
+ aService.testConversationEnd7();
+ }
+
+ /**
+ * Line 498, 499
+ * <p>
+ * If a service reference is used after the service provider's conversation
+ * timeout has caused the conversation to be ended, then
+ * ConversationEndedException will be thrown.
+ */
+ @Test(expected = ConversationEndedException.class)
+ public void lifetime14() throws Exception {
+ aService.testConversationEnd8();
+ }
+
+}