non functional (as yet) elements of an async sample

git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@963244 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
kelvingoodson 2010-07-12 11:45:19 +00:00
parent 628aeed75c
commit 82309210e5
16 changed files with 646 additions and 0 deletions

View file

@ -0,0 +1,76 @@
<?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>tuscany-sca</artifactId>
<version>2.0-SNAPSHOT</version>
<relativePath>../../pom.xml</relativePath>
</parent>
<artifactId>embedded-jse-async-sample-launcher</artifactId>
<name>Embedded JSE Launcher for async samples</name>
<dependencies>
<dependency>
<groupId>org.apache.tuscany.sca</groupId>
<artifactId>tuscany-feature-api</artifactId>
<type>pom</type>
<version>2.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.apache.tuscany.sca</groupId>
<artifactId>tuscany-feature-core</artifactId>
<type>pom</type>
<version>2.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.apache.tuscany.sca</groupId>
<artifactId>tuscany-feature-webservice</artifactId>
<type>pom</type>
<version>2.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.apache.tuscany.sca</groupId>
<artifactId>tuscany-feature-ejava</artifactId>
<type>pom</type>
<version>2.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<finalName>${artifactId}</finalName>
<plugins>
</plugins>
</build>
</project>

View file

@ -0,0 +1,6 @@
package calculator;
public interface Calculate {
String factors();
}

View file

@ -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 calculator;
import org.oasisopen.sca.annotation.Remotable;
/**
* The Calculator service interface.
*/
@Remotable
public interface CalculatorService {
String factors(Integer i);
}

View file

@ -0,0 +1,43 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package launcher;
import org.apache.tuscany.sca.node.Contribution;
import org.apache.tuscany.sca.node.Node;
import org.apache.tuscany.sca.node.NodeFactory;
/**
* Base JSE launcher function
*/
public class RuntimeIntegration {
public Node startNode(Contribution... contributions){
Node node = NodeFactory.newInstance().createNode(contributions);
node.start();
return node;
}
public void stopNode(Node node){
node.stop();
}
}

View file

@ -0,0 +1,91 @@
/*
* 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 launcher;
import org.apache.tuscany.sca.node.Contribution;
import org.apache.tuscany.sca.node.Node;
import calculator.CalculatorService;
/**
* This client program shows how to create an embedded SCA runtime, load a contribution,
* start it and, in some cases, locate and invoke an SCA component
*/
public class SampleJSELauncher extends RuntimeIntegration {
protected boolean waitBeforeStopping = false;
public static void main(String[] args) throws Exception {
// get the contribution name from the 1st argument it there is one
// assume that more than one argument means that the caller wants to
// keep the SCA application running while other clients use the services
boolean waitBeforeStopping = false;
if (args != null && args.length > 1 && args[1].equals("waitBeforeStopping")){
waitBeforeStopping = true;
}
SampleJSELauncher launcher = new SampleJSELauncher(waitBeforeStopping);
launcher.launchBindingSCACalculator();
}
public SampleJSELauncher(boolean waitBeforeStopping){
this.waitBeforeStopping = waitBeforeStopping;
}
/**
* Wait for user input. Allows us to keep the Tuscany runtime and the SCA application
* running while other clients access the services provided
*/
public void waitBeforeStopping(){
if (waitBeforeStopping){
try {
System.out.println("Press key to continue");
int input = System.in.read();
} catch (Exception ex) {
// do nothing
}
}
}
/**
* The contribution-binding-sca-calculator contribution includes a client component
* that calls the CalculatorServiceComponent from an operation marked by @Init.
*/
public void launchBindingSCACalculator(){
Node node = startNode(new Contribution("c1", "file://C:/Dev7/SCA/samples/my-contribution/target/my--sample-contribution-implementation-java-calculator.jar"));
waitBeforeStopping();
stopNode(node);
}
// public void launchImplementationJavaCalculator(){
// Node node = startNode(new Contribution("c1", "../contribution-implementation-java-calculator/target/classes"));
// waitBeforeStopping();
// stopNode(node);
// }
}

View file

@ -0,0 +1,42 @@
/*
* 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 launcher;
/**
* This exception signals problems in the management of SCA component execution.
*/
public class SampleLauncherException extends RuntimeException {
/**
* Constructs a SampleLauncherException with no detail message.
*/
public SampleLauncherException() {
super();
}
/**
* Constructs a SampleLauncherException with the specified detail
* message.
*
* @param message the detail message
*/
public SampleLauncherException(String message) {
super(message);
}
}

View file

@ -0,0 +1,47 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package launcher;
import org.junit.Test;
/**
* Test sample contributions.
*/
public class LauncherTestCase {
@Test
public void testContributionBindingSCACalculator() throws Exception {
SampleJSELauncher.main(new String[] {"contribution-binding-sca-calculator"});
}
@Test
public void testContributionBindingWSCalculator() throws Exception {
SampleJSELauncher.main(new String[] {"contribution-binding-ws-calculator"});
}
@Test
public void testContributionBindingRMICalculator() throws Exception {
SampleJSELauncher.main(new String[] {"contribution-binding-rmi-calculator"});
}
@Test
public void testContributionImplementationJavaCalculator() throws Exception {
SampleJSELauncher.main(new String[] {"contribution-implementation-java-calculator"});
}
}

View file

@ -0,0 +1,58 @@
<?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>tuscany-sca</artifactId>
<version>2.0-SNAPSHOT</version>
<relativePath>../../pom.xml</relativePath>
</parent>
<artifactId>sample-contribution-implementation-java-calculator-async</artifactId>
<name>Apache Tuscany SCA Sample Contribution Implementation Java Calculator for Async Sample</name>
<dependencies>
<dependency>
<groupId>org.apache.tuscany.sca</groupId>
<artifactId>tuscany-feature-api</artifactId>
<type>pom</type>
<version>2.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<finalName>${artifactId}</finalName>
<plugins>
<plugin>
<groupId>org.apache.tuscany.maven.plugins</groupId>
<artifactId>maven-tuscany-plugin</artifactId>
<version>2.0-SNAPSHOT</version>
</plugin>
</plugins>
</build>
</project>

View file

@ -0,0 +1,18 @@
package calculator;
import java.util.concurrent.Future;
import javax.xml.ws.AsyncHandler;
import javax.xml.ws.Response;
/**
* client interface for async reference
* @author kgoodson
*
*/
public interface CalculateViaAsyncRef {
public Response<String> calculate( Integer i1);
}

View file

@ -0,0 +1,26 @@
package calculator;
import java.util.concurrent.ExecutionException;
import javax.xml.ws.Response;
import org.oasisopen.sca.annotation.Reference;
public class CalculateViaAsyncRefImpl implements CalculatorService {
@Reference CalculateViaAsyncRef calculatorRef = null;
@Override
public String calculate(Integer n1) {
Response<String> r = calculatorRef.calculate(n1);
String result=null;
try {
result = r.get();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
return result;
}
}

View file

@ -0,0 +1,50 @@
/*
* 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 calculator;
import org.oasisopen.sca.annotation.EagerInit;
import org.oasisopen.sca.annotation.Init;
import org.oasisopen.sca.annotation.Reference;
import org.oasisopen.sca.annotation.Scope;
/**
* This client program shows how to create an SCA runtime, start it,
* and locate and invoke a SCA component
*/
@Scope("COMPOSITE") @EagerInit
public class CalculatorClient {
private CalculatorService calculatorService;
@Reference
public void setCalculatorService(CalculatorService calculatorService) {
this.calculatorService = calculatorService;
}
@Init
public void calculate() {
// Calculate
//System.out.println("SCA API ClassLoader: " + print(Reference.class.getClassLoader()));
System.out.println("calculation=" + calculatorService.calculate(20));
}
}

View file

@ -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 calculator;
import org.oasisopen.sca.annotation.Remotable;
/**
* The Calculator service interface.
*/
@Remotable
public interface CalculatorService {
String calculate(Integer n1);
}

View file

@ -0,0 +1,43 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package calculator;
/**
* An implementation of the Calculator service.
*/
public class CalculatorServiceImpl implements CalculatorService {
@Override
public String calculate(Integer n1) {
// TODO brute force search for divisors of n1 (http://en.wikipedia.org/wiki/Brute-force_search)
// which should give a nice example of a method that takes a long time if given a
// big enough input parameter
return "1 2";
}
}

View file

@ -0,0 +1,30 @@
<?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://docs.oasis-open.org/ns/opencsa/sca/200912"
targetNamespace="http://sample"
xmlns:sample="http://sample"
name="Calculator">
<component name="CalculatorServiceComponent">
<implementation.java class="calculator.CalculatorServiceImpl"/>
<reference name="calcService" interface.java="CalculateViaAsyncRef.java" />
</component>
</composite>

View file

@ -0,0 +1,30 @@
<?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://docs.oasis-open.org/ns/opencsa/sca/200912"
targetNamespace="http://sample"
xmlns:sample="http://sample"
name="CalculatorClient">
<component name="CalculatorClient">
<implementation.java class="calculator.CalculatorClient"/>
<reference name="calculatorService" target="CalculatorServiceComponent" />
</component>
</composite>

View file

@ -0,0 +1,24 @@
<?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.
-->
<contribution xmlns="http://docs.oasis-open.org/ns/opencsa/sca/200912"
xmlns:sample="http://sample">
<deployable composite="sample:Calculator"/>
<deployable composite="sample:CalculatorClient"/>
</contribution>