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:
antelder 2010-06-25 12:08:21 +00:00
parent 7b2bc4f51a
commit f1d051611c
8 changed files with 458 additions and 0 deletions

View file

@ -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.

View file

@ -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>

View file

@ -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>

View file

@ -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);
}

View file

@ -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();
}
}

View file

@ -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);
}
}

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,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"});
}
}