diff options
Diffstat (limited to 'java/sca-contrib/vtest/java-api/conversation/callback')
57 files changed, 2972 insertions, 0 deletions
diff --git a/java/sca-contrib/vtest/java-api/conversation/callback/pom.xml b/java/sca-contrib/vtest/java-api/conversation/callback/pom.xml new file mode 100644 index 0000000000..656ee9c3cd --- /dev/null +++ b/java/sca-contrib/vtest/java-api/conversation/callback/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>2.0-SNAPSHOT</version> + <relativePath>../pom.xml</relativePath> + </parent> + <artifactId>vtest-java-api-conversation-callback</artifactId> + <name>Apache Tuscany SCA Java APIs and Annotations Verification Tests - Conversation - Callback</name> + + <dependencies> + <dependency> + <groupId>org.apache.tuscany.sca</groupId> + <artifactId>tuscany-host-embedded</artifactId> + <version>2.0-SNAPSHOT</version> + </dependency> + + <dependency> + <groupId>org.apache.tuscany.sca</groupId> + <artifactId>tuscany-implementation-java-runtime</artifactId> + <version>2.0-SNAPSHOT</version> + <scope>runtime</scope> + </dependency> + + </dependencies> +</project> diff --git a/java/sca-contrib/vtest/java-api/conversation/callback/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/callback/AService.java b/java/sca-contrib/vtest/java-api/conversation/callback/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/callback/AService.java new file mode 100644 index 0000000000..e78736d4df --- /dev/null +++ b/java/sca-contrib/vtest/java-api/conversation/callback/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/callback/AService.java @@ -0,0 +1,30 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.tuscany.sca.vtest.javaapi.conversation.callback; + +/** + * Simple Service + */ +public interface AService { + + public void testCallback(); + + public void testCallback2(); + +} diff --git a/java/sca-contrib/vtest/java-api/conversation/callback/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/callback/AServiceCallback.java b/java/sca-contrib/vtest/java-api/conversation/callback/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/callback/AServiceCallback.java new file mode 100644 index 0000000000..f4271d0d92 --- /dev/null +++ b/java/sca-contrib/vtest/java-api/conversation/callback/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/callback/AServiceCallback.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.conversation.callback; + +import org.oasisopen.sca.annotation.Conversational; +import org.oasisopen.sca.annotation.Remotable; + +/** + * Simple Remotable Service + */ +@Remotable +@Conversational +public interface AServiceCallback { + + public void callBack(String someState); + +} diff --git a/java/sca-contrib/vtest/java-api/conversation/callback/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/callback/BService.java b/java/sca-contrib/vtest/java-api/conversation/callback/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/callback/BService.java new file mode 100644 index 0000000000..d7ecbb7427 --- /dev/null +++ b/java/sca-contrib/vtest/java-api/conversation/callback/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/callback/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.conversation.callback; + +import org.apache.tuscany.sca.vtest.javaapi.conversation.callback.AServiceCallback; +import org.oasisopen.sca.annotation.Callback; +import org.oasisopen.sca.annotation.Conversational; +import org.oasisopen.sca.annotation.Remotable; + +/** + * Simple Service + */ +@Remotable +@Conversational +@Callback(AServiceCallback.class) +public interface BService { + + public void setState(String someState); + + public String getState(); + + public void testCallBack(String string); + +} diff --git a/java/sca-contrib/vtest/java-api/conversation/callback/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/callback/BServiceCallback.java b/java/sca-contrib/vtest/java-api/conversation/callback/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/callback/BServiceCallback.java new file mode 100644 index 0000000000..be7ea97eac --- /dev/null +++ b/java/sca-contrib/vtest/java-api/conversation/callback/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/callback/BServiceCallback.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.conversation.callback; + +import org.oasisopen.sca.annotation.Conversational; +import org.oasisopen.sca.annotation.Remotable; + +/** + * Simple Remotable Service + */ +@Remotable +@Conversational +public interface BServiceCallback { + + public void callBack(String someState); + +} diff --git a/java/sca-contrib/vtest/java-api/conversation/callback/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/callback/CService.java b/java/sca-contrib/vtest/java-api/conversation/callback/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/callback/CService.java new file mode 100644 index 0000000000..19a8b86f28 --- /dev/null +++ b/java/sca-contrib/vtest/java-api/conversation/callback/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/callback/CService.java @@ -0,0 +1,39 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.tuscany.sca.vtest.javaapi.conversation.callback; + +import org.oasisopen.sca.annotation.Callback; +import org.oasisopen.sca.annotation.Conversational; +import org.oasisopen.sca.annotation.Remotable; + +/** + * Simple Service + */ +@Remotable +@Conversational +@Callback(BServiceCallback.class) +public interface CService { + + public void setState(String someState); + + public String getState(); + + public void testCallBack(String string); + +} diff --git a/java/sca-contrib/vtest/java-api/conversation/callback/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/callback/Utilities.java b/java/sca-contrib/vtest/java-api/conversation/callback/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/callback/Utilities.java new file mode 100644 index 0000000000..15672f9ee0 --- /dev/null +++ b/java/sca-contrib/vtest/java-api/conversation/callback/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/callback/Utilities.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.conversation.callback; + +public class Utilities { + + public static void delayQuarterSecond() { + try { + Thread.sleep(250);// millisecs + } catch (InterruptedException ex) { + throw new Error(ex); + } + } + +} diff --git a/java/sca-contrib/vtest/java-api/conversation/callback/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/callback/accessing/AServiceCallback.java b/java/sca-contrib/vtest/java-api/conversation/callback/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/callback/accessing/AServiceCallback.java new file mode 100644 index 0000000000..31479f1848 --- /dev/null +++ b/java/sca-contrib/vtest/java-api/conversation/callback/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/callback/accessing/AServiceCallback.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.conversation.callback.accessing; + +import org.oasisopen.sca.annotation.Conversational; +import org.oasisopen.sca.annotation.Remotable; + +/** + * Simple Remotable Service + */ +@Remotable +@Conversational +public interface AServiceCallback { + + public void callBack(String someState); + +} diff --git a/java/sca-contrib/vtest/java-api/conversation/callback/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/callback/accessing/BService.java b/java/sca-contrib/vtest/java-api/conversation/callback/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/callback/accessing/BService.java new file mode 100644 index 0000000000..b6359f348b --- /dev/null +++ b/java/sca-contrib/vtest/java-api/conversation/callback/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/callback/accessing/BService.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.conversation.callback.accessing; + +import org.oasisopen.sca.annotation.Callback; +import org.oasisopen.sca.annotation.Conversational; +import org.oasisopen.sca.annotation.Remotable; + +/** + * Simple Service + */ +@Remotable +@Conversational +@Callback(AServiceCallback.class) +public interface BService { + + public void setState(String someState); + + public String getState(); + + public void testCallBack(String string); + + public void testCallBack2(String string); + +} diff --git a/java/sca-contrib/vtest/java-api/conversation/callback/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/callback/accessing/impl/AServiceImpl.java b/java/sca-contrib/vtest/java-api/conversation/callback/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/callback/accessing/impl/AServiceImpl.java new file mode 100644 index 0000000000..9e8b64e3b9 --- /dev/null +++ b/java/sca-contrib/vtest/java-api/conversation/callback/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/callback/accessing/impl/AServiceImpl.java @@ -0,0 +1,67 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.tuscany.sca.vtest.javaapi.conversation.callback.accessing.impl; + +import org.apache.tuscany.sca.vtest.javaapi.conversation.callback.AService; +import org.apache.tuscany.sca.vtest.javaapi.conversation.callback.Utilities; +import org.apache.tuscany.sca.vtest.javaapi.conversation.callback.accessing.AServiceCallback; +import org.apache.tuscany.sca.vtest.javaapi.conversation.callback.accessing.BService; +import org.junit.Assert; +import org.oasisopen.sca.ServiceReference; +import org.oasisopen.sca.annotation.Reference; +import org.oasisopen.sca.annotation.Scope; +import org.oasisopen.sca.annotation.Service; + +@Service(AService.class) +@Scope("CONVERSATION") +public class AServiceImpl implements AService, AServiceCallback { + + @Reference + protected ServiceReference<BService> b; + + private String someState; + + public void callBack(String someState) { + System.out.println("A-callback called with this state => " + someState); + this.someState = someState; + } + + public void testCallback() { + b.getService().testCallBack("Some string"); + int count = 4; + while (someState == null && count > 0) { + Utilities.delayQuarterSecond(); + count--; + } + if (someState == null) + Assert.fail("Callback not received by this instance"); + } + + public void testCallback2() { + b.getService().testCallBack2("Some string"); + int count = 4; + while (someState == null && count > 0) { + Utilities.delayQuarterSecond(); + count--; + } + if (someState == null) + Assert.fail("Callback not received by this instance"); + } +} diff --git a/java/sca-contrib/vtest/java-api/conversation/callback/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/callback/accessing/impl/BServiceImpl.java b/java/sca-contrib/vtest/java-api/conversation/callback/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/callback/accessing/impl/BServiceImpl.java new file mode 100644 index 0000000000..acf262512e --- /dev/null +++ b/java/sca-contrib/vtest/java-api/conversation/callback/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/callback/accessing/impl/BServiceImpl.java @@ -0,0 +1,60 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.tuscany.sca.vtest.javaapi.conversation.callback.accessing.impl; + +import org.apache.tuscany.sca.vtest.javaapi.conversation.callback.accessing.AServiceCallback; +import org.apache.tuscany.sca.vtest.javaapi.conversation.callback.accessing.BService; +import org.oasisopen.sca.CallableReference; +import org.oasisopen.sca.ComponentContext; +import org.oasisopen.sca.annotation.Callback; +import org.oasisopen.sca.annotation.Context; +import org.oasisopen.sca.annotation.Scope; +import org.oasisopen.sca.annotation.Service; + +@Service(BService.class) +@Scope("CONVERSATION") +public class BServiceImpl implements BService { + + String someState; + + @Callback + protected CallableReference<AServiceCallback> callback; + + @Context + protected ComponentContext componentContext; + + public void setState(String someState) { + this.someState = someState; + } + + public String getState() { + return someState; + } + + public void testCallBack(String someState) { + callback.getService().callBack(someState); + } + + public void testCallBack2(String someState) { + AServiceCallback callback = componentContext.getRequestContext().getCallback(); + callback.callBack(someState); + } + +} diff --git a/java/sca-contrib/vtest/java-api/conversation/callback/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/callback/custom/AServiceCallback.java b/java/sca-contrib/vtest/java-api/conversation/callback/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/callback/custom/AServiceCallback.java new file mode 100644 index 0000000000..b1439770da --- /dev/null +++ b/java/sca-contrib/vtest/java-api/conversation/callback/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/callback/custom/AServiceCallback.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.conversation.callback.custom; + +import org.oasisopen.sca.annotation.Conversational; +import org.oasisopen.sca.annotation.Remotable; + +/** + * Simple Remotable Service + */ +@Remotable +@Conversational +public interface AServiceCallback { + + public void callBack(String someState); + +} diff --git a/java/sca-contrib/vtest/java-api/conversation/callback/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/callback/custom/BService.java b/java/sca-contrib/vtest/java-api/conversation/callback/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/callback/custom/BService.java new file mode 100644 index 0000000000..dae4152333 --- /dev/null +++ b/java/sca-contrib/vtest/java-api/conversation/callback/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/callback/custom/BService.java @@ -0,0 +1,38 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.tuscany.sca.vtest.javaapi.conversation.callback.custom; + +import org.oasisopen.sca.annotation.Callback; +import org.oasisopen.sca.annotation.Conversational; +import org.oasisopen.sca.annotation.Remotable; + +/** + * Simple Service + */ +@Remotable +@Conversational +@Callback(AServiceCallback.class) +public interface BService { + + public void setState(String someState); + + public String getState(); + + public void testCallBack(String string); +} diff --git a/java/sca-contrib/vtest/java-api/conversation/callback/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/callback/custom/CustomCallback.java b/java/sca-contrib/vtest/java-api/conversation/callback/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/callback/custom/CustomCallback.java new file mode 100644 index 0000000000..d1a30fd305 --- /dev/null +++ b/java/sca-contrib/vtest/java-api/conversation/callback/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/callback/custom/CustomCallback.java @@ -0,0 +1,35 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.tuscany.sca.vtest.javaapi.conversation.callback.custom; + +import org.oasisopen.sca.annotation.Conversational; +import org.oasisopen.sca.annotation.Remotable; + +/** + * Simple Service + */ +@Remotable +@Conversational +public interface CustomCallback { + + public void someMethod(); + + public void callBack(String someState); + +} diff --git a/java/sca-contrib/vtest/java-api/conversation/callback/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/callback/custom/impl/AServiceImpl.java b/java/sca-contrib/vtest/java-api/conversation/callback/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/callback/custom/impl/AServiceImpl.java new file mode 100644 index 0000000000..7732b3865f --- /dev/null +++ b/java/sca-contrib/vtest/java-api/conversation/callback/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/callback/custom/impl/AServiceImpl.java @@ -0,0 +1,61 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.tuscany.sca.vtest.javaapi.conversation.callback.custom.impl; + +import org.apache.tuscany.sca.vtest.javaapi.conversation.callback.AService; +import org.apache.tuscany.sca.vtest.javaapi.conversation.callback.Utilities; +import org.apache.tuscany.sca.vtest.javaapi.conversation.callback.custom.BService; +import org.apache.tuscany.sca.vtest.javaapi.conversation.callback.custom.CustomCallback; +import org.junit.Assert; +import org.oasisopen.sca.ServiceReference; +import org.oasisopen.sca.annotation.Reference; +import org.oasisopen.sca.annotation.Scope; +import org.oasisopen.sca.annotation.Service; + +@Service(AService.class) +@Scope("CONVERSATION") +public class AServiceImpl implements AService { + + @Reference + protected ServiceReference<BService> b; + + @Reference + protected CustomCallback customCallback; + + protected static String someState; + + public void testCallback() { + b.setCallback(customCallback); + b.getService().testCallBack("Some string"); + int count = 4; + while (someState == null && count > 0) { + Utilities.delayQuarterSecond(); + count--; + } + if (someState == null) + Assert.fail("Callback not received by this instance"); + } + + public void testCallback2() { + Assert.fail("Should never get here"); + + } + +} diff --git a/java/sca-contrib/vtest/java-api/conversation/callback/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/callback/custom/impl/BServiceImpl.java b/java/sca-contrib/vtest/java-api/conversation/callback/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/callback/custom/impl/BServiceImpl.java new file mode 100644 index 0000000000..9bda00413b --- /dev/null +++ b/java/sca-contrib/vtest/java-api/conversation/callback/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/callback/custom/impl/BServiceImpl.java @@ -0,0 +1,49 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.tuscany.sca.vtest.javaapi.conversation.callback.custom.impl; + +import org.apache.tuscany.sca.vtest.javaapi.conversation.callback.custom.AServiceCallback; +import org.apache.tuscany.sca.vtest.javaapi.conversation.callback.custom.BService; +import org.oasisopen.sca.annotation.Callback; +import org.oasisopen.sca.annotation.Scope; +import org.oasisopen.sca.annotation.Service; + +@Service(BService.class) +@Scope("CONVERSATION") +public class BServiceImpl implements BService { + + String someState; + + @Callback + protected AServiceCallback callback; + + public void setState(String someState) { + this.someState = someState; + } + + public String getState() { + return someState; + } + + public void testCallBack(String someState) { + callback.callBack(someState); + } + +} diff --git a/java/sca-contrib/vtest/java-api/conversation/callback/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/callback/custom/impl/CustomCallbackImpl.java b/java/sca-contrib/vtest/java-api/conversation/callback/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/callback/custom/impl/CustomCallbackImpl.java new file mode 100644 index 0000000000..1bbc1fa4eb --- /dev/null +++ b/java/sca-contrib/vtest/java-api/conversation/callback/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/callback/custom/impl/CustomCallbackImpl.java @@ -0,0 +1,38 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.tuscany.sca.vtest.javaapi.conversation.callback.custom.impl; + +import org.apache.tuscany.sca.vtest.javaapi.conversation.callback.custom.AServiceCallback; +import org.apache.tuscany.sca.vtest.javaapi.conversation.callback.custom.CustomCallback; +import org.oasisopen.sca.annotation.Scope; + +@Scope("CONVERSATION") +public class CustomCallbackImpl implements CustomCallback, AServiceCallback { + + public void someMethod() { + System.out.println("Custom-callback some method called"); + } + + public void callBack(String someState) { + System.out.println("Custom-callback called with this state => " + someState); + AServiceImpl.someState = someState; + } + +} diff --git a/java/sca-contrib/vtest/java-api/conversation/callback/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/callback/id/AServiceCallback.java b/java/sca-contrib/vtest/java-api/conversation/callback/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/callback/id/AServiceCallback.java new file mode 100644 index 0000000000..6a66e73569 --- /dev/null +++ b/java/sca-contrib/vtest/java-api/conversation/callback/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/callback/id/AServiceCallback.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.conversation.callback.id; + +import org.oasisopen.sca.annotation.Conversational; +import org.oasisopen.sca.annotation.Remotable; + +/** + * Simple Remotable Service + */ +@Remotable +@Conversational +public interface AServiceCallback { + + public void callBack(String someState); + +} diff --git a/java/sca-contrib/vtest/java-api/conversation/callback/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/callback/id/BService.java b/java/sca-contrib/vtest/java-api/conversation/callback/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/callback/id/BService.java new file mode 100644 index 0000000000..24dbad3d4a --- /dev/null +++ b/java/sca-contrib/vtest/java-api/conversation/callback/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/callback/id/BService.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.conversation.callback.id; + +import org.oasisopen.sca.annotation.Callback; +import org.oasisopen.sca.annotation.Conversational; +import org.oasisopen.sca.annotation.Remotable; + +/** + * Simple Service + */ +@Remotable +@Conversational +@Callback(AServiceCallback.class) +public interface BService { + + public void setState(String someState); + + public String getState(); + + public void testCallBack(String string); + + public void testCallBack2(String string); + +} diff --git a/java/sca-contrib/vtest/java-api/conversation/callback/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/callback/id/impl/AServiceImpl.java b/java/sca-contrib/vtest/java-api/conversation/callback/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/callback/id/impl/AServiceImpl.java new file mode 100644 index 0000000000..b9785fa657 --- /dev/null +++ b/java/sca-contrib/vtest/java-api/conversation/callback/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/callback/id/impl/AServiceImpl.java @@ -0,0 +1,73 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.tuscany.sca.vtest.javaapi.conversation.callback.id.impl; + +import org.apache.tuscany.sca.vtest.javaapi.conversation.callback.AService; +import org.apache.tuscany.sca.vtest.javaapi.conversation.callback.Utilities; +import org.apache.tuscany.sca.vtest.javaapi.conversation.callback.id.AServiceCallback; +import org.apache.tuscany.sca.vtest.javaapi.conversation.callback.id.BService; +import org.junit.Assert; +import org.oasisopen.sca.RequestContext; +import org.oasisopen.sca.ServiceReference; +import org.oasisopen.sca.annotation.Context; +import org.oasisopen.sca.annotation.Reference; +import org.oasisopen.sca.annotation.Scope; +import org.oasisopen.sca.annotation.Service; + +@Service(AService.class) +@Scope("CONVERSATION") +public class AServiceImpl implements AService, AServiceCallback { + + @Reference + protected ServiceReference<BService> b; + + @Context + protected RequestContext requestContext; + + private String someState; + + public void callBack(String someState) { + System.out.println("A-callback called with this state => " + someState); + Assert.assertNotNull(requestContext.getServiceReference().getCallbackID()); + this.someState = someState; + } + + public void testCallback() { + b.getService().testCallBack("Some string"); + int count = 4; + while (someState == null && count > 0) { + Utilities.delayQuarterSecond(); + count--; + } + if (someState == null) + Assert.fail("Callback not received by this instance"); + } + + public void testCallback2() { + b.getService().testCallBack2("Some string"); + int count = 4; + while (someState == null && count > 0) { + Utilities.delayQuarterSecond(); + count--; + } + if (someState == null) + Assert.fail("Callback not received by this instance"); + } +} diff --git a/java/sca-contrib/vtest/java-api/conversation/callback/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/callback/id/impl/BServiceImpl.java b/java/sca-contrib/vtest/java-api/conversation/callback/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/callback/id/impl/BServiceImpl.java new file mode 100644 index 0000000000..dc546a81a0 --- /dev/null +++ b/java/sca-contrib/vtest/java-api/conversation/callback/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/callback/id/impl/BServiceImpl.java @@ -0,0 +1,60 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.tuscany.sca.vtest.javaapi.conversation.callback.id.impl; + +import org.apache.tuscany.sca.vtest.javaapi.conversation.callback.id.AServiceCallback; +import org.apache.tuscany.sca.vtest.javaapi.conversation.callback.id.BService; +import org.oasisopen.sca.CallableReference; +import org.oasisopen.sca.ComponentContext; +import org.oasisopen.sca.annotation.Callback; +import org.oasisopen.sca.annotation.Context; +import org.oasisopen.sca.annotation.Scope; +import org.oasisopen.sca.annotation.Service; + +@Service(BService.class) +@Scope("CONVERSATION") +public class BServiceImpl implements BService { + + String someState; + + @Callback + protected CallableReference<AServiceCallback> callback; + + @Context + protected ComponentContext componentContext; + + public void setState(String someState) { + this.someState = someState; + } + + public String getState() { + return someState; + } + + public void testCallBack(String someState) { + callback.getService().callBack(someState); + } + + public void testCallBack2(String someState) { + AServiceCallback callback = componentContext.getRequestContext().getCallback(); + callback.callBack(someState); + } + +} diff --git a/java/sca-contrib/vtest/java-api/conversation/callback/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/callback/impl/AServiceImpl.java b/java/sca-contrib/vtest/java-api/conversation/callback/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/callback/impl/AServiceImpl.java new file mode 100644 index 0000000000..01260c67f1 --- /dev/null +++ b/java/sca-contrib/vtest/java-api/conversation/callback/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/callback/impl/AServiceImpl.java @@ -0,0 +1,61 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.tuscany.sca.vtest.javaapi.conversation.callback.impl; + +import org.apache.tuscany.sca.vtest.javaapi.conversation.callback.AService; +import org.apache.tuscany.sca.vtest.javaapi.conversation.callback.AServiceCallback; +import org.apache.tuscany.sca.vtest.javaapi.conversation.callback.BService; +import org.apache.tuscany.sca.vtest.javaapi.conversation.callback.Utilities; +import org.junit.Assert; +import org.oasisopen.sca.ServiceReference; +import org.oasisopen.sca.annotation.Reference; +import org.oasisopen.sca.annotation.Scope; +import org.oasisopen.sca.annotation.Service; + +@Service(AService.class) +@Scope("CONVERSATION") +public class AServiceImpl implements AService, AServiceCallback { + + @Reference + protected ServiceReference<BService> b; + + private String someState; + + public void callBack(String someState) { + System.out.println("A-callback called with this state => " + someState); + this.someState = someState; + } + + public void testCallback() { + b.getService().testCallBack("Some string"); + int count = 4; + while (someState == null && count > 0) { + Utilities.delayQuarterSecond(); + count--; + } + if (someState == null) + Assert.fail("Callback not received by this instance"); + } + + public void testCallback2() { + Assert.fail("Should not be called"); + } + +} diff --git a/java/sca-contrib/vtest/java-api/conversation/callback/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/callback/impl/BServiceImpl.java b/java/sca-contrib/vtest/java-api/conversation/callback/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/callback/impl/BServiceImpl.java new file mode 100644 index 0000000000..78dfe7221f --- /dev/null +++ b/java/sca-contrib/vtest/java-api/conversation/callback/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/callback/impl/BServiceImpl.java @@ -0,0 +1,73 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.tuscany.sca.vtest.javaapi.conversation.callback.impl; + +import org.apache.tuscany.sca.vtest.javaapi.conversation.callback.AServiceCallback; +import org.apache.tuscany.sca.vtest.javaapi.conversation.callback.BService; +import org.apache.tuscany.sca.vtest.javaapi.conversation.callback.BServiceCallback; +import org.apache.tuscany.sca.vtest.javaapi.conversation.callback.CService; +import org.apache.tuscany.sca.vtest.javaapi.conversation.callback.Utilities; +import org.junit.Assert; +import org.oasisopen.sca.ServiceReference; +import org.oasisopen.sca.annotation.Callback; +import org.oasisopen.sca.annotation.Reference; +import org.oasisopen.sca.annotation.Scope; +import org.oasisopen.sca.annotation.Service; + +@Service(BService.class) +@Scope("CONVERSATION") +public class BServiceImpl implements BService, BServiceCallback { + + String someState; + + @Callback + protected AServiceCallback callback; + + @Reference + protected ServiceReference<CService> c; + + public void setState(String someState) { + this.someState = someState; + } + + public String getState() { + return someState; + } + + public void callBack(String someState) { + System.out.println("B-callback called with this state => " + someState); + this.someState = someState; + } + + public void testCallBack(String someState) { + + c.getService().testCallBack(someState); + int count = 4; + while (this.someState == null && count > 0) { + Utilities.delayQuarterSecond(); + count--; + } + if (this.someState == null) + Assert.fail("Callback not received by this instance"); + + callback.callBack(someState); + } + +} diff --git a/java/sca-contrib/vtest/java-api/conversation/callback/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/callback/impl/CServiceImpl.java b/java/sca-contrib/vtest/java-api/conversation/callback/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/callback/impl/CServiceImpl.java new file mode 100644 index 0000000000..6120b815d5 --- /dev/null +++ b/java/sca-contrib/vtest/java-api/conversation/callback/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/callback/impl/CServiceImpl.java @@ -0,0 +1,49 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.tuscany.sca.vtest.javaapi.conversation.callback.impl; + +import org.apache.tuscany.sca.vtest.javaapi.conversation.callback.BServiceCallback; +import org.apache.tuscany.sca.vtest.javaapi.conversation.callback.CService; +import org.oasisopen.sca.annotation.Callback; +import org.oasisopen.sca.annotation.Scope; +import org.oasisopen.sca.annotation.Service; + +@Service(CService.class) +@Scope("CONVERSATION") +public class CServiceImpl implements CService { + + String someState; + + @Callback + protected BServiceCallback callback; + + public void setState(String someState) { + this.someState = someState; + } + + public String getState() { + return someState; + } + + public void testCallBack(String someState) { + callback.callBack(someState); + } + +} diff --git a/java/sca-contrib/vtest/java-api/conversation/callback/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/callback/local/AServiceCallback.java b/java/sca-contrib/vtest/java-api/conversation/callback/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/callback/local/AServiceCallback.java new file mode 100644 index 0000000000..50feee41d6 --- /dev/null +++ b/java/sca-contrib/vtest/java-api/conversation/callback/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/callback/local/AServiceCallback.java @@ -0,0 +1,31 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.tuscany.sca.vtest.javaapi.conversation.callback.local; + +import org.oasisopen.sca.annotation.Conversational; + +/** + * + */ +@Conversational +public interface AServiceCallback { + + public void callBack(String someState); + +} diff --git a/java/sca-contrib/vtest/java-api/conversation/callback/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/callback/local/BService.java b/java/sca-contrib/vtest/java-api/conversation/callback/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/callback/local/BService.java new file mode 100644 index 0000000000..67dd77ce7b --- /dev/null +++ b/java/sca-contrib/vtest/java-api/conversation/callback/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/callback/local/BService.java @@ -0,0 +1,37 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.tuscany.sca.vtest.javaapi.conversation.callback.local; + +import org.oasisopen.sca.annotation.Callback; +import org.oasisopen.sca.annotation.Conversational; + +/** + * Simple Local Service + */ +@Conversational +@Callback(AServiceCallback.class) +public interface BService { + + public void setState(String someState); + + public String getState(); + + public void testCallBack(String string); + +} diff --git a/java/sca-contrib/vtest/java-api/conversation/callback/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/callback/local/BServiceCallback.java b/java/sca-contrib/vtest/java-api/conversation/callback/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/callback/local/BServiceCallback.java new file mode 100644 index 0000000000..fd19c8d7b1 --- /dev/null +++ b/java/sca-contrib/vtest/java-api/conversation/callback/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/callback/local/BServiceCallback.java @@ -0,0 +1,31 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.tuscany.sca.vtest.javaapi.conversation.callback.local; + +import org.oasisopen.sca.annotation.Conversational; + +/** + * Simple Service + */ +@Conversational +public interface BServiceCallback { + + public void callBack(String someState); + +} diff --git a/java/sca-contrib/vtest/java-api/conversation/callback/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/callback/local/CService.java b/java/sca-contrib/vtest/java-api/conversation/callback/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/callback/local/CService.java new file mode 100644 index 0000000000..c3b2e04ff2 --- /dev/null +++ b/java/sca-contrib/vtest/java-api/conversation/callback/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/callback/local/CService.java @@ -0,0 +1,37 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.tuscany.sca.vtest.javaapi.conversation.callback.local; + +import org.oasisopen.sca.annotation.Callback; +import org.oasisopen.sca.annotation.Conversational; + +/** + * Simple Service + */ +@Conversational +@Callback(BServiceCallback.class) +public interface CService { + + public void setState(String someState); + + public String getState(); + + public void testCallBack(String string); + +} diff --git a/java/sca-contrib/vtest/java-api/conversation/callback/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/callback/local/impl/AServiceImpl.java b/java/sca-contrib/vtest/java-api/conversation/callback/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/callback/local/impl/AServiceImpl.java new file mode 100644 index 0000000000..0298b39825 --- /dev/null +++ b/java/sca-contrib/vtest/java-api/conversation/callback/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/callback/local/impl/AServiceImpl.java @@ -0,0 +1,61 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.tuscany.sca.vtest.javaapi.conversation.callback.local.impl; + +import org.apache.tuscany.sca.vtest.javaapi.conversation.callback.AService; +import org.apache.tuscany.sca.vtest.javaapi.conversation.callback.Utilities; +import org.apache.tuscany.sca.vtest.javaapi.conversation.callback.local.AServiceCallback; +import org.apache.tuscany.sca.vtest.javaapi.conversation.callback.local.BService; +import org.junit.Assert; +import org.oasisopen.sca.ServiceReference; +import org.oasisopen.sca.annotation.Reference; +import org.oasisopen.sca.annotation.Scope; +import org.oasisopen.sca.annotation.Service; + +@Service(AService.class) +@Scope("CONVERSATION") +public class AServiceImpl implements AService, AServiceCallback { + + @Reference + protected ServiceReference<BService> b; + + private String someState; + + public void callBack(String someState) { + System.out.println("A-callback called with this state => " + someState); + this.someState = someState; + } + + public void testCallback() { + b.getService().testCallBack("Some local string"); + int count = 4; + while (someState == null && count > 0) { + Utilities.delayQuarterSecond(); + count--; + } + if (someState == null) + Assert.fail("Callback not received by this instance"); + } + + public void testCallback2() { + Assert.fail("Not implemented"); + } + +} diff --git a/java/sca-contrib/vtest/java-api/conversation/callback/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/callback/local/impl/BServiceImpl.java b/java/sca-contrib/vtest/java-api/conversation/callback/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/callback/local/impl/BServiceImpl.java new file mode 100644 index 0000000000..4374306609 --- /dev/null +++ b/java/sca-contrib/vtest/java-api/conversation/callback/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/callback/local/impl/BServiceImpl.java @@ -0,0 +1,73 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.tuscany.sca.vtest.javaapi.conversation.callback.local.impl; + +import org.apache.tuscany.sca.vtest.javaapi.conversation.callback.Utilities; +import org.apache.tuscany.sca.vtest.javaapi.conversation.callback.local.AServiceCallback; +import org.apache.tuscany.sca.vtest.javaapi.conversation.callback.local.BService; +import org.apache.tuscany.sca.vtest.javaapi.conversation.callback.local.BServiceCallback; +import org.apache.tuscany.sca.vtest.javaapi.conversation.callback.local.CService; +import org.junit.Assert; +import org.oasisopen.sca.ServiceReference; +import org.oasisopen.sca.annotation.Callback; +import org.oasisopen.sca.annotation.Reference; +import org.oasisopen.sca.annotation.Scope; +import org.oasisopen.sca.annotation.Service; + +@Service(BService.class) +@Scope("CONVERSATION") +public class BServiceImpl implements BService, BServiceCallback { + + String someState; + + @Callback + protected AServiceCallback callback; + + @Reference + protected ServiceReference<CService> c; + + public void setState(String someState) { + this.someState = someState; + } + + public String getState() { + return someState; + } + + public void callBack(String someState) { + System.out.println("B-callback called with this state => " + someState); + this.someState = someState; + } + + public void testCallBack(String someState) { + + c.getService().testCallBack(someState); + int count = 4; + while (this.someState == null && count > 0) { + Utilities.delayQuarterSecond(); + count--; + } + if (this.someState == null) + Assert.fail("Callback not received by this instance"); + + callback.callBack(someState); + } + +} diff --git a/java/sca-contrib/vtest/java-api/conversation/callback/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/callback/local/impl/CServiceImpl.java b/java/sca-contrib/vtest/java-api/conversation/callback/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/callback/local/impl/CServiceImpl.java new file mode 100644 index 0000000000..d487c94fd3 --- /dev/null +++ b/java/sca-contrib/vtest/java-api/conversation/callback/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/callback/local/impl/CServiceImpl.java @@ -0,0 +1,49 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.tuscany.sca.vtest.javaapi.conversation.callback.local.impl; + +import org.apache.tuscany.sca.vtest.javaapi.conversation.callback.local.BServiceCallback; +import org.apache.tuscany.sca.vtest.javaapi.conversation.callback.local.CService; +import org.oasisopen.sca.annotation.Callback; +import org.oasisopen.sca.annotation.Scope; +import org.oasisopen.sca.annotation.Service; + +@Service(CService.class) +@Scope("CONVERSATION") +public class CServiceImpl implements CService { + + String someState; + + @Callback + protected BServiceCallback callback; + + public void setState(String someState) { + this.someState = someState; + } + + public String getState() { + return someState; + } + + public void testCallBack(String someState) { + callback.callBack(someState); + } + +} diff --git a/java/sca-contrib/vtest/java-api/conversation/callback/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/callback/mixed/CService.java b/java/sca-contrib/vtest/java-api/conversation/callback/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/callback/mixed/CService.java new file mode 100644 index 0000000000..164397bf6b --- /dev/null +++ b/java/sca-contrib/vtest/java-api/conversation/callback/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/callback/mixed/CService.java @@ -0,0 +1,38 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.tuscany.sca.vtest.javaapi.conversation.callback.mixed; + +import org.apache.tuscany.sca.vtest.javaapi.conversation.callback.BServiceCallback; +import org.oasisopen.sca.annotation.Callback; +import org.oasisopen.sca.annotation.Conversational; + +/** + * Simple Service + */ +@Conversational +@Callback(BServiceCallback.class) +public interface CService { + + public void setState(String someState); + + public String getState(); + + public void testCallBack(String string); + +} diff --git a/java/sca-contrib/vtest/java-api/conversation/callback/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/callback/mixed/impl/BServiceImpl.java b/java/sca-contrib/vtest/java-api/conversation/callback/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/callback/mixed/impl/BServiceImpl.java new file mode 100644 index 0000000000..d71c89d565 --- /dev/null +++ b/java/sca-contrib/vtest/java-api/conversation/callback/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/callback/mixed/impl/BServiceImpl.java @@ -0,0 +1,73 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.tuscany.sca.vtest.javaapi.conversation.callback.mixed.impl; + +import org.apache.tuscany.sca.vtest.javaapi.conversation.callback.AServiceCallback; +import org.apache.tuscany.sca.vtest.javaapi.conversation.callback.BService; +import org.apache.tuscany.sca.vtest.javaapi.conversation.callback.BServiceCallback; +import org.apache.tuscany.sca.vtest.javaapi.conversation.callback.mixed.CService; +import org.apache.tuscany.sca.vtest.javaapi.conversation.callback.Utilities; +import org.junit.Assert; +import org.oasisopen.sca.ServiceReference; +import org.oasisopen.sca.annotation.Callback; +import org.oasisopen.sca.annotation.Reference; +import org.oasisopen.sca.annotation.Scope; +import org.oasisopen.sca.annotation.Service; + +@Service(BService.class) +@Scope("CONVERSATION") +public class BServiceImpl implements BService, BServiceCallback { + + String someState; + + @Callback + protected AServiceCallback callback; + + @Reference + protected ServiceReference<CService> c; + + public void setState(String someState) { + this.someState = someState; + } + + public String getState() { + return someState; + } + + public void callBack(String someState) { + System.out.println("B-callback called with this state => " + someState); + this.someState = someState; + } + + public void testCallBack(String someState) { + + c.getService().testCallBack(someState); + int count = 4; + while (this.someState == null && count > 0) { + Utilities.delayQuarterSecond(); + count--; + } + if (this.someState == null) + Assert.fail("Callback not received by this instance"); + + callback.callBack(someState); + } + +} diff --git a/java/sca-contrib/vtest/java-api/conversation/callback/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/callback/mixed/impl/CServiceImpl.java b/java/sca-contrib/vtest/java-api/conversation/callback/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/callback/mixed/impl/CServiceImpl.java new file mode 100644 index 0000000000..5dcaf9c06f --- /dev/null +++ b/java/sca-contrib/vtest/java-api/conversation/callback/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/callback/mixed/impl/CServiceImpl.java @@ -0,0 +1,49 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.tuscany.sca.vtest.javaapi.conversation.callback.mixed.impl; + +import org.apache.tuscany.sca.vtest.javaapi.conversation.callback.BServiceCallback; +import org.apache.tuscany.sca.vtest.javaapi.conversation.callback.mixed.CService; +import org.oasisopen.sca.annotation.Callback; +import org.oasisopen.sca.annotation.Scope; +import org.oasisopen.sca.annotation.Service; + +@Service(CService.class) +@Scope("CONVERSATION") +public class CServiceImpl implements CService { + + String someState; + + @Callback + protected BServiceCallback callback; + + public void setState(String someState) { + this.someState = someState; + } + + public String getState() { + return someState; + } + + public void testCallBack(String someState) { + callback.callBack(someState); + } + +} diff --git a/java/sca-contrib/vtest/java-api/conversation/callback/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/callback/multi/AServiceCallback.java b/java/sca-contrib/vtest/java-api/conversation/callback/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/callback/multi/AServiceCallback.java new file mode 100644 index 0000000000..4b2ee3a838 --- /dev/null +++ b/java/sca-contrib/vtest/java-api/conversation/callback/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/callback/multi/AServiceCallback.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.conversation.callback.multi; + +import org.oasisopen.sca.annotation.Conversational; +import org.oasisopen.sca.annotation.Remotable; + +/** + * Simple Remotable Service + */ +@Remotable +@Conversational +public interface AServiceCallback { + + public void callBack(String someState); + +} diff --git a/java/sca-contrib/vtest/java-api/conversation/callback/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/callback/multi/AServiceCallback2.java b/java/sca-contrib/vtest/java-api/conversation/callback/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/callback/multi/AServiceCallback2.java new file mode 100644 index 0000000000..88059ccb45 --- /dev/null +++ b/java/sca-contrib/vtest/java-api/conversation/callback/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/callback/multi/AServiceCallback2.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.conversation.callback.multi; + +import org.oasisopen.sca.annotation.Conversational; +import org.oasisopen.sca.annotation.Remotable; + +/** + * Simple Remotable Service + */ +@Remotable +@Conversational +public interface AServiceCallback2 { + + public void callBack2(String someState); + +} diff --git a/java/sca-contrib/vtest/java-api/conversation/callback/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/callback/multi/BService.java b/java/sca-contrib/vtest/java-api/conversation/callback/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/callback/multi/BService.java new file mode 100644 index 0000000000..691dc80632 --- /dev/null +++ b/java/sca-contrib/vtest/java-api/conversation/callback/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/callback/multi/BService.java @@ -0,0 +1,39 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.tuscany.sca.vtest.javaapi.conversation.callback.multi; + +import org.oasisopen.sca.annotation.Callback; +import org.oasisopen.sca.annotation.Conversational; +import org.oasisopen.sca.annotation.Remotable; + +/** + * Simple Service + */ +@Remotable +@Conversational +@Callback(AServiceCallback.class) +public interface BService { + + public void setState(String someState); + + public String getState(); + + public void testCallBack(String string); + +} diff --git a/java/sca-contrib/vtest/java-api/conversation/callback/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/callback/multi/BService2.java b/java/sca-contrib/vtest/java-api/conversation/callback/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/callback/multi/BService2.java new file mode 100644 index 0000000000..7c691efa8d --- /dev/null +++ b/java/sca-contrib/vtest/java-api/conversation/callback/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/callback/multi/BService2.java @@ -0,0 +1,39 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.tuscany.sca.vtest.javaapi.conversation.callback.multi; + +import org.oasisopen.sca.annotation.Callback; +import org.oasisopen.sca.annotation.Conversational; +import org.oasisopen.sca.annotation.Remotable; + +/** + * Simple Service + */ +@Remotable +@Conversational +@Callback(AServiceCallback2.class) +public interface BService2 { + + public void setState(String someState); + + public String getState(); + + public void testCallBack2(String string); + +} diff --git a/java/sca-contrib/vtest/java-api/conversation/callback/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/callback/multi/impl/AServiceImpl.java b/java/sca-contrib/vtest/java-api/conversation/callback/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/callback/multi/impl/AServiceImpl.java new file mode 100644 index 0000000000..272484a6f0 --- /dev/null +++ b/java/sca-contrib/vtest/java-api/conversation/callback/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/callback/multi/impl/AServiceImpl.java @@ -0,0 +1,79 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.tuscany.sca.vtest.javaapi.conversation.callback.multi.impl; + +import org.apache.tuscany.sca.vtest.javaapi.conversation.callback.Utilities; +import org.apache.tuscany.sca.vtest.javaapi.conversation.callback.AService; +import org.apache.tuscany.sca.vtest.javaapi.conversation.callback.multi.AServiceCallback; +import org.apache.tuscany.sca.vtest.javaapi.conversation.callback.multi.AServiceCallback2; +import org.apache.tuscany.sca.vtest.javaapi.conversation.callback.multi.BService; +import org.apache.tuscany.sca.vtest.javaapi.conversation.callback.multi.BService2; +import org.junit.Assert; +import org.oasisopen.sca.ServiceReference; +import org.oasisopen.sca.annotation.Reference; +import org.oasisopen.sca.annotation.Scope; +import org.oasisopen.sca.annotation.Service; + +@Service(AService.class) +@Scope("CONVERSATION") +public class AServiceImpl implements AService, AServiceCallback , AServiceCallback2 { + + @Reference + protected ServiceReference<BService> b; + + @Reference + protected ServiceReference<BService2> b2; + + + private String someState; + private String someState2; + + public void callBack(String someState) { + System.out.println("A-callback called with this state => " + someState); + this.someState = someState; + } + + public void callBack2(String someState) { + System.out.println("A-callback2 called with this state => " + someState); + this.someState2 = someState; + } + + public void testCallback() { + b.getService().testCallBack("Some string"); + int count = 4; + while (someState == null && count > 0) { + Utilities.delayQuarterSecond(); + count--; + } + if (someState == null) + Assert.fail("Callback not received by this instance"); + } + + public void testCallback2() { + b2.getService().testCallBack2("Some string"); + int count = 4; + while (someState2 == null && count > 0) { + Utilities.delayQuarterSecond(); + count--; + } + if (someState2 == null) + Assert.fail("Callback not received by this instance"); + } +} diff --git a/java/sca-contrib/vtest/java-api/conversation/callback/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/callback/multi/impl/BServiceImpl.java b/java/sca-contrib/vtest/java-api/conversation/callback/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/callback/multi/impl/BServiceImpl.java new file mode 100644 index 0000000000..d9c4866466 --- /dev/null +++ b/java/sca-contrib/vtest/java-api/conversation/callback/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/callback/multi/impl/BServiceImpl.java @@ -0,0 +1,64 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.tuscany.sca.vtest.javaapi.conversation.callback.multi.impl; + +import org.apache.tuscany.sca.vtest.javaapi.conversation.callback.multi.AServiceCallback; +import org.apache.tuscany.sca.vtest.javaapi.conversation.callback.multi.AServiceCallback2; +import org.apache.tuscany.sca.vtest.javaapi.conversation.callback.multi.BService; +import org.apache.tuscany.sca.vtest.javaapi.conversation.callback.multi.BService2; +import org.junit.Assert; +import org.oasisopen.sca.annotation.Callback; +import org.oasisopen.sca.annotation.Scope; +import org.oasisopen.sca.annotation.Service; + +@Service(interfaces= {BService.class,BService2.class}) +@Scope("CONVERSATION") +public class BServiceImpl implements BService, BService2 { + + String someState; + + @Callback + protected AServiceCallback callback; + + @Callback + protected AServiceCallback2 callback2; + + @Callback + protected AServiceCallback2 callback3; + + + public void setState(String someState) { + this.someState = someState; + } + + public String getState() { + return someState; + } + + public void testCallBack(String someState) { + callback.callBack(someState); + } + + public void testCallBack2(String someState) { + Assert.assertNotNull(callback3); //Spec lines 670,671 + callback2.callBack2(someState); + } + +} diff --git a/java/sca-contrib/vtest/java-api/conversation/callback/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/callback/stateless/BServiceCallback.java b/java/sca-contrib/vtest/java-api/conversation/callback/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/callback/stateless/BServiceCallback.java new file mode 100644 index 0000000000..1c2d20ff94 --- /dev/null +++ b/java/sca-contrib/vtest/java-api/conversation/callback/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/callback/stateless/BServiceCallback.java @@ -0,0 +1,31 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.tuscany.sca.vtest.javaapi.conversation.callback.stateless; + +import org.oasisopen.sca.annotation.Remotable; + +/** + * Simple Service + */ +@Remotable +public interface BServiceCallback { + + public void callBack(String someState); + +} diff --git a/java/sca-contrib/vtest/java-api/conversation/callback/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/callback/stateless/CService.java b/java/sca-contrib/vtest/java-api/conversation/callback/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/callback/stateless/CService.java new file mode 100644 index 0000000000..5dd429077d --- /dev/null +++ b/java/sca-contrib/vtest/java-api/conversation/callback/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/callback/stateless/CService.java @@ -0,0 +1,39 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.tuscany.sca.vtest.javaapi.conversation.callback.stateless; + +import org.oasisopen.sca.annotation.Callback; +import org.oasisopen.sca.annotation.Conversational; +import org.oasisopen.sca.annotation.Remotable; + +/** + * Simple Service + */ +@Remotable +@Conversational +@Callback(BServiceCallback.class) +public interface CService { + + public void setState(String someState); + + public String getState(); + + public void testCallBack(String string); + +} diff --git a/java/sca-contrib/vtest/java-api/conversation/callback/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/callback/stateless/impl/BServiceImpl.java b/java/sca-contrib/vtest/java-api/conversation/callback/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/callback/stateless/impl/BServiceImpl.java new file mode 100644 index 0000000000..b263eb869b --- /dev/null +++ b/java/sca-contrib/vtest/java-api/conversation/callback/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/callback/stateless/impl/BServiceImpl.java @@ -0,0 +1,73 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.tuscany.sca.vtest.javaapi.conversation.callback.stateless.impl; + +import org.apache.tuscany.sca.vtest.javaapi.conversation.callback.AServiceCallback; +import org.apache.tuscany.sca.vtest.javaapi.conversation.callback.BService; +import org.apache.tuscany.sca.vtest.javaapi.conversation.callback.stateless.BServiceCallback; +import org.apache.tuscany.sca.vtest.javaapi.conversation.callback.CService; +import org.apache.tuscany.sca.vtest.javaapi.conversation.callback.Utilities; +import org.junit.Assert; +import org.oasisopen.sca.ServiceReference; +import org.oasisopen.sca.annotation.Callback; +import org.oasisopen.sca.annotation.Reference; +import org.oasisopen.sca.annotation.Scope; +import org.oasisopen.sca.annotation.Service; + +@Service(BService.class) +@Scope("CONVERSATION") +public class BServiceImpl implements BService, BServiceCallback { + + String someState; + + @Callback + protected AServiceCallback callback; + + @Reference + protected ServiceReference<CService> c; + + public void setState(String someState) { + this.someState = someState; + } + + public String getState() { + return someState; + } + + public void callBack(String someState) { + System.out.println("B-callback called with this state => " + someState); + this.someState = someState; + } + + public void testCallBack(String someState) { + + c.getService().testCallBack(someState); + int count = 4; + while (this.someState == null && count > 0) { + Utilities.delayQuarterSecond(); + count--; + } + if (this.someState != null) + Assert.fail("Callback should NOT have been received by this instance"); + + callback.callBack(someState); + } + +} diff --git a/java/sca-contrib/vtest/java-api/conversation/callback/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/callback/stateless/impl/BServiceImpl2.java b/java/sca-contrib/vtest/java-api/conversation/callback/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/callback/stateless/impl/BServiceImpl2.java new file mode 100644 index 0000000000..4f08ac7a1b --- /dev/null +++ b/java/sca-contrib/vtest/java-api/conversation/callback/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/callback/stateless/impl/BServiceImpl2.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.conversation.callback.stateless.impl; + +import org.apache.tuscany.sca.vtest.javaapi.conversation.callback.AServiceCallback; +import org.apache.tuscany.sca.vtest.javaapi.conversation.callback.BService; +import org.apache.tuscany.sca.vtest.javaapi.conversation.callback.stateless.BServiceCallback; +import org.apache.tuscany.sca.vtest.javaapi.conversation.callback.CService; +import org.apache.tuscany.sca.vtest.javaapi.conversation.callback.Utilities; +import org.junit.Assert; +import org.oasisopen.sca.RequestContext; +import org.oasisopen.sca.ServiceReference; +import org.oasisopen.sca.annotation.Callback; +import org.oasisopen.sca.annotation.Context; +import org.oasisopen.sca.annotation.Reference; +import org.oasisopen.sca.annotation.Scope; +import org.oasisopen.sca.annotation.Service; + +@Service(BService.class) +@Scope("CONVERSATION") +public class BServiceImpl2 implements BService, BServiceCallback { + + String someState; + + @Context + protected RequestContext rc; + + @Callback + protected AServiceCallback callback; + + @Reference + protected ServiceReference<CService> c; + + public void setState(String someState) { + this.someState = someState; + } + + public String getState() { + return someState; + } + + public void callBack(String someState) { + System.out.println("B-callback called with this state => " + someState); + this.someState = someState; + Assert.assertSame("1234", rc.getServiceReference().getCallbackID()); + } + + public void testCallBack(String someState) { + + c.setCallbackID("1234"); + + c.getService().testCallBack(someState); + int count = 4; + while (this.someState == null && count > 0) { + Utilities.delayQuarterSecond(); + count--; + } + if (this.someState != null) + Assert.fail("Callback should NOT have been received by this instance"); + + callback.callBack(someState); + } + +} diff --git a/java/sca-contrib/vtest/java-api/conversation/callback/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/callback/stateless/impl/BServiceImpl3.java b/java/sca-contrib/vtest/java-api/conversation/callback/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/callback/stateless/impl/BServiceImpl3.java new file mode 100644 index 0000000000..11c896a06d --- /dev/null +++ b/java/sca-contrib/vtest/java-api/conversation/callback/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/callback/stateless/impl/BServiceImpl3.java @@ -0,0 +1,74 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.tuscany.sca.vtest.javaapi.conversation.callback.stateless.impl; + +import org.apache.tuscany.sca.vtest.javaapi.conversation.callback.AServiceCallback; +import org.apache.tuscany.sca.vtest.javaapi.conversation.callback.BService; +import org.apache.tuscany.sca.vtest.javaapi.conversation.callback.stateless.BServiceCallback; +import org.apache.tuscany.sca.vtest.javaapi.conversation.callback.CService; +import org.apache.tuscany.sca.vtest.javaapi.conversation.callback.Utilities; +import org.junit.Assert; +import org.oasisopen.sca.ServiceReference; +import org.oasisopen.sca.annotation.Callback; +import org.oasisopen.sca.annotation.Reference; +import org.oasisopen.sca.annotation.Scope; +import org.oasisopen.sca.annotation.Service; + +@Service(BService.class) +@Scope("CONVERSATION") +public class BServiceImpl3 implements BService, BServiceCallback { + + String someState; + + @Callback + protected AServiceCallback callback; + + @Reference + protected ServiceReference<CService> c; + + public void setState(String someState) { + this.someState = someState; + } + + public String getState() { + return someState; + } + + public void callBack(String someState) { + System.out.println("B-callback called with this state => " + someState); + this.someState = someState; + Assert.assertSame(null, callback); + } + + public void testCallBack(String someState) { + + c.getService().testCallBack(someState); + int count = 4; + while (this.someState == null && count > 0) { + Utilities.delayQuarterSecond(); + count--; + } + if (this.someState != null) + Assert.fail("Callback should NOT have been received by this instance"); + + callback.callBack(someState); + } + +} diff --git a/java/sca-contrib/vtest/java-api/conversation/callback/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/callback/stateless/impl/CServiceImpl.java b/java/sca-contrib/vtest/java-api/conversation/callback/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/callback/stateless/impl/CServiceImpl.java new file mode 100644 index 0000000000..00984ae565 --- /dev/null +++ b/java/sca-contrib/vtest/java-api/conversation/callback/src/main/java/org/apache/tuscany/sca/vtest/javaapi/conversation/callback/stateless/impl/CServiceImpl.java @@ -0,0 +1,49 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.tuscany.sca.vtest.javaapi.conversation.callback.stateless.impl; + +import org.apache.tuscany.sca.vtest.javaapi.conversation.callback.stateless.BServiceCallback; +import org.apache.tuscany.sca.vtest.javaapi.conversation.callback.stateless.CService; +import org.oasisopen.sca.annotation.Callback; +import org.oasisopen.sca.annotation.Scope; +import org.oasisopen.sca.annotation.Service; + +@Service(CService.class) +@Scope("CONVERSATION") +public class CServiceImpl implements CService { + + String someState; + + @Callback + protected BServiceCallback callback; + + public void setState(String someState) { + this.someState = someState; + } + + public String getState() { + return someState; + } + + public void testCallBack(String someState) { + callback.callBack(someState); + } + +} diff --git a/java/sca-contrib/vtest/java-api/conversation/callback/src/main/resources/callback-accessing.composite b/java/sca-contrib/vtest/java-api/conversation/callback/src/main/resources/callback-accessing.composite new file mode 100644 index 0000000000..802c9c30db --- /dev/null +++ b/java/sca-contrib/vtest/java-api/conversation/callback/src/main/resources/callback-accessing.composite @@ -0,0 +1,34 @@ +<?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="Conversation-callback-multi"> + + <component name="AComponent"> + <implementation.java + class="org.apache.tuscany.sca.vtest.javaapi.conversation.callback.accessing.impl.AServiceImpl" /> + <reference name="b" target="BComponent" /> + </component> + + <component name="BComponent"> + <implementation.java + class="org.apache.tuscany.sca.vtest.javaapi.conversation.callback.accessing.impl.BServiceImpl" /> + </component> + +</composite> diff --git a/java/sca-contrib/vtest/java-api/conversation/callback/src/main/resources/callback-custom.composite b/java/sca-contrib/vtest/java-api/conversation/callback/src/main/resources/callback-custom.composite new file mode 100644 index 0000000000..e66ea5d537 --- /dev/null +++ b/java/sca-contrib/vtest/java-api/conversation/callback/src/main/resources/callback-custom.composite @@ -0,0 +1,40 @@ +<?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="Conversation-callback-custom"> + + <component name="AComponent"> + <implementation.java + class="org.apache.tuscany.sca.vtest.javaapi.conversation.callback.custom.impl.AServiceImpl" /> + <reference name="b" target="BComponent" /> + <reference name="customCallback" target="CComponent/CustomCallback" /> + </component> + + <component name="BComponent"> + <implementation.java + class="org.apache.tuscany.sca.vtest.javaapi.conversation.callback.custom.impl.BServiceImpl" /> + </component> + + <component name="CComponent"> + <implementation.java + class="org.apache.tuscany.sca.vtest.javaapi.conversation.callback.custom.impl.CustomCallbackImpl" /> + </component> + +</composite> diff --git a/java/sca-contrib/vtest/java-api/conversation/callback/src/main/resources/callback-id.composite b/java/sca-contrib/vtest/java-api/conversation/callback/src/main/resources/callback-id.composite new file mode 100644 index 0000000000..4d93d2279d --- /dev/null +++ b/java/sca-contrib/vtest/java-api/conversation/callback/src/main/resources/callback-id.composite @@ -0,0 +1,34 @@ +<?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="Conversation-callback-id"> + + <component name="AComponent"> + <implementation.java + class="org.apache.tuscany.sca.vtest.javaapi.conversation.callback.id.impl.AServiceImpl" /> + <reference name="b" target="BComponent" /> + </component> + + <component name="BComponent"> + <implementation.java + class="org.apache.tuscany.sca.vtest.javaapi.conversation.callback.id.impl.BServiceImpl" /> + </component> + +</composite> diff --git a/java/sca-contrib/vtest/java-api/conversation/callback/src/main/resources/callback-local.composite b/java/sca-contrib/vtest/java-api/conversation/callback/src/main/resources/callback-local.composite new file mode 100644 index 0000000000..cd8c589a59 --- /dev/null +++ b/java/sca-contrib/vtest/java-api/conversation/callback/src/main/resources/callback-local.composite @@ -0,0 +1,40 @@ +<?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="Conversation-Callback-local"> + + <component name="AComponent"> + <implementation.java + class="org.apache.tuscany.sca.vtest.javaapi.conversation.callback.local.impl.AServiceImpl" /> + <reference name="b" target="BComponent" /> + </component> + + <component name="BComponent"> + <implementation.java + class="org.apache.tuscany.sca.vtest.javaapi.conversation.callback.local.impl.BServiceImpl" /> + <reference name="c" target="CComponent" /> + </component> + + <component name="CComponent"> + <implementation.java + class="org.apache.tuscany.sca.vtest.javaapi.conversation.callback.local.impl.CServiceImpl" /> + </component> + +</composite> diff --git a/java/sca-contrib/vtest/java-api/conversation/callback/src/main/resources/callback-mixed.composite b/java/sca-contrib/vtest/java-api/conversation/callback/src/main/resources/callback-mixed.composite new file mode 100644 index 0000000000..d2d9956103 --- /dev/null +++ b/java/sca-contrib/vtest/java-api/conversation/callback/src/main/resources/callback-mixed.composite @@ -0,0 +1,40 @@ +<?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="Conversation-callback-mixed"> +<!-- TODO: TUSCANY-2291 + <component name="AComponent"> + <implementation.java + class="org.apache.tuscany.sca.vtest.javaapi.conversation.callback.impl.AServiceImpl" /> + <reference name="b" target="BComponent" /> + </component> + + <component name="BComponent"> + <implementation.java + class="org.apache.tuscany.sca.vtest.javaapi.conversation.callback.mixed.impl.BServiceImpl" /> + <reference name="c" target="CComponent" /> + </component> + + <component name="CComponent"> + <implementation.java + class="org.apache.tuscany.sca.vtest.javaapi.conversation.callback.mixed.impl.CServiceImpl" /> + </component> +--> +</composite> diff --git a/java/sca-contrib/vtest/java-api/conversation/callback/src/main/resources/callback-multi.composite b/java/sca-contrib/vtest/java-api/conversation/callback/src/main/resources/callback-multi.composite new file mode 100644 index 0000000000..6c69330ce5 --- /dev/null +++ b/java/sca-contrib/vtest/java-api/conversation/callback/src/main/resources/callback-multi.composite @@ -0,0 +1,35 @@ +<?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="Conversation-callback-multi"> + + <component name="AComponent"> + <implementation.java + class="org.apache.tuscany.sca.vtest.javaapi.conversation.callback.multi.impl.AServiceImpl" /> + <reference name="b" target="BComponent/BService" /> + <reference name="b2" target="BComponent/BService2" /> + </component> + + <component name="BComponent"> + <implementation.java + class="org.apache.tuscany.sca.vtest.javaapi.conversation.callback.multi.impl.BServiceImpl" /> + </component> + +</composite> diff --git a/java/sca-contrib/vtest/java-api/conversation/callback/src/main/resources/callback-stateless-callbackfieldnull.composite b/java/sca-contrib/vtest/java-api/conversation/callback/src/main/resources/callback-stateless-callbackfieldnull.composite new file mode 100644 index 0000000000..72c08e8344 --- /dev/null +++ b/java/sca-contrib/vtest/java-api/conversation/callback/src/main/resources/callback-stateless-callbackfieldnull.composite @@ -0,0 +1,40 @@ +<?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="Conversation-callback-stateless"> + + <component name="AComponent"> + <implementation.java + class="org.apache.tuscany.sca.vtest.javaapi.conversation.callback.impl.AServiceImpl" /> + <reference name="b" target="BComponent" /> + </component> + + <component name="BComponent"> + <implementation.java + class="org.apache.tuscany.sca.vtest.javaapi.conversation.callback.stateless.impl.BServiceImpl3" /> + <reference name="c" target="CComponent" /> + </component> + + <component name="CComponent"> + <implementation.java + class="org.apache.tuscany.sca.vtest.javaapi.conversation.callback.stateless.impl.CServiceImpl" /> + </component> + +</composite> diff --git a/java/sca-contrib/vtest/java-api/conversation/callback/src/main/resources/callback-stateless-callbackid.composite b/java/sca-contrib/vtest/java-api/conversation/callback/src/main/resources/callback-stateless-callbackid.composite new file mode 100644 index 0000000000..144f7f3d00 --- /dev/null +++ b/java/sca-contrib/vtest/java-api/conversation/callback/src/main/resources/callback-stateless-callbackid.composite @@ -0,0 +1,40 @@ +<?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="Conversation-callback-stateless"> + + <component name="AComponent"> + <implementation.java + class="org.apache.tuscany.sca.vtest.javaapi.conversation.callback.impl.AServiceImpl" /> + <reference name="b" target="BComponent" /> + </component> + + <component name="BComponent"> + <implementation.java + class="org.apache.tuscany.sca.vtest.javaapi.conversation.callback.stateless.impl.BServiceImpl2" /> + <reference name="c" target="CComponent" /> + </component> + + <component name="CComponent"> + <implementation.java + class="org.apache.tuscany.sca.vtest.javaapi.conversation.callback.stateless.impl.CServiceImpl" /> + </component> + +</composite> diff --git a/java/sca-contrib/vtest/java-api/conversation/callback/src/main/resources/callback-stateless.composite b/java/sca-contrib/vtest/java-api/conversation/callback/src/main/resources/callback-stateless.composite new file mode 100644 index 0000000000..ace06b245c --- /dev/null +++ b/java/sca-contrib/vtest/java-api/conversation/callback/src/main/resources/callback-stateless.composite @@ -0,0 +1,41 @@ +<?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="Conversation-callback-stateless"> + + <component name="AComponent"> + <implementation.java + class="org.apache.tuscany.sca.vtest.javaapi.conversation.callback.impl.AServiceImpl" /> + <reference name="b" target="BComponent" /> + </component> + + <component name="BComponent"> + <implementation.java + class="org.apache.tuscany.sca.vtest.javaapi.conversation.callback.stateless.impl.BServiceImpl" /> + <reference name="c" target="CComponent" /> + </component> + + <component name="CComponent"> + <implementation.java + class="org.apache.tuscany.sca.vtest.javaapi.conversation.callback.stateless.impl.CServiceImpl" /> + </component> + + +</composite> diff --git a/java/sca-contrib/vtest/java-api/conversation/callback/src/main/resources/callback.composite b/java/sca-contrib/vtest/java-api/conversation/callback/src/main/resources/callback.composite new file mode 100644 index 0000000000..4623f17ca2 --- /dev/null +++ b/java/sca-contrib/vtest/java-api/conversation/callback/src/main/resources/callback.composite @@ -0,0 +1,40 @@ +<?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="Conversation-callback"> + + <component name="AComponent"> + <implementation.java + class="org.apache.tuscany.sca.vtest.javaapi.conversation.callback.impl.AServiceImpl" /> + <reference name="b" target="BComponent" /> + </component> + + <component name="BComponent"> + <implementation.java + class="org.apache.tuscany.sca.vtest.javaapi.conversation.callback.impl.BServiceImpl" /> + <reference name="c" target="CComponent" /> + </component> + + <component name="CComponent"> + <implementation.java + class="org.apache.tuscany.sca.vtest.javaapi.conversation.callback.impl.CServiceImpl" /> + </component> + +</composite> diff --git a/java/sca-contrib/vtest/java-api/conversation/callback/src/test/java/org/apache/tuscany/sca/vtest/javaapi/conversation/callback/CallbackTestCase.java b/java/sca-contrib/vtest/java-api/conversation/callback/src/test/java/org/apache/tuscany/sca/vtest/javaapi/conversation/callback/CallbackTestCase.java new file mode 100644 index 0000000000..2680370c5b --- /dev/null +++ b/java/sca-contrib/vtest/java-api/conversation/callback/src/test/java/org/apache/tuscany/sca/vtest/javaapi/conversation/callback/CallbackTestCase.java @@ -0,0 +1,377 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.tuscany.sca.vtest.javaapi.conversation.callback; + +import org.apache.tuscany.sca.vtest.utilities.ServiceFinder; +import org.junit.After; +import org.junit.Before; +import org.junit.Ignore; +import org.junit.Test; +import org.oasisopen.sca.ServiceRuntimeException; + +/** + * + */ +public class CallbackTestCase { + + protected static AService aService = null; + + @Before + public void init() throws Exception { + try { + System.out.println("Setting up"); + } catch (Exception ex) { + ex.printStackTrace(); + } + } + + @After + public void destroy() throws Exception { + + System.out.println("Cleaning up"); + ServiceFinder.cleanup(); + } + + /** + * Lines 529-610 + * <p> + * A callback service is a service that is used for asynchronous + * communication from a service provider back to its client in contrast to + * the communication through return values from synchronous operations. + * Callbacks are used by bidirectional services, which are services that + * have two interfaces: • an interface for the provided service • a callback + * interface that must be provided by the client + * <p> + * Callbacks may be used for both remotable and local services. Either both + * interfaces of a bidirectional service must be remotable, or both must be + * local. It is illegal to mix the two. There are two basic forms of + * callbacks: stateless callbacks and stateful callbacks. A callback + * interface is declared by using the "@Callback" annotation on a remotable + * service interface, which takes the Java Class object of the interface as + * a parameter. The annotation may also be applied to a method or to a field + * of an implementation, which is used in order to have a callback injected, + * as explained in the next section. + * <p> + * 1.6.7.1. Stateful Callbacks A stateful callback represents a specific + * implementation instance of the component that is the client of the + * service. The interface of a stateful callback should be marked as + * conversational. The following example interfaces define an interaction + * over stateful callback. + * <p> + * An implementation of the service in this example could use the + * "@Callback" annotation to request that a stateful callback be injected. + * The following is a fragment of an implementation of the example service. + * In this example, the request is passed on to some other component, so + * that the example service acts essentially as an intermediary. Because the + * service is conversation scoped, the callback will still be available when + * the backend service sends back its asynchronous response. + * <p> + * This fragment must come from an implementation that offers two services, + * one that it offers to it clients (MyService) and one that is used for + * receiving callbacks from the back end (MyServiceCallback). The client of + * this service would also implement the methods defined in + * MyServiceCallback. + * <p> + * Stateful callbacks support some of the same use cases as are supported by + * the ability to pass service references as parameters. The primary + * difference is that stateful callbacks do not require any additional + * parameters be passed with service operations. This can be a great + * convenience. If the service has many operations and any of those + * operations could be the first operation of the conversation, it would be + * unwieldy to have to take a callback parameter as part of every operation, + * just in case it is the first operation of the conversation. It is also + * more natural than requiring the application developers to invoke an + * explicit operation whose only purpose is to pass the callback object that + * should be used. + * <p> + * This tests the *remote* bidirectional interfaces option + */ + @Test + public void statefulCallback() throws Exception { + System.out.println("Setting up for callback tests"); + ServiceFinder.init("callback.composite"); + aService = ServiceFinder.getService(AService.class, "AComponent"); + aService.testCallback(); + } + + /** + * Lines 529-610 + * <p> + * A callback service is a service that is used for asynchronous + * communication from a service provider back to its client in contrast to + * the communication through return values from synchronous operations. + * Callbacks are used by bidirectional services, which are services that + * have two interfaces: • an interface for the provided service • a callback + * interface that must be provided by the client + * <p> + * Callbacks may be used for both remotable and local services. Either both + * interfaces of a bidirectional service must be remotable, or both must be + * local. It is illegal to mix the two. There are two basic forms of + * callbacks: stateless callbacks and stateful callbacks. A callback + * interface is declared by using the "@Callback" annotation on a remotable + * service interface, which takes the Java Class object of the interface as + * a parameter. The annotation may also be applied to a method or to a field + * of an implementation, which is used in order to have a callback injected, + * as explained in the next section. + * <p> + * 1.6.7.1. Stateful Callbacks A stateful callback represents a specific + * implementation instance of the component that is the client of the + * service. The interface of a stateful callback should be marked as + * conversational. The following example interfaces define an interaction + * over stateful callback. + * <p> + * An implementation of the service in this example could use the + * "@Callback" annotation to request that a stateful callback be injected. + * The following is a fragment of an implementation of the example service. + * In this example, the request is passed on to some other component, so + * that the example service acts essentially as an intermediary. Because the + * service is conversation scoped, the callback will still be available when + * the backend service sends back its asynchronous response. + * <p> + * This fragment must come from an implementation that offers two services, + * one that it offers to it clients (MyService) and one that is used for + * receiving callbacks from the back end (MyServiceCallback). The client of + * this service would also implement the methods defined in + * MyServiceCallback. + * <p> + * Stateful callbacks support some of the same use cases as are supported by + * the ability to pass service references as parameters. The primary + * difference is that stateful callbacks do not require any additional + * parameters be passed with service operations. This can be a great + * convenience. If the service has many operations and any of those + * operations could be the first operation of the conversation, it would be + * unwieldy to have to take a callback parameter as part of every operation, + * just in case it is the first operation of the conversation. It is also + * more natural than requiring the application developers to invoke an + * explicit operation whose only purpose is to pass the callback object that + * should be used. + * <p> + * This tests the *local* bidirectional interfaces option + */ + @Test + public void localstatefulCallback() throws Exception { + System.out.println("Setting up for local callback tests"); + ServiceFinder.init("callback-local.composite"); + aService = ServiceFinder.getService(AService.class, "AComponent"); + aService.testCallback(); + } + + /** + * Lines 534, 535 + * <p> + * Callbacks may be used for both remotable and local services. Either both + * interfaces of a bidirectional service must be remotable, or both must be + * local. It is illegal to mix the two. + * <p> + * In this test configuration BServiceCallback is remotable and CService is + * not + */ + @Test(expected = ServiceRuntimeException.class) + @Ignore("TUSCANY-2291") + public void statefulMixedCallback() throws Exception { + System.out.println("Setting up for mixed local/remote callback tests"); + ServiceFinder.init("callback-mixed.composite"); + aService = ServiceFinder.getService(AService.class, "AComponent"); + aService.testCallback(); + } + + /** + * Lines 613-615 + * <p> + * A stateless callback interface is a callback whose interface is not + * marked as conversational. Unlike stateless services, the client of that + * uses stateless callbacks will not have callback methods routed to an + * instance of the client that contains any state that is relevant to the + * conversation. + * <p> + * This test is identical in structure to the stateful test except that + * BServiceCallback is not conversational and we test that the callback is + * NOT routed to the same instance. + */ + @Test + public void statelessCallback() throws Exception { + System.out.println("Setting up for stateless callback tests"); + ServiceFinder.init("callback-stateless.composite"); + aService = ServiceFinder.getService(AService.class, "AComponent"); + aService.testCallback(); + } + + /** + * Lines 616-621 + * <p> + * The only information that the client has to work with (other than the + * parameters of the callback method) is a callback ID object that is passed + * with requests to the service and is guaranteed to be returned with any + * callback. + * <p> + * The following is a repeat of the client code fragment above, but with the + * assumption that in this case the MyServiceCallback is stateless. The + * client in this case needs to set the callback ID before invoking the + * service and then needs to get the callback ID when the response is + * received. + * <p> + * Lines 747-755 + * <p> + * The identity that is used to identify a callback request is, by default, + * generated by the system. However, it is possible to provide an + * application specified identity that should be used to identify the + * callback by calling the ServiceReference.setCallbackID() method. This can + * be used even either stateful or stateless callbacks. The identity will be + * sent to the service provider, and the binding must guarantee that the + * service provider will send the ID back when any callback method is + * invoked. The callback identity has the same restrictions as the + * conversation ID. It should either be a string or an object that can be + * serialized into XML. Bindings determine the particular mechanisms to use + * for transmission of the identity and these may lead to further + * restrictions when using a given binding. + * <p> + * TODO - Need to add explicit test back to stateful for 747-755 + */ + @Test + public void statelessCallback2() throws Exception { + System.out.println("Setting up for stateless callback id tests"); + ServiceFinder.init("callback-stateless-callbackid.composite"); + aService = ServiceFinder.getService(AService.class, "AComponent"); + aService.testCallback(); + + } + + /** + * Lines 650-654 + * <p> + * The difference for stateless services is that the callback field would + * not be available if the component is servicing a request for anything + * other than the original client. So, the technique used in the previous + * section, where there was a response from the backend Service which was + * forwarded as a callback from MyService would not work because the + * callback field would be null when the message from the backend system was + * received. + * <p> + */ + @Test + public void statelessCallback3() throws Exception { + System.out.println("Setting up for stateless callback ref null tests"); + ServiceFinder.init("callback-stateless-callbackfieldnull.composite"); + aService = ServiceFinder.getService(AService.class, "AComponent"); + aService.testCallback(); + + } + + /** + * Lines 658-669 + * <p> + * Since it is possible for a single implementation class to implement + * multiple services, it is also possible for callbacks to be defined for + * each of the services that it implements. The service implementation can + * include an injected field for each of its callbacks. The runtime injects + * the callback onto the appropriate field based on the type of the + * callback. The following shows the declaration of two fields, each of + * which corresponds to a particular service offered by the implementation. + * <p> + * Lines 670,671 + * <p> + * If a single callback has a type that is compatible with multiple declared + * callback fields, then all of them will be set. + */ + @Test + public void statefulMultiBidirectional() throws Exception { + System.out.println("Setting up for multi-bidirectional interfaces tests"); + ServiceFinder.init("callback-multi.composite"); + aService = ServiceFinder.getService(AService.class, "AComponent"); + aService.testCallback(); + aService.testCallback2(); // Includes test for 670,671 + + } + + /** + * Lines 675-706 + * <p> + * In addition to injecting a reference to a callback service, it is also + * possible to obtain a reference to a Callback instance by annotating a + * field or method with the "@Callback" annotation. A reference implementing + * the callback service interface may be obtained using + * CallableReference.getService(). The following fragments come from a + * service implementation that uses the callback API: + * <p> + * Alternatively a callback may be retrieved programmatically using the + * RequestContext API. The snippet below show how to retrieve a callback in + * a method programmatically: + * <p> + * Lines 695, 696 + * <p> + * Alternatively a callback may be retrieved programmatically using the + * RequestContext API. The snippet below show how to retrieve a callback in + * a method programmatically: + */ + @Test + public void accessingCallbacks() throws Exception { + System.out.println("Setting up for callback accessing tests"); + ServiceFinder.init("callback-accessing.composite"); + aService = ServiceFinder.getService(AService.class, "AComponent"); + aService.testCallback(); + aService.testCallback2(); // Lines 695-696 + + } + + /** + * Lines 708-724 + * <p> + * On the client side, the service that implements the callback can access + * the callback ID (i.e. reference parameters) that was returned with the + * callback operation also by accessing the request context, as follows: + * <p> + * On the client side, the object returned by the getServiceReference() + * method represents the service reference that was used to send the + * original request. The object returned by getCallbackID() represents the + * identity associated with the callback, which may be a single String or + * may be an object (as described below in “Customizing the Callback + * Identity”). + */ + @Test + public void callbackId() throws Exception { + System.out.println("Setting up for callback id tests"); + ServiceFinder.init("callback-id.composite"); + aService = ServiceFinder.getService(AService.class, "AComponent"); + aService.testCallback(); + + } + + /** + * Lines 728-732 + * <p> + * By default, the client component of a service is assumed to be the + * callback service for the bidirectional service. However, it is possible + * to change the callback by using the ServiceReference.setCallback() + * method. The object passed as the callback should implement the interface + * defined for the callback, including any additional SCA semantics on that + * interface such as its scope and whether or not it is remotable. + * <p> + * TODO - Need to complete testing of 1.6.7.5 after resolution of t-2312 + */ + @Test + public void customCallback() throws Exception { + System.out.println("Setting up for custom callback tests; create domain instance"); + ServiceFinder.init("callback-custom.composite"); + System.out.println("Setting up for custom callback tests; get AService handle"); + aService = ServiceFinder.getService(AService.class, "AComponent"); + aService.testCallback(); + + } +} |