summaryrefslogtreecommitdiffstats
path: root/sca-java-1.x/branches/sca-java-1.6.2/vtest/java-api/annotations/scope
diff options
context:
space:
mode:
Diffstat (limited to 'sca-java-1.x/branches/sca-java-1.6.2/vtest/java-api/annotations/scope')
-rw-r--r--sca-java-1.x/branches/sca-java-1.6.2/vtest/java-api/annotations/scope/pom.xml46
-rw-r--r--sca-java-1.x/branches/sca-java-1.6.2/vtest/java-api/annotations/scope/src/main/java/org/apache/tuscany/sca/vtest/javaapi/annotations/scope/AService.java29
-rw-r--r--sca-java-1.x/branches/sca-java-1.6.2/vtest/java-api/annotations/scope/src/main/java/org/apache/tuscany/sca/vtest/javaapi/annotations/scope/BService.java40
-rw-r--r--sca-java-1.x/branches/sca-java-1.6.2/vtest/java-api/annotations/scope/src/main/java/org/apache/tuscany/sca/vtest/javaapi/annotations/scope/CService.java40
-rw-r--r--sca-java-1.x/branches/sca-java-1.6.2/vtest/java-api/annotations/scope/src/main/java/org/apache/tuscany/sca/vtest/javaapi/annotations/scope/DService.java43
-rw-r--r--sca-java-1.x/branches/sca-java-1.6.2/vtest/java-api/annotations/scope/src/main/java/org/apache/tuscany/sca/vtest/javaapi/annotations/scope/FService.java43
-rw-r--r--sca-java-1.x/branches/sca-java-1.6.2/vtest/java-api/annotations/scope/src/main/java/org/apache/tuscany/sca/vtest/javaapi/annotations/scope/GService.java35
-rw-r--r--sca-java-1.x/branches/sca-java-1.6.2/vtest/java-api/annotations/scope/src/main/java/org/apache/tuscany/sca/vtest/javaapi/annotations/scope/HService.java36
-rw-r--r--sca-java-1.x/branches/sca-java-1.6.2/vtest/java-api/annotations/scope/src/main/java/org/apache/tuscany/sca/vtest/javaapi/annotations/scope/IService.java48
-rw-r--r--sca-java-1.x/branches/sca-java-1.6.2/vtest/java-api/annotations/scope/src/main/java/org/apache/tuscany/sca/vtest/javaapi/annotations/scope/JService.java33
-rw-r--r--sca-java-1.x/branches/sca-java-1.6.2/vtest/java-api/annotations/scope/src/main/java/org/apache/tuscany/sca/vtest/javaapi/annotations/scope/KService.java33
-rw-r--r--sca-java-1.x/branches/sca-java-1.6.2/vtest/java-api/annotations/scope/src/main/java/org/apache/tuscany/sca/vtest/javaapi/annotations/scope/LService.java41
-rw-r--r--sca-java-1.x/branches/sca-java-1.6.2/vtest/java-api/annotations/scope/src/main/java/org/apache/tuscany/sca/vtest/javaapi/annotations/scope/MService.java33
-rw-r--r--sca-java-1.x/branches/sca-java-1.6.2/vtest/java-api/annotations/scope/src/main/java/org/apache/tuscany/sca/vtest/javaapi/annotations/scope/NService.java33
-rw-r--r--sca-java-1.x/branches/sca-java-1.6.2/vtest/java-api/annotations/scope/src/main/java/org/apache/tuscany/sca/vtest/javaapi/annotations/scope/OService.java41
-rw-r--r--sca-java-1.x/branches/sca-java-1.6.2/vtest/java-api/annotations/scope/src/main/java/org/apache/tuscany/sca/vtest/javaapi/annotations/scope/impl/AServiceImpl.java32
-rw-r--r--sca-java-1.x/branches/sca-java-1.6.2/vtest/java-api/annotations/scope/src/main/java/org/apache/tuscany/sca/vtest/javaapi/annotations/scope/impl/BServiceImpl.java112
-rw-r--r--sca-java-1.x/branches/sca-java-1.6.2/vtest/java-api/annotations/scope/src/main/java/org/apache/tuscany/sca/vtest/javaapi/annotations/scope/impl/CServiceImpl.java114
-rw-r--r--sca-java-1.x/branches/sca-java-1.6.2/vtest/java-api/annotations/scope/src/main/java/org/apache/tuscany/sca/vtest/javaapi/annotations/scope/impl/DServiceImpl.java116
-rw-r--r--sca-java-1.x/branches/sca-java-1.6.2/vtest/java-api/annotations/scope/src/main/java/org/apache/tuscany/sca/vtest/javaapi/annotations/scope/impl/FServiceImpl.java116
-rw-r--r--sca-java-1.x/branches/sca-java-1.6.2/vtest/java-api/annotations/scope/src/main/java/org/apache/tuscany/sca/vtest/javaapi/annotations/scope/impl/GServiceImpl.java75
-rw-r--r--sca-java-1.x/branches/sca-java-1.6.2/vtest/java-api/annotations/scope/src/main/java/org/apache/tuscany/sca/vtest/javaapi/annotations/scope/impl/HServiceImpl.java86
-rw-r--r--sca-java-1.x/branches/sca-java-1.6.2/vtest/java-api/annotations/scope/src/main/java/org/apache/tuscany/sca/vtest/javaapi/annotations/scope/impl/IServiceImpl.java135
-rw-r--r--sca-java-1.x/branches/sca-java-1.6.2/vtest/java-api/annotations/scope/src/main/java/org/apache/tuscany/sca/vtest/javaapi/annotations/scope/impl/JServiceImpl.java78
-rw-r--r--sca-java-1.x/branches/sca-java-1.6.2/vtest/java-api/annotations/scope/src/main/java/org/apache/tuscany/sca/vtest/javaapi/annotations/scope/impl/KServiceImpl.java80
-rw-r--r--sca-java-1.x/branches/sca-java-1.6.2/vtest/java-api/annotations/scope/src/main/java/org/apache/tuscany/sca/vtest/javaapi/annotations/scope/impl/LServiceImpl.java83
-rw-r--r--sca-java-1.x/branches/sca-java-1.6.2/vtest/java-api/annotations/scope/src/main/java/org/apache/tuscany/sca/vtest/javaapi/annotations/scope/impl/MServiceImpl.java81
-rw-r--r--sca-java-1.x/branches/sca-java-1.6.2/vtest/java-api/annotations/scope/src/main/java/org/apache/tuscany/sca/vtest/javaapi/annotations/scope/impl/NServiceImpl.java85
-rw-r--r--sca-java-1.x/branches/sca-java-1.6.2/vtest/java-api/annotations/scope/src/main/java/org/apache/tuscany/sca/vtest/javaapi/annotations/scope/impl/OServiceImpl.java83
-rw-r--r--sca-java-1.x/branches/sca-java-1.6.2/vtest/java-api/annotations/scope/src/main/resources/scope.composite110
-rw-r--r--sca-java-1.x/branches/sca-java-1.6.2/vtest/java-api/annotations/scope/src/test/java/org/apache/tuscany/sca/vtest/javaapi/annotations/scope/ScopeAnnotationTestCase.java476
31 files changed, 2436 insertions, 0 deletions
diff --git a/sca-java-1.x/branches/sca-java-1.6.2/vtest/java-api/annotations/scope/pom.xml b/sca-java-1.x/branches/sca-java-1.6.2/vtest/java-api/annotations/scope/pom.xml
new file mode 100644
index 0000000000..03e142eb86
--- /dev/null
+++ b/sca-java-1.x/branches/sca-java-1.6.2/vtest/java-api/annotations/scope/pom.xml
@@ -0,0 +1,46 @@
+<?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>java-api-annotations</artifactId>
+ <version>1.6.1-SNAPSHOT</version>
+ <relativePath>../pom.xml</relativePath>
+ </parent>
+ <artifactId>vtest-java-api-annotations-scope</artifactId>
+ <name>Apache Tuscany SCA vTest Java APIs and Annotations Verification Tests - Annotations - @Scope</name>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-host-embedded</artifactId>
+ <version>1.6.1-SNAPSHOT</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-implementation-java-runtime</artifactId>
+ <version>1.6.1-SNAPSHOT</version>
+ <scope>runtime</scope>
+ </dependency>
+
+ </dependencies>
+</project>
diff --git a/sca-java-1.x/branches/sca-java-1.6.2/vtest/java-api/annotations/scope/src/main/java/org/apache/tuscany/sca/vtest/javaapi/annotations/scope/AService.java b/sca-java-1.x/branches/sca-java-1.6.2/vtest/java-api/annotations/scope/src/main/java/org/apache/tuscany/sca/vtest/javaapi/annotations/scope/AService.java
new file mode 100644
index 0000000000..b7cf3fba71
--- /dev/null
+++ b/sca-java-1.x/branches/sca-java-1.6.2/vtest/java-api/annotations/scope/src/main/java/org/apache/tuscany/sca/vtest/javaapi/annotations/scope/AService.java
@@ -0,0 +1,29 @@
+/*
+ * 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.annotations.scope;
+
+
+/**
+ * Simple Service
+ */
+public interface AService {
+
+ public String getName();
+
+}
diff --git a/sca-java-1.x/branches/sca-java-1.6.2/vtest/java-api/annotations/scope/src/main/java/org/apache/tuscany/sca/vtest/javaapi/annotations/scope/BService.java b/sca-java-1.x/branches/sca-java-1.6.2/vtest/java-api/annotations/scope/src/main/java/org/apache/tuscany/sca/vtest/javaapi/annotations/scope/BService.java
new file mode 100644
index 0000000000..7da9d29424
--- /dev/null
+++ b/sca-java-1.x/branches/sca-java-1.6.2/vtest/java-api/annotations/scope/src/main/java/org/apache/tuscany/sca/vtest/javaapi/annotations/scope/BService.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.annotations.scope;
+
+/**
+ * Simple Service
+ */
+public interface BService {
+
+ public String getName();
+
+ public boolean isInitReady();
+
+ public String getCurrentState();
+
+ public String setCurrentState(String currentState);
+
+ public int getDestroyCalledCounter();
+
+ public int getInitCalledCounter();
+
+ public int getInstanceCounter();
+
+}
diff --git a/sca-java-1.x/branches/sca-java-1.6.2/vtest/java-api/annotations/scope/src/main/java/org/apache/tuscany/sca/vtest/javaapi/annotations/scope/CService.java b/sca-java-1.x/branches/sca-java-1.6.2/vtest/java-api/annotations/scope/src/main/java/org/apache/tuscany/sca/vtest/javaapi/annotations/scope/CService.java
new file mode 100644
index 0000000000..208c6a78b0
--- /dev/null
+++ b/sca-java-1.x/branches/sca-java-1.6.2/vtest/java-api/annotations/scope/src/main/java/org/apache/tuscany/sca/vtest/javaapi/annotations/scope/CService.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.annotations.scope;
+
+/**
+ * Simple Service
+ */
+public interface CService {
+
+ public String getName();
+
+ public boolean isInitReady();
+
+ public String getCurrentState();
+
+ public String setCurrentState(String currentState);
+
+ public int getDestroyCalledCounter();
+
+ public int getInitCalledCounter();
+
+ public int getInstanceCounter();
+
+}
diff --git a/sca-java-1.x/branches/sca-java-1.6.2/vtest/java-api/annotations/scope/src/main/java/org/apache/tuscany/sca/vtest/javaapi/annotations/scope/DService.java b/sca-java-1.x/branches/sca-java-1.6.2/vtest/java-api/annotations/scope/src/main/java/org/apache/tuscany/sca/vtest/javaapi/annotations/scope/DService.java
new file mode 100644
index 0000000000..d4cedcc979
--- /dev/null
+++ b/sca-java-1.x/branches/sca-java-1.6.2/vtest/java-api/annotations/scope/src/main/java/org/apache/tuscany/sca/vtest/javaapi/annotations/scope/DService.java
@@ -0,0 +1,43 @@
+/*
+ * 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.annotations.scope;
+
+import org.osoa.sca.annotations.Remotable;
+
+/**
+ * Simple Service
+ */
+@Remotable
+public interface DService {
+
+ public String getName();
+
+ public boolean isInitReady();
+
+ public String getCurrentState();
+
+ public String setCurrentState(String currentState);
+
+ public int getDestroyCalledCounter();
+
+ public int getInitCalledCounter();
+
+ public int getInstanceCounter();
+
+}
diff --git a/sca-java-1.x/branches/sca-java-1.6.2/vtest/java-api/annotations/scope/src/main/java/org/apache/tuscany/sca/vtest/javaapi/annotations/scope/FService.java b/sca-java-1.x/branches/sca-java-1.6.2/vtest/java-api/annotations/scope/src/main/java/org/apache/tuscany/sca/vtest/javaapi/annotations/scope/FService.java
new file mode 100644
index 0000000000..7844ba7b62
--- /dev/null
+++ b/sca-java-1.x/branches/sca-java-1.6.2/vtest/java-api/annotations/scope/src/main/java/org/apache/tuscany/sca/vtest/javaapi/annotations/scope/FService.java
@@ -0,0 +1,43 @@
+/*
+ * 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.annotations.scope;
+
+import org.osoa.sca.annotations.Remotable;
+
+/**
+ * Simple Service
+ */
+@Remotable
+public interface FService {
+
+ public String getName();
+
+ public boolean isInitReady();
+
+ public String getCurrentState();
+
+ public String setCurrentState(String currentState);
+
+ public int getDestroyCalledCounter();
+
+ public int getInitCalledCounter();
+
+ public int getInstanceCounter();
+
+}
diff --git a/sca-java-1.x/branches/sca-java-1.6.2/vtest/java-api/annotations/scope/src/main/java/org/apache/tuscany/sca/vtest/javaapi/annotations/scope/GService.java b/sca-java-1.x/branches/sca-java-1.6.2/vtest/java-api/annotations/scope/src/main/java/org/apache/tuscany/sca/vtest/javaapi/annotations/scope/GService.java
new file mode 100644
index 0000000000..7a047414dc
--- /dev/null
+++ b/sca-java-1.x/branches/sca-java-1.6.2/vtest/java-api/annotations/scope/src/main/java/org/apache/tuscany/sca/vtest/javaapi/annotations/scope/GService.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.annotations.scope;
+
+import org.osoa.sca.annotations.Remotable;
+
+/**
+ * Simple Service
+ */
+@Remotable
+public interface GService {
+
+ public String getName();
+
+ public int getInitCalledCounter();
+
+ public int getDestroyCalledCounter();
+
+}
diff --git a/sca-java-1.x/branches/sca-java-1.6.2/vtest/java-api/annotations/scope/src/main/java/org/apache/tuscany/sca/vtest/javaapi/annotations/scope/HService.java b/sca-java-1.x/branches/sca-java-1.6.2/vtest/java-api/annotations/scope/src/main/java/org/apache/tuscany/sca/vtest/javaapi/annotations/scope/HService.java
new file mode 100644
index 0000000000..555cdd5be0
--- /dev/null
+++ b/sca-java-1.x/branches/sca-java-1.6.2/vtest/java-api/annotations/scope/src/main/java/org/apache/tuscany/sca/vtest/javaapi/annotations/scope/HService.java
@@ -0,0 +1,36 @@
+/*
+ * 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.annotations.scope;
+
+import org.osoa.sca.annotations.Remotable;
+
+
+/**
+ * Simple Service
+ */
+@Remotable
+public interface HService {
+
+ public String getName();
+
+ public String test();
+
+ public String testCounters(int n);
+
+}
diff --git a/sca-java-1.x/branches/sca-java-1.6.2/vtest/java-api/annotations/scope/src/main/java/org/apache/tuscany/sca/vtest/javaapi/annotations/scope/IService.java b/sca-java-1.x/branches/sca-java-1.6.2/vtest/java-api/annotations/scope/src/main/java/org/apache/tuscany/sca/vtest/javaapi/annotations/scope/IService.java
new file mode 100644
index 0000000000..79e20a3879
--- /dev/null
+++ b/sca-java-1.x/branches/sca-java-1.6.2/vtest/java-api/annotations/scope/src/main/java/org/apache/tuscany/sca/vtest/javaapi/annotations/scope/IService.java
@@ -0,0 +1,48 @@
+/*
+ * 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.annotations.scope;
+
+import org.osoa.sca.annotations.Conversational;
+import org.osoa.sca.annotations.EndsConversation;
+
+/**
+ * Simple Service
+ */
+@Conversational
+public interface IService {
+
+ public String getName();
+
+ public boolean isInitReady();
+
+ public String getCurrentState();
+
+ public String getConversationId();
+
+ public String setCurrentState(String currentState);
+
+ public int getDestroyCalledCounter();
+
+ public int getInitCalledCounter();
+
+ public int getInstanceCounter();
+
+ @EndsConversation
+ public void endConversation();
+}
diff --git a/sca-java-1.x/branches/sca-java-1.6.2/vtest/java-api/annotations/scope/src/main/java/org/apache/tuscany/sca/vtest/javaapi/annotations/scope/JService.java b/sca-java-1.x/branches/sca-java-1.6.2/vtest/java-api/annotations/scope/src/main/java/org/apache/tuscany/sca/vtest/javaapi/annotations/scope/JService.java
new file mode 100644
index 0000000000..95813f0e32
--- /dev/null
+++ b/sca-java-1.x/branches/sca-java-1.6.2/vtest/java-api/annotations/scope/src/main/java/org/apache/tuscany/sca/vtest/javaapi/annotations/scope/JService.java
@@ -0,0 +1,33 @@
+/*
+ * 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.annotations.scope;
+
+import org.osoa.sca.annotations.Remotable;
+
+/**
+ * Simple Service
+ */
+@Remotable
+public interface JService {
+
+ public String getName();
+
+ public String getFailedReason();
+
+}
diff --git a/sca-java-1.x/branches/sca-java-1.6.2/vtest/java-api/annotations/scope/src/main/java/org/apache/tuscany/sca/vtest/javaapi/annotations/scope/KService.java b/sca-java-1.x/branches/sca-java-1.6.2/vtest/java-api/annotations/scope/src/main/java/org/apache/tuscany/sca/vtest/javaapi/annotations/scope/KService.java
new file mode 100644
index 0000000000..b4c95965ff
--- /dev/null
+++ b/sca-java-1.x/branches/sca-java-1.6.2/vtest/java-api/annotations/scope/src/main/java/org/apache/tuscany/sca/vtest/javaapi/annotations/scope/KService.java
@@ -0,0 +1,33 @@
+/*
+ * 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.annotations.scope;
+
+import org.osoa.sca.annotations.Remotable;
+
+/**
+ * Simple Service
+ */
+@Remotable
+public interface KService {
+
+ public String getName();
+
+ public String callL1();
+
+}
diff --git a/sca-java-1.x/branches/sca-java-1.6.2/vtest/java-api/annotations/scope/src/main/java/org/apache/tuscany/sca/vtest/javaapi/annotations/scope/LService.java b/sca-java-1.x/branches/sca-java-1.6.2/vtest/java-api/annotations/scope/src/main/java/org/apache/tuscany/sca/vtest/javaapi/annotations/scope/LService.java
new file mode 100644
index 0000000000..5c0fc12fa3
--- /dev/null
+++ b/sca-java-1.x/branches/sca-java-1.6.2/vtest/java-api/annotations/scope/src/main/java/org/apache/tuscany/sca/vtest/javaapi/annotations/scope/LService.java
@@ -0,0 +1,41 @@
+/*
+ * 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.annotations.scope;
+
+import org.osoa.sca.annotations.Remotable;
+
+/**
+ * Simple Service
+ */
+@Remotable
+public interface LService {
+
+ public String getName();
+
+ public String getCurrentState();
+
+ public String setCurrentState(String currentState);
+
+ public int getDestroyCalledCounter();
+
+ public int getInitCalledCounter();
+
+ public int getInstanceCounter();
+
+}
diff --git a/sca-java-1.x/branches/sca-java-1.6.2/vtest/java-api/annotations/scope/src/main/java/org/apache/tuscany/sca/vtest/javaapi/annotations/scope/MService.java b/sca-java-1.x/branches/sca-java-1.6.2/vtest/java-api/annotations/scope/src/main/java/org/apache/tuscany/sca/vtest/javaapi/annotations/scope/MService.java
new file mode 100644
index 0000000000..ab6a3f946a
--- /dev/null
+++ b/sca-java-1.x/branches/sca-java-1.6.2/vtest/java-api/annotations/scope/src/main/java/org/apache/tuscany/sca/vtest/javaapi/annotations/scope/MService.java
@@ -0,0 +1,33 @@
+/*
+ * 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.annotations.scope;
+
+import org.osoa.sca.annotations.Remotable;
+
+/**
+ * Simple Service
+ */
+@Remotable
+public interface MService {
+
+ public String getName();
+
+ public String getFailedReason();
+
+}
diff --git a/sca-java-1.x/branches/sca-java-1.6.2/vtest/java-api/annotations/scope/src/main/java/org/apache/tuscany/sca/vtest/javaapi/annotations/scope/NService.java b/sca-java-1.x/branches/sca-java-1.6.2/vtest/java-api/annotations/scope/src/main/java/org/apache/tuscany/sca/vtest/javaapi/annotations/scope/NService.java
new file mode 100644
index 0000000000..c544bf6e02
--- /dev/null
+++ b/sca-java-1.x/branches/sca-java-1.6.2/vtest/java-api/annotations/scope/src/main/java/org/apache/tuscany/sca/vtest/javaapi/annotations/scope/NService.java
@@ -0,0 +1,33 @@
+/*
+ * 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.annotations.scope;
+
+import org.osoa.sca.annotations.Remotable;
+
+/**
+ * Simple Service
+ */
+@Remotable
+public interface NService {
+
+ public String getName();
+
+ public String callO1(int nthTime);
+
+}
diff --git a/sca-java-1.x/branches/sca-java-1.6.2/vtest/java-api/annotations/scope/src/main/java/org/apache/tuscany/sca/vtest/javaapi/annotations/scope/OService.java b/sca-java-1.x/branches/sca-java-1.6.2/vtest/java-api/annotations/scope/src/main/java/org/apache/tuscany/sca/vtest/javaapi/annotations/scope/OService.java
new file mode 100644
index 0000000000..0104030f2e
--- /dev/null
+++ b/sca-java-1.x/branches/sca-java-1.6.2/vtest/java-api/annotations/scope/src/main/java/org/apache/tuscany/sca/vtest/javaapi/annotations/scope/OService.java
@@ -0,0 +1,41 @@
+/*
+ * 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.annotations.scope;
+
+import org.osoa.sca.annotations.Remotable;
+
+/**
+ * Simple Service
+ */
+@Remotable
+public interface OService {
+
+ public String getName();
+
+ public String getCurrentState();
+
+ public String setCurrentState(String currentState);
+
+ public int getDestroyCalledCounter();
+
+ public int getInitCalledCounter();
+
+ public int getInstanceCounter();
+
+}
diff --git a/sca-java-1.x/branches/sca-java-1.6.2/vtest/java-api/annotations/scope/src/main/java/org/apache/tuscany/sca/vtest/javaapi/annotations/scope/impl/AServiceImpl.java b/sca-java-1.x/branches/sca-java-1.6.2/vtest/java-api/annotations/scope/src/main/java/org/apache/tuscany/sca/vtest/javaapi/annotations/scope/impl/AServiceImpl.java
new file mode 100644
index 0000000000..9c17b06b16
--- /dev/null
+++ b/sca-java-1.x/branches/sca-java-1.6.2/vtest/java-api/annotations/scope/src/main/java/org/apache/tuscany/sca/vtest/javaapi/annotations/scope/impl/AServiceImpl.java
@@ -0,0 +1,32 @@
+/*
+ * 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.annotations.scope.impl;
+
+import org.apache.tuscany.sca.vtest.javaapi.annotations.scope.AService;
+import org.osoa.sca.annotations.Service;
+
+@Service(AService.class)
+public class AServiceImpl implements AService {
+
+ public String getName() {
+ return "AService";
+ }
+
+}
diff --git a/sca-java-1.x/branches/sca-java-1.6.2/vtest/java-api/annotations/scope/src/main/java/org/apache/tuscany/sca/vtest/javaapi/annotations/scope/impl/BServiceImpl.java b/sca-java-1.x/branches/sca-java-1.6.2/vtest/java-api/annotations/scope/src/main/java/org/apache/tuscany/sca/vtest/javaapi/annotations/scope/impl/BServiceImpl.java
new file mode 100644
index 0000000000..2a8bd80e9a
--- /dev/null
+++ b/sca-java-1.x/branches/sca-java-1.6.2/vtest/java-api/annotations/scope/src/main/java/org/apache/tuscany/sca/vtest/javaapi/annotations/scope/impl/BServiceImpl.java
@@ -0,0 +1,112 @@
+/*
+ * 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.annotations.scope.impl;
+
+import org.apache.tuscany.sca.vtest.javaapi.annotations.scope.AService;
+import org.apache.tuscany.sca.vtest.javaapi.annotations.scope.BService;
+import org.osoa.sca.annotations.Property;
+import org.osoa.sca.annotations.Reference;
+import org.osoa.sca.annotations.Service;
+import org.osoa.sca.annotations.Init;
+import org.osoa.sca.annotations.Destroy;
+
+@Service(BService.class)
+public class BServiceImpl implements BService {
+
+ private static int instanceCounter = 0;
+
+ private static int initCalledCounter = 0;
+
+ private static int destroyCalledCounter = 0;
+
+ public AService a1;
+
+ public String p1;
+
+ private int currentInstanceId = 0;
+
+ public String currentState = null;
+
+ private boolean isInitReady = false;
+
+ public BServiceImpl() {
+ currentInstanceId = ++instanceCounter;
+ isInitReady = false;
+ }
+
+ @Reference
+ public void setA1(AService a1) {
+ this.a1 = a1;
+ }
+
+ @Property
+ public void setP1(String p1) {
+ this.p1 = p1;
+ }
+
+ @Init
+ public void initBService() throws Exception {
+ initCalledCounter++;
+ if (p1.equals("p1") && a1.getName().equals("AService"))
+ isInitReady = true;
+ }
+
+ @Destroy
+ public void destroyBService() {
+ destroyCalledCounter++;
+ }
+
+ public String getName() {
+ return "BService" + currentInstanceId;
+ }
+
+ public AService getA1() {
+ return a1;
+ }
+
+ public String getP1() {
+ return p1;
+ }
+
+ public String getCurrentState() {
+ return currentState;
+ }
+
+ public String setCurrentState(String currentState) {
+ this.currentState = currentState;
+ return this.currentState;
+ }
+
+ public boolean isInitReady() {
+ return isInitReady;
+ }
+
+ public int getDestroyCalledCounter() {
+ return destroyCalledCounter;
+ }
+
+ public int getInitCalledCounter() {
+ return initCalledCounter;
+ }
+
+ public int getInstanceCounter() {
+ return instanceCounter;
+ }
+}
diff --git a/sca-java-1.x/branches/sca-java-1.6.2/vtest/java-api/annotations/scope/src/main/java/org/apache/tuscany/sca/vtest/javaapi/annotations/scope/impl/CServiceImpl.java b/sca-java-1.x/branches/sca-java-1.6.2/vtest/java-api/annotations/scope/src/main/java/org/apache/tuscany/sca/vtest/javaapi/annotations/scope/impl/CServiceImpl.java
new file mode 100644
index 0000000000..c99f5f5e74
--- /dev/null
+++ b/sca-java-1.x/branches/sca-java-1.6.2/vtest/java-api/annotations/scope/src/main/java/org/apache/tuscany/sca/vtest/javaapi/annotations/scope/impl/CServiceImpl.java
@@ -0,0 +1,114 @@
+/*
+ * 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.annotations.scope.impl;
+
+import org.apache.tuscany.sca.vtest.javaapi.annotations.scope.AService;
+import org.apache.tuscany.sca.vtest.javaapi.annotations.scope.CService;
+import org.osoa.sca.annotations.Destroy;
+import org.osoa.sca.annotations.Init;
+import org.osoa.sca.annotations.Property;
+import org.osoa.sca.annotations.Reference;
+import org.osoa.sca.annotations.Service;
+import org.osoa.sca.annotations.Scope;
+
+@Service(CService.class)
+@Scope("STATELESS")
+public class CServiceImpl implements CService {
+
+ public static int instanceCounter = 0;
+
+ public static int initCalledCounter = 0;
+
+ public static int destroyCalledCounter = 0;
+
+ public AService a1;
+
+ public String p1;
+
+ public int currentInstanceId = 0;
+
+ public String currentState = null;
+
+ public boolean isInitReady = false;
+
+ public CServiceImpl() {
+ currentInstanceId = ++instanceCounter;
+ isInitReady = false;
+ }
+
+ @Reference
+ public void setA1(AService a1) {
+ this.a1 = a1;
+ }
+
+ @Property
+ public void setP1(String p1) {
+ this.p1 = p1;
+ }
+
+ @Init
+ public void initCService() throws Exception {
+ initCalledCounter++;
+ if (p1.equals("p1") && a1.getName().equals("AService"))
+ isInitReady = true;
+ }
+
+ @Destroy
+ public void destroyCService() {
+ destroyCalledCounter++;
+ }
+
+ public String getName() {
+ return "CService" + currentInstanceId;
+ }
+
+ public AService getA1() {
+ return a1;
+ }
+
+ public String getP1() {
+ return p1;
+ }
+
+ public String getCurrentState() {
+ return currentState;
+ }
+
+ public String setCurrentState(String currentState) {
+ this.currentState = currentState;
+ return this.currentState;
+ }
+
+ public boolean isInitReady() {
+ return isInitReady;
+ }
+
+ public int getDestroyCalledCounter() {
+ return destroyCalledCounter;
+ }
+
+ public int getInitCalledCounter() {
+ return initCalledCounter;
+ }
+
+ public int getInstanceCounter() {
+ return instanceCounter;
+ }
+}
diff --git a/sca-java-1.x/branches/sca-java-1.6.2/vtest/java-api/annotations/scope/src/main/java/org/apache/tuscany/sca/vtest/javaapi/annotations/scope/impl/DServiceImpl.java b/sca-java-1.x/branches/sca-java-1.6.2/vtest/java-api/annotations/scope/src/main/java/org/apache/tuscany/sca/vtest/javaapi/annotations/scope/impl/DServiceImpl.java
new file mode 100644
index 0000000000..cc41994106
--- /dev/null
+++ b/sca-java-1.x/branches/sca-java-1.6.2/vtest/java-api/annotations/scope/src/main/java/org/apache/tuscany/sca/vtest/javaapi/annotations/scope/impl/DServiceImpl.java
@@ -0,0 +1,116 @@
+/*
+ * 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.annotations.scope.impl;
+
+import org.apache.tuscany.sca.vtest.javaapi.annotations.scope.AService;
+import org.apache.tuscany.sca.vtest.javaapi.annotations.scope.DService;
+import org.osoa.sca.annotations.Destroy;
+import org.osoa.sca.annotations.Init;
+import org.osoa.sca.annotations.Property;
+import org.osoa.sca.annotations.Reference;
+import org.osoa.sca.annotations.Service;
+import org.osoa.sca.annotations.Scope;
+
+@Service(DService.class)
+@Scope("REQUEST")
+public class DServiceImpl implements DService {
+
+ public static int instanceCounter = 0;
+
+ public static int initCalledCounter = 0;
+
+ public static int destroyCalledCounter = 0;
+
+ public AService a1;
+
+ public String p1;
+
+ public int currentInstanceId = 0;
+
+ public String currentState = null;
+
+ public boolean isInitReady = false;
+
+ public DServiceImpl() {
+ currentInstanceId = ++instanceCounter;
+ isInitReady = false;
+ }
+
+ @Reference
+ public void setA1(AService a1) {
+ this.a1 = a1;
+ }
+
+ @Property
+ public void setP1(String p1) {
+ this.p1 = p1;
+ }
+
+ @Init
+ public void initDService() throws Exception {
+ initCalledCounter++;
+ if (p1.equals("p1") && a1.getName().equals("AService"))
+ isInitReady = true;
+ System.out.println("DService" + currentInstanceId + "->initDService");
+ }
+
+ @Destroy
+ public void destroyDService() {
+ destroyCalledCounter++;
+ System.out.println("DService" + currentInstanceId + "->destroyDService");
+ }
+
+ public String getName() {
+ return "DService" + currentInstanceId;
+ }
+
+ public AService getA1() {
+ return a1;
+ }
+
+ public String getP1() {
+ return p1;
+ }
+
+ public String getCurrentState() {
+ return currentState;
+ }
+
+ public String setCurrentState(String currentState) {
+ this.currentState = "DService" + currentInstanceId + "-" + currentState;
+ return this.currentState;
+ }
+
+ public boolean isInitReady() {
+ return isInitReady;
+ }
+
+ public int getDestroyCalledCounter() {
+ return destroyCalledCounter;
+ }
+
+ public int getInitCalledCounter() {
+ return initCalledCounter;
+ }
+
+ public int getInstanceCounter() {
+ return instanceCounter;
+ }
+}
diff --git a/sca-java-1.x/branches/sca-java-1.6.2/vtest/java-api/annotations/scope/src/main/java/org/apache/tuscany/sca/vtest/javaapi/annotations/scope/impl/FServiceImpl.java b/sca-java-1.x/branches/sca-java-1.6.2/vtest/java-api/annotations/scope/src/main/java/org/apache/tuscany/sca/vtest/javaapi/annotations/scope/impl/FServiceImpl.java
new file mode 100644
index 0000000000..4fb7386484
--- /dev/null
+++ b/sca-java-1.x/branches/sca-java-1.6.2/vtest/java-api/annotations/scope/src/main/java/org/apache/tuscany/sca/vtest/javaapi/annotations/scope/impl/FServiceImpl.java
@@ -0,0 +1,116 @@
+/*
+ * 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.annotations.scope.impl;
+
+import org.apache.tuscany.sca.vtest.javaapi.annotations.scope.AService;
+import org.apache.tuscany.sca.vtest.javaapi.annotations.scope.FService;
+import org.osoa.sca.annotations.Destroy;
+import org.osoa.sca.annotations.Init;
+import org.osoa.sca.annotations.Property;
+import org.osoa.sca.annotations.Reference;
+import org.osoa.sca.annotations.Service;
+import org.osoa.sca.annotations.Scope;
+
+@Service(FService.class)
+@Scope("COMPOSITE")
+public class FServiceImpl implements FService {
+
+ public static int instanceCounter = 0;
+
+ public static int initCalledCounter = 0;
+
+ public static int destroyCalledCounter = 0;
+
+ public AService a1;
+
+ public String p1;
+
+ public int currentInstanceId = 0;
+
+ public String currentState = null;
+
+ public boolean isInitReady = false;
+
+ public FServiceImpl() {
+ currentInstanceId = ++instanceCounter;
+ isInitReady = false;
+ }
+
+ @Reference
+ public void setA1(AService a1) {
+ this.a1 = a1;
+ }
+
+ @Property
+ public void setP1(String p1) {
+ this.p1 = p1;
+ }
+
+ @Init
+ public void initFService() throws Exception {
+ initCalledCounter++;
+ if (p1.equals("p1") && a1.getName().equals("AService"))
+ isInitReady = true;
+ System.out.println("FService" + currentInstanceId + "->initFService");
+ }
+
+ @Destroy
+ public void destroyFService() {
+ destroyCalledCounter++;
+ System.out.println("FService" + currentInstanceId + "->destroyFService");
+ }
+
+ public String getName() {
+ return "FService" + currentInstanceId;
+ }
+
+ public AService getA1() {
+ return a1;
+ }
+
+ public String getP1() {
+ return p1;
+ }
+
+ public String getCurrentState() {
+ return currentState;
+ }
+
+ public String setCurrentState(String currentState) {
+ this.currentState = "FService" + currentInstanceId + "-" + currentState;
+ return this.currentState;
+ }
+
+ public boolean isInitReady() {
+ return isInitReady;
+ }
+
+ public int getDestroyCalledCounter() {
+ return destroyCalledCounter;
+ }
+
+ public int getInitCalledCounter() {
+ return initCalledCounter;
+ }
+
+ public int getInstanceCounter() {
+ return instanceCounter;
+ }
+}
diff --git a/sca-java-1.x/branches/sca-java-1.6.2/vtest/java-api/annotations/scope/src/main/java/org/apache/tuscany/sca/vtest/javaapi/annotations/scope/impl/GServiceImpl.java b/sca-java-1.x/branches/sca-java-1.6.2/vtest/java-api/annotations/scope/src/main/java/org/apache/tuscany/sca/vtest/javaapi/annotations/scope/impl/GServiceImpl.java
new file mode 100644
index 0000000000..994469cb3a
--- /dev/null
+++ b/sca-java-1.x/branches/sca-java-1.6.2/vtest/java-api/annotations/scope/src/main/java/org/apache/tuscany/sca/vtest/javaapi/annotations/scope/impl/GServiceImpl.java
@@ -0,0 +1,75 @@
+/*
+ * 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.annotations.scope.impl;
+
+import org.apache.tuscany.sca.vtest.javaapi.annotations.scope.AService;
+import org.apache.tuscany.sca.vtest.javaapi.annotations.scope.GService;
+import org.osoa.sca.annotations.Destroy;
+import org.osoa.sca.annotations.Init;
+import org.osoa.sca.annotations.Property;
+import org.osoa.sca.annotations.Reference;
+import org.osoa.sca.annotations.Scope;
+import org.osoa.sca.annotations.EagerInit;
+
+@Scope("COMPOSITE")
+@EagerInit
+public class GServiceImpl implements GService {
+
+ public static int initCalledCounter = 0;
+
+ public static int destroyCalledCounter = 0;
+
+ public AService a1;
+
+ public String p1;
+
+ @Init
+ public void initGService() throws Exception {
+ initCalledCounter++;
+ System.out.println("GService->initGService");
+ }
+
+ @Destroy
+ public void destroyGService() {
+ destroyCalledCounter++;
+ System.out.println("GService->destroyGService");
+ }
+
+ @Reference
+ public void setA1(AService a1) {
+ this.a1 = a1;
+ }
+
+ @Property
+ public void setP1(String p1) {
+ this.p1 = p1;
+ }
+
+ public String getName() {
+ return "GService";
+ }
+
+ public int getInitCalledCounter() {
+ return initCalledCounter;
+ }
+
+ public int getDestroyCalledCounter() {
+ return destroyCalledCounter;
+ }
+}
diff --git a/sca-java-1.x/branches/sca-java-1.6.2/vtest/java-api/annotations/scope/src/main/java/org/apache/tuscany/sca/vtest/javaapi/annotations/scope/impl/HServiceImpl.java b/sca-java-1.x/branches/sca-java-1.6.2/vtest/java-api/annotations/scope/src/main/java/org/apache/tuscany/sca/vtest/javaapi/annotations/scope/impl/HServiceImpl.java
new file mode 100644
index 0000000000..2fa610def7
--- /dev/null
+++ b/sca-java-1.x/branches/sca-java-1.6.2/vtest/java-api/annotations/scope/src/main/java/org/apache/tuscany/sca/vtest/javaapi/annotations/scope/impl/HServiceImpl.java
@@ -0,0 +1,86 @@
+/*
+ * 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.annotations.scope.impl;
+
+import org.apache.tuscany.sca.vtest.javaapi.annotations.scope.IService;
+import org.apache.tuscany.sca.vtest.javaapi.annotations.scope.HService;
+import org.osoa.sca.annotations.Reference;
+import org.osoa.sca.annotations.Service;
+
+@Service(HService.class)
+public class HServiceImpl implements HService {
+
+ @Reference
+ public IService i1;
+
+ public String getName() {
+ return "HService";
+ }
+
+ public String test() {
+
+ String serviceName = i1.getName();
+ String conversationIdBefore = i1.getConversationId();
+
+ for (int i = 0; i < 10; i++) {
+ String newState = "state-" + i;
+ i1.setCurrentState(newState);
+ String currentState = i1.getCurrentState();
+ if (currentState == null || !currentState.equals(serviceName + "-" + newState)) {
+ i1.endConversation();
+ return "CurrentStateLost - " + currentState;
+ }
+ }
+
+ boolean isInitReady = i1.isInitReady();
+
+ String conversationIdAfter = i1.getConversationId();
+
+ i1.endConversation();
+
+ if (!isInitReady)
+ return "InitNotReady";
+
+ if (!conversationIdBefore.equals(conversationIdAfter))
+ return "DifferentConversationId";
+
+ return "None";
+ }
+
+ public String testCounters(int n) {
+ int instanceCounter = i1.getInstanceCounter();
+ int initCalledCounter = i1.getInitCalledCounter();
+ int destroyCalledCounter = i1.getDestroyCalledCounter();
+
+ System.out.println("instanceCounter=" + instanceCounter);
+ System.out.println("initCalledCounter=" + initCalledCounter);
+ System.out.println("destroyCalledCounter=" + destroyCalledCounter);
+
+ if (instanceCounter != n + 1)
+ return "IncorrectInstanceCounter";
+ if (initCalledCounter != n + 1)
+ return "IncorrectInitCalledCounter";
+ if (destroyCalledCounter != n)
+ return "IncorrectDestroyCalledCounter";
+
+ return "None";
+ }
+
+}
diff --git a/sca-java-1.x/branches/sca-java-1.6.2/vtest/java-api/annotations/scope/src/main/java/org/apache/tuscany/sca/vtest/javaapi/annotations/scope/impl/IServiceImpl.java b/sca-java-1.x/branches/sca-java-1.6.2/vtest/java-api/annotations/scope/src/main/java/org/apache/tuscany/sca/vtest/javaapi/annotations/scope/impl/IServiceImpl.java
new file mode 100644
index 0000000000..9f6019a1fd
--- /dev/null
+++ b/sca-java-1.x/branches/sca-java-1.6.2/vtest/java-api/annotations/scope/src/main/java/org/apache/tuscany/sca/vtest/javaapi/annotations/scope/impl/IServiceImpl.java
@@ -0,0 +1,135 @@
+/*
+ * 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.annotations.scope.impl;
+
+import org.apache.tuscany.sca.vtest.javaapi.annotations.scope.AService;
+import org.apache.tuscany.sca.vtest.javaapi.annotations.scope.IService;
+import org.osoa.sca.annotations.ConversationID;
+import org.osoa.sca.annotations.Destroy;
+import org.osoa.sca.annotations.Init;
+import org.osoa.sca.annotations.Property;
+import org.osoa.sca.annotations.Reference;
+import org.osoa.sca.annotations.Service;
+import org.osoa.sca.annotations.Scope;
+
+@Service(IService.class)
+@Scope("CONVERSATION")
+public class IServiceImpl implements IService {
+
+ public static int instanceCounter = 0;
+
+ public static int initCalledCounter = 0;
+
+ public static int destroyCalledCounter = 0;
+
+ @ConversationID
+ protected String conversationId;
+
+ public int currentInstanceId = 0;
+
+ public AService a1;
+
+ public String p1;
+
+ public String currentState = null;
+
+ public boolean isInitReady = false;
+
+ public IServiceImpl() {
+ synchronized (IServiceImpl.class) {
+ currentInstanceId = ++instanceCounter;
+ }
+ isInitReady = false;
+ }
+
+ @Reference
+ public void setA1(AService a1) {
+ this.a1 = a1;
+ }
+
+ @Property
+ public void setP1(String p1) {
+ this.p1 = p1;
+ }
+
+ @Init
+ public void initIService() throws Exception {
+ synchronized (IServiceImpl.class) {
+ initCalledCounter++;
+ }
+ if (p1.equals("p1") && a1.getName().equals("AService"))
+ isInitReady = true;
+ System.out.println("IService" + currentInstanceId + "->initIService");
+ }
+
+ @Destroy
+ public void destroyIService() {
+ synchronized (IServiceImpl.class) {
+ destroyCalledCounter++;
+ }
+ System.out.println("IService" + currentInstanceId + "->destroyIService");
+ }
+
+ public void endConversation() {
+ System.out.println("IService" + currentInstanceId + "->endConversation");
+ }
+
+ public String getName() {
+ return "IService" + currentInstanceId;
+ }
+
+ public AService getA1() {
+ return a1;
+ }
+
+ public String getP1() {
+ return p1;
+ }
+
+ public String getCurrentState() {
+ return currentState;
+ }
+
+ public String getConversationId() {
+ return conversationId;
+ }
+
+ public String setCurrentState(String currentState) {
+ this.currentState = "IService" + currentInstanceId + "-" + currentState;
+ return this.currentState;
+ }
+
+ public boolean isInitReady() {
+ return isInitReady;
+ }
+
+ public int getDestroyCalledCounter() {
+ return destroyCalledCounter;
+ }
+
+ public int getInitCalledCounter() {
+ return initCalledCounter;
+ }
+
+ public int getInstanceCounter() {
+ return instanceCounter;
+ }
+
+}
diff --git a/sca-java-1.x/branches/sca-java-1.6.2/vtest/java-api/annotations/scope/src/main/java/org/apache/tuscany/sca/vtest/javaapi/annotations/scope/impl/JServiceImpl.java b/sca-java-1.x/branches/sca-java-1.6.2/vtest/java-api/annotations/scope/src/main/java/org/apache/tuscany/sca/vtest/javaapi/annotations/scope/impl/JServiceImpl.java
new file mode 100644
index 0000000000..a5851598a0
--- /dev/null
+++ b/sca-java-1.x/branches/sca-java-1.6.2/vtest/java-api/annotations/scope/src/main/java/org/apache/tuscany/sca/vtest/javaapi/annotations/scope/impl/JServiceImpl.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.annotations.scope.impl;
+
+import java.util.Timer;
+import java.util.TimerTask;
+
+import org.apache.tuscany.sca.vtest.javaapi.annotations.scope.KService;
+import org.apache.tuscany.sca.vtest.javaapi.annotations.scope.JService;
+import org.osoa.sca.annotations.Destroy;
+import org.osoa.sca.annotations.Init;
+import org.osoa.sca.annotations.Reference;
+import org.osoa.sca.annotations.Service;
+import org.osoa.sca.annotations.Scope;
+
+@Service(JService.class)
+@Scope("COMPOSITE")
+public class JServiceImpl implements JService {
+
+ @Reference
+ public KService k1;
+
+ public static String failedReason = "";
+
+ public static Timer aTimer = null;
+
+ @Init
+ public void initJService() throws Exception {
+ aTimer = new Timer();
+ aTimer.schedule(new JTimerTask(), 1000);
+ System.out.println("JService->initJService");
+ }
+
+ @Destroy
+ public void destroyJService() {
+ aTimer.cancel();
+ System.out.println("JService->destroyJService");
+ }
+
+ public String getName() {
+ return "JService";
+ }
+
+ public String getFailedReason() {
+ return failedReason;
+ }
+
+ private class JTimerTask extends TimerTask {
+
+ public boolean cancel() {
+ return true;
+ }
+
+ public void run() {
+ String result = k1.callL1();
+ if (!result.equals("None"))
+ failedReason = failedReason + ";" + result;
+ }
+
+ }
+}
diff --git a/sca-java-1.x/branches/sca-java-1.6.2/vtest/java-api/annotations/scope/src/main/java/org/apache/tuscany/sca/vtest/javaapi/annotations/scope/impl/KServiceImpl.java b/sca-java-1.x/branches/sca-java-1.6.2/vtest/java-api/annotations/scope/src/main/java/org/apache/tuscany/sca/vtest/javaapi/annotations/scope/impl/KServiceImpl.java
new file mode 100644
index 0000000000..7088562c57
--- /dev/null
+++ b/sca-java-1.x/branches/sca-java-1.6.2/vtest/java-api/annotations/scope/src/main/java/org/apache/tuscany/sca/vtest/javaapi/annotations/scope/impl/KServiceImpl.java
@@ -0,0 +1,80 @@
+/*
+ * 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.annotations.scope.impl;
+
+import org.apache.tuscany.sca.vtest.javaapi.annotations.scope.KService;
+import org.apache.tuscany.sca.vtest.javaapi.annotations.scope.LService;
+import org.osoa.sca.annotations.Reference;
+import org.osoa.sca.annotations.Service;
+import org.osoa.sca.annotations.Scope;
+
+@Service(KService.class)
+@Scope("STATELESS")
+public class KServiceImpl implements KService {
+
+ public static int instanceCounter = 0;
+
+ public String previousL1Name = null;
+
+ public int currentInstanceId = 0;
+
+ @Reference
+ public LService l1;
+
+ public KServiceImpl() {
+ currentInstanceId = ++instanceCounter;
+ }
+
+
+ public String getName() {
+ return "KService"+currentInstanceId;
+ }
+
+ public String callL1() {
+
+ for (int i = 1; i < 11; i++) {
+ System.out.println(getName() + " calls LService " + i + (i == 1 ? "st time:" : (i == 2 ? "nd time:" : (i == 3 ? "rd time:" : "th time"))));
+
+ String serviceName = l1.getName();
+ for (int j = 0; j < 10; j++) {
+ String newState = "state-" + j;
+ l1.setCurrentState(newState);
+ String currentState = l1.getCurrentState();
+ if (!currentState.equals(serviceName + "-" + newState)) {
+ return "CurrentStateLost - " + currentState;
+ }
+ }
+
+ System.out.print(" Name=" + serviceName);
+ System.out.print(", #Instance=" + l1.getInstanceCounter());
+ System.out.print(", #InitCalled=" + l1.getInitCalledCounter());
+ System.out.println(", #DestroyCalled=" + l1.getDestroyCalledCounter());
+
+ if (previousL1Name == null) {
+ previousL1Name = serviceName;
+ } else {
+ if (!previousL1Name.equals(serviceName))
+ return "DifferentLServiceInstance";
+ }
+ }
+ return "None";
+ }
+
+}
diff --git a/sca-java-1.x/branches/sca-java-1.6.2/vtest/java-api/annotations/scope/src/main/java/org/apache/tuscany/sca/vtest/javaapi/annotations/scope/impl/LServiceImpl.java b/sca-java-1.x/branches/sca-java-1.6.2/vtest/java-api/annotations/scope/src/main/java/org/apache/tuscany/sca/vtest/javaapi/annotations/scope/impl/LServiceImpl.java
new file mode 100644
index 0000000000..274e0570d9
--- /dev/null
+++ b/sca-java-1.x/branches/sca-java-1.6.2/vtest/java-api/annotations/scope/src/main/java/org/apache/tuscany/sca/vtest/javaapi/annotations/scope/impl/LServiceImpl.java
@@ -0,0 +1,83 @@
+/*
+ * 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.annotations.scope.impl;
+
+import org.apache.tuscany.sca.vtest.javaapi.annotations.scope.LService;
+import org.osoa.sca.annotations.Destroy;
+import org.osoa.sca.annotations.Init;
+import org.osoa.sca.annotations.Service;
+import org.osoa.sca.annotations.Scope;
+
+@Service(LService.class)
+@Scope("REQUEST")
+public class LServiceImpl implements LService {
+
+ public static int instanceCounter = 0;
+
+ public static int initCalledCounter = 0;
+
+ public static int destroyCalledCounter = 0;
+
+ public int currentInstanceId = 0;
+
+ public String currentState = null;
+
+ public LServiceImpl() {
+ currentInstanceId = ++instanceCounter;
+ }
+
+ @Init
+ public void initLService() throws Exception {
+ initCalledCounter++;
+ System.out.println("LService" + currentInstanceId + "->initLService");
+ }
+
+ @Destroy
+ public void destroyLService() {
+ destroyCalledCounter++;
+ System.out.println("LService" + currentInstanceId + "->destroyLService");
+ }
+
+ public String getName() {
+ return "LService" + currentInstanceId;
+ }
+
+ public String getCurrentState() {
+ return currentState;
+ }
+
+ public String setCurrentState(String currentState) {
+ this.currentState = "LService" + currentInstanceId + "-" + currentState;
+ return this.currentState;
+ }
+
+ public int getDestroyCalledCounter() {
+ return destroyCalledCounter;
+ }
+
+ public int getInitCalledCounter() {
+ return initCalledCounter;
+ }
+
+ public int getInstanceCounter() {
+ return instanceCounter;
+ }
+
+}
diff --git a/sca-java-1.x/branches/sca-java-1.6.2/vtest/java-api/annotations/scope/src/main/java/org/apache/tuscany/sca/vtest/javaapi/annotations/scope/impl/MServiceImpl.java b/sca-java-1.x/branches/sca-java-1.6.2/vtest/java-api/annotations/scope/src/main/java/org/apache/tuscany/sca/vtest/javaapi/annotations/scope/impl/MServiceImpl.java
new file mode 100644
index 0000000000..681b0b3776
--- /dev/null
+++ b/sca-java-1.x/branches/sca-java-1.6.2/vtest/java-api/annotations/scope/src/main/java/org/apache/tuscany/sca/vtest/javaapi/annotations/scope/impl/MServiceImpl.java
@@ -0,0 +1,81 @@
+/*
+ * 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.annotations.scope.impl;
+
+import java.util.Timer;
+import java.util.TimerTask;
+
+import org.apache.tuscany.sca.vtest.javaapi.annotations.scope.MService;
+import org.apache.tuscany.sca.vtest.javaapi.annotations.scope.NService;
+import org.osoa.sca.annotations.Destroy;
+import org.osoa.sca.annotations.Init;
+import org.osoa.sca.annotations.Reference;
+import org.osoa.sca.annotations.Service;
+import org.osoa.sca.annotations.Scope;
+
+@Service(MService.class)
+@Scope("COMPOSITE")
+public class MServiceImpl implements MService {
+
+ @Reference
+ public NService n1;
+
+ public static String failedReason = "";
+
+ public static Timer aTimer = null;
+
+ public static int counter = 0;
+
+ @Init
+ public void initMService() throws Exception {
+ aTimer = new Timer();
+ aTimer.schedule(new MTimerTask(), 1000, 1000);
+ System.out.println("MService->initMService");
+ }
+
+ @Destroy
+ public void destroyMService() {
+ aTimer.cancel();
+ System.out.println("MService->destroyMService");
+ }
+
+ public String getName() {
+ return "MService";
+ }
+
+ public String getFailedReason() {
+ return failedReason;
+ }
+
+ private class MTimerTask extends TimerTask {
+
+ public boolean cancel() {
+ return true;
+ }
+
+ public void run() {
+ counter++;
+ String result = n1.callO1(counter);
+ if (!result.equals("None"))
+ failedReason = failedReason + ";" + result;
+ }
+
+ }
+}
diff --git a/sca-java-1.x/branches/sca-java-1.6.2/vtest/java-api/annotations/scope/src/main/java/org/apache/tuscany/sca/vtest/javaapi/annotations/scope/impl/NServiceImpl.java b/sca-java-1.x/branches/sca-java-1.6.2/vtest/java-api/annotations/scope/src/main/java/org/apache/tuscany/sca/vtest/javaapi/annotations/scope/impl/NServiceImpl.java
new file mode 100644
index 0000000000..98b94a33c7
--- /dev/null
+++ b/sca-java-1.x/branches/sca-java-1.6.2/vtest/java-api/annotations/scope/src/main/java/org/apache/tuscany/sca/vtest/javaapi/annotations/scope/impl/NServiceImpl.java
@@ -0,0 +1,85 @@
+/*
+ * 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.annotations.scope.impl;
+
+import org.apache.tuscany.sca.vtest.javaapi.annotations.scope.NService;
+import org.apache.tuscany.sca.vtest.javaapi.annotations.scope.OService;
+import org.osoa.sca.annotations.Reference;
+import org.osoa.sca.annotations.Service;
+import org.osoa.sca.annotations.Scope;
+
+@Service(NService.class)
+@Scope("STATELESS")
+public class NServiceImpl implements NService {
+
+ public static int instanceCounter = 0;
+
+ public String previousL1Name = null;
+
+ public int currentInstanceId = 0;
+
+ @Reference
+ public OService o1;
+
+ public NServiceImpl() {
+ currentInstanceId = ++instanceCounter;
+ }
+
+
+ public String getName() {
+ return "NService"+currentInstanceId;
+ }
+
+ public String callO1(int nthTime) {
+
+ for (int i = 1; i < 11; i++) {
+ System.out.println(getName() + " calls OService " + i + (i == 1 ? "st time:" : (i == 2 ? "nd time:" : (i == 3 ? "rd time:" : "th time"))));
+
+ String serviceName = o1.getName();
+ for (int j = 0; j < 10; j++) {
+ String newState = "state-" + j;
+ o1.setCurrentState(newState);
+ String currentState = o1.getCurrentState();
+ if (!currentState.equals(serviceName + "-" + newState)) {
+ return "CurrentStateLost - " + currentState;
+ }
+ }
+
+ System.out.print(" Name=" + serviceName);
+ System.out.print(", #Instance=" + o1.getInstanceCounter());
+ System.out.print(", #InitCalled=" + o1.getInitCalledCounter());
+ System.out.println(", #DestroyCalled=" + o1.getDestroyCalledCounter());
+
+ if (previousL1Name == null) {
+ previousL1Name = serviceName;
+ } else {
+ if (!previousL1Name.equals(serviceName))
+ return "DifferentOServiceInstance";
+ }
+
+ }
+
+ if (o1.getInstanceCounter() < nthTime) {
+ return "SharedSameInstance";
+ }
+
+ return "None";
+ }
+}
diff --git a/sca-java-1.x/branches/sca-java-1.6.2/vtest/java-api/annotations/scope/src/main/java/org/apache/tuscany/sca/vtest/javaapi/annotations/scope/impl/OServiceImpl.java b/sca-java-1.x/branches/sca-java-1.6.2/vtest/java-api/annotations/scope/src/main/java/org/apache/tuscany/sca/vtest/javaapi/annotations/scope/impl/OServiceImpl.java
new file mode 100644
index 0000000000..8cf39a072c
--- /dev/null
+++ b/sca-java-1.x/branches/sca-java-1.6.2/vtest/java-api/annotations/scope/src/main/java/org/apache/tuscany/sca/vtest/javaapi/annotations/scope/impl/OServiceImpl.java
@@ -0,0 +1,83 @@
+/*
+ * 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.annotations.scope.impl;
+
+import org.apache.tuscany.sca.vtest.javaapi.annotations.scope.OService;
+import org.osoa.sca.annotations.Destroy;
+import org.osoa.sca.annotations.Init;
+import org.osoa.sca.annotations.Service;
+import org.osoa.sca.annotations.Scope;
+
+@Service(OService.class)
+@Scope("REQUEST")
+public class OServiceImpl implements OService {
+
+ public static int instanceCounter = 0;
+
+ public static int initCalledCounter = 0;
+
+ public static int destroyCalledCounter = 0;
+
+ public int currentInstanceId = 0;
+
+ public String currentState = null;
+
+ public OServiceImpl() {
+ currentInstanceId = ++instanceCounter;
+ }
+
+ @Init
+ public void initOService() throws Exception {
+ initCalledCounter++;
+ System.out.println("OService" + currentInstanceId + "->initOService");
+ }
+
+ @Destroy
+ public void destroyOService() {
+ destroyCalledCounter++;
+ System.out.println("OService" + currentInstanceId + "->destroyOService");
+ }
+
+ public String getName() {
+ return "OService" + currentInstanceId;
+ }
+
+ public String getCurrentState() {
+ return currentState;
+ }
+
+ public String setCurrentState(String currentState) {
+ this.currentState = "OService" + currentInstanceId + "-" + currentState;
+ return this.currentState;
+ }
+
+ public int getDestroyCalledCounter() {
+ return destroyCalledCounter;
+ }
+
+ public int getInitCalledCounter() {
+ return initCalledCounter;
+ }
+
+ public int getInstanceCounter() {
+ return instanceCounter;
+ }
+
+}
diff --git a/sca-java-1.x/branches/sca-java-1.6.2/vtest/java-api/annotations/scope/src/main/resources/scope.composite b/sca-java-1.x/branches/sca-java-1.6.2/vtest/java-api/annotations/scope/src/main/resources/scope.composite
new file mode 100644
index 0000000000..7c195b2b5d
--- /dev/null
+++ b/sca-java-1.x/branches/sca-java-1.6.2/vtest/java-api/annotations/scope/src/main/resources/scope.composite
@@ -0,0 +1,110 @@
+<?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="Scope-Composite">
+
+ <component name="AComponent">
+ <implementation.java
+ class="org.apache.tuscany.sca.vtest.javaapi.annotations.scope.impl.AServiceImpl" />
+ </component>
+
+ <component name="BComponent">
+ <implementation.java
+ class="org.apache.tuscany.sca.vtest.javaapi.annotations.scope.impl.BServiceImpl" />
+ <reference name="a1" target="AComponent"/>
+ <property name="p1">p1</property>
+ </component>
+
+ <component name="CComponent">
+ <implementation.java
+ class="org.apache.tuscany.sca.vtest.javaapi.annotations.scope.impl.CServiceImpl" />
+ <reference name="a1" target="AComponent"/>
+ <property name="p1">p1</property>
+ </component>
+
+ <component name="DComponent">
+ <implementation.java
+ class="org.apache.tuscany.sca.vtest.javaapi.annotations.scope.impl.DServiceImpl" />
+ <reference name="a1" target="AComponent"/>
+ <property name="p1">p1</property>
+ </component>
+
+ <component name="FComponent">
+ <implementation.java
+ class="org.apache.tuscany.sca.vtest.javaapi.annotations.scope.impl.FServiceImpl" />
+ <reference name="a1" target="AComponent"/>
+ <property name="p1">p1</property>
+ </component>
+
+ <component name="GComponent">
+ <implementation.java
+ class="org.apache.tuscany.sca.vtest.javaapi.annotations.scope.impl.GServiceImpl" />
+ <reference name="a1" target="AComponent"/>
+ <property name="p1">p1</property>
+ </component>
+
+ <component name="HComponent">
+ <implementation.java
+ class="org.apache.tuscany.sca.vtest.javaapi.annotations.scope.impl.HServiceImpl" />
+ <reference name="i1" target="IComponent"/>
+ </component>
+
+ <component name="IComponent">
+ <implementation.java
+ class="org.apache.tuscany.sca.vtest.javaapi.annotations.scope.impl.IServiceImpl" />
+ <reference name="a1" target="AComponent"/>
+ <property name="p1">p1</property>
+ </component>
+
+ <component name="JComponent">
+ <implementation.java
+ class="org.apache.tuscany.sca.vtest.javaapi.annotations.scope.impl.JServiceImpl" />
+ <reference name="k1" target="KComponent"/>
+ </component>
+
+ <component name="KComponent">
+ <implementation.java
+ class="org.apache.tuscany.sca.vtest.javaapi.annotations.scope.impl.KServiceImpl" />
+ <reference name="l1" target="LComponent"/>
+ </component>
+
+ <component name="LComponent">
+ <implementation.java
+ class="org.apache.tuscany.sca.vtest.javaapi.annotations.scope.impl.LServiceImpl" />
+ </component>
+
+ <component name="MComponent">
+ <implementation.java
+ class="org.apache.tuscany.sca.vtest.javaapi.annotations.scope.impl.MServiceImpl" />
+ <reference name="n1" target="NComponent"/>
+ </component>
+
+ <component name="NComponent">
+ <implementation.java
+ class="org.apache.tuscany.sca.vtest.javaapi.annotations.scope.impl.NServiceImpl" />
+ <reference name="o1" target="OComponent"/>
+ </component>
+
+ <component name="OComponent">
+ <implementation.java
+ class="org.apache.tuscany.sca.vtest.javaapi.annotations.scope.impl.OServiceImpl" />
+ </component>
+
+</composite>
diff --git a/sca-java-1.x/branches/sca-java-1.6.2/vtest/java-api/annotations/scope/src/test/java/org/apache/tuscany/sca/vtest/javaapi/annotations/scope/ScopeAnnotationTestCase.java b/sca-java-1.x/branches/sca-java-1.6.2/vtest/java-api/annotations/scope/src/test/java/org/apache/tuscany/sca/vtest/javaapi/annotations/scope/ScopeAnnotationTestCase.java
new file mode 100644
index 0000000000..6d65416ce8
--- /dev/null
+++ b/sca-java-1.x/branches/sca-java-1.6.2/vtest/java-api/annotations/scope/src/test/java/org/apache/tuscany/sca/vtest/javaapi/annotations/scope/ScopeAnnotationTestCase.java
@@ -0,0 +1,476 @@
+/*
+ * 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.annotations.scope;
+
+import java.util.ArrayList;
+
+import junit.framework.Assert;
+
+import org.apache.tuscany.sca.vtest.utilities.ServiceFinder;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.junit.Ignore;
+import org.junit.Test;
+
+/**
+ * This test class tests the Scope annotation described in section 1.2.4
+ * including 1.8.7, 1.8.8, 1.8.9, 1.8.10, 1.8.11, and 1.8.16<br>
+ * <p>
+ * Check following:<br>
+ * <li>Number of service instances be created</li>
+ * <li>Init method be called and where all property and reference injection is
+ * complete.</li>
+ * <li>Destroy method be called</li>
+ * <li>State be preserved in request and conversation scopes but not others</li>
+ */
+public class ScopeAnnotationTestCase {
+
+ protected static String compositeName = "scope.composite";
+
+ protected static int numDThread = 5;
+ protected static int numFThread = 5;
+ protected static int numHThread = 5;
+
+ @BeforeClass
+ public static void init() throws Exception {
+ try {
+ System.out.println("Setting up");
+ ServiceFinder.init(compositeName);
+ } catch (Exception ex) {
+ ex.printStackTrace();
+ }
+ }
+
+ @AfterClass
+ public static void destroy() throws Exception {
+
+ System.out.println("Cleaning up");
+ ServiceFinder.cleanup();
+ }
+
+ /**
+ * Line 259:<br>
+ * <li>STATELESS</li>
+ * <p>
+ * Line 284:<br>
+ * For stateless components, there is no implied correlation between
+ * service requests.<br>
+ * <p>
+ * Line 1589 to 1591:<br>
+ * The default value is 'STATELESS'. For 'STATELESS' implementations,
+ * a different implementation instance may be used to service each request.
+ * Implementation instances may be newly created or be drawn from a pool
+ * of instances.<br>
+ * <p>
+ * BComponent is not defined '@Scope'<br>
+ * CComponent is defined '@Scope("STATELESS")'<br>
+ * <p>
+ */
+ @Test
+ public void atScope1() throws Exception {
+ System.out.println("atScope1");
+ BThread b1 = new BThread("ThreadB1");
+ BThread b2 = new BThread("ThreadB2");
+ CThread c1 = new CThread("ThreadC1");
+ CThread c2 = new CThread("ThreadC2");
+
+ b1.start();
+ b2.start();
+ c1.start();
+ c2.start();
+ b1.join();
+ b2.join();
+ c1.join();
+ c2.join();
+
+ System.out.println("");
+
+ Assert.assertEquals("None", b1.failedReason);
+ Assert.assertEquals("None", b2.failedReason);
+ Assert.assertEquals("None", c1.failedReason);
+ Assert.assertEquals("None", c2.failedReason);
+ }
+
+ /**
+ * Line 260:<br>
+ * <li>REQUEST</li>
+ * <p>
+ * Lines 286 to 289:<br>
+ * The lifecycle of request scope extends from the point a request on a
+ * remotable interface enters the SCA runtime and a thread processes that
+ * request until the thread completes synchronously processing the request.
+ * During that time, all service requests will be delegated to the same
+ * implementation instance of a request-scoped component.<br>
+ * <p>
+ */
+ @Test
+ public void atScope2() throws Exception {
+ System.out.println("atScope2");
+ ArrayList<DThread> d = new ArrayList<DThread>();
+ for (int i = 0; i < numDThread; i++)
+ d.add(new DThread("ThreadD"+i));
+ for (int i = 0; i < numDThread; i++)
+ d.get(i).start();
+ for (int i = 0; i < numDThread; i++)
+ d.get(i).join();
+ System.out.println("");
+ for (int i = 0; i < numDThread; i++)
+ Assert.assertEquals("None", d.get(i).failedReason);
+ }
+
+ /**
+ * Line 262:<br>
+ * <li>COMPOSITE</li>
+ * <p>
+ * Lines 296 to 298:<br>
+ * All service requests are dispatched to the same implementation instance
+ * for the lifetime of the containing composite. The lifetime of the
+ * containing composite is defined as the time it becomes active in the
+ * runtime to the time it is deactivated, either normally or abnormally.<br>
+ * <p>
+ * Following lines should be found at System out<br>
+ * atScope3 - Cleaning up<br>
+ * FService1->destroyFService
+ */
+ @Test
+ public void atScope3() throws Exception {
+ System.out.println("atScope3");
+ FService fService = ServiceFinder.getService(FService.class, "FComponent");
+ String serviceName = fService.getName();
+ boolean isInitReady = fService.isInitReady();
+
+ ArrayList<FThread> f = new ArrayList<FThread>();
+ for (int i = 0; i < numFThread; i++)
+ f.add(new FThread("ThreadF"+i));
+ for (int i = 0; i < numFThread; i++)
+ f.get(i).start();
+ for (int i = 0; i < numFThread; i++)
+ f.get(i).join();
+ for (int i = 0; i < numFThread; i++) {
+ Assert.assertEquals(serviceName, f.get(i).serviceName);
+ }
+
+ int instanceCounter = fService.getInstanceCounter();
+ int initCalledCounter = fService.getInitCalledCounter();
+ int destroyCalledCounter = fService.getDestroyCalledCounter();
+ System.out.println("");
+
+ Assert.assertTrue(isInitReady);
+ Assert.assertEquals(1, instanceCounter);
+ Assert.assertEquals(1, initCalledCounter);
+ Assert.assertEquals(0, destroyCalledCounter);
+ }
+
+ /**
+ * Lines 299 to 302:<br>
+ * A composite scoped implementation may also specify eager initialization
+ * using the "@EagerInit" annotation. When marked for eager initialization,
+ * the composite scoped instance will be created when its containing
+ * component is started. If a method is marked with the "@Init" annotation,
+ * it will be called when the instance is created.<p>
+ * Section 1.8.9 "@EagerInit"<br>
+ * <p>
+ * GService is defined as eager initialization. It will be initialized
+ * when calls SCADomain.newInstance(compositeName), so the
+ * initCalledCounter is 1.
+ */
+ @Test
+ public void atScope4() throws Exception {
+ System.out.println("atScope4");
+
+ GService gService = ServiceFinder.getService(GService.class, "GComponent");
+ int initCalledCounter = gService.getInitCalledCounter();
+ int destroyCalledCounter = gService.getDestroyCalledCounter();
+
+ System.out.println("initCalledCounter="+ initCalledCounter);
+ System.out.println("destroyCalledCounter="+ destroyCalledCounter);
+ System.out.println("");
+
+ Assert.assertEquals(1, initCalledCounter);
+ Assert.assertEquals(0, destroyCalledCounter);
+ }
+
+ /**
+ * Line 261:<br>
+ * <li>CONVERSATION</li>
+ * <p>
+ * Lines 305 to 310:<br>
+ * A conversation is defined as a series of correlated interactions between
+ * a client and a target service. A conversational scope starts when the
+ * first service request is dispatched to an implementation instance
+ * offering a conversational service. A conversational scope completes
+ * after an end operation defined by the service contract is called and
+ * completes processing or the conversation expires. A conversation may be
+ * long-running and the SCA runtime may choose to passivate implementation
+ * instances. If this occurs, the runtime must guarantee implementation
+ * instance state is preserved.
+ */
+ @Test
+ public void atScope5() throws Exception {
+ System.out.println("atScope5");
+
+ ArrayList<HThread> g = new ArrayList<HThread>();
+ for (int i = 0; i < numHThread; i++)
+ g.add(new HThread("ThreadH"+i));
+ for (int i = 0; i < numHThread; i++)
+ g.get(i).start();
+ for (int i = 0; i < numHThread; i++)
+ g.get(i).join();
+
+ HService hService = ServiceFinder.getService(HService.class, "HComponent");
+ String failedReason = hService.testCounters(numHThread);
+ System.out.println("");
+
+ for (int i = 0; i < numHThread; i++)
+ Assert.assertEquals("None", g.get(i).failedReason);
+ Assert.assertEquals("None", failedReason);
+ }
+
+ /** Lines 290 to 293:<br>
+ * There are times when a local request scoped service is called without
+ * there being a remotable service earlier in the call stack, such as when
+ * a local service is called from a non-SCA entity. In these cases, a
+ * remote request is always considered to be present, but the lifetime of
+ * the request is implementation dependent. For example, a timer event
+ * could be treated as a remote request..<br>
+ * <p>
+ * When the composite runs, composite scope service JService kicks off a
+ * timer by the @Init method. When the timer expires, JService invokes a
+ * method that calls an operation on the reference to a stateless scope
+ * sevice KService. KService calls a request scope service LService
+ * multiple times. The results of the calls to LService should be set up to
+ * differ depending on whether the same instance is called each time -
+ * without the interface being declared Conversational.<br>
+ * <p>
+ */
+ @Test
+ public void atScope6() throws Exception {
+ System.out.println("atScope6");
+
+ JService jService = ServiceFinder.getService(JService.class, "JComponent");
+ jService.getName();
+ Thread.sleep(2000);
+ String failedReason = jService.getFailedReason();
+ System.out.println("");
+
+ Assert.assertEquals("", failedReason);
+ }
+
+ /**
+ * Same as atScope6 but the timer triggers KService multiple times.<br>
+ */
+ @Test
+ @Ignore("TUSCANY-2256")
+ public void atScope7() throws Exception {
+ System.out.println("atScope7");
+
+ MService mService = ServiceFinder.getService(MService.class, "MComponent");
+ mService.getName();
+ Thread.sleep(6000);
+ String failedReason = mService.getFailedReason();
+ System.out.println("");
+
+ Assert.assertEquals("", failedReason);
+ }
+
+ private class BThread extends Thread {
+ private String name = null;
+ public String failedReason = "Unknown";
+
+ public BThread(String name) {
+ super();
+ this.name = name;
+ failedReason = "Unknown";
+ }
+
+ @Override
+ public void run() {
+ BService bService = ServiceFinder.getService(BService.class, "BComponent");
+ bService.setCurrentState(name + "-state-1");
+ System.out.println(name + "->" + bService.getName());
+ if (!bService.isInitReady()) {
+ failedReason = "InitNotReady";
+ return;
+ }
+ if (bService.getCurrentState() != null) {
+ failedReason = "CurrentStateNotNull";
+ return;
+ }
+ int counter = bService.getInstanceCounter();
+ if (counter < 2) {
+ failedReason = "OnlyOneInstance - " + counter;
+ return;
+ }
+ counter = bService.getInitCalledCounter();
+ if (counter < 2) {
+ failedReason = "InitBeCalledOnce - " + counter;
+ return;
+ }
+ counter = bService.getDestroyCalledCounter();
+ if (counter < 2) {
+ failedReason = "DestroyBeCalledOnce - " + counter;
+ return;
+ }
+ failedReason = "None";
+ }
+ }
+
+ private class CThread extends Thread {
+ private String name = null;
+ public String failedReason = "Unknown";
+
+ public CThread(String name) {
+ super();
+ this.name = name;
+ failedReason = "Unknown";
+ }
+
+ @Override
+ public void run() {
+ CService cService = ServiceFinder.getService(CService.class, "CComponent");
+ cService.setCurrentState(name + "-state-1");
+ System.out.println(name + "->" + cService.getName());
+ if (!cService.isInitReady()) {
+ failedReason = "InitNotReady";
+ return;
+ }
+ if (cService.getCurrentState() != null) {
+ failedReason = "CurrentStateNotNull";
+ return;
+ }
+ int counter = cService.getInstanceCounter();
+ if (counter < 2) {
+ failedReason = "OnlyOneInstance - " + counter;
+ return;
+ }
+ counter = cService.getInitCalledCounter();
+ if (counter < 2) {
+ failedReason = "InitBeCalledOnce - " + counter;
+ return;
+ }
+ counter = cService.getDestroyCalledCounter();
+ if (counter < 2) {
+ failedReason = "DestroyBeCalledOnce - " + counter;
+ return;
+ }
+ failedReason = "None";
+ }
+ }
+
+ private class DThread extends Thread {
+
+ private String name = null;
+ public String failedReason = "Unknown";
+
+ public DThread(String name) {
+ super();
+ this.name = name;
+ failedReason = "Unknown";
+ }
+
+ @Override
+ public void run() {
+ DService dService = ServiceFinder.getService(DService.class, "DComponent");
+ String serviceName = dService.getName();
+ System.out.println(name + "->" + serviceName);
+
+ for (int i = 0; i < 10; i++) {
+ String newState = name + "-state-" + i;
+ dService.setCurrentState(newState);
+ String currentState = dService.getCurrentState();
+ if (!currentState.equals(serviceName + "-" + newState)) {
+ failedReason = "CurrentStateLost - " + currentState;
+ return;
+ }
+ }
+
+ if (!dService.isInitReady()) {
+ failedReason = "InitNotReady";
+ return;
+ }
+
+ int counter = dService.getInstanceCounter();
+ if (counter > numDThread) {
+ failedReason = "TooMuchInstance - " + counter;
+ return;
+ }
+
+ counter = dService.getInitCalledCounter();
+ if (counter > numDThread) {
+ failedReason = "InitBeCalledTooMuch - " + counter;
+ return;
+ }
+
+ // JIRA T-2215
+ /* Don't know when destroy method be called
+ counter = dService.getDestroyCalledCounter();
+ if (counter > numDThreads) {
+ failedReason = "DestroyBeCalledTooMuch - " + counter;
+ return;
+ }
+ */
+ failedReason = "None";
+ }
+ }
+
+ private class FThread extends Thread {
+
+ private String name = null;
+
+ public String serviceName = null;
+
+ public FThread(String name) {
+ super();
+ this.name = name;
+ }
+
+ @Override
+ public void run() {
+ FService fService = ServiceFinder.getService(FService.class, "FComponent");
+ serviceName = fService.getName();
+ System.out.println(name + "->" + serviceName);
+
+ for (int i = 0; i < 10; i++) {
+ String newState = name + "-state-" + i;
+ fService.setCurrentState(newState);
+ fService.getCurrentState();
+ }
+ }
+ }
+
+ private class HThread extends Thread {
+
+ public String failedReason = "Unknown";
+
+ public HThread(String name) {
+ super();
+ failedReason = "Unknown";
+ }
+
+ @Override
+ public void run() {
+ HService hService = ServiceFinder.getService(HService.class, "HComponent");
+ failedReason = hService.test();
+ }
+ }
+
+}
+
+