Add a sample shell program useful to start and stop SCA composites interactively.
git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@960122 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
fccdd6a87c
commit
1890fd58eb
6 changed files with 290 additions and 0 deletions
31
sca-java-2.x/trunk/samples/launcher-shell/README
Normal file
31
sca-java-2.x/trunk/samples/launcher-shell/README
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
Sample Tuscany Shell
|
||||
====================
|
||||
|
||||
This directory contains a sample shell program supporting simple commands to
|
||||
start and stop SCA composites.
|
||||
|
||||
To build the sample shell do this:
|
||||
mvn install
|
||||
mvn dependency copy-dependencies
|
||||
|
||||
To run it:
|
||||
./sca
|
||||
|
||||
at the prompt:
|
||||
start myNode mySampleContrib ../contribution-implementation-java-calculator/target/classes
|
||||
|
||||
or:
|
||||
start myNode mySampleContrib http://people.apache.org/~jsdelfino/tuscany/java/test/sample-contribution-binding-ws-calculator.jar
|
||||
|
||||
also try:
|
||||
status
|
||||
stop myNode
|
||||
bye
|
||||
|
||||
Starting and stopping composites is pretty fast. To see that, try the following
|
||||
two scripts, which start/stop a sample composite 10 times.
|
||||
|
||||
./sca <sca-test
|
||||
or
|
||||
./sca <sca-test-remote
|
||||
|
||||
76
sca-java-2.x/trunk/samples/launcher-shell/pom.xml
Normal file
76
sca-java-2.x/trunk/samples/launcher-shell/pom.xml
Normal 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>sample-launcher-shell</artifactId>
|
||||
<name>Apache Tuscany SCA Sample Launcher Shell</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>
|
||||
2
sca-java-2.x/trunk/samples/launcher-shell/sca
Executable file
2
sca-java-2.x/trunk/samples/launcher-shell/sca
Executable file
|
|
@ -0,0 +1,2 @@
|
|||
#!/bin/bash
|
||||
java -classpath `find target -name "*.jar" | awk '{ printf "%s:", $1 }'` sample.Shell
|
||||
20
sca-java-2.x/trunk/samples/launcher-shell/sca-test
Normal file
20
sca-java-2.x/trunk/samples/launcher-shell/sca-test
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
start foo c1 ../contribution-implementation-java-calculator/target/classes
|
||||
stop foo
|
||||
start foo c1 ../contribution-implementation-java-calculator/target/classes
|
||||
stop foo
|
||||
start foo c1 ../contribution-implementation-java-calculator/target/classes
|
||||
stop foo
|
||||
start foo c1 ../contribution-implementation-java-calculator/target/classes
|
||||
stop foo
|
||||
start foo c1 ../contribution-implementation-java-calculator/target/classes
|
||||
stop foo
|
||||
start foo c1 ../contribution-implementation-java-calculator/target/classes
|
||||
stop foo
|
||||
start foo c1 ../contribution-implementation-java-calculator/target/classes
|
||||
stop foo
|
||||
start foo c1 ../contribution-implementation-java-calculator/target/classes
|
||||
stop foo
|
||||
start foo c1 ../contribution-implementation-java-calculator/target/classes
|
||||
stop foo
|
||||
start foo c1 ../contribution-implementation-java-calculator/target/classes
|
||||
stop foo
|
||||
20
sca-java-2.x/trunk/samples/launcher-shell/sca-test-remote
Normal file
20
sca-java-2.x/trunk/samples/launcher-shell/sca-test-remote
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
start foo c1 http://people.apache.org/~jsdelfino/tuscany/java/test/sample-contribution-binding-ws-calculator.jar
|
||||
stop foo
|
||||
start foo c1 http://people.apache.org/~jsdelfino/tuscany/java/test/sample-contribution-binding-ws-calculator.jar
|
||||
stop foo
|
||||
start foo c1 http://people.apache.org/~jsdelfino/tuscany/java/test/sample-contribution-binding-ws-calculator.jar
|
||||
stop foo
|
||||
start foo c1 http://people.apache.org/~jsdelfino/tuscany/java/test/sample-contribution-binding-ws-calculator.jar
|
||||
stop foo
|
||||
start foo c1 http://people.apache.org/~jsdelfino/tuscany/java/test/sample-contribution-binding-ws-calculator.jar
|
||||
stop foo
|
||||
start foo c1 http://people.apache.org/~jsdelfino/tuscany/java/test/sample-contribution-binding-ws-calculator.jar
|
||||
stop foo
|
||||
start foo c1 http://people.apache.org/~jsdelfino/tuscany/java/test/sample-contribution-binding-ws-calculator.jar
|
||||
stop foo
|
||||
start foo c1 http://people.apache.org/~jsdelfino/tuscany/java/test/sample-contribution-binding-ws-calculator.jar
|
||||
stop foo
|
||||
start foo c1 http://people.apache.org/~jsdelfino/tuscany/java/test/sample-contribution-binding-ws-calculator.jar
|
||||
stop foo
|
||||
start foo c1 http://people.apache.org/~jsdelfino/tuscany/java/test/sample-contribution-binding-ws-calculator.jar
|
||||
stop foo
|
||||
|
|
@ -0,0 +1,141 @@
|
|||
/*
|
||||
* 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 sample;
|
||||
|
||||
import static java.lang.System.in;
|
||||
import static java.lang.System.out;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Map;
|
||||
import java.util.HashMap;
|
||||
import java.util.concurrent.Callable;
|
||||
import java.io.BufferedReader;
|
||||
import java.io.InputStreamReader;
|
||||
import java.io.IOException;
|
||||
import org.apache.tuscany.sca.node.Contribution;
|
||||
import org.apache.tuscany.sca.node.Node;
|
||||
import org.apache.tuscany.sca.node.NodeFactory;
|
||||
|
||||
|
||||
/**
|
||||
* A little SCA command shell.
|
||||
*/
|
||||
public class Shell {
|
||||
final NodeFactory nodeFactory = NodeFactory.newInstance();
|
||||
|
||||
public static class NodeInfo {
|
||||
final String name;
|
||||
final String curi;
|
||||
final String cloc;
|
||||
final Node node;
|
||||
|
||||
NodeInfo(final String name, final String curi, final String cloc, final Node node) {
|
||||
this.name = name;
|
||||
this.curi = curi;
|
||||
this.cloc = cloc;
|
||||
this.node = node;
|
||||
}
|
||||
|
||||
public String toString() {
|
||||
return name + " " + curi + " " + cloc;
|
||||
}
|
||||
}
|
||||
final Map<String, NodeInfo> nodes = new HashMap<String, NodeInfo>();
|
||||
|
||||
final List<String> history = new ArrayList<String>();
|
||||
|
||||
public static void main(final String[] args) throws Exception {
|
||||
new Shell().run();
|
||||
}
|
||||
|
||||
boolean start(final String name, final String curi, final String cloc) {
|
||||
final Node node = nodeFactory.createNode(new Contribution(curi, cloc));
|
||||
nodes.put(name, new NodeInfo(name, curi, cloc, node));
|
||||
node.start();
|
||||
return true;
|
||||
}
|
||||
|
||||
boolean stop(final String name) {
|
||||
nodes.get(name).node.stop();
|
||||
nodes.remove(name);
|
||||
return true;
|
||||
}
|
||||
|
||||
boolean status() {
|
||||
out.println(nodes.values());
|
||||
return true;
|
||||
}
|
||||
|
||||
boolean history() {
|
||||
for (String l: history)
|
||||
out.println(l);
|
||||
return true;
|
||||
}
|
||||
|
||||
static boolean bye() {
|
||||
return false;
|
||||
}
|
||||
|
||||
List<String> read(final BufferedReader r) throws IOException {
|
||||
out.print("=> ");
|
||||
final String l = r.readLine();
|
||||
history.add(l);
|
||||
return Arrays.asList(l != null? l.split(" ") : "bye".split(" "));
|
||||
}
|
||||
|
||||
Callable<Boolean> eval(final List<String> toks) {
|
||||
final String op = toks.get(0);
|
||||
if (op.equals("start")) return new Callable<Boolean>() { public Boolean call() {
|
||||
return start(toks.get(1), toks.get(2), toks.get(3));
|
||||
}};
|
||||
if (op.equals("stop")) return new Callable<Boolean>() { public Boolean call() {
|
||||
return stop(toks.get(1));
|
||||
}};
|
||||
if (op.equals("status")) return new Callable<Boolean>() { public Boolean call() {
|
||||
return status();
|
||||
}};
|
||||
if (op.equals("history")) return new Callable<Boolean>() { public Boolean call() {
|
||||
return history();
|
||||
}};
|
||||
if (op.equals("bye")) return new Callable<Boolean>() { public Boolean call() {
|
||||
return bye();
|
||||
}};
|
||||
return new Callable<Boolean>() { public Boolean call() {
|
||||
return true;
|
||||
}};
|
||||
}
|
||||
|
||||
boolean apply(final Callable<Boolean> func) {
|
||||
try {
|
||||
return func.call();
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
public Map<String, NodeInfo> run() throws IOException {
|
||||
final BufferedReader r = new BufferedReader(new InputStreamReader(in));
|
||||
while(apply(eval(read(r))));
|
||||
return nodes;
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue