Add a launcher sample using osgi and the base jar
git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@957909 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
7b2bc4f51a
commit
f1d051611c
8 changed files with 458 additions and 0 deletions
|
@ -0,0 +1,24 @@
|
|||
OSGI Sample Launcher
|
||||
===================
|
||||
|
||||
This directory contains a sample launcher for the running the
|
||||
tuscany sample contributions in an OSGI environment.
|
||||
|
||||
The difference between this sample and the sample with the name without the
|
||||
-base suffix is that this one uses the Tuscany aggregated jar to minimize the
|
||||
jars a user needs to use.
|
||||
|
||||
The README file in the <distribution-unpack-dir>/samples directory provides
|
||||
general instructions about building and running sample contributions using the
|
||||
tuscany sample launchers. ( where
|
||||
distribution-unpack-dir is the directory in which you unpacked the tuscany
|
||||
binary distribution archive)
|
||||
|
||||
To use this sample OSGI launcher with ant excute the command
|
||||
|
||||
ant run-<contributionname>
|
||||
|
||||
where run-<contributionname> is one of the targets in the build.xml file
|
||||
|
||||
To use this sample launcher to run all of the contributions as junit test cases,
|
||||
execute the command "mvn" in the launcher directory.
|
|
@ -0,0 +1,94 @@
|
|||
<!--
|
||||
* 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 name="launcher-embedded-osgi" default="run">
|
||||
<property name="tuscany.home" value="../.."/>
|
||||
<property name="jar.name" value="sample-launcher-embedded-osgi.jar" />
|
||||
<property name="main.class" value="launcher.SampleJSELauncher" />
|
||||
|
||||
<echo>${tuscany.home}</echo>
|
||||
|
||||
<target name="init">
|
||||
<delete quiet="true" includeemptydirs="true">
|
||||
<fileset dir="target"/>
|
||||
</delete>
|
||||
<mkdir dir="target/classes"/>
|
||||
</target>
|
||||
|
||||
<target name="compile" depends="init">
|
||||
<javac srcdir="src/main/java"
|
||||
destdir="target/classes"
|
||||
debug="on"
|
||||
source="1.5"
|
||||
target="1.5"
|
||||
failonerror="true">
|
||||
<classpath>
|
||||
<fileset dir="${tuscany.home}/lib">
|
||||
<include name="tuscany-base-*.jar" />
|
||||
</fileset>
|
||||
</classpath>
|
||||
</javac>
|
||||
<jar destfile="target/${jar.name}" basedir="target/classes">
|
||||
<manifest>
|
||||
<attribute name="Main-Class" value="${main.class}" />
|
||||
</manifest>
|
||||
</jar>
|
||||
</target>
|
||||
|
||||
<target name="run" depends="compile">
|
||||
<echo>Please use 'ant run-name-of-sample-contribution-to-run' for example, try one of</echo>
|
||||
<echo> 'ant run-contribution-binding-sca-calculator' </echo>
|
||||
</target>
|
||||
|
||||
<target name="run-contribution-binding-sca-calculator" depends="compile">
|
||||
<java classname="${main.class}"
|
||||
fork="true"
|
||||
failonerror="true">
|
||||
<classpath>
|
||||
<pathelement location="target/${jar.name}"/>
|
||||
<fileset dir="${tuscany.home}/modules">
|
||||
<include name="tuscany-node-api-*.jar" />
|
||||
<include name="tuscany-sca-api-*.jar" />
|
||||
<include name="tuscany-node-launcher-equinox-*.jar" />
|
||||
</fileset>
|
||||
</classpath>
|
||||
<arg value="contribution-binding-sca-calculator"/>
|
||||
</java>
|
||||
<echo> and ant run </echo>
|
||||
</target>
|
||||
|
||||
<!-- TODO - this runs from mvn but not from ant so there is some issue with the
|
||||
way the environment gets set up
|
||||
<target name="run-contribution-binding-ws-calculator" depends="compile">
|
||||
<java classname="${main.class}"
|
||||
fork="true"
|
||||
failonerror="true">
|
||||
<classpath>
|
||||
<pathelement location="target/${jar.name}"/>
|
||||
<fileset dir="${tuscany.home}/modules">
|
||||
<include name="tuscany-node-api-*.jar" />
|
||||
<include name="tuscany-sca-api-*.jar" />
|
||||
<include name="tuscany-node-launcher-equinox-*.jar" />
|
||||
</fileset>
|
||||
</classpath>
|
||||
<arg value="contribution-binding-ws-calculator"/>
|
||||
</java>
|
||||
</target>
|
||||
-->
|
||||
|
||||
</project>
|
|
@ -0,0 +1,71 @@
|
|||
<?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-embedded-osgi-base</artifactId>
|
||||
<name>Apache Tuscany SCA Sample Launcher Embedded OSGi using base jar</name>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.apache.tuscany.sca.shades</groupId>
|
||||
<artifactId>tuscany-base-nodep</artifactId>
|
||||
<version>2.0-SNAPSHOT</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>commons-cli</groupId>
|
||||
<artifactId>commons-cli</artifactId>
|
||||
<version>1.2</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.eclipse</groupId>
|
||||
<artifactId>osgi</artifactId>
|
||||
<version>3.5.0-v20090520</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.eclipse.osgi</groupId>
|
||||
<artifactId>services</artifactId>
|
||||
<version>3.2.0-v20090520-1800</version>
|
||||
<scope>compile</scope>
|
||||
</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>
|
|
@ -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 calculator;
|
||||
|
||||
import org.oasisopen.sca.annotation.Remotable;
|
||||
|
||||
|
||||
/**
|
||||
* The Calculator service interface.
|
||||
*/
|
||||
@Remotable
|
||||
public interface CalculatorService {
|
||||
|
||||
double add(double n1, double n2);
|
||||
|
||||
double subtract(double n1, double n2);
|
||||
|
||||
double multiply(double n1, double n2);
|
||||
|
||||
double divide(double n1, double n2);
|
||||
|
||||
}
|
|
@ -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 launcher;
|
||||
|
||||
import org.apache.tuscany.sca.node.Contribution;
|
||||
import org.apache.tuscany.sca.node.Node;
|
||||
import org.apache.tuscany.sca.node.equinox.launcher.LauncherException;
|
||||
import org.apache.tuscany.sca.node.equinox.launcher.NodeLauncher;
|
||||
|
||||
|
||||
/**
|
||||
* OSGi launcher function
|
||||
*/
|
||||
public class RuntimeIntegration {
|
||||
|
||||
public Node startNode(Contribution... contributions){
|
||||
NodeLauncher launcher = NodeLauncher.newInstance();
|
||||
|
||||
// TODO - why do we have 3 different versions of the Contribution class?
|
||||
org.apache.tuscany.sca.node.equinox.launcher.Contribution equinoxContributions[] =
|
||||
new org.apache.tuscany.sca.node.equinox.launcher.Contribution[contributions.length];
|
||||
int i = 0;
|
||||
for (Contribution inContrib : contributions) {
|
||||
org.apache.tuscany.sca.node.equinox.launcher.Contribution outContrib =
|
||||
new org.apache.tuscany.sca.node.equinox.launcher.Contribution(inContrib.getURI(), inContrib.getLocation());
|
||||
equinoxContributions[i] = outContrib;
|
||||
i++;
|
||||
}
|
||||
Node node = null;
|
||||
|
||||
try {
|
||||
node = launcher.createNode(null, equinoxContributions);
|
||||
} catch (LauncherException ex) {
|
||||
throw new SampleLauncherException(ex.getMessage());
|
||||
}
|
||||
node.start();
|
||||
return node;
|
||||
}
|
||||
|
||||
public void stopNode(Node node){
|
||||
node.stop();
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,89 @@
|
|||
/*
|
||||
* 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 java.net.URI;
|
||||
|
||||
import org.apache.tuscany.sca.node.Contribution;
|
||||
import org.apache.tuscany.sca.node.Node;
|
||||
import org.oasisopen.sca.NoSuchDomainException;
|
||||
import org.oasisopen.sca.NoSuchServiceException;
|
||||
import org.oasisopen.sca.client.SCAClientFactory;
|
||||
|
||||
import calculator.CalculatorService;
|
||||
|
||||
|
||||
/**
|
||||
* This client program shows how to create an embedded SCA runtime, start it,
|
||||
* and locate and invoke a SCA component
|
||||
*/
|
||||
public class SampleJSELauncher extends RuntimeIntegration {
|
||||
|
||||
public static void main(String[] args) throws Exception {
|
||||
SampleJSELauncher launcher = new SampleJSELauncher();
|
||||
|
||||
String contribution = null;
|
||||
|
||||
if (args == null || args.length != 1){
|
||||
System.out.println("Please provide the name of the sample contribution to run as a parameter");
|
||||
System.out.println("Running binding-sca-calculator by default");
|
||||
contribution = "contribution-binding-sca-calculator";
|
||||
} else {
|
||||
contribution = args[0];
|
||||
}
|
||||
|
||||
if (contribution.equals("contribution-binding-sca-calculator")){
|
||||
launcher.launchBindingSCACalculator();
|
||||
} else if (contribution.equals("contribution-binding-ws-calculator")){
|
||||
launcher.launchBindingWSCalculator();
|
||||
} else {
|
||||
System.out.println("Sample contribution " + contribution + "not found");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 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", "../binding-sca/contribution-calculator/target/sample-contribution-binding-sca-calculator.jar"));
|
||||
|
||||
stopNode(node);
|
||||
}
|
||||
|
||||
/*
|
||||
* Using a Tuscany specific mechanism for getting at local service proxies
|
||||
*/
|
||||
public void launchBindingWSCalculator() throws NoSuchDomainException, NoSuchServiceException{
|
||||
Node node = startNode(new Contribution("c1", "../contribution-binding-ws-calculator/target/sample-contribution-binding-ws-calculator.jar"));
|
||||
|
||||
CalculatorService calculator = node.getService(CalculatorService.class, "CalculatorServiceComponent");
|
||||
|
||||
double result = calculator.add(3, 2);
|
||||
System.out.println("3 + 2 = " + result);
|
||||
if (result != 5.0){
|
||||
throw new SampleLauncherException();
|
||||
}
|
||||
|
||||
stopNode(node);
|
||||
}
|
||||
|
||||
}
|
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
|
@ -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 launcher;
|
||||
|
||||
import org.junit.Test;
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Test the Calculator composition.
|
||||
*/
|
||||
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"});
|
||||
}
|
||||
}
|
Loading…
Add table
Reference in a new issue