Copy all trunk samples to contrib
git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@1069274 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
d64d4281ec
commit
8ae95d6e10
752 changed files with 46014 additions and 0 deletions
154
sca-java-2.x/contrib/samples/README
Normal file
154
sca-java-2.x/contrib/samples/README
Normal file
|
@ -0,0 +1,154 @@
|
|||
The Apache Tuscany SCA Samples
|
||||
==============================
|
||||
|
||||
Welcome to the Apache Tuscany SCA Java runtime. You can find more general
|
||||
documentation about the runtime at:
|
||||
|
||||
http://tuscany.apache.org/documentation-2x/
|
||||
|
||||
Here we give a short overview of what you can find in the samples directory.
|
||||
More detail on the individual sample contributions can be found at:
|
||||
|
||||
http://tuscany.apache.org/documentation-2x/20-beta-samples-documentation.html
|
||||
|
||||
There are several samples subdirectories in the distribution;
|
||||
|
||||
getting-started
|
||||
===============
|
||||
|
||||
This is a good place to start if you've not tried Tuscany SCA Java before. This
|
||||
directory contains a number of simple "SCA Contributions" that can be run using
|
||||
the Tuscany SCA runtime. An SCA Contribution is the way that SCA composite
|
||||
applications are packaged so they can be run. For general information on SCA
|
||||
see http://tuscany.apache.org/documentation-2x/sca-introduction.html
|
||||
|
||||
learning-more
|
||||
=============
|
||||
|
||||
This directory contains many more SCA Contributions that you can try with
|
||||
the Tuscany SCA Java runtime. Some demonstrate particular features of the
|
||||
runtime, or example, the contributions under the async directory demonstrate
|
||||
the asynchronous programming model that the runtime supports.
|
||||
|
||||
SCA is extensible. You can plug in extensions to support many different types
|
||||
of technology. The Tuscany SCA Java runtime comes with lots of extensions
|
||||
and the majority of contributions here demonstrate these extensions. They are
|
||||
organized under directories following the name of the extension, for example,
|
||||
contributions that demonstrate the web services binding in operation can
|
||||
be found in the binding-ws directory. When you want to use the web service
|
||||
binding with an SCA service a reference it appears in the composite XML in
|
||||
the following way:
|
||||
|
||||
<service>
|
||||
<binding.ws/>
|
||||
</service>
|
||||
|
||||
Hence it should be easy to map between extensions, as they appear in
|
||||
composite files and other samples that demonstrate various features of the
|
||||
extension.
|
||||
|
||||
The contributions here can be run with using the approach that you find
|
||||
most convenient from the running-tuscany directory.
|
||||
|
||||
running-tuscany
|
||||
===============
|
||||
|
||||
The Tuscany SCA Java runtime can be used directly from the command line. It can
|
||||
also be embedded in other programs. As such there are many different ways that
|
||||
you can start the Tuscany SCA runtime and deploy contributions to it. Each
|
||||
directory here describes a different way of running Tuscany. In most cases these
|
||||
different approaches can be used to run any of the contributions from the
|
||||
getting-started or learning-more directories.
|
||||
|
||||
applications
|
||||
============
|
||||
|
||||
The contributions here demonstrate more fully formed applications when
|
||||
compared to the contributions found the getting-started or learning-more
|
||||
directories.
|
||||
|
||||
extending-tuscany
|
||||
=================
|
||||
|
||||
Once you're familiar with Tuscany and SCA you're likely to find that to
|
||||
implement you're application you need particular bindings, implementation
|
||||
types, policies or databindings. The examples in this directory show you
|
||||
how to extend the Tuscany runtime to include the technologies you need to use.
|
||||
|
||||
Running samples
|
||||
---------------
|
||||
|
||||
Running a samples contribution involves 3 basic steps
|
||||
|
||||
1) build the contribution
|
||||
|
||||
Using ant, maven or eclipse (see below)
|
||||
|
||||
2) launch the contribution
|
||||
|
||||
Using one of the approaches described in the running-tuscany directory
|
||||
|
||||
3) send a test message to the a component service
|
||||
|
||||
When you want to exercise an SCA composite application you have to send a
|
||||
message to a component service. There are several ways of doing this depending
|
||||
on how the sample contribution has been configured. For example, you could
|
||||
send a SOAP message using the Web Services explorer in Eclipse, you could
|
||||
use a separate client program that uses the SCA client API, the sample
|
||||
contribution itself may even include initialization code that sends a test
|
||||
message when the contribution is started. The documentation for each sample
|
||||
describes what to do to send a test message.
|
||||
|
||||
Building the sample contributions using Ant
|
||||
--------------------------------------------
|
||||
Most sample contributions are provided with a build.xml file. When you see one
|
||||
you can build it using Ant.
|
||||
|
||||
These build.xml files are designed to work with the Tuscany SCA Java binary
|
||||
distribution and build a classpath that, by various means, refers to the
|
||||
jars that are shipped in the modules directory. For them to work properly
|
||||
they should be run from the directory in which you find the build.xml file.
|
||||
|
||||
cd <sampledir>
|
||||
ant
|
||||
|
||||
The result of this process will be the built contribution (a jar file) in the
|
||||
target subdirectory of the sample contribution directory.
|
||||
|
||||
Once the sample is built you have the option of running the sample in whatever
|
||||
way best suits you.
|
||||
|
||||
Building SCA Samples Using Maven
|
||||
--------------------------------
|
||||
All sample contributions are provided with a pom.xml Maven build file. The
|
||||
Maven build process will work from both source and binary distributions.
|
||||
|
||||
cd <sampledir>
|
||||
mvn
|
||||
|
||||
This will take a little while to complete. Experience with Maven tells us that
|
||||
sometimes there are problems downloading the dependencies that Apache Tuscany
|
||||
SCA requires. If Maven reports that it cannot download required dependencies
|
||||
try running the Maven build again.
|
||||
|
||||
When using Maven the samples are unit tested using JUnit test cases and so you
|
||||
will sometimes see test output during the build process.
|
||||
|
||||
The result of this process will be the built contribution (a jar file) in the
|
||||
target subdirectory of the sample contribution directory.
|
||||
|
||||
Once the sample is built you have the option of running the sample in whatever
|
||||
way best suits you.
|
||||
|
||||
Building Samples In An IDE
|
||||
---------------------------
|
||||
|
||||
The easiest way to use the samples in an IDE is to use Maven to generate all
|
||||
of the IDE project files for you automatically. You don't have to do this
|
||||
though and can use a series of manual steps in order to import the Tuscany
|
||||
samples into an IDE.
|
||||
|
||||
Both approaches to importing SCA contribution projects into Eclipse are
|
||||
documented at:
|
||||
|
||||
http://tuscany.apache.org/import-existing-tuscany-sca-projects-into-eclipse.html
|
|
@ -0,0 +1,55 @@
|
|||
Eight Ball Demo
|
||||
---------------
|
||||
|
||||
The Eight Ball Demo is a lighthearted application based on the Doug Tidwell's Magic 8-Ball demo (http://www.ibm.com/developerworks/webservices/library/ws-eight/) to demonstrate the Tuscany distributed domain support.
|
||||
|
||||
There is a eightball.jar SCA contribution which has a Java component that answers yes-no questions, and an eightball-test.jar which is a simple test harness to invoke the EightBall service from the command line. To make the demo more interesting the eightball gives the answers in German.
|
||||
|
||||
There is a translator.jar and contribution which has a component that can translate phrases between German and English, and a translator-test.jar for testing that at the command line. Presently the translator is just hardcoded with the phrases the EIghtball uses, later it would be good to enhance the translator to use one of Tuscanys bindings to call one of the remote translaotr services available on the internet.
|
||||
|
||||
There is a eightball-process.jar contribution which has a Java component which uses the translator and eightball services to translate phrases from English to German, ask the eightball the question, and then translate the answer from German to English. Ideally this would be rewritten using BPEL. And an associated eightball-process-test.jar to test it at the command line.
|
||||
|
||||
And finally there's an eightball-webapp which has a simple webapp to invoke all that from a web gui. Presently this doesn't embed the Tuscany runtime so needs to run on a Tomact with the tuscany.war distribution installed.
|
||||
|
||||
|
||||
|
||||
When the SCAClient API is updated to work with the distributed domain it would be good to simplify all the *-test.jar contributions to show using the SCAClient APIs.
|
||||
|
||||
If you've a recent 2.x full build you can run the contributions using the tuscany.bat script in the 2.x distribution (which you can find in distribution\all\target\apache-tuscany-sca-all-2.0-SNAPSHOT-dir\tuscany-sca-2.0-SNAPSHOT). Its easiest if you add that to your environment path, eg:
|
||||
|
||||
set PATH=\Tuscany\SVN\2.x-trunk\distribution\all\target\apache-tuscany-sca-all-2.0-SNAPSHOT-dir\tuscany-sca-2.0-SNAPSHOT\bin;%PATH%
|
||||
|
||||
then at a command prompt:
|
||||
|
||||
tuscany tribes:eightballDomain eightball.jar
|
||||
|
||||
and at another command prompt:
|
||||
|
||||
tuscany tribes:eightballDomain eightball-test.jar
|
||||
|
||||
That uses multicast, running on separate machines you need point one node at another, so
|
||||
|
||||
tuscany tribes:eightballDomain eightball.jar
|
||||
|
||||
then in the console log look for the IP in the line:
|
||||
|
||||
INFO: Receiver Server Socket bound to:/9.164.186.49:4000
|
||||
|
||||
and start the test node using that ip:port, eg:
|
||||
|
||||
tuscany "tribes:eightballDomain?routes=9.164.186.49:4000" eightball-test.jar
|
||||
|
||||
(Note that you must have quotes around the config uri)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,109 @@
|
|||
<?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 xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
||||
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<groupId>demo</groupId>
|
||||
<artifactId>eightball-process</artifactId>
|
||||
<packaging>jar</packaging>
|
||||
<version>1.0-SNAPSHOT</version>
|
||||
<!-- TODO project name -->
|
||||
<name>quickstart</name>
|
||||
<description></description>
|
||||
|
||||
<dependencies>
|
||||
<!-- TUSCANY DEPENDENCIES -->
|
||||
<dependency>
|
||||
<groupId>org.apache.tuscany.sca</groupId>
|
||||
<artifactId>tuscany-sca-api</artifactId>
|
||||
<version>${tuscany.version}</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
|
||||
<!-- JUNIT DEPENDENCY FOR TESTING -->
|
||||
<dependency>
|
||||
<groupId>junit</groupId>
|
||||
<artifactId>junit</artifactId>
|
||||
<version>4.5</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
|
||||
</dependencies>
|
||||
<build>
|
||||
<defaultGoal>install</defaultGoal>
|
||||
<finalName>${project.artifactId}</finalName>
|
||||
<resources>
|
||||
<resource>
|
||||
<filtering>false</filtering>
|
||||
<directory>src/main/resources</directory>
|
||||
</resource>
|
||||
<resource>
|
||||
<filtering>false</filtering>
|
||||
<directory>src/main/java</directory>
|
||||
<includes>
|
||||
<include>**</include>
|
||||
</includes>
|
||||
<excludes>
|
||||
<exclude>**/*.java</exclude>
|
||||
</excludes>
|
||||
</resource>
|
||||
</resources>
|
||||
<testResources>
|
||||
<testResource>
|
||||
<filtering>false</filtering>
|
||||
<directory>src/test/java</directory>
|
||||
<includes>
|
||||
<include>**</include>
|
||||
</includes>
|
||||
<excludes>
|
||||
<exclude>**/*.java</exclude>
|
||||
</excludes>
|
||||
</testResource>
|
||||
</testResources>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<inherited>true</inherited>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-compiler-plugin</artifactId>
|
||||
<configuration>
|
||||
<source>1.5</source>
|
||||
<target>1.5</target>
|
||||
<optimise>true</optimise>
|
||||
<debug>true</debug>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-eclipse-plugin</artifactId>
|
||||
<configuration>
|
||||
<downloadSources>true</downloadSources>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.tuscany.maven.plugins</groupId>
|
||||
<artifactId>maven-tuscany-plugin</artifactId>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
<properties>
|
||||
<tuscany.version>2.0-SNAPSHOT</tuscany.version>
|
||||
</properties>
|
||||
</project>
|
|
@ -0,0 +1,28 @@
|
|||
/*
|
||||
* 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 demo;
|
||||
|
||||
import org.oasisopen.sca.annotation.Remotable;
|
||||
|
||||
@Remotable
|
||||
public interface EightBall {
|
||||
|
||||
String askQuestion(String question);
|
||||
|
||||
}
|
|
@ -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 demo;
|
||||
|
||||
import org.oasisopen.sca.annotation.Reference;
|
||||
|
||||
public class EightBallProcess implements EightBall {
|
||||
|
||||
@Reference
|
||||
public EightBall eightball;
|
||||
|
||||
@Reference
|
||||
public Translator translator;
|
||||
|
||||
public String askQuestion(String question) {
|
||||
System.out.println("Processing " + question);
|
||||
String germanQuestion = translator.toGerman(question);
|
||||
System.out.println("Processing " + germanQuestion);
|
||||
String germanAnswer = eightball.askQuestion(germanQuestion);
|
||||
System.out.println("Processing " + germanAnswer);
|
||||
String englishAnswer = translator.toEnglish(germanAnswer);
|
||||
System.out.println("Processing " + englishAnswer);
|
||||
return englishAnswer;
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,29 @@
|
|||
/*
|
||||
* 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 demo;
|
||||
|
||||
import org.oasisopen.sca.annotation.Remotable;
|
||||
|
||||
@Remotable
|
||||
public interface Translator {
|
||||
|
||||
String toEnglish(String phrase);
|
||||
String toGerman(String phrase);
|
||||
|
||||
}
|
|
@ -0,0 +1,23 @@
|
|||
<?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://demo">
|
||||
<deployable composite="sample:eightball-process"/>
|
||||
</contribution>
|
|
@ -0,0 +1,31 @@
|
|||
<?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"
|
||||
xmlns:tuscany="http://tuscany.apache.org/xmlns/sca/1.0"
|
||||
targetNamespace="http://demo"
|
||||
name="eightball-process">
|
||||
|
||||
<component name="EightBallProcessComponent">
|
||||
<implementation.java class="demo.EightBallProcess"/>
|
||||
<reference name="eightball" target="EightBallComponent" />
|
||||
<reference name="translator" target="TranslatorComponent" />
|
||||
</component>
|
||||
|
||||
</composite>
|
|
@ -0,0 +1,162 @@
|
|||
<?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 xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
||||
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<groupId>demo</groupId>
|
||||
<artifactId>eightball-webapp</artifactId>
|
||||
<packaging>war</packaging>
|
||||
<version>1.0-SNAPSHOT</version>
|
||||
<name>quickstart</name>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.apache.tuscany.sca</groupId>
|
||||
<artifactId>tuscany-base-runtime</artifactId>
|
||||
<version>${tuscany.version}</version>
|
||||
</dependency>
|
||||
|
||||
<!-- JUNIT DEPENDENCY FOR TESTING -->
|
||||
<dependency>
|
||||
<groupId>junit</groupId>
|
||||
<artifactId>junit</artifactId>
|
||||
<version>4.5</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
|
||||
<!-- JETTY DEPENDENCIES FOR TESTING -->
|
||||
<dependency>
|
||||
<groupId>org.mortbay.jetty</groupId>
|
||||
<artifactId>jetty</artifactId>
|
||||
<version>${jetty.version}</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.mortbay.jetty</groupId>
|
||||
<artifactId>jetty-util</artifactId>
|
||||
<version>${jetty.version}</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.mortbay.jetty</groupId>
|
||||
<artifactId>jetty-management</artifactId>
|
||||
<version>${jetty.version}</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
<build>
|
||||
<defaultGoal>install</defaultGoal>
|
||||
<finalName>eightball-webapp</finalName>
|
||||
<resources>
|
||||
<resource>
|
||||
<filtering>false</filtering>
|
||||
<directory>src/main/resources</directory>
|
||||
</resource>
|
||||
<resource>
|
||||
<filtering>false</filtering>
|
||||
<directory>src/main/java</directory>
|
||||
<includes>
|
||||
<include>**</include>
|
||||
</includes>
|
||||
<excludes>
|
||||
<exclude>**/*.java</exclude>
|
||||
</excludes>
|
||||
</resource>
|
||||
</resources>
|
||||
<testResources>
|
||||
<testResource>
|
||||
<filtering>false</filtering>
|
||||
<directory>src/test/java</directory>
|
||||
<includes>
|
||||
<include>**</include>
|
||||
</includes>
|
||||
<excludes>
|
||||
<exclude>**/*.java</exclude>
|
||||
</excludes>
|
||||
</testResource>
|
||||
</testResources>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<inherited>true</inherited>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-compiler-plugin</artifactId>
|
||||
<configuration>
|
||||
<source>1.5</source>
|
||||
<target>1.5</target>
|
||||
<optimise>true</optimise>
|
||||
<debug>true</debug>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.mortbay.jetty</groupId>
|
||||
<artifactId>maven-jetty-plugin</artifactId>
|
||||
<version>${jetty.version}</version>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-eclipse-plugin</artifactId>
|
||||
<configuration>
|
||||
<downloadSources>true</downloadSources>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-dependency-plugin</artifactId>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>copy</id>
|
||||
<phase>compile</phase>
|
||||
<goals>
|
||||
<goal>copy</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<artifactItems>
|
||||
<!-- these should really go in the target folder but i can't get jetty:run to work using that -->
|
||||
<artifactItem>
|
||||
<groupId>demo</groupId>
|
||||
<artifactId>eightball</artifactId>
|
||||
<version>${project.version}</version>
|
||||
<outputDirectory>src/main/webapp/WEB-INF/sca-contributions</outputDirectory>
|
||||
</artifactItem>
|
||||
<artifactItem>
|
||||
<groupId>demo</groupId>
|
||||
<artifactId>eightball-process</artifactId>
|
||||
<version>${project.version}</version>
|
||||
<outputDirectory>src/main/webapp/WEB-INF/sca-contributions</outputDirectory>
|
||||
</artifactItem>
|
||||
<artifactItem>
|
||||
<groupId>demo</groupId>
|
||||
<artifactId>translator</artifactId>
|
||||
<version>${project.version}</version>
|
||||
<outputDirectory>src/main/webapp/WEB-INF/sca-contributions</outputDirectory>
|
||||
</artifactItem>
|
||||
</artifactItems>
|
||||
</configuration>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
<properties>
|
||||
<tuscany.version>2.0-SNAPSHOT</tuscany.version>
|
||||
<jetty.version>6.1.18</jetty.version>
|
||||
</properties>
|
||||
</project>
|
|
@ -0,0 +1,28 @@
|
|||
/*
|
||||
* 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 demo;
|
||||
|
||||
import org.oasisopen.sca.annotation.Remotable;
|
||||
|
||||
@Remotable
|
||||
public interface EightBall {
|
||||
|
||||
String askQuestion(String question);
|
||||
|
||||
}
|
|
@ -0,0 +1,63 @@
|
|||
/*
|
||||
* 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 demo;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.Writer;
|
||||
|
||||
import javax.servlet.ServletConfig;
|
||||
import javax.servlet.ServletException;
|
||||
import javax.servlet.http.HttpServlet;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
|
||||
import org.oasisopen.sca.ComponentContext;
|
||||
import org.oasisopen.sca.annotation.Reference;
|
||||
|
||||
/**
|
||||
*/
|
||||
public class EightBallServlet extends HttpServlet {
|
||||
|
||||
@Reference
|
||||
protected EightBall eightball;
|
||||
|
||||
@Override
|
||||
public void init(ServletConfig servletConfig) throws ServletException {
|
||||
if (eightball == null) {
|
||||
ComponentContext cc = (ComponentContext)servletConfig.getServletContext().getAttribute("org.oasisopen.sca.ComponentContext");
|
||||
eightball = cc.getService(EightBall .class, "eightball");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void service(HttpServletRequest request, HttpServletResponse response) throws IOException {
|
||||
String question = request.getParameter("question");
|
||||
String answer = eightball.askQuestion(question);
|
||||
Writer out = response.getWriter();
|
||||
out.write("<html><head><title>The Magic Eight Ball</title></head><body>");
|
||||
out.write("<h2>The Magic Eight Ball</h2>");
|
||||
out.write("<p>You ask:");
|
||||
out.write("<br><strong>" + question + "</strong>");
|
||||
out.write("<p>Eight Ball says:");
|
||||
out.write("<br><strong>" + answer + "</strong>");
|
||||
out.write("</body></html>");
|
||||
out.flush();
|
||||
out.close();
|
||||
}
|
||||
}
|
|
@ -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"
|
||||
xmlns:tuscany="http://tuscany.apache.org/xmlns/sca/1.0"
|
||||
targetNamespace="http://demo"
|
||||
name="eightball-webapp">
|
||||
|
||||
<component name="eightball-WebComponent">
|
||||
<implementation.web web-uri=""/>
|
||||
<reference name="eightball" target="EightBallProcessComponent"/>
|
||||
</component>
|
||||
|
||||
</composite>
|
|
@ -0,0 +1,44 @@
|
|||
<?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.
|
||||
-->
|
||||
<web-app version="2.4"
|
||||
xmlns="http://java.sun.com/xml/ns/j2ee"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" >
|
||||
|
||||
<display-name>eightball-webapp</display-name>
|
||||
|
||||
<listener><listener-class>org.apache.tuscany.sca.host.webapp.TuscanyContextListener</listener-class></listener>
|
||||
|
||||
<servlet>
|
||||
<servlet-name>EightBallServlet</servlet-name>
|
||||
<servlet-class>demo.EightBallServlet</servlet-class>
|
||||
</servlet>
|
||||
|
||||
<servlet-mapping>
|
||||
<servlet-name>EightBallServlet</servlet-name>
|
||||
<url-pattern>/EightBallServlet</url-pattern>
|
||||
</servlet-mapping>
|
||||
|
||||
<welcome-file-list id="WelcomeFileList">
|
||||
<welcome-file>eightball.html</welcome-file>
|
||||
</welcome-file-list>
|
||||
|
||||
</web-app>
|
||||
|
|
@ -0,0 +1,48 @@
|
|||
<!--
|
||||
* 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.
|
||||
-->
|
||||
<html>
|
||||
|
||||
<head>
|
||||
<title>The Magic Eight Ball</title>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
||||
<h2>The Magic Eight Ball</h2>
|
||||
|
||||
The Tuscany Magic Eight Ball reaches into the future to find the answers to your questions. It knows what will be, and is willing to share this with you. <p>
|
||||
Just type in your question that can be answered "Yes" or "No", concentrate very, very hard, and click on the "Ask" button.<p>
|
||||
|
||||
<form action="EightBallServlet" method="post">
|
||||
<table>
|
||||
<tr>
|
||||
<td>
|
||||
<input type="text" name="question" size="100">
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="left">
|
||||
<button name="submit" type="submit">Ask</button>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</form>
|
||||
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,109 @@
|
|||
<?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 xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
||||
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<groupId>demo</groupId>
|
||||
<artifactId>eightball</artifactId>
|
||||
<packaging>jar</packaging>
|
||||
<version>1.0-SNAPSHOT</version>
|
||||
<!-- TODO project name -->
|
||||
<name>quickstart</name>
|
||||
<description></description>
|
||||
|
||||
<dependencies>
|
||||
<!-- TUSCANY DEPENDENCIES -->
|
||||
<dependency>
|
||||
<groupId>org.apache.tuscany.sca</groupId>
|
||||
<artifactId>tuscany-sca-api</artifactId>
|
||||
<version>${tuscany.version}</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
|
||||
<!-- JUNIT DEPENDENCY FOR TESTING -->
|
||||
<dependency>
|
||||
<groupId>junit</groupId>
|
||||
<artifactId>junit</artifactId>
|
||||
<version>4.5</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
|
||||
</dependencies>
|
||||
<build>
|
||||
<defaultGoal>install</defaultGoal>
|
||||
<finalName>${project.artifactId}</finalName>
|
||||
<resources>
|
||||
<resource>
|
||||
<filtering>false</filtering>
|
||||
<directory>src/main/resources</directory>
|
||||
</resource>
|
||||
<resource>
|
||||
<filtering>false</filtering>
|
||||
<directory>src/main/java</directory>
|
||||
<includes>
|
||||
<include>**</include>
|
||||
</includes>
|
||||
<excludes>
|
||||
<exclude>**/*.java</exclude>
|
||||
</excludes>
|
||||
</resource>
|
||||
</resources>
|
||||
<testResources>
|
||||
<testResource>
|
||||
<filtering>false</filtering>
|
||||
<directory>src/test/java</directory>
|
||||
<includes>
|
||||
<include>**</include>
|
||||
</includes>
|
||||
<excludes>
|
||||
<exclude>**/*.java</exclude>
|
||||
</excludes>
|
||||
</testResource>
|
||||
</testResources>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<inherited>true</inherited>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-compiler-plugin</artifactId>
|
||||
<configuration>
|
||||
<source>1.5</source>
|
||||
<target>1.5</target>
|
||||
<optimise>true</optimise>
|
||||
<debug>true</debug>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-eclipse-plugin</artifactId>
|
||||
<configuration>
|
||||
<downloadSources>true</downloadSources>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.tuscany.maven.plugins</groupId>
|
||||
<artifactId>maven-tuscany-plugin</artifactId>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
<properties>
|
||||
<tuscany.version>2.0-SNAPSHOT</tuscany.version>
|
||||
</properties>
|
||||
</project>
|
|
@ -0,0 +1,28 @@
|
|||
/*
|
||||
* 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 demo;
|
||||
|
||||
import org.oasisopen.sca.annotation.Remotable;
|
||||
|
||||
@Remotable
|
||||
public interface EightBall {
|
||||
|
||||
String askQuestion(String question);
|
||||
|
||||
}
|
|
@ -0,0 +1,62 @@
|
|||
/*
|
||||
* 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 demo;
|
||||
|
||||
import java.util.Random;
|
||||
import java.lang.Double;
|
||||
import java.util.Date;
|
||||
|
||||
public class EightBallImpl implements EightBall {
|
||||
|
||||
static String answers[] = {
|
||||
"Zeichen zeigen auf \"Ja\".",
|
||||
"Ja.",
|
||||
"Antwort unklar, versuchen Sie es erneut.",
|
||||
"Ohne Zweifel.",
|
||||
"Meine Quellen sagen nein.",
|
||||
"Wie ich es sehe, ja.",
|
||||
"Sie koennen sich darauf verlassen.",
|
||||
"Konzentrieren Sie sich und fragen Sie erneut.",
|
||||
"Aussichten unguenstig.",
|
||||
"Auf alle Faelle, ja.",
|
||||
"Es ist besser, es Ihnen jetzt nicht zu sagen.",
|
||||
"Sehr zweifelhaft.",
|
||||
"Ja - auf jeden Fall.",
|
||||
"Es ist sicher.",
|
||||
"Kann jetzt nicht vorhergesagt werden.",
|
||||
"Höchstwahrscheinlich.",
|
||||
"Fragen Sie später noch einmal.",
|
||||
"Meine Antwort ist nein.",
|
||||
"Aussichten gut.",
|
||||
"Verlassen Sie sich nicht darauf."};
|
||||
|
||||
public String askQuestion(String question) {
|
||||
String answer;
|
||||
if ("1+2".equals(question)) {
|
||||
answer = "3";
|
||||
} else {
|
||||
Random r = new Random(new Date().getTime());
|
||||
Double d = new Double((r.nextDouble() * 20) - 1);
|
||||
answer = new String(answers[d.intValue()]);
|
||||
}
|
||||
System.out.println("EightBall answer: " + answer);
|
||||
return answer;
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,23 @@
|
|||
<?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:demo="http://demo">
|
||||
<deployable composite="demo:eightball"/>
|
||||
</contribution>
|
|
@ -0,0 +1,29 @@
|
|||
<?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"
|
||||
xmlns:tuscany="http://tuscany.apache.org/xmlns/sca/1.0"
|
||||
targetNamespace="http://demo"
|
||||
name="eightball">
|
||||
|
||||
<component name="EightBallComponent">
|
||||
<implementation.java class="demo.EightBallImpl"/>
|
||||
</component>
|
||||
|
||||
</composite>
|
|
@ -0,0 +1,39 @@
|
|||
<?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-samples</artifactId>
|
||||
<version>2.0-SNAPSHOT</version>
|
||||
<relativePath>../../pom.xml</relativePath>
|
||||
</parent>
|
||||
<artifactId>tuscany-eightball-demo</artifactId>
|
||||
<packaging>pom</packaging>
|
||||
<name>Apache Tuscany Eightball Demo</name>
|
||||
|
||||
<modules>
|
||||
<module>eightball</module>
|
||||
<module>eightball-process</module>
|
||||
<module>eightball-webapp</module>
|
||||
<module>translator</module>
|
||||
</modules>
|
||||
|
||||
</project>
|
|
@ -0,0 +1,109 @@
|
|||
<?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 xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
||||
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<groupId>demo</groupId>
|
||||
<artifactId>translator</artifactId>
|
||||
<packaging>jar</packaging>
|
||||
<version>1.0-SNAPSHOT</version>
|
||||
<!-- TODO project name -->
|
||||
<name>quickstart</name>
|
||||
<description></description>
|
||||
|
||||
<dependencies>
|
||||
<!-- TUSCANY DEPENDENCIES -->
|
||||
<dependency>
|
||||
<groupId>org.apache.tuscany.sca</groupId>
|
||||
<artifactId>tuscany-sca-api</artifactId>
|
||||
<version>${tuscany.version}</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
|
||||
<!-- JUNIT DEPENDENCY FOR TESTING -->
|
||||
<dependency>
|
||||
<groupId>junit</groupId>
|
||||
<artifactId>junit</artifactId>
|
||||
<version>4.5</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
|
||||
</dependencies>
|
||||
<build>
|
||||
<defaultGoal>install</defaultGoal>
|
||||
<finalName>${project.artifactId}</finalName>
|
||||
<resources>
|
||||
<resource>
|
||||
<filtering>false</filtering>
|
||||
<directory>src/main/resources</directory>
|
||||
</resource>
|
||||
<resource>
|
||||
<filtering>false</filtering>
|
||||
<directory>src/main/java</directory>
|
||||
<includes>
|
||||
<include>**</include>
|
||||
</includes>
|
||||
<excludes>
|
||||
<exclude>**/*.java</exclude>
|
||||
</excludes>
|
||||
</resource>
|
||||
</resources>
|
||||
<testResources>
|
||||
<testResource>
|
||||
<filtering>false</filtering>
|
||||
<directory>src/test/java</directory>
|
||||
<includes>
|
||||
<include>**</include>
|
||||
</includes>
|
||||
<excludes>
|
||||
<exclude>**/*.java</exclude>
|
||||
</excludes>
|
||||
</testResource>
|
||||
</testResources>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<inherited>true</inherited>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-compiler-plugin</artifactId>
|
||||
<configuration>
|
||||
<source>1.5</source>
|
||||
<target>1.5</target>
|
||||
<optimise>true</optimise>
|
||||
<debug>true</debug>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-eclipse-plugin</artifactId>
|
||||
<configuration>
|
||||
<downloadSources>true</downloadSources>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.tuscany.maven.plugins</groupId>
|
||||
<artifactId>maven-tuscany-plugin</artifactId>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
<properties>
|
||||
<tuscany.version>2.0-SNAPSHOT</tuscany.version>
|
||||
</properties>
|
||||
</project>
|
|
@ -0,0 +1,29 @@
|
|||
/*
|
||||
* 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 demo;
|
||||
|
||||
import org.oasisopen.sca.annotation.Remotable;
|
||||
|
||||
@Remotable
|
||||
public interface Translator {
|
||||
|
||||
String toEnglish(String phrase);
|
||||
String toGerman(String phrase);
|
||||
|
||||
}
|
|
@ -0,0 +1,95 @@
|
|||
/*
|
||||
* 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 demo;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
public class TranslatorImpl implements Translator {
|
||||
|
||||
static List<String> english = Arrays.asList(new String[]{
|
||||
"Signs point to yes.",
|
||||
"Yes.",
|
||||
"Reply hazy, try again.",
|
||||
"Without a doubt.",
|
||||
"My sources say no.",
|
||||
"As I see it, yes.",
|
||||
"You may rely on it.",
|
||||
"Concentrate and ask again.",
|
||||
"Outlook not so good.",
|
||||
"It is decidedly so.",
|
||||
"Better not tell you now.",
|
||||
"Very doubtful.",
|
||||
"Yes - definitely.",
|
||||
"It is certain.",
|
||||
"Cannot predict now.",
|
||||
"Most likely.",
|
||||
"Ask again later.",
|
||||
"My reply is no.",
|
||||
"Outlook good.",
|
||||
"Don't count on it.",
|
||||
"You are a donkey"});
|
||||
|
||||
static List<String> german = Arrays.asList(new String[]{
|
||||
"Zeichen zeigen auf \"Ja\".",
|
||||
"Ja.",
|
||||
"Antwort unklar, versuchen Sie es erneut.",
|
||||
"Ohne Zweifel.",
|
||||
"Meine Quellen sagen nein.",
|
||||
"Wie ich es sehe, ja.",
|
||||
"Sie koennen sich darauf verlassen.",
|
||||
"Konzentrieren Sie sich und fragen Sie erneut.",
|
||||
"Aussichten unguenstig.",
|
||||
"Auf alle Faelle, ja.",
|
||||
"Es ist besser, es Ihnen jetzt nicht zu sagen.",
|
||||
"Sehr zweifelhaft.",
|
||||
"Ja - auf jeden Fall.",
|
||||
"Es ist sicher.",
|
||||
"Kann jetzt nicht vorhergesagt werden.",
|
||||
"Höchstwahrscheinlich.",
|
||||
"Fragen Sie später noch einmal.",
|
||||
"Meine Antwort ist nein.",
|
||||
"Aussichten gut.",
|
||||
"Verlassen Sie sich nicht darauf.",
|
||||
"Du bist ein Esel"});
|
||||
|
||||
public String toEnglish(String phrase) {
|
||||
int x = german.indexOf(phrase);
|
||||
String translatedPhrase;
|
||||
if (x == -1) {
|
||||
translatedPhrase = phrase;
|
||||
} else {
|
||||
translatedPhrase = english.get(x);
|
||||
}
|
||||
System.out.println("Translated " + phrase + " : " + translatedPhrase);
|
||||
return translatedPhrase;
|
||||
}
|
||||
|
||||
public String toGerman(String phrase) {
|
||||
int x = english.indexOf(phrase);
|
||||
String translatedPhrase;
|
||||
if (x == -1) {
|
||||
translatedPhrase = phrase;
|
||||
} else {
|
||||
translatedPhrase = german.get(x);
|
||||
}
|
||||
System.out.println("Translated " + phrase + " : " + translatedPhrase);
|
||||
return translatedPhrase;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,23 @@
|
|||
<?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:demo="http://demo">
|
||||
<deployable composite="demo:translator"/>
|
||||
</contribution>
|
|
@ -0,0 +1,29 @@
|
|||
<?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"
|
||||
xmlns:tuscany="http://tuscany.apache.org/xmlns/sca/1.0"
|
||||
targetNamespace="http://demo"
|
||||
name="translator">
|
||||
|
||||
<component name="TranslatorComponent">
|
||||
<implementation.java class="demo.TranslatorImpl"/>
|
||||
</component>
|
||||
|
||||
</composite>
|
|
@ -0,0 +1,51 @@
|
|||
This Tuscany sample shows how to implement and use a simple Logger component
|
||||
that logs string messages to a Scribe logging server.
|
||||
|
||||
Scribe is an Open Source server for aggregating streaming log data. It is
|
||||
designed to scale to a very large number of nodes and be robust to network
|
||||
and node failures.
|
||||
|
||||
See the Scribe Wiki [1] for more information on Scribe.
|
||||
|
||||
Getting the required Apache Thrift library
|
||||
==========================================
|
||||
This sample uses Apache Thrift's libthrift.jar to communicate with Scribe
|
||||
servers. Libthrift is not yet available in a Maven repository, so before
|
||||
building the sample with Maven, you need to download libthrift [2] and
|
||||
install it in your local Maven repository like this:
|
||||
|
||||
mvn install:install-file -DgroupId=org.apache.thrift -DartifactId=libthrift \
|
||||
-Dversion=1.0-SNAPSHOT -Dpackaging=jar -Dfile=libthrift-r917130.jar
|
||||
|
||||
Starting a Scribe server
|
||||
========================
|
||||
Before running the LoggingTest sample test program, you need to start a Scribe
|
||||
server for the sample program to connect to.
|
||||
|
||||
Steps to start a Scribe server are described in the Scribe examples README [3].
|
||||
A simple Scribe server configuration can be found in the Scribe examples [4].
|
||||
|
||||
LoggingTest will try to connect to a Scribe server at localhost:1463. To use
|
||||
a Scribe server at a different host or port, configure the host and port
|
||||
properties in scribe.composite to match your server.
|
||||
|
||||
Running the LoggingTest sample test program
|
||||
===========================================
|
||||
|
||||
To run the LoggingTest sample test program, do this:
|
||||
mvn -Dtest=LoggingTest test
|
||||
|
||||
Checking the Scribe log output
|
||||
==============================
|
||||
After running LoggingTest, you should find the logged string "Hello There" in
|
||||
file sample/sample_current under your Scribe log store directory.
|
||||
|
||||
If you've used the example1.conf Scribe configuration from the Scribe examples
|
||||
[4], you should find your log message in /tmp/scribetest/sample/sample_current.
|
||||
|
||||
|
||||
[1] http://wiki.github.com/facebook/scribe/
|
||||
[2] http://svn.apache.org/repos/asf/cassandra/trunk/lib/libthrift-r917130.jar
|
||||
[3] http://github.com/facebook/scribe/blob/master/examples/README
|
||||
[4] http://github.com/facebook/scribe/blob/master/examples/example1.conf
|
||||
|
|
@ -0,0 +1,96 @@
|
|||
<?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-sample</artifactId>
|
||||
<version>2.0-SNAPSHOT</version>
|
||||
<relativePath>../../../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
<packaging>jar</packaging>
|
||||
<artifactId>sample-logging-scribe</artifactId>
|
||||
<name>Apache Tuscany SCA Scribe Logging Sample</name>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.apache.tuscany.sca</groupId>
|
||||
<artifactId>tuscany-node-api</artifactId>
|
||||
<version>2.0-SNAPSHOT</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.apache.tuscany.sca</groupId>
|
||||
<artifactId>tuscany-node-impl</artifactId>
|
||||
<version>2.0-SNAPSHOT</version>
|
||||
<scope>runtime</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.apache.tuscany.sca</groupId>
|
||||
<artifactId>tuscany-implementation-java-runtime</artifactId>
|
||||
<version>2.0-SNAPSHOT</version>
|
||||
<scope>runtime</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.apache.thrift</groupId>
|
||||
<artifactId>libthrift</artifactId>
|
||||
<version>1.0-SNAPSHOT</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.slf4j</groupId>
|
||||
<artifactId>slf4j-api</artifactId>
|
||||
<version>1.6.0</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.slf4j</groupId>
|
||||
<artifactId>slf4j-simple</artifactId>
|
||||
<version>1.6.0</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>commons-lang</groupId>
|
||||
<artifactId>commons-lang</artifactId>
|
||||
<version>2.4</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>junit</groupId>
|
||||
<artifactId>junit</artifactId>
|
||||
<version>4.8.1</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
<finalName>${project.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>
|
File diff suppressed because it is too large
Load diff
|
@ -0,0 +1,68 @@
|
|||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Autogenerated by Thrift
|
||||
*
|
||||
* DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
|
||||
*/
|
||||
package generated.com.facebook.fb303;
|
||||
|
||||
|
||||
import java.util.Map;
|
||||
import java.util.HashMap;
|
||||
import org.apache.thrift.TEnum;
|
||||
/**
|
||||
* Common status reporting mechanism across all services
|
||||
*/
|
||||
public enum fb_status implements TEnum{
|
||||
DEAD(0),
|
||||
STARTING(1),
|
||||
ALIVE(2),
|
||||
STOPPING(3),
|
||||
STOPPED(4),
|
||||
WARNING(5);
|
||||
|
||||
private static final Map<Integer, fb_status> BY_VALUE = new HashMap<Integer,fb_status>() {{
|
||||
for(fb_status val : fb_status.values()) {
|
||||
put(val.getValue(), val);
|
||||
}
|
||||
}};
|
||||
|
||||
private final int value;
|
||||
|
||||
private fb_status(int value) {
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the integer value of this enum value, as defined in the Thrift IDL.
|
||||
*/
|
||||
public int getValue() {
|
||||
return value;
|
||||
}
|
||||
|
||||
/**
|
||||
* Find a the enum type by its integer value, as defined in the Thrift IDL.
|
||||
* @return null if the value is not found.
|
||||
*/
|
||||
public static fb_status findByValue(int value) {
|
||||
return BY_VALUE.get(value);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,411 @@
|
|||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Autogenerated by Thrift
|
||||
*
|
||||
* DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
|
||||
*/
|
||||
package generated.scribe.thrift;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Map;
|
||||
import java.util.HashMap;
|
||||
import java.util.EnumMap;
|
||||
import java.util.Set;
|
||||
import java.util.HashSet;
|
||||
import java.util.EnumSet;
|
||||
import java.util.Collections;
|
||||
import java.util.BitSet;
|
||||
import java.util.Arrays;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import org.apache.thrift.*;
|
||||
import org.apache.thrift.meta_data.*;
|
||||
import org.apache.thrift.protocol.*;
|
||||
|
||||
public class LogEntry implements TBase<LogEntry._Fields>, java.io.Serializable, Cloneable, Comparable<LogEntry> {
|
||||
private static final TStruct STRUCT_DESC = new TStruct("LogEntry");
|
||||
|
||||
private static final TField CATEGORY_FIELD_DESC = new TField("category", TType.STRING, (short)1);
|
||||
private static final TField MESSAGE_FIELD_DESC = new TField("message", TType.STRING, (short)2);
|
||||
|
||||
public String category;
|
||||
public String message;
|
||||
|
||||
/** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
|
||||
public enum _Fields implements TFieldIdEnum {
|
||||
CATEGORY((short)1, "category"),
|
||||
MESSAGE((short)2, "message");
|
||||
|
||||
private static final Map<Integer, _Fields> byId = new HashMap<Integer, _Fields>();
|
||||
private static final Map<String, _Fields> byName = new HashMap<String, _Fields>();
|
||||
|
||||
static {
|
||||
for (_Fields field : EnumSet.allOf(_Fields.class)) {
|
||||
byId.put((int)field._thriftId, field);
|
||||
byName.put(field.getFieldName(), field);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Find the _Fields constant that matches fieldId, or null if its not found.
|
||||
*/
|
||||
public static _Fields findByThriftId(int fieldId) {
|
||||
return byId.get(fieldId);
|
||||
}
|
||||
|
||||
/**
|
||||
* Find the _Fields constant that matches fieldId, throwing an exception
|
||||
* if it is not found.
|
||||
*/
|
||||
public static _Fields findByThriftIdOrThrow(int fieldId) {
|
||||
_Fields fields = findByThriftId(fieldId);
|
||||
if (fields == null) throw new IllegalArgumentException("Field " + fieldId + " doesn't exist!");
|
||||
return fields;
|
||||
}
|
||||
|
||||
/**
|
||||
* Find the _Fields constant that matches name, or null if its not found.
|
||||
*/
|
||||
public static _Fields findByName(String name) {
|
||||
return byName.get(name);
|
||||
}
|
||||
|
||||
private final short _thriftId;
|
||||
private final String _fieldName;
|
||||
|
||||
_Fields(short thriftId, String fieldName) {
|
||||
_thriftId = thriftId;
|
||||
_fieldName = fieldName;
|
||||
}
|
||||
|
||||
public short getThriftFieldId() {
|
||||
return _thriftId;
|
||||
}
|
||||
|
||||
public String getFieldName() {
|
||||
return _fieldName;
|
||||
}
|
||||
}
|
||||
|
||||
// isset id assignments
|
||||
|
||||
public static final Map<_Fields, FieldMetaData> metaDataMap = Collections.unmodifiableMap(new EnumMap<_Fields, FieldMetaData>(_Fields.class) {{
|
||||
put(_Fields.CATEGORY, new FieldMetaData("category", TFieldRequirementType.DEFAULT,
|
||||
new FieldValueMetaData(TType.STRING)));
|
||||
put(_Fields.MESSAGE, new FieldMetaData("message", TFieldRequirementType.DEFAULT,
|
||||
new FieldValueMetaData(TType.STRING)));
|
||||
}});
|
||||
|
||||
static {
|
||||
FieldMetaData.addStructMetaDataMap(LogEntry.class, metaDataMap);
|
||||
}
|
||||
|
||||
public LogEntry() {
|
||||
}
|
||||
|
||||
public LogEntry(
|
||||
String category,
|
||||
String message)
|
||||
{
|
||||
this();
|
||||
this.category = category;
|
||||
this.message = message;
|
||||
}
|
||||
|
||||
/**
|
||||
* Performs a deep copy on <i>other</i>.
|
||||
*/
|
||||
public LogEntry(LogEntry other) {
|
||||
if (other.isSetCategory()) {
|
||||
this.category = other.category;
|
||||
}
|
||||
if (other.isSetMessage()) {
|
||||
this.message = other.message;
|
||||
}
|
||||
}
|
||||
|
||||
public LogEntry deepCopy() {
|
||||
return new LogEntry(this);
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
public LogEntry clone() {
|
||||
return new LogEntry(this);
|
||||
}
|
||||
|
||||
public String getCategory() {
|
||||
return this.category;
|
||||
}
|
||||
|
||||
public LogEntry setCategory(String category) {
|
||||
this.category = category;
|
||||
return this;
|
||||
}
|
||||
|
||||
public void unsetCategory() {
|
||||
this.category = null;
|
||||
}
|
||||
|
||||
/** Returns true if field category is set (has been asigned a value) and false otherwise */
|
||||
public boolean isSetCategory() {
|
||||
return this.category != null;
|
||||
}
|
||||
|
||||
public void setCategoryIsSet(boolean value) {
|
||||
if (!value) {
|
||||
this.category = null;
|
||||
}
|
||||
}
|
||||
|
||||
public String getMessage() {
|
||||
return this.message;
|
||||
}
|
||||
|
||||
public LogEntry setMessage(String message) {
|
||||
this.message = message;
|
||||
return this;
|
||||
}
|
||||
|
||||
public void unsetMessage() {
|
||||
this.message = null;
|
||||
}
|
||||
|
||||
/** Returns true if field message is set (has been asigned a value) and false otherwise */
|
||||
public boolean isSetMessage() {
|
||||
return this.message != null;
|
||||
}
|
||||
|
||||
public void setMessageIsSet(boolean value) {
|
||||
if (!value) {
|
||||
this.message = null;
|
||||
}
|
||||
}
|
||||
|
||||
public void setFieldValue(_Fields field, Object value) {
|
||||
switch (field) {
|
||||
case CATEGORY:
|
||||
if (value == null) {
|
||||
unsetCategory();
|
||||
} else {
|
||||
setCategory((String)value);
|
||||
}
|
||||
break;
|
||||
|
||||
case MESSAGE:
|
||||
if (value == null) {
|
||||
unsetMessage();
|
||||
} else {
|
||||
setMessage((String)value);
|
||||
}
|
||||
break;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
public void setFieldValue(int fieldID, Object value) {
|
||||
setFieldValue(_Fields.findByThriftIdOrThrow(fieldID), value);
|
||||
}
|
||||
|
||||
public Object getFieldValue(_Fields field) {
|
||||
switch (field) {
|
||||
case CATEGORY:
|
||||
return getCategory();
|
||||
|
||||
case MESSAGE:
|
||||
return getMessage();
|
||||
|
||||
}
|
||||
throw new IllegalStateException();
|
||||
}
|
||||
|
||||
public Object getFieldValue(int fieldId) {
|
||||
return getFieldValue(_Fields.findByThriftIdOrThrow(fieldId));
|
||||
}
|
||||
|
||||
/** Returns true if field corresponding to fieldID is set (has been asigned a value) and false otherwise */
|
||||
public boolean isSet(_Fields field) {
|
||||
switch (field) {
|
||||
case CATEGORY:
|
||||
return isSetCategory();
|
||||
case MESSAGE:
|
||||
return isSetMessage();
|
||||
}
|
||||
throw new IllegalStateException();
|
||||
}
|
||||
|
||||
public boolean isSet(int fieldID) {
|
||||
return isSet(_Fields.findByThriftIdOrThrow(fieldID));
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object that) {
|
||||
if (that == null)
|
||||
return false;
|
||||
if (that instanceof LogEntry)
|
||||
return this.equals((LogEntry)that);
|
||||
return false;
|
||||
}
|
||||
|
||||
public boolean equals(LogEntry that) {
|
||||
if (that == null)
|
||||
return false;
|
||||
|
||||
boolean this_present_category = true && this.isSetCategory();
|
||||
boolean that_present_category = true && that.isSetCategory();
|
||||
if (this_present_category || that_present_category) {
|
||||
if (!(this_present_category && that_present_category))
|
||||
return false;
|
||||
if (!this.category.equals(that.category))
|
||||
return false;
|
||||
}
|
||||
|
||||
boolean this_present_message = true && this.isSetMessage();
|
||||
boolean that_present_message = true && that.isSetMessage();
|
||||
if (this_present_message || that_present_message) {
|
||||
if (!(this_present_message && that_present_message))
|
||||
return false;
|
||||
if (!this.message.equals(that.message))
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
public int compareTo(LogEntry other) {
|
||||
if (!getClass().equals(other.getClass())) {
|
||||
return getClass().getName().compareTo(other.getClass().getName());
|
||||
}
|
||||
|
||||
int lastComparison = 0;
|
||||
LogEntry typedOther = (LogEntry)other;
|
||||
|
||||
lastComparison = Boolean.valueOf(isSetCategory()).compareTo(isSetCategory());
|
||||
if (lastComparison != 0) {
|
||||
return lastComparison;
|
||||
}
|
||||
lastComparison = TBaseHelper.compareTo(category, typedOther.category);
|
||||
if (lastComparison != 0) {
|
||||
return lastComparison;
|
||||
}
|
||||
lastComparison = Boolean.valueOf(isSetMessage()).compareTo(isSetMessage());
|
||||
if (lastComparison != 0) {
|
||||
return lastComparison;
|
||||
}
|
||||
lastComparison = TBaseHelper.compareTo(message, typedOther.message);
|
||||
if (lastComparison != 0) {
|
||||
return lastComparison;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
public void read(TProtocol iprot) throws TException {
|
||||
TField field;
|
||||
iprot.readStructBegin();
|
||||
while (true)
|
||||
{
|
||||
field = iprot.readFieldBegin();
|
||||
if (field.type == TType.STOP) {
|
||||
break;
|
||||
}
|
||||
_Fields fieldId = _Fields.findByThriftId(field.id);
|
||||
if (fieldId == null) {
|
||||
TProtocolUtil.skip(iprot, field.type);
|
||||
} else {
|
||||
switch (fieldId) {
|
||||
case CATEGORY:
|
||||
if (field.type == TType.STRING) {
|
||||
this.category = iprot.readString();
|
||||
} else {
|
||||
TProtocolUtil.skip(iprot, field.type);
|
||||
}
|
||||
break;
|
||||
case MESSAGE:
|
||||
if (field.type == TType.STRING) {
|
||||
this.message = iprot.readString();
|
||||
} else {
|
||||
TProtocolUtil.skip(iprot, field.type);
|
||||
}
|
||||
break;
|
||||
}
|
||||
iprot.readFieldEnd();
|
||||
}
|
||||
}
|
||||
iprot.readStructEnd();
|
||||
|
||||
// check for required fields of primitive type, which can't be checked in the validate method
|
||||
validate();
|
||||
}
|
||||
|
||||
public void write(TProtocol oprot) throws TException {
|
||||
validate();
|
||||
|
||||
oprot.writeStructBegin(STRUCT_DESC);
|
||||
if (this.category != null) {
|
||||
oprot.writeFieldBegin(CATEGORY_FIELD_DESC);
|
||||
oprot.writeString(this.category);
|
||||
oprot.writeFieldEnd();
|
||||
}
|
||||
if (this.message != null) {
|
||||
oprot.writeFieldBegin(MESSAGE_FIELD_DESC);
|
||||
oprot.writeString(this.message);
|
||||
oprot.writeFieldEnd();
|
||||
}
|
||||
oprot.writeFieldStop();
|
||||
oprot.writeStructEnd();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
StringBuilder sb = new StringBuilder("LogEntry(");
|
||||
boolean first = true;
|
||||
|
||||
sb.append("category:");
|
||||
if (this.category == null) {
|
||||
sb.append("null");
|
||||
} else {
|
||||
sb.append(this.category);
|
||||
}
|
||||
first = false;
|
||||
if (!first) sb.append(", ");
|
||||
sb.append("message:");
|
||||
if (this.message == null) {
|
||||
sb.append("null");
|
||||
} else {
|
||||
sb.append(this.message);
|
||||
}
|
||||
first = false;
|
||||
sb.append(")");
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
public void validate() throws TException {
|
||||
// check for required fields
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -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.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Autogenerated by Thrift
|
||||
*
|
||||
* DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
|
||||
*/
|
||||
package generated.scribe.thrift;
|
||||
|
||||
|
||||
import java.util.Map;
|
||||
import java.util.HashMap;
|
||||
import org.apache.thrift.TEnum;
|
||||
public enum ResultCode implements TEnum{
|
||||
OK(0),
|
||||
TRY_LATER(1);
|
||||
|
||||
private static final Map<Integer, ResultCode> BY_VALUE = new HashMap<Integer,ResultCode>() {{
|
||||
for(ResultCode val : ResultCode.values()) {
|
||||
put(val.getValue(), val);
|
||||
}
|
||||
}};
|
||||
|
||||
private final int value;
|
||||
|
||||
private ResultCode(int value) {
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the integer value of this enum value, as defined in the Thrift IDL.
|
||||
*/
|
||||
public int getValue() {
|
||||
return value;
|
||||
}
|
||||
|
||||
/**
|
||||
* Find a the enum type by its integer value, as defined in the Thrift IDL.
|
||||
* @return null if the value is not found.
|
||||
*/
|
||||
public static ResultCode findByValue(int value) {
|
||||
return BY_VALUE.get(value);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,772 @@
|
|||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Autogenerated by Thrift
|
||||
*
|
||||
* DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
|
||||
*/
|
||||
package generated.scribe.thrift;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Map;
|
||||
import java.util.HashMap;
|
||||
import java.util.EnumMap;
|
||||
import java.util.Set;
|
||||
import java.util.HashSet;
|
||||
import java.util.EnumSet;
|
||||
import java.util.Collections;
|
||||
import java.util.BitSet;
|
||||
import java.util.Arrays;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import org.apache.thrift.*;
|
||||
import org.apache.thrift.meta_data.*;
|
||||
import org.apache.thrift.protocol.*;
|
||||
|
||||
public class scribe {
|
||||
|
||||
public interface Iface extends generated.com.facebook.fb303.FacebookService.Iface {
|
||||
|
||||
public ResultCode Log(List<LogEntry> messages) throws TException;
|
||||
|
||||
}
|
||||
|
||||
public static class Client extends generated.com.facebook.fb303.FacebookService.Client implements Iface {
|
||||
public Client(TProtocol prot)
|
||||
{
|
||||
this(prot, prot);
|
||||
}
|
||||
|
||||
public Client(TProtocol iprot, TProtocol oprot)
|
||||
{
|
||||
super(iprot, oprot);
|
||||
}
|
||||
|
||||
public ResultCode Log(List<LogEntry> messages) throws TException
|
||||
{
|
||||
send_Log(messages);
|
||||
return recv_Log();
|
||||
}
|
||||
|
||||
public void send_Log(List<LogEntry> messages) throws TException
|
||||
{
|
||||
oprot_.writeMessageBegin(new TMessage("Log", TMessageType.CALL, seqid_));
|
||||
Log_args args = new Log_args();
|
||||
args.messages = messages;
|
||||
args.write(oprot_);
|
||||
oprot_.writeMessageEnd();
|
||||
oprot_.getTransport().flush();
|
||||
}
|
||||
|
||||
public ResultCode recv_Log() throws TException
|
||||
{
|
||||
TMessage msg = iprot_.readMessageBegin();
|
||||
if (msg.type == TMessageType.EXCEPTION) {
|
||||
TApplicationException x = TApplicationException.read(iprot_);
|
||||
iprot_.readMessageEnd();
|
||||
throw x;
|
||||
}
|
||||
Log_result result = new Log_result();
|
||||
result.read(iprot_);
|
||||
iprot_.readMessageEnd();
|
||||
if (result.isSetSuccess()) {
|
||||
return result.success;
|
||||
}
|
||||
throw new TApplicationException(TApplicationException.MISSING_RESULT, "Log failed: unknown result");
|
||||
}
|
||||
|
||||
}
|
||||
public static class Processor extends generated.com.facebook.fb303.FacebookService.Processor implements TProcessor {
|
||||
private static final Logger LOGGER = LoggerFactory.getLogger(Processor.class.getName());
|
||||
public Processor(Iface iface)
|
||||
{
|
||||
super(iface);
|
||||
iface_ = iface;
|
||||
processMap_.put("Log", new Log());
|
||||
}
|
||||
|
||||
private Iface iface_;
|
||||
|
||||
public boolean process(TProtocol iprot, TProtocol oprot) throws TException
|
||||
{
|
||||
TMessage msg = iprot.readMessageBegin();
|
||||
ProcessFunction fn = processMap_.get(msg.name);
|
||||
if (fn == null) {
|
||||
TProtocolUtil.skip(iprot, TType.STRUCT);
|
||||
iprot.readMessageEnd();
|
||||
TApplicationException x = new TApplicationException(TApplicationException.UNKNOWN_METHOD, "Invalid method name: '"+msg.name+"'");
|
||||
oprot.writeMessageBegin(new TMessage(msg.name, TMessageType.EXCEPTION, msg.seqid));
|
||||
x.write(oprot);
|
||||
oprot.writeMessageEnd();
|
||||
oprot.getTransport().flush();
|
||||
return true;
|
||||
}
|
||||
fn.process(msg.seqid, iprot, oprot);
|
||||
return true;
|
||||
}
|
||||
|
||||
private class Log implements ProcessFunction {
|
||||
public void process(int seqid, TProtocol iprot, TProtocol oprot) throws TException
|
||||
{
|
||||
Log_args args = new Log_args();
|
||||
args.read(iprot);
|
||||
iprot.readMessageEnd();
|
||||
Log_result result = new Log_result();
|
||||
result.success = iface_.Log(args.messages);
|
||||
oprot.writeMessageBegin(new TMessage("Log", TMessageType.REPLY, seqid));
|
||||
result.write(oprot);
|
||||
oprot.writeMessageEnd();
|
||||
oprot.getTransport().flush();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public static class Log_args implements TBase<Log_args._Fields>, java.io.Serializable, Cloneable, Comparable<Log_args> {
|
||||
private static final TStruct STRUCT_DESC = new TStruct("Log_args");
|
||||
|
||||
private static final TField MESSAGES_FIELD_DESC = new TField("messages", TType.LIST, (short)1);
|
||||
|
||||
public List<LogEntry> messages;
|
||||
|
||||
/** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
|
||||
public enum _Fields implements TFieldIdEnum {
|
||||
MESSAGES((short)1, "messages");
|
||||
|
||||
private static final Map<Integer, _Fields> byId = new HashMap<Integer, _Fields>();
|
||||
private static final Map<String, _Fields> byName = new HashMap<String, _Fields>();
|
||||
|
||||
static {
|
||||
for (_Fields field : EnumSet.allOf(_Fields.class)) {
|
||||
byId.put((int)field._thriftId, field);
|
||||
byName.put(field.getFieldName(), field);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Find the _Fields constant that matches fieldId, or null if its not found.
|
||||
*/
|
||||
public static _Fields findByThriftId(int fieldId) {
|
||||
return byId.get(fieldId);
|
||||
}
|
||||
|
||||
/**
|
||||
* Find the _Fields constant that matches fieldId, throwing an exception
|
||||
* if it is not found.
|
||||
*/
|
||||
public static _Fields findByThriftIdOrThrow(int fieldId) {
|
||||
_Fields fields = findByThriftId(fieldId);
|
||||
if (fields == null) throw new IllegalArgumentException("Field " + fieldId + " doesn't exist!");
|
||||
return fields;
|
||||
}
|
||||
|
||||
/**
|
||||
* Find the _Fields constant that matches name, or null if its not found.
|
||||
*/
|
||||
public static _Fields findByName(String name) {
|
||||
return byName.get(name);
|
||||
}
|
||||
|
||||
private final short _thriftId;
|
||||
private final String _fieldName;
|
||||
|
||||
_Fields(short thriftId, String fieldName) {
|
||||
_thriftId = thriftId;
|
||||
_fieldName = fieldName;
|
||||
}
|
||||
|
||||
public short getThriftFieldId() {
|
||||
return _thriftId;
|
||||
}
|
||||
|
||||
public String getFieldName() {
|
||||
return _fieldName;
|
||||
}
|
||||
}
|
||||
|
||||
// isset id assignments
|
||||
|
||||
public static final Map<_Fields, FieldMetaData> metaDataMap = Collections.unmodifiableMap(new EnumMap<_Fields, FieldMetaData>(_Fields.class) {{
|
||||
put(_Fields.MESSAGES, new FieldMetaData("messages", TFieldRequirementType.DEFAULT,
|
||||
new ListMetaData(TType.LIST,
|
||||
new StructMetaData(TType.STRUCT, LogEntry.class))));
|
||||
}});
|
||||
|
||||
static {
|
||||
FieldMetaData.addStructMetaDataMap(Log_args.class, metaDataMap);
|
||||
}
|
||||
|
||||
public Log_args() {
|
||||
}
|
||||
|
||||
public Log_args(
|
||||
List<LogEntry> messages)
|
||||
{
|
||||
this();
|
||||
this.messages = messages;
|
||||
}
|
||||
|
||||
/**
|
||||
* Performs a deep copy on <i>other</i>.
|
||||
*/
|
||||
public Log_args(Log_args other) {
|
||||
if (other.isSetMessages()) {
|
||||
List<LogEntry> __this__messages = new ArrayList<LogEntry>();
|
||||
for (LogEntry other_element : other.messages) {
|
||||
__this__messages.add(new LogEntry(other_element));
|
||||
}
|
||||
this.messages = __this__messages;
|
||||
}
|
||||
}
|
||||
|
||||
public Log_args deepCopy() {
|
||||
return new Log_args(this);
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
public Log_args clone() {
|
||||
return new Log_args(this);
|
||||
}
|
||||
|
||||
public int getMessagesSize() {
|
||||
return (this.messages == null) ? 0 : this.messages.size();
|
||||
}
|
||||
|
||||
public java.util.Iterator<LogEntry> getMessagesIterator() {
|
||||
return (this.messages == null) ? null : this.messages.iterator();
|
||||
}
|
||||
|
||||
public void addToMessages(LogEntry elem) {
|
||||
if (this.messages == null) {
|
||||
this.messages = new ArrayList<LogEntry>();
|
||||
}
|
||||
this.messages.add(elem);
|
||||
}
|
||||
|
||||
public List<LogEntry> getMessages() {
|
||||
return this.messages;
|
||||
}
|
||||
|
||||
public Log_args setMessages(List<LogEntry> messages) {
|
||||
this.messages = messages;
|
||||
return this;
|
||||
}
|
||||
|
||||
public void unsetMessages() {
|
||||
this.messages = null;
|
||||
}
|
||||
|
||||
/** Returns true if field messages is set (has been asigned a value) and false otherwise */
|
||||
public boolean isSetMessages() {
|
||||
return this.messages != null;
|
||||
}
|
||||
|
||||
public void setMessagesIsSet(boolean value) {
|
||||
if (!value) {
|
||||
this.messages = null;
|
||||
}
|
||||
}
|
||||
|
||||
public void setFieldValue(_Fields field, Object value) {
|
||||
switch (field) {
|
||||
case MESSAGES:
|
||||
if (value == null) {
|
||||
unsetMessages();
|
||||
} else {
|
||||
setMessages((List<LogEntry>)value);
|
||||
}
|
||||
break;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
public void setFieldValue(int fieldID, Object value) {
|
||||
setFieldValue(_Fields.findByThriftIdOrThrow(fieldID), value);
|
||||
}
|
||||
|
||||
public Object getFieldValue(_Fields field) {
|
||||
switch (field) {
|
||||
case MESSAGES:
|
||||
return getMessages();
|
||||
|
||||
}
|
||||
throw new IllegalStateException();
|
||||
}
|
||||
|
||||
public Object getFieldValue(int fieldId) {
|
||||
return getFieldValue(_Fields.findByThriftIdOrThrow(fieldId));
|
||||
}
|
||||
|
||||
/** Returns true if field corresponding to fieldID is set (has been asigned a value) and false otherwise */
|
||||
public boolean isSet(_Fields field) {
|
||||
switch (field) {
|
||||
case MESSAGES:
|
||||
return isSetMessages();
|
||||
}
|
||||
throw new IllegalStateException();
|
||||
}
|
||||
|
||||
public boolean isSet(int fieldID) {
|
||||
return isSet(_Fields.findByThriftIdOrThrow(fieldID));
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object that) {
|
||||
if (that == null)
|
||||
return false;
|
||||
if (that instanceof Log_args)
|
||||
return this.equals((Log_args)that);
|
||||
return false;
|
||||
}
|
||||
|
||||
public boolean equals(Log_args that) {
|
||||
if (that == null)
|
||||
return false;
|
||||
|
||||
boolean this_present_messages = true && this.isSetMessages();
|
||||
boolean that_present_messages = true && that.isSetMessages();
|
||||
if (this_present_messages || that_present_messages) {
|
||||
if (!(this_present_messages && that_present_messages))
|
||||
return false;
|
||||
if (!this.messages.equals(that.messages))
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
public int compareTo(Log_args other) {
|
||||
if (!getClass().equals(other.getClass())) {
|
||||
return getClass().getName().compareTo(other.getClass().getName());
|
||||
}
|
||||
|
||||
int lastComparison = 0;
|
||||
Log_args typedOther = (Log_args)other;
|
||||
|
||||
lastComparison = Boolean.valueOf(isSetMessages()).compareTo(isSetMessages());
|
||||
if (lastComparison != 0) {
|
||||
return lastComparison;
|
||||
}
|
||||
lastComparison = TBaseHelper.compareTo(messages, typedOther.messages);
|
||||
if (lastComparison != 0) {
|
||||
return lastComparison;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
public void read(TProtocol iprot) throws TException {
|
||||
TField field;
|
||||
iprot.readStructBegin();
|
||||
while (true)
|
||||
{
|
||||
field = iprot.readFieldBegin();
|
||||
if (field.type == TType.STOP) {
|
||||
break;
|
||||
}
|
||||
_Fields fieldId = _Fields.findByThriftId(field.id);
|
||||
if (fieldId == null) {
|
||||
TProtocolUtil.skip(iprot, field.type);
|
||||
} else {
|
||||
switch (fieldId) {
|
||||
case MESSAGES:
|
||||
if (field.type == TType.LIST) {
|
||||
{
|
||||
TList _list0 = iprot.readListBegin();
|
||||
this.messages = new ArrayList<LogEntry>(_list0.size);
|
||||
for (int _i1 = 0; _i1 < _list0.size; ++_i1)
|
||||
{
|
||||
LogEntry _elem2;
|
||||
_elem2 = new LogEntry();
|
||||
_elem2.read(iprot);
|
||||
this.messages.add(_elem2);
|
||||
}
|
||||
iprot.readListEnd();
|
||||
}
|
||||
} else {
|
||||
TProtocolUtil.skip(iprot, field.type);
|
||||
}
|
||||
break;
|
||||
}
|
||||
iprot.readFieldEnd();
|
||||
}
|
||||
}
|
||||
iprot.readStructEnd();
|
||||
|
||||
// check for required fields of primitive type, which can't be checked in the validate method
|
||||
validate();
|
||||
}
|
||||
|
||||
public void write(TProtocol oprot) throws TException {
|
||||
validate();
|
||||
|
||||
oprot.writeStructBegin(STRUCT_DESC);
|
||||
if (this.messages != null) {
|
||||
oprot.writeFieldBegin(MESSAGES_FIELD_DESC);
|
||||
{
|
||||
oprot.writeListBegin(new TList(TType.STRUCT, this.messages.size()));
|
||||
for (LogEntry _iter3 : this.messages)
|
||||
{
|
||||
_iter3.write(oprot);
|
||||
}
|
||||
oprot.writeListEnd();
|
||||
}
|
||||
oprot.writeFieldEnd();
|
||||
}
|
||||
oprot.writeFieldStop();
|
||||
oprot.writeStructEnd();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
StringBuilder sb = new StringBuilder("Log_args(");
|
||||
boolean first = true;
|
||||
|
||||
sb.append("messages:");
|
||||
if (this.messages == null) {
|
||||
sb.append("null");
|
||||
} else {
|
||||
sb.append(this.messages);
|
||||
}
|
||||
first = false;
|
||||
sb.append(")");
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
public void validate() throws TException {
|
||||
// check for required fields
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public static class Log_result implements TBase<Log_result._Fields>, java.io.Serializable, Cloneable, Comparable<Log_result> {
|
||||
private static final TStruct STRUCT_DESC = new TStruct("Log_result");
|
||||
|
||||
private static final TField SUCCESS_FIELD_DESC = new TField("success", TType.I32, (short)0);
|
||||
|
||||
/**
|
||||
*
|
||||
* @see ResultCode
|
||||
*/
|
||||
public ResultCode success;
|
||||
|
||||
/** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
|
||||
public enum _Fields implements TFieldIdEnum {
|
||||
/**
|
||||
*
|
||||
* @see ResultCode
|
||||
*/
|
||||
SUCCESS((short)0, "success");
|
||||
|
||||
private static final Map<Integer, _Fields> byId = new HashMap<Integer, _Fields>();
|
||||
private static final Map<String, _Fields> byName = new HashMap<String, _Fields>();
|
||||
|
||||
static {
|
||||
for (_Fields field : EnumSet.allOf(_Fields.class)) {
|
||||
byId.put((int)field._thriftId, field);
|
||||
byName.put(field.getFieldName(), field);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Find the _Fields constant that matches fieldId, or null if its not found.
|
||||
*/
|
||||
public static _Fields findByThriftId(int fieldId) {
|
||||
return byId.get(fieldId);
|
||||
}
|
||||
|
||||
/**
|
||||
* Find the _Fields constant that matches fieldId, throwing an exception
|
||||
* if it is not found.
|
||||
*/
|
||||
public static _Fields findByThriftIdOrThrow(int fieldId) {
|
||||
_Fields fields = findByThriftId(fieldId);
|
||||
if (fields == null) throw new IllegalArgumentException("Field " + fieldId + " doesn't exist!");
|
||||
return fields;
|
||||
}
|
||||
|
||||
/**
|
||||
* Find the _Fields constant that matches name, or null if its not found.
|
||||
*/
|
||||
public static _Fields findByName(String name) {
|
||||
return byName.get(name);
|
||||
}
|
||||
|
||||
private final short _thriftId;
|
||||
private final String _fieldName;
|
||||
|
||||
_Fields(short thriftId, String fieldName) {
|
||||
_thriftId = thriftId;
|
||||
_fieldName = fieldName;
|
||||
}
|
||||
|
||||
public short getThriftFieldId() {
|
||||
return _thriftId;
|
||||
}
|
||||
|
||||
public String getFieldName() {
|
||||
return _fieldName;
|
||||
}
|
||||
}
|
||||
|
||||
// isset id assignments
|
||||
|
||||
public static final Map<_Fields, FieldMetaData> metaDataMap = Collections.unmodifiableMap(new EnumMap<_Fields, FieldMetaData>(_Fields.class) {{
|
||||
put(_Fields.SUCCESS, new FieldMetaData("success", TFieldRequirementType.DEFAULT,
|
||||
new EnumMetaData(TType.ENUM, ResultCode.class)));
|
||||
}});
|
||||
|
||||
static {
|
||||
FieldMetaData.addStructMetaDataMap(Log_result.class, metaDataMap);
|
||||
}
|
||||
|
||||
public Log_result() {
|
||||
}
|
||||
|
||||
public Log_result(
|
||||
ResultCode success)
|
||||
{
|
||||
this();
|
||||
this.success = success;
|
||||
}
|
||||
|
||||
/**
|
||||
* Performs a deep copy on <i>other</i>.
|
||||
*/
|
||||
public Log_result(Log_result other) {
|
||||
if (other.isSetSuccess()) {
|
||||
this.success = other.success;
|
||||
}
|
||||
}
|
||||
|
||||
public Log_result deepCopy() {
|
||||
return new Log_result(this);
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
public Log_result clone() {
|
||||
return new Log_result(this);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @see ResultCode
|
||||
*/
|
||||
public ResultCode getSuccess() {
|
||||
return this.success;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @see ResultCode
|
||||
*/
|
||||
public Log_result setSuccess(ResultCode success) {
|
||||
this.success = success;
|
||||
return this;
|
||||
}
|
||||
|
||||
public void unsetSuccess() {
|
||||
this.success = null;
|
||||
}
|
||||
|
||||
/** Returns true if field success is set (has been asigned a value) and false otherwise */
|
||||
public boolean isSetSuccess() {
|
||||
return this.success != null;
|
||||
}
|
||||
|
||||
public void setSuccessIsSet(boolean value) {
|
||||
if (!value) {
|
||||
this.success = null;
|
||||
}
|
||||
}
|
||||
|
||||
public void setFieldValue(_Fields field, Object value) {
|
||||
switch (field) {
|
||||
case SUCCESS:
|
||||
if (value == null) {
|
||||
unsetSuccess();
|
||||
} else {
|
||||
setSuccess((ResultCode)value);
|
||||
}
|
||||
break;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
public void setFieldValue(int fieldID, Object value) {
|
||||
setFieldValue(_Fields.findByThriftIdOrThrow(fieldID), value);
|
||||
}
|
||||
|
||||
public Object getFieldValue(_Fields field) {
|
||||
switch (field) {
|
||||
case SUCCESS:
|
||||
return getSuccess();
|
||||
|
||||
}
|
||||
throw new IllegalStateException();
|
||||
}
|
||||
|
||||
public Object getFieldValue(int fieldId) {
|
||||
return getFieldValue(_Fields.findByThriftIdOrThrow(fieldId));
|
||||
}
|
||||
|
||||
/** Returns true if field corresponding to fieldID is set (has been asigned a value) and false otherwise */
|
||||
public boolean isSet(_Fields field) {
|
||||
switch (field) {
|
||||
case SUCCESS:
|
||||
return isSetSuccess();
|
||||
}
|
||||
throw new IllegalStateException();
|
||||
}
|
||||
|
||||
public boolean isSet(int fieldID) {
|
||||
return isSet(_Fields.findByThriftIdOrThrow(fieldID));
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object that) {
|
||||
if (that == null)
|
||||
return false;
|
||||
if (that instanceof Log_result)
|
||||
return this.equals((Log_result)that);
|
||||
return false;
|
||||
}
|
||||
|
||||
public boolean equals(Log_result that) {
|
||||
if (that == null)
|
||||
return false;
|
||||
|
||||
boolean this_present_success = true && this.isSetSuccess();
|
||||
boolean that_present_success = true && that.isSetSuccess();
|
||||
if (this_present_success || that_present_success) {
|
||||
if (!(this_present_success && that_present_success))
|
||||
return false;
|
||||
if (!this.success.equals(that.success))
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
public int compareTo(Log_result other) {
|
||||
if (!getClass().equals(other.getClass())) {
|
||||
return getClass().getName().compareTo(other.getClass().getName());
|
||||
}
|
||||
|
||||
int lastComparison = 0;
|
||||
Log_result typedOther = (Log_result)other;
|
||||
|
||||
lastComparison = Boolean.valueOf(isSetSuccess()).compareTo(isSetSuccess());
|
||||
if (lastComparison != 0) {
|
||||
return lastComparison;
|
||||
}
|
||||
lastComparison = TBaseHelper.compareTo(success, typedOther.success);
|
||||
if (lastComparison != 0) {
|
||||
return lastComparison;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
public void read(TProtocol iprot) throws TException {
|
||||
TField field;
|
||||
iprot.readStructBegin();
|
||||
while (true)
|
||||
{
|
||||
field = iprot.readFieldBegin();
|
||||
if (field.type == TType.STOP) {
|
||||
break;
|
||||
}
|
||||
_Fields fieldId = _Fields.findByThriftId(field.id);
|
||||
if (fieldId == null) {
|
||||
TProtocolUtil.skip(iprot, field.type);
|
||||
} else {
|
||||
switch (fieldId) {
|
||||
case SUCCESS:
|
||||
if (field.type == TType.I32) {
|
||||
this.success = ResultCode.findByValue(iprot.readI32());
|
||||
} else {
|
||||
TProtocolUtil.skip(iprot, field.type);
|
||||
}
|
||||
break;
|
||||
}
|
||||
iprot.readFieldEnd();
|
||||
}
|
||||
}
|
||||
iprot.readStructEnd();
|
||||
|
||||
// check for required fields of primitive type, which can't be checked in the validate method
|
||||
validate();
|
||||
}
|
||||
|
||||
public void write(TProtocol oprot) throws TException {
|
||||
oprot.writeStructBegin(STRUCT_DESC);
|
||||
|
||||
if (this.isSetSuccess()) {
|
||||
oprot.writeFieldBegin(SUCCESS_FIELD_DESC);
|
||||
oprot.writeI32(this.success.getValue());
|
||||
oprot.writeFieldEnd();
|
||||
}
|
||||
oprot.writeFieldStop();
|
||||
oprot.writeStructEnd();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
StringBuilder sb = new StringBuilder("Log_result(");
|
||||
boolean first = true;
|
||||
|
||||
sb.append("success:");
|
||||
if (this.success == null) {
|
||||
sb.append("null");
|
||||
} else {
|
||||
String success_name = success.name();
|
||||
if (success_name != null) {
|
||||
sb.append(success_name);
|
||||
sb.append(" (");
|
||||
}
|
||||
sb.append(this.success);
|
||||
if (success_name != null) {
|
||||
sb.append(")");
|
||||
}
|
||||
}
|
||||
first = false;
|
||||
sb.append(")");
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
public void validate() throws TException {
|
||||
// check for required fields
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,28 @@
|
|||
/*
|
||||
* 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 org.oasisopen.sca.annotation.Remotable;
|
||||
|
||||
@Remotable
|
||||
public interface HelloWorld {
|
||||
|
||||
String sayHello(String name);
|
||||
|
||||
}
|
|
@ -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 sample;
|
||||
|
||||
import org.oasisopen.sca.annotation.Reference;
|
||||
|
||||
public class HelloWorldImpl implements HelloWorld {
|
||||
|
||||
@Reference
|
||||
public Logger logger;
|
||||
|
||||
public String sayHello(String name) {
|
||||
logger.log("sample", "HelloWorldImpl.sayHello " + name);
|
||||
return "Hello " + name;
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,28 @@
|
|||
/*
|
||||
* 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 org.oasisopen.sca.annotation.Remotable;
|
||||
|
||||
@Remotable
|
||||
public interface Logger {
|
||||
|
||||
int log(String category, String message);
|
||||
|
||||
}
|
|
@ -0,0 +1,76 @@
|
|||
/*
|
||||
* 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 generated.scribe.thrift.scribe;
|
||||
import generated.scribe.thrift.LogEntry;
|
||||
import java.util.Collections;
|
||||
import org.apache.thrift.TException;
|
||||
import org.apache.thrift.transport.TSocket;
|
||||
import org.apache.thrift.transport.TTransport;
|
||||
import org.apache.thrift.transport.TFramedTransport;
|
||||
import org.apache.thrift.protocol.TProtocol;
|
||||
import org.apache.thrift.protocol.TBinaryProtocol;
|
||||
import org.oasisopen.sca.annotation.Scope;
|
||||
import org.oasisopen.sca.annotation.Property;
|
||||
import org.oasisopen.sca.annotation.Init;
|
||||
import org.oasisopen.sca.annotation.Destroy;
|
||||
|
||||
@Scope("COMPOSITE")
|
||||
public class ScribeLoggerImpl implements Logger {
|
||||
|
||||
@Property
|
||||
public String host;
|
||||
|
||||
@Property
|
||||
public int port;
|
||||
|
||||
scribe.Client scribe;
|
||||
TTransport transport;
|
||||
|
||||
@Init
|
||||
public void init() {
|
||||
try {
|
||||
final TSocket socket = new TSocket(host, port);
|
||||
socket.setTimeout(1000);
|
||||
transport = new TFramedTransport(socket);
|
||||
final TProtocol protocol = new TBinaryProtocol(transport);
|
||||
scribe = new scribe.Client(protocol);
|
||||
transport.open();
|
||||
} catch (TException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
@Destroy
|
||||
public void destroy() {
|
||||
transport.close();
|
||||
}
|
||||
|
||||
public int log(String category, String message) {
|
||||
try {
|
||||
scribe.Log(Collections.singletonList(new LogEntry(category, message)));
|
||||
return 1;
|
||||
} catch (TException e) {
|
||||
e.printStackTrace();
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,23 @@
|
|||
<?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:scribe"/>
|
||||
</contribution>
|
|
@ -0,0 +1,112 @@
|
|||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
/**
|
||||
* fb303.thrift
|
||||
*/
|
||||
|
||||
namespace java generated.com.facebook.fb303
|
||||
namespace cpp facebook.fb303
|
||||
namespace perl Facebook.FB303
|
||||
|
||||
/**
|
||||
* Common status reporting mechanism across all services
|
||||
*/
|
||||
enum fb_status {
|
||||
DEAD = 0,
|
||||
STARTING = 1,
|
||||
ALIVE = 2,
|
||||
STOPPING = 3,
|
||||
STOPPED = 4,
|
||||
WARNING = 5,
|
||||
}
|
||||
|
||||
/**
|
||||
* Standard base service
|
||||
*/
|
||||
service FacebookService {
|
||||
|
||||
/**
|
||||
* Returns a descriptive name of the service
|
||||
*/
|
||||
string getName(),
|
||||
|
||||
/**
|
||||
* Returns the version of the service
|
||||
*/
|
||||
string getVersion(),
|
||||
|
||||
/**
|
||||
* Gets the status of this service
|
||||
*/
|
||||
fb_status getStatus(),
|
||||
|
||||
/**
|
||||
* User friendly description of status, such as why the service is in
|
||||
* the dead or warning state, or what is being started or stopped.
|
||||
*/
|
||||
string getStatusDetails(),
|
||||
|
||||
/**
|
||||
* Gets the counters for this service
|
||||
*/
|
||||
map<string, i64> getCounters(),
|
||||
|
||||
/**
|
||||
* Gets the value of a single counter
|
||||
*/
|
||||
i64 getCounter(1: string key),
|
||||
|
||||
/**
|
||||
* Sets an option
|
||||
*/
|
||||
void setOption(1: string key, 2: string value),
|
||||
|
||||
/**
|
||||
* Gets an option
|
||||
*/
|
||||
string getOption(1: string key),
|
||||
|
||||
/**
|
||||
* Gets all options
|
||||
*/
|
||||
map<string, string> getOptions(),
|
||||
|
||||
/**
|
||||
* Returns a CPU profile over the given time interval (client and server
|
||||
* must agree on the profile format).
|
||||
*/
|
||||
string getCpuProfile(1: i32 profileDurationInSec),
|
||||
|
||||
/**
|
||||
* Returns the unix time that the server has been running since
|
||||
*/
|
||||
i64 aliveSince(),
|
||||
|
||||
/**
|
||||
* Tell the server to reload its configuration, reopen log files, etc
|
||||
*/
|
||||
oneway void reinitialize(),
|
||||
|
||||
/**
|
||||
* Suggest a shutdown to the server
|
||||
*/
|
||||
oneway void shutdown(),
|
||||
|
||||
}
|
|
@ -0,0 +1,36 @@
|
|||
<?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"
|
||||
xmlns:tuscany="http://tuscany.apache.org/xmlns/sca/1.1"
|
||||
targetNamespace="http://sample"
|
||||
name="scribe">
|
||||
|
||||
<component name="HelloWorld">
|
||||
<implementation.java class="sample.HelloWorldImpl"/>
|
||||
<reference name="logger" target="ScribeLogger"/>
|
||||
</component>
|
||||
|
||||
<component name="ScribeLogger">
|
||||
<implementation.java class="sample.ScribeLoggerImpl"/>
|
||||
<property name="host">localhost</property>
|
||||
<property name="port">1463</property>
|
||||
</component>
|
||||
|
||||
</composite>
|
|
@ -0,0 +1,38 @@
|
|||
## Copyright (c) 2007-2008 Facebook
|
||||
##
|
||||
## Licensed 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.
|
||||
##
|
||||
## See accompanying file LICENSE or visit the Scribe site at:
|
||||
## http://developers.facebook.com/scribe/
|
||||
|
||||
include "fb303.thrift"
|
||||
|
||||
namespace cpp scribe.thrift
|
||||
namespace java generated.scribe.thrift
|
||||
|
||||
enum ResultCode
|
||||
{
|
||||
OK,
|
||||
TRY_LATER
|
||||
}
|
||||
|
||||
struct LogEntry
|
||||
{
|
||||
1: string category,
|
||||
2: string message
|
||||
}
|
||||
|
||||
service scribe extends fb303.FacebookService
|
||||
{
|
||||
ResultCode Log(1: list<LogEntry> messages);
|
||||
}
|
|
@ -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 sample;
|
||||
|
||||
import org.apache.tuscany.sca.node.Node;
|
||||
import org.apache.tuscany.sca.node.NodeFactory;
|
||||
import sample.HelloWorld;
|
||||
import static org.junit.Assert.assertEquals;
|
||||
|
||||
import org.junit.Test;
|
||||
|
||||
public class LoggingTest {
|
||||
|
||||
@Test
|
||||
public void testSayHello() {
|
||||
NodeFactory nf = NodeFactory.newInstance();
|
||||
Node node = nf.createNode((String)null, new String[] {"target/classes"}).start();
|
||||
HelloWorld hw = node.getService(HelloWorld.class, "HelloWorld");
|
||||
assertEquals("Hello There", hw.sayHello("There"));
|
||||
node.stop();
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,43 @@
|
|||
<?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-samples</artifactId>
|
||||
<version>2.0-SNAPSHOT</version>
|
||||
<relativePath>../../pom.xml</relativePath>
|
||||
</parent>
|
||||
<artifactId>tuscany-sample-logging-scribe</artifactId>
|
||||
<packaging>pom</packaging>
|
||||
<name>Apache Tuscany SCA Sample Logging Scribe</name>
|
||||
|
||||
<profiles>
|
||||
<profile>
|
||||
<id>default</id>
|
||||
<activation>
|
||||
<activeByDefault>true</activeByDefault>
|
||||
</activation>
|
||||
<modules>
|
||||
<!--module>helloworld-scribe</module-->
|
||||
</modules>
|
||||
</profile>
|
||||
</profiles>
|
||||
</project>
|
45
sca-java-2.x/contrib/samples/applications/pom.xml
Normal file
45
sca-java-2.x/contrib/samples/applications/pom.xml
Normal file
|
@ -0,0 +1,45 @@
|
|||
<?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-samples</artifactId>
|
||||
<version>2.0-SNAPSHOT</version>
|
||||
</parent>
|
||||
<artifactId>tuscany-samples-applications</artifactId>
|
||||
<groupId>org.apache.tuscany.sca</groupId>
|
||||
<packaging>pom</packaging>
|
||||
<name>Apache Tuscany Sample Applications</name>
|
||||
|
||||
<profiles>
|
||||
<profile>
|
||||
<id>default</id>
|
||||
<activation>
|
||||
<activeByDefault>true</activeByDefault>
|
||||
</activation>
|
||||
<modules>
|
||||
<module>logging-scribe</module>
|
||||
<module>store</module>
|
||||
<module>store-webapp</module>
|
||||
</modules>
|
||||
</profile>
|
||||
</profiles>
|
||||
</project>
|
|
@ -0,0 +1,28 @@
|
|||
Store Sample
|
||||
======================================
|
||||
|
||||
This is a sample store scenario that is used as a getting started guide
|
||||
for Tuscany SCA. For detailed information, please see:
|
||||
|
||||
http://tuscany.apache.org/getting-started-with-tuscany.html
|
||||
|
||||
or
|
||||
|
||||
http://tuscany.apache.org/getting-started-with-tuscany-using-tuscany-eclipse-plugin.html
|
||||
|
||||
|
||||
Building And Running The Sample Using Ant
|
||||
-----------------------------------------
|
||||
With the binary distribution the sample can be built using Ant as follows:
|
||||
|
||||
cd store
|
||||
ant compile
|
||||
|
||||
and then, to run:
|
||||
|
||||
ant run
|
||||
|
||||
Once the store application is running use your browser to visit the following
|
||||
URL:
|
||||
|
||||
http://localhost:8080/store/
|
109
sca-java-2.x/contrib/samples/applications/store-webapp/pom.xml
Normal file
109
sca-java-2.x/contrib/samples/applications/store-webapp/pom.xml
Normal file
|
@ -0,0 +1,109 @@
|
|||
<?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-samples</artifactId>
|
||||
<version>2.0-SNAPSHOT</version>
|
||||
<relativePath>../../pom.xml</relativePath>
|
||||
</parent>
|
||||
<artifactId>sample-store-webapp</artifactId>
|
||||
<packaging>war</packaging>
|
||||
<name>Apache Tuscany SCA Sample Getting Started Online Store as WebApp</name>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.apache.tuscany.sca</groupId>
|
||||
<artifactId>tuscany-base-runtime</artifactId>
|
||||
<version>2.0-SNAPSHOT</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.apache.tuscany.sca</groupId>
|
||||
<artifactId>tuscany-data-api</artifactId>
|
||||
<version>2.0-SNAPSHOT</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.apache.tuscany.sca</groupId>
|
||||
<artifactId>tuscany-binding-atom-runtime</artifactId>
|
||||
<version>2.0-SNAPSHOT</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.tuscany.sca</groupId>
|
||||
<artifactId>tuscany-binding-http-runtime</artifactId>
|
||||
<version>2.0-SNAPSHOT</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.tuscany.sca</groupId>
|
||||
<artifactId>tuscany-binding-jsonrpc-runtime</artifactId>
|
||||
<version>2.0-SNAPSHOT</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.tuscany.sca</groupId>
|
||||
<artifactId>tuscany-implementation-widget-runtime</artifactId>
|
||||
<version>2.0-SNAPSHOT</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.tuscany.sca</groupId>
|
||||
<artifactId>tuscany-implementation-widget-runtime-dojo</artifactId>
|
||||
<version>2.0-SNAPSHOT</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.apache.tuscany.sca</groupId>
|
||||
<artifactId>tuscany-web-javascript-dojo</artifactId>
|
||||
<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>${project.artifactId}</finalName>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.codehaus.mojo</groupId>
|
||||
<artifactId>tomcat-maven-plugin</artifactId>
|
||||
<version>1.0-beta-1</version>
|
||||
<configuration>
|
||||
<!-- Key used for configuring access to server in settings.xml-->
|
||||
|
||||
<server>tomcat</server>
|
||||
<!-- context for the webapp, as finalName is not being honored -->
|
||||
<path>/${project.artifactId}</path>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.mortbay.jetty</groupId>
|
||||
<artifactId>maven-jetty-plugin</artifactId>
|
||||
<version>6.1.18</version>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
|
||||
</project>
|
|
@ -0,0 +1,28 @@
|
|||
/*
|
||||
* 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 services;
|
||||
|
||||
import org.apache.tuscany.sca.data.collection.Collection;
|
||||
import org.oasisopen.sca.annotation.Remotable;
|
||||
|
||||
@Remotable
|
||||
public interface Cart extends Collection<String, Item> {
|
||||
|
||||
}
|
|
@ -0,0 +1,27 @@
|
|||
/*
|
||||
* 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 services;
|
||||
|
||||
import org.oasisopen.sca.annotation.Remotable;
|
||||
|
||||
@Remotable
|
||||
public interface Catalog {
|
||||
Item[] get();
|
||||
}
|
|
@ -0,0 +1,29 @@
|
|||
/*
|
||||
* 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 services;
|
||||
|
||||
import org.oasisopen.sca.annotation.Remotable;
|
||||
|
||||
@Remotable
|
||||
public interface CurrencyConverter {
|
||||
public double getConversion(String fromCurrenycCode, String toCurrencyCode, double amount);
|
||||
|
||||
public String getCurrencySymbol(String currencyCode);
|
||||
}
|
|
@ -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 services;
|
||||
|
||||
public class CurrencyConverterImpl implements CurrencyConverter {
|
||||
public double getConversion(String fromCurrencyCode, String toCurrencyCode, double amount) {
|
||||
if (toCurrencyCode.equals("USD"))
|
||||
return amount;
|
||||
else if (toCurrencyCode.equals("EUR"))
|
||||
return ((double)Math.round(amount * 0.7256 * 100)) /100;
|
||||
return 0;
|
||||
}
|
||||
|
||||
public String getCurrencySymbol(String currencyCode) {
|
||||
if (currencyCode.equals("USD"))
|
||||
return "$";
|
||||
else if (currencyCode.equals("EUR"))
|
||||
return "E"; //"€";
|
||||
return "?";
|
||||
}
|
||||
}
|
|
@ -0,0 +1,52 @@
|
|||
/*
|
||||
* 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 services;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.oasisopen.sca.annotation.Init;
|
||||
import org.oasisopen.sca.annotation.Property;
|
||||
import org.oasisopen.sca.annotation.Reference;
|
||||
|
||||
public class FruitsCatalogImpl implements Catalog {
|
||||
|
||||
@Property
|
||||
public String currencyCode = "USD";
|
||||
|
||||
@Reference
|
||||
public CurrencyConverter currencyConverter;
|
||||
|
||||
private List<Item> catalog = new ArrayList<Item>();
|
||||
|
||||
@Init
|
||||
public void init() {
|
||||
String currencySymbol = currencyConverter.getCurrencySymbol(currencyCode);
|
||||
catalog.add(new Item("Apple", currencySymbol + currencyConverter.getConversion("USD", currencyCode, 2.99)));
|
||||
catalog.add(new Item("Orange", currencySymbol + currencyConverter.getConversion("USD", currencyCode, 3.55)));
|
||||
catalog.add(new Item("Pear", currencySymbol + currencyConverter.getConversion("USD", currencyCode, 1.55)));
|
||||
}
|
||||
|
||||
public Item[] get() {
|
||||
Item[] catalogArray = new Item[catalog.size()];
|
||||
catalog.toArray(catalogArray);
|
||||
return catalogArray;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,51 @@
|
|||
/*
|
||||
* 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 services;
|
||||
|
||||
|
||||
public class Item {
|
||||
private String name;
|
||||
private String price;
|
||||
|
||||
public Item() {
|
||||
}
|
||||
|
||||
public Item(String name, String price) {
|
||||
this.name = name;
|
||||
this.price = price;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public void setName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public String getPrice() {
|
||||
return price;
|
||||
}
|
||||
|
||||
public void setPrice(String price) {
|
||||
this.price = price;
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,112 @@
|
|||
/*
|
||||
* 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 services;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.UUID;
|
||||
|
||||
import org.apache.tuscany.sca.data.collection.Entry;
|
||||
import org.apache.tuscany.sca.data.collection.NotFoundException;
|
||||
import org.oasisopen.sca.annotation.Init;
|
||||
import org.oasisopen.sca.annotation.Scope;
|
||||
|
||||
@Scope("COMPOSITE")
|
||||
public class ShoppingCartImpl implements Cart, Total {
|
||||
|
||||
private Map<String, Item> cart;
|
||||
|
||||
@Init
|
||||
public void init() {
|
||||
cart = new HashMap<String, Item>();
|
||||
}
|
||||
|
||||
public Entry<String, Item>[] getAll() {
|
||||
Entry<String, Item>[] entries = new Entry[cart.size()];
|
||||
int i = 0;
|
||||
for (Map.Entry<String, Item> e: cart.entrySet()) {
|
||||
entries[i++] = new Entry<String, Item>(e.getKey(), e.getValue());
|
||||
}
|
||||
return entries;
|
||||
}
|
||||
|
||||
public Item get(String key) throws NotFoundException {
|
||||
Item item = cart.get(key);
|
||||
if (item == null) {
|
||||
throw new NotFoundException(key);
|
||||
} else {
|
||||
return item;
|
||||
}
|
||||
}
|
||||
|
||||
public String post(String key, Item item) {
|
||||
if (key == null) {
|
||||
key ="cart-" + UUID.randomUUID().toString();
|
||||
}
|
||||
cart.put(key, item);
|
||||
return key;
|
||||
}
|
||||
|
||||
public void put(String key, Item item) throws NotFoundException {
|
||||
if (!cart.containsKey(key)) {
|
||||
throw new NotFoundException(key);
|
||||
}
|
||||
cart.put(key, item);
|
||||
}
|
||||
|
||||
public void delete(String key) throws NotFoundException {
|
||||
if (key == null || key.equals("")) {
|
||||
cart.clear();
|
||||
} else {
|
||||
Item item = cart.remove(key);
|
||||
if (item == null)
|
||||
throw new NotFoundException(key);
|
||||
}
|
||||
}
|
||||
|
||||
public Entry<String, Item>[] query(String queryString) {
|
||||
List<Entry<String, Item>> entries = new ArrayList<Entry<String,Item>>();
|
||||
if (queryString.startsWith("name=")) {
|
||||
String name = queryString.substring(5);
|
||||
for (Map.Entry<String, Item> e: cart.entrySet()) {
|
||||
Item item = e.getValue();
|
||||
if (item.getName().equals(name)) {
|
||||
entries.add(new Entry<String, Item>(e.getKey(), e.getValue()));
|
||||
}
|
||||
}
|
||||
}
|
||||
return entries.toArray(new Entry[entries.size()]);
|
||||
}
|
||||
|
||||
public String getTotal() {
|
||||
double total = 0;
|
||||
String currencySymbol = "";
|
||||
if (!cart.isEmpty()) {
|
||||
Item item = cart.values().iterator().next();
|
||||
currencySymbol = item.getPrice().substring(0, 1);
|
||||
}
|
||||
for (Item item : cart.values()) {
|
||||
total += Double.valueOf(item.getPrice().substring(1));
|
||||
}
|
||||
return currencySymbol + String.valueOf(total);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,29 @@
|
|||
/*
|
||||
* 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 services;
|
||||
|
||||
import org.oasisopen.sca.annotation.Remotable;
|
||||
|
||||
@Remotable
|
||||
public interface Total {
|
||||
|
||||
String getTotal();
|
||||
|
||||
}
|
|
@ -0,0 +1,55 @@
|
|||
<?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"
|
||||
xmlns:tuscany="http://tuscany.apache.org/xmlns/sca/1.1"
|
||||
targetNamespace="http://store"
|
||||
name="store">
|
||||
|
||||
<component name="Store">
|
||||
<tuscany:implementation.widget location="store.html"/>
|
||||
<reference name="catalog" target="Catalog"/>
|
||||
<reference name="shoppingCart" target="ShoppingCart/Cart"/>
|
||||
<reference name="shoppingTotal" target="ShoppingCart/Total"/>
|
||||
</component>
|
||||
|
||||
<component name="Catalog">
|
||||
<implementation.java class="services.FruitsCatalogImpl"/>
|
||||
<property name="currencyCode">USD</property>
|
||||
<service name="Catalog">
|
||||
<tuscany:binding.jsonrpc uri="http://localhost:8080/sample-store-webapp/Catalog"/>
|
||||
</service>
|
||||
<reference name="currencyConverter" target="CurrencyConverter"/>
|
||||
</component>
|
||||
|
||||
<component name="ShoppingCart">
|
||||
<implementation.java class="services.ShoppingCartImpl"/>
|
||||
<service name="Cart">
|
||||
<tuscany:binding.atom uri="http://localhost:8080/sample-store-webapp/ShoppingCart/Cart"/>
|
||||
</service>
|
||||
<service name="Total">
|
||||
<tuscany:binding.jsonrpc uri="http://localhost:8080/sample-store-webapp/ShoppingCart/Total"/>
|
||||
</service>
|
||||
</component>
|
||||
|
||||
<component name="CurrencyConverter">
|
||||
<implementation.java class="services.CurrencyConverterImpl"/>
|
||||
</component>
|
||||
|
||||
</composite>
|
|
@ -0,0 +1,23 @@
|
|||
<?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:store="http://store">
|
||||
<deployable composite="store:store"/>
|
||||
</contribution>
|
|
@ -0,0 +1,50 @@
|
|||
<?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.
|
||||
-->
|
||||
<web:web-app
|
||||
xmlns:app="http://geronimo.apache.org/xml/ns/j2ee/application-2.0"
|
||||
xmlns:client="http://geronimo.apache.org/xml/ns/j2ee/application-client-2.0"
|
||||
xmlns:conn="http://geronimo.apache.org/xml/ns/j2ee/connector-1.2"
|
||||
xmlns:dep="http://geronimo.apache.org/xml/ns/deployment-1.2"
|
||||
xmlns:lc="http://geronimo.apache.org/xml/ns/loginconfig-2.0"
|
||||
xmlns:ejb="http://openejb.apache.org/xml/ns/openejb-jar-2.2"
|
||||
xmlns:name="http://geronimo.apache.org/xml/ns/naming-1.2"
|
||||
xmlns:pers="http://java.sun.com/xml/ns/persistence"
|
||||
xmlns:pkgen="http://openejb.apache.org/xml/ns/pkgen-2.1"
|
||||
xmlns:sec="http://geronimo.apache.org/xml/ns/security-2.0"
|
||||
xmlns:web="http://geronimo.apache.org/xml/ns/j2ee/web-2.0.1">
|
||||
<dep:environment>
|
||||
<dep:moduleId>
|
||||
<dep:groupId>org.apache.tuscany</dep:groupId>
|
||||
<dep:artifactId>sample-store-webapp</dep:artifactId>
|
||||
<dep:version>1.0</dep:version>
|
||||
<dep:type>car</dep:type>
|
||||
</dep:moduleId>
|
||||
|
||||
<!-- TUSCANY-2622 -->
|
||||
<dep:hidden-classes>
|
||||
<dep:filter>org.apache.axiom</dep:filter>
|
||||
<dep:filter>org.apache.axis2</dep:filter>
|
||||
<dep:filter>org.apache.commons</dep:filter>
|
||||
<dep:filter>org.jdom</dep:filter>
|
||||
</dep:hidden-classes>
|
||||
|
||||
</dep:environment>
|
||||
<web:context-root>/sample-store-secure-webapp</web:context-root>
|
||||
</web:web-app>
|
|
@ -0,0 +1,36 @@
|
|||
<?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.
|
||||
-->
|
||||
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
|
||||
<display-name>sample-store-webapp</display-name>
|
||||
|
||||
<filter>
|
||||
<filter-name>tuscany</filter-name>
|
||||
<filter-class>org.apache.tuscany.sca.host.webapp.TuscanyServletFilter</filter-class>
|
||||
</filter>
|
||||
|
||||
<filter-mapping>
|
||||
<filter-name>tuscany</filter-name>
|
||||
<url-pattern>/*</url-pattern>
|
||||
</filter-mapping>
|
||||
|
||||
<welcome-file-list id="WelcomeFileList">
|
||||
<welcome-file>store.html</welcome-file>
|
||||
</welcome-file-list>
|
||||
</web-app>
|
|
@ -0,0 +1,163 @@
|
|||
<!--
|
||||
* 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.
|
||||
-->
|
||||
<html>
|
||||
<head>
|
||||
<title>Store</title>
|
||||
|
||||
<script type="text/javascript" src="dojo/dojo.js"></script>
|
||||
<script type="text/javascript" src="store.js"></script>
|
||||
|
||||
<script language="JavaScript">
|
||||
|
||||
//@Reference
|
||||
var catalog = new tuscany.sca.Reference("catalog");
|
||||
|
||||
//@Reference
|
||||
var shoppingCart = new tuscany.sca.Reference("shoppingCart");
|
||||
|
||||
//@Reference
|
||||
var shoppingTotal = new tuscany.sca.Reference("shoppingTotal");
|
||||
|
||||
var catalogItems;
|
||||
|
||||
function catalog_getResponse(items,exception) {
|
||||
if(exception){
|
||||
alert(exception.message);
|
||||
return;
|
||||
}
|
||||
var catalog = "";
|
||||
|
||||
for (var i=0; i<items.length; i++) {
|
||||
var item = items[i].name + ' - ' + items[i].price;
|
||||
catalog += '<input name="items" type="checkbox" value="' +
|
||||
item + '">' + item + ' <br>';
|
||||
}
|
||||
document.getElementById('catalog').innerHTML=catalog;
|
||||
catalogItems = items;
|
||||
}
|
||||
|
||||
function shoppingCart_getResponse(feed) {
|
||||
if (feed != null) {
|
||||
var entries = feed.getElementsByTagName("entry");
|
||||
var list = "";
|
||||
for (var i=0; i<entries.length; i++) {
|
||||
var content = entries[i].getElementsByTagName("content")[0];
|
||||
var name = content.getElementsByTagName("name")[0].firstChild.nodeValue;
|
||||
var price = content.getElementsByTagName("price")[0].firstChild.nodeValue;
|
||||
list += name + ' - ' + price + ' <br>';
|
||||
}
|
||||
document.getElementById("shoppingCart").innerHTML = list;
|
||||
|
||||
if (entries.length != 0) {
|
||||
try {
|
||||
shoppingTotal.getTotal().addCallback(shoppingTotal_getTotalResponse);
|
||||
}
|
||||
catch(e){
|
||||
alert(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function shoppingTotal_getTotalResponse(total,exception) {
|
||||
if(exception) {
|
||||
alert(exception.message);
|
||||
return;
|
||||
}
|
||||
document.getElementById('total').innerHTML = total;
|
||||
}
|
||||
|
||||
function shoppingCart_postResponse(entry) {
|
||||
shoppingCart.get("").addCallback(shoppingCart_getResponse);
|
||||
}
|
||||
|
||||
function addToCart() {
|
||||
var items = document.catalogForm.items;
|
||||
var j = 0;
|
||||
for (var i=0; i<items.length; i++)
|
||||
if (items[i].checked) {
|
||||
|
||||
var entry = '<entry xmlns="http://www.w3.org/2005/Atom"><title>item</title><content type="text/xml">' +
|
||||
'<Item xmlns="http://services/">' +
|
||||
'<name xmlns="">' + catalogItems[i].name + '</name>' + '<price xmlns="">' + catalogItems[i].price + '</price>' +
|
||||
'</Item>' + '</content></entry>';
|
||||
shoppingCart.post(entry).addCallback(shoppingCart_postResponse);
|
||||
items[i].checked = false;
|
||||
}
|
||||
}
|
||||
function checkoutCart() {
|
||||
document.getElementById('store').innerHTML='<h2>' +
|
||||
'Thanks for Shopping With Us!</h2>'+
|
||||
'<h2>Your Order</h2>'+
|
||||
'<form name="orderForm">'+
|
||||
document.getElementById('shoppingCart').innerHTML+
|
||||
'<br>'+
|
||||
document.getElementById('total').innerHTML+
|
||||
'<br>'+
|
||||
'<br>'+
|
||||
'<input type="submit" value="Continue Shopping">'+
|
||||
'</form>';
|
||||
shoppingCart.del("", null);
|
||||
}
|
||||
function deleteCart() {
|
||||
shoppingCart.del("");
|
||||
document.getElementById('shoppingCart').innerHTML = "";
|
||||
document.getElementById('total').innerHTML = "";
|
||||
}
|
||||
|
||||
function init() {
|
||||
|
||||
try {
|
||||
catalog.get().addCallback(catalog_getResponse);
|
||||
shoppingCart.get("").addCallback(shoppingCart_getResponse);
|
||||
}
|
||||
catch(e){
|
||||
alert(e);
|
||||
}
|
||||
}
|
||||
|
||||
</script>
|
||||
|
||||
</head>
|
||||
|
||||
<body onload="init()">
|
||||
<h1>Store</h1>
|
||||
<div id="store">
|
||||
<h2>Catalog</h2>
|
||||
<form name="catalogForm">
|
||||
<div id="catalog" ></div>
|
||||
<br>
|
||||
<input type="button" onClick="addToCart()" value="Add to Cart">
|
||||
</form>
|
||||
|
||||
<br>
|
||||
|
||||
<h2>Your Shopping Cart</h2>
|
||||
<form name="shoppingCartForm">
|
||||
<div id="shoppingCart"></div>
|
||||
<br>
|
||||
<div id="total"></div>
|
||||
<br>
|
||||
<input type="button" onClick="checkoutCart()" value="Checkout">
|
||||
<input type="button" onClick="deleteCart()" value="Empty">
|
||||
<a href="../ShoppingCart/Cart/">(feed)</a>
|
||||
</form>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
BIN
sca-java-2.x/contrib/samples/applications/store-webapp/store.png
Normal file
BIN
sca-java-2.x/contrib/samples/applications/store-webapp/store.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 15 KiB |
304
sca-java-2.x/contrib/samples/applications/store-webapp/store.svg
Normal file
304
sca-java-2.x/contrib/samples/applications/store-webapp/store.svg
Normal file
|
@ -0,0 +1,304 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!--
|
||||
* 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.
|
||||
-->
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://web.resource.org/cc/"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="1052.3622"
|
||||
height="744.09448"
|
||||
id="svg2"
|
||||
sodipodi:version="0.32"
|
||||
inkscape:version="0.45.1"
|
||||
sodipodi:docbase="C:\simon\tuscany\java-head\sca\samples\store"
|
||||
sodipodi:docname="store.svg"
|
||||
version="1.0"
|
||||
inkscape:output_extension="org.inkscape.output.svg.inkscape"
|
||||
inkscape:export-filename="C:\simon\tuscany\java-head\sca\samples\store\store.png"
|
||||
inkscape:export-xdpi="52.84"
|
||||
inkscape:export-ydpi="52.84">
|
||||
<defs
|
||||
id="defs4" />
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
gridtolerance="10000"
|
||||
guidetolerance="10"
|
||||
objecttolerance="10"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="1.4"
|
||||
inkscape:cx="538.06165"
|
||||
inkscape:cy="341.69129"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="g2997"
|
||||
inkscape:window-width="1466"
|
||||
inkscape:window-height="831"
|
||||
inkscape:window-x="117"
|
||||
inkscape:window-y="80" />
|
||||
<metadata
|
||||
id="metadata7">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1">
|
||||
<g
|
||||
id="g2997">
|
||||
<rect
|
||||
rx="14.335117"
|
||||
ry="17.743465"
|
||||
y="197.1973"
|
||||
x="447.35422"
|
||||
height="419.39099"
|
||||
width="464.23727"
|
||||
id="rect2067"
|
||||
style="opacity:1;fill:#90baf4;fill-opacity:1;stroke:#060000;stroke-width:2.28840661;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
|
||||
<flowRoot
|
||||
id="flowRoot2954"
|
||||
xml:space="preserve"
|
||||
transform="translate(189.90868,1.0101522)"><flowRegion
|
||||
id="flowRegion2956"><rect
|
||||
y="212.66591"
|
||||
x="281.42856"
|
||||
height="61.42857"
|
||||
width="170"
|
||||
id="rect2958" /></flowRegion><flowPara
|
||||
id="flowPara2171">store</flowPara></flowRoot> <rect
|
||||
style="fill:#317fed;fill-opacity:1;stroke:#060000;stroke-width:2.30182266;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="rect2175"
|
||||
width="118.21779"
|
||||
height="111.27543"
|
||||
x="491.60019"
|
||||
y="247.75989"
|
||||
rx="7.1507306"
|
||||
ry="9.2311935" />
|
||||
<flowRoot
|
||||
xml:space="preserve"
|
||||
id="flowRoot2177"
|
||||
transform="translate(223.8585,41.670449)"><flowRegion
|
||||
id="flowRegion2179"><rect
|
||||
id="rect2181"
|
||||
width="170"
|
||||
height="61.42857"
|
||||
x="281.42856"
|
||||
y="212.66591" /></flowRegion><flowPara
|
||||
id="flowPara2183">ufs</flowPara></flowRoot> <path
|
||||
style="fill:#5b9d05;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="M 474.29877,279.45598 L 507.63381,279.45598 L 513.69472,292.58796 L 506.62366,304.7098 L 474.29877,304.7098 L 481.87492,292.58796 L 474.29877,279.45598 z "
|
||||
id="path2187" />
|
||||
<rect
|
||||
style="fill:#317fed;fill-opacity:1;stroke:#060000;stroke-width:2;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="rect2191"
|
||||
width="115.66247"
|
||||
height="85.862968"
|
||||
x="493.07068"
|
||||
y="503.27759"
|
||||
rx="6.9961648"
|
||||
ry="7.1230249" />
|
||||
<flowRoot
|
||||
xml:space="preserve"
|
||||
id="flowRoot2193"
|
||||
transform="translate(225.47992,297.33908)"><flowRegion
|
||||
id="flowRegion2195"><rect
|
||||
id="rect2197"
|
||||
width="170"
|
||||
height="61.42857"
|
||||
x="281.42856"
|
||||
y="212.66591" /></flowRegion><flowPara
|
||||
id="flowPara2199">ShoppingCart</flowPara></flowRoot> <path
|
||||
style="fill:#5b9d05;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="M 475.92019,535.12461 L 509.25523,535.12461 L 515.31614,548.25659 L 508.24508,560.37843 L 475.92019,560.37843 L 483.49634,548.25659 L 475.92019,535.12461 z "
|
||||
id="path2203" />
|
||||
<rect
|
||||
style="fill:#317fed;fill-opacity:1;stroke:#060000;stroke-width:2;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="rect2207"
|
||||
width="115.66247"
|
||||
height="85.862968"
|
||||
x="761.44415"
|
||||
y="391.31604"
|
||||
rx="6.9961648"
|
||||
ry="7.1230249" />
|
||||
<flowRoot
|
||||
xml:space="preserve"
|
||||
id="flowRoot2209"
|
||||
transform="translate(487.8534,185.37751)"><flowRegion
|
||||
id="flowRegion2211"><rect
|
||||
id="rect2213"
|
||||
width="170"
|
||||
height="61.42857"
|
||||
x="281.42856"
|
||||
y="212.66591" /></flowRegion><flowPara
|
||||
id="flowPara2215">CurrencyConverter</flowPara></flowRoot> <path
|
||||
style="fill:#5b9d05;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="M 744.29367,423.16304 L 777.62871,423.16304 L 783.68962,436.29502 L 776.61856,448.41686 L 744.29367,448.41686 L 751.86982,436.29502 L 744.29367,423.16304 z "
|
||||
id="path2219" />
|
||||
<rect
|
||||
style="opacity:1;fill:#0064ff;fill-opacity:1;stroke:#000000;stroke-width:0.9612025;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="rect2223"
|
||||
width="104.08451"
|
||||
height="113.17588"
|
||||
x="138.37151"
|
||||
y="350.1156"
|
||||
rx="0"
|
||||
ry="0.048917599" />
|
||||
<path
|
||||
style="fill:#1a73fe;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:1"
|
||||
d="M 138.21429,462.66591 L 115.35714,479.80877 L 267.85714,479.80877 L 241.78571,463.02305 L 138.21429,462.66591 z "
|
||||
id="path3197" />
|
||||
<rect
|
||||
style="opacity:1;fill:#f1f4f8;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="rect3199"
|
||||
width="92.5"
|
||||
height="97.14286"
|
||||
x="143.57143"
|
||||
y="358.38019"
|
||||
ry="3.6203461"
|
||||
rx="3.9285715" />
|
||||
<image
|
||||
y="366.6889"
|
||||
x="156.24066"
|
||||
id="image3323"
|
||||
height="78.571434"
|
||||
width="58.57143"
|
||||
sodipodi:absref="C:\simon\tuscany\evangelism\whitepapers\shoppingcart.png"
|
||||
xlink:href="C:\simon\tuscany\evangelism\whitepapers\shoppingcart.png" />
|
||||
<image
|
||||
y="270.52304"
|
||||
x="526.42859"
|
||||
id="image3342"
|
||||
height="78.571434"
|
||||
width="58.57143"
|
||||
sodipodi:absref="C:\simon\tuscany\evangelism\whitepapers\shoppingcart.png"
|
||||
xlink:href="C:\simon\tuscany\evangelism\whitepapers\shoppingcart.png" />
|
||||
<path
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="M 242.85714,374.80877 C 245.71429,374.80877 345.71429,374.80877 345.71429,374.80877 L 345.71429,291.95162 L 481.42858,291.95162"
|
||||
id="path3348"
|
||||
sodipodi:nodetypes="cccc" />
|
||||
<path
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="M 210.71429,406.95163 L 345,406.95163 L 345,437.66591 L 481.42857,437.66591"
|
||||
id="path3350"
|
||||
sodipodi:nodetypes="cccc" />
|
||||
<path
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="M 210.71429,439.09448 L 325.71429,439.09448 L 325.71429,548.3802 L 482.85714,548.3802"
|
||||
id="path3352"
|
||||
sodipodi:nodetypes="cccc" />
|
||||
<path
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="M 626.42857,436.23734 C 750,437.66591 752.14286,436.23734 752.14286,436.23734"
|
||||
id="path3354"
|
||||
sodipodi:nodetypes="cc" />
|
||||
<flowRoot
|
||||
xml:space="preserve"
|
||||
id="flowRoot3356"
|
||||
transform="translate(-94.285714,25)"><flowRegion
|
||||
id="flowRegion3358"><rect
|
||||
id="rect3360"
|
||||
width="142.14285"
|
||||
height="21.428572"
|
||||
x="655"
|
||||
y="349.80878" /></flowRegion><flowPara
|
||||
id="flowPara3362">CurrenyCode</flowPara></flowRoot> <flowRoot
|
||||
xml:space="preserve"
|
||||
id="flowRoot3364"
|
||||
transform="translate(-250.76562,-76.210859)"><flowRegion
|
||||
id="flowRegion3366"><rect
|
||||
id="rect3368"
|
||||
width="142.14285"
|
||||
height="21.428572"
|
||||
x="655"
|
||||
y="349.80878" /></flowRegion><flowPara
|
||||
id="flowPara3370">HTTP</flowPara></flowRoot> <flowRoot
|
||||
xml:space="preserve"
|
||||
id="flowRoot3372"
|
||||
transform="translate(-273.62277,70.931998)"><flowRegion
|
||||
id="flowRegion3374"><rect
|
||||
id="rect3376"
|
||||
width="142.14285"
|
||||
height="21.428572"
|
||||
x="655"
|
||||
y="349.80878" /></flowRegion><flowPara
|
||||
id="flowPara3378">JSONRPC</flowPara></flowRoot> <flowRoot
|
||||
xml:space="preserve"
|
||||
id="flowRoot3380"
|
||||
transform="translate(-243.62277,183.07485)"><flowRegion
|
||||
id="flowRegion3382"><rect
|
||||
id="rect3384"
|
||||
width="142.14285"
|
||||
height="21.428572"
|
||||
x="655"
|
||||
y="349.80878" /></flowRegion><flowPara
|
||||
id="flowPara3386">Atom</flowPara></flowRoot> </g>
|
||||
<rect
|
||||
style="fill:#317fed;fill-opacity:1;stroke:#060000;stroke-width:2;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="rect2988"
|
||||
width="115.66247"
|
||||
height="85.862968"
|
||||
x="491.56897"
|
||||
y="392.70135"
|
||||
rx="6.9961648"
|
||||
ry="7.1230249" />
|
||||
<flowRoot
|
||||
xml:space="preserve"
|
||||
id="flowRoot2966"
|
||||
transform="translate(223.97819,186.76283)"><flowRegion
|
||||
id="flowRegion2968"><rect
|
||||
id="rect2970"
|
||||
width="170"
|
||||
height="61.42857"
|
||||
x="281.42856"
|
||||
y="212.66591" /></flowRegion><flowPara
|
||||
id="flowPara2972">Catalog</flowPara></flowRoot> <rect
|
||||
style="opacity:1;fill:#fff62c;fill-opacity:1;stroke:#060000;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="rect3006"
|
||||
width="21.718224"
|
||||
height="20.708065"
|
||||
x="537.53094"
|
||||
y="377.04398"
|
||||
rx="10.859112"
|
||||
ry="0" />
|
||||
<path
|
||||
style="fill:#5b9d05;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="M 474.41846,424.54836 L 507.7535,424.54836 L 513.81441,437.68034 L 506.74335,449.80218 L 474.41846,449.80218 L 481.99461,437.68034 L 474.41846,424.54836 z "
|
||||
id="path3017" />
|
||||
<path
|
||||
style="fill:#ae62bf;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="M 587.6709,422.71008 L 621.00594,422.71008 L 627.06685,435.84206 L 619.99579,447.9639 L 587.6709,447.9639 L 595.24705,435.84206 L 587.6709,422.71008 z "
|
||||
id="path3019" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 13 KiB |
28
sca-java-2.x/contrib/samples/applications/store/README
Normal file
28
sca-java-2.x/contrib/samples/applications/store/README
Normal file
|
@ -0,0 +1,28 @@
|
|||
Store Sample
|
||||
======================================
|
||||
|
||||
This is a sample store scenario that is used as a getting started guide
|
||||
for Tuscany SCA. For detailed information, please see:
|
||||
|
||||
http://tuscany.apache.org/getting-started-with-tuscany.html
|
||||
|
||||
or
|
||||
|
||||
http://tuscany.apache.org/getting-started-with-tuscany-using-tuscany-eclipse-plugin.html
|
||||
|
||||
|
||||
Building And Running The Sample Using Ant
|
||||
-----------------------------------------
|
||||
With the binary distribution the sample can be built using Ant as follows:
|
||||
|
||||
cd store
|
||||
ant compile
|
||||
|
||||
and then, to run:
|
||||
|
||||
ant run
|
||||
|
||||
Once the store application is running use your browser to visit the following
|
||||
URL:
|
||||
|
||||
http://localhost:8080/store
|
82
sca-java-2.x/contrib/samples/applications/store/build.xml
Normal file
82
sca-java-2.x/contrib/samples/applications/store/build.xml
Normal file
|
@ -0,0 +1,82 @@
|
|||
<!--
|
||||
* 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="store" default="compile">
|
||||
<property name="tuscany.home" value="../../.."/>
|
||||
<property name="test.class" value="launch.Launch" />
|
||||
<property name="test.jar" value="sample-store.jar" />
|
||||
|
||||
<import file="${tuscany.home}/features/tuscany-base-runtime-pom/build-path.xml"/>
|
||||
|
||||
<target name="init">
|
||||
<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">
|
||||
<classpath>
|
||||
<fileset dir="${tuscany.home}/lib">
|
||||
<include name="tuscany-base-*.jar"/>
|
||||
</fileset>
|
||||
</classpath>
|
||||
</javac>
|
||||
<copy todir="target/classes">
|
||||
<fileset dir="src/main/resources"/>
|
||||
</copy>
|
||||
<jar destfile="target/${test.jar}" basedir="target/classes">
|
||||
<manifest>
|
||||
<attribute name="Main-Class" value="${test.class}" />
|
||||
</manifest>
|
||||
</jar>
|
||||
</target>
|
||||
|
||||
<target name="run-classes">
|
||||
<java classname="${test.class}"
|
||||
fork="true">
|
||||
<classpath>
|
||||
<pathelement path="target/classes"/>
|
||||
<fileset dir="${tuscany.home}/features">
|
||||
<include name="tuscany-sca-manifest.jar"/>
|
||||
</fileset>
|
||||
</classpath>
|
||||
</java>
|
||||
</target>
|
||||
|
||||
<target name="run">
|
||||
<java classname="${test.class}"
|
||||
fork="true">
|
||||
<classpath>
|
||||
<pathelement path="target/${test.jar}"/>
|
||||
<fileset dir="${tuscany.home}/features">
|
||||
<include name="tuscany-sca-manifest.jar"/>
|
||||
</fileset>
|
||||
</classpath>
|
||||
</java>
|
||||
</target>
|
||||
|
||||
<target name="clean">
|
||||
<delete quiet="true" includeemptydirs="true">
|
||||
<fileset dir="target"/>
|
||||
</delete>
|
||||
</target>
|
||||
|
||||
</project>
|
115
sca-java-2.x/contrib/samples/applications/store/pom.xml
Normal file
115
sca-java-2.x/contrib/samples/applications/store/pom.xml
Normal file
|
@ -0,0 +1,115 @@
|
|||
<?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-samples</artifactId>
|
||||
<version>2.0-SNAPSHOT</version>
|
||||
<relativePath>../../pom.xml</relativePath>
|
||||
</parent>
|
||||
<artifactId>sample-store</artifactId>
|
||||
<name>Apache Tuscany SCA Sample Getting Started Online Store</name>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.apache.tuscany.sca</groupId>
|
||||
<artifactId>tuscany-base-runtime-pom</artifactId>
|
||||
<version>2.0-SNAPSHOT</version>
|
||||
<type>pom</type>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.tuscany.sca</groupId>
|
||||
<artifactId>tuscany-data-api</artifactId>
|
||||
<version>2.0-SNAPSHOT</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.tuscany.sca</groupId>
|
||||
<artifactId>tuscany-binding-atom-runtime</artifactId>
|
||||
<version>2.0-SNAPSHOT</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.tuscany.sca</groupId>
|
||||
<artifactId>tuscany-binding-http-runtime</artifactId>
|
||||
<version>2.0-SNAPSHOT</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.tuscany.sca</groupId>
|
||||
<artifactId>tuscany-binding-jsonrpc-runtime</artifactId>
|
||||
<version>2.0-SNAPSHOT</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.tuscany.sca</groupId>
|
||||
<artifactId>tuscany-implementation-widget-runtime</artifactId>
|
||||
<version>2.0-SNAPSHOT</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.tuscany.sca</groupId>
|
||||
<artifactId>tuscany-implementation-widget-runtime-dojo</artifactId>
|
||||
<version>2.0-SNAPSHOT</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.tuscany.sca</groupId>
|
||||
<artifactId>tuscany-web-javascript-dojo</artifactId>
|
||||
<version>2.0-SNAPSHOT</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.mortbay.jetty</groupId>
|
||||
<artifactId>jetty</artifactId>
|
||||
<version>6.1.19</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>net.sourceforge.htmlunit</groupId>
|
||||
<artifactId>htmlunit</artifactId>
|
||||
<version>2.6</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>junit</groupId>
|
||||
<artifactId>junit</artifactId>
|
||||
<version>4.8.1</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
<finalName>${project.artifactId}</finalName>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.codehaus.mojo</groupId>
|
||||
<artifactId>exec-maven-plugin</artifactId>
|
||||
<version>1.1.1</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<goals>
|
||||
<goal>java</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
</executions>
|
||||
<configuration>
|
||||
<classpathScope>test</classpathScope>
|
||||
<mainClass>store.StoreTestCase</mainClass>
|
||||
</configuration>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
|
||||
</project>
|
|
@ -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 launch;
|
||||
|
||||
import org.apache.tuscany.sca.node.Contribution;
|
||||
import org.apache.tuscany.sca.node.ContributionLocationHelper;
|
||||
import org.apache.tuscany.sca.node.Node;
|
||||
import org.apache.tuscany.sca.node.NodeFactory;
|
||||
|
||||
public class Launch {
|
||||
public static void main(String[] args) throws Exception {
|
||||
System.out.println("Starting ...");
|
||||
String contribution = ContributionLocationHelper.getContributionLocation(Launch.class);
|
||||
Node node = NodeFactory.newInstance().createNode("store.composite", new Contribution("test", contribution));
|
||||
node.start();
|
||||
System.out.println("store.composite ready for big business !!!");
|
||||
System.in.read();
|
||||
System.out.println("Stopping ...");
|
||||
node.stop();
|
||||
System.out.println();
|
||||
}
|
||||
}
|
|
@ -0,0 +1,28 @@
|
|||
/*
|
||||
* 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 services;
|
||||
|
||||
import org.apache.tuscany.sca.data.collection.Collection;
|
||||
import org.oasisopen.sca.annotation.Remotable;
|
||||
|
||||
@Remotable
|
||||
public interface Cart extends Collection<String, Item> {
|
||||
|
||||
}
|
|
@ -0,0 +1,27 @@
|
|||
/*
|
||||
* 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 services;
|
||||
|
||||
import org.oasisopen.sca.annotation.Remotable;
|
||||
|
||||
@Remotable
|
||||
public interface Catalog {
|
||||
Item[] get();
|
||||
}
|
|
@ -0,0 +1,29 @@
|
|||
/*
|
||||
* 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 services;
|
||||
|
||||
import org.oasisopen.sca.annotation.Remotable;
|
||||
|
||||
@Remotable
|
||||
public interface CurrencyConverter {
|
||||
public double getConversion(String fromCurrenycCode, String toCurrencyCode, double amount);
|
||||
|
||||
public String getCurrencySymbol(String currencyCode);
|
||||
}
|
|
@ -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 services;
|
||||
|
||||
public class CurrencyConverterImpl implements CurrencyConverter {
|
||||
public double getConversion(String fromCurrencyCode, String toCurrencyCode, double amount) {
|
||||
if (toCurrencyCode.equals("USD"))
|
||||
return amount;
|
||||
else if (toCurrencyCode.equals("EUR"))
|
||||
return ((double)Math.round(amount * 0.7256 * 100)) /100;
|
||||
return 0;
|
||||
}
|
||||
|
||||
public String getCurrencySymbol(String currencyCode) {
|
||||
if (currencyCode.equals("USD"))
|
||||
return "$";
|
||||
else if (currencyCode.equals("EUR"))
|
||||
return "E"; //"€";
|
||||
return "?";
|
||||
}
|
||||
}
|
|
@ -0,0 +1,52 @@
|
|||
/*
|
||||
* 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 services;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.oasisopen.sca.annotation.Init;
|
||||
import org.oasisopen.sca.annotation.Property;
|
||||
import org.oasisopen.sca.annotation.Reference;
|
||||
|
||||
public class FruitsCatalogImpl implements Catalog {
|
||||
|
||||
@Property
|
||||
public String currencyCode = "USD";
|
||||
|
||||
@Reference
|
||||
public CurrencyConverter currencyConverter;
|
||||
|
||||
private List<Item> catalog = new ArrayList<Item>();
|
||||
|
||||
@Init
|
||||
public void init() {
|
||||
String currencySymbol = currencyConverter.getCurrencySymbol(currencyCode);
|
||||
catalog.add(new Item("Apple", currencySymbol + currencyConverter.getConversion("USD", currencyCode, 2.99)));
|
||||
catalog.add(new Item("Orange", currencySymbol + currencyConverter.getConversion("USD", currencyCode, 3.55)));
|
||||
catalog.add(new Item("Pear", currencySymbol + currencyConverter.getConversion("USD", currencyCode, 1.55)));
|
||||
}
|
||||
|
||||
public Item[] get() {
|
||||
Item[] catalogArray = new Item[catalog.size()];
|
||||
catalog.toArray(catalogArray);
|
||||
return catalogArray;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,54 @@
|
|||
/*
|
||||
* 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 services;
|
||||
|
||||
public class Item {
|
||||
private String name;
|
||||
private String price;
|
||||
|
||||
public Item() {
|
||||
}
|
||||
|
||||
public Item(String name, String price) {
|
||||
this.name = name;
|
||||
this.price = price;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public void setName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public String getPrice() {
|
||||
return price;
|
||||
}
|
||||
|
||||
public void setPrice(String price) {
|
||||
this.price = price;
|
||||
}
|
||||
|
||||
public String toString() {
|
||||
return "Item name: " + name + ", price: " + price;
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,112 @@
|
|||
/*
|
||||
* 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 services;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.UUID;
|
||||
|
||||
import org.apache.tuscany.sca.data.collection.Entry;
|
||||
import org.apache.tuscany.sca.data.collection.NotFoundException;
|
||||
import org.oasisopen.sca.annotation.Init;
|
||||
import org.oasisopen.sca.annotation.Scope;
|
||||
|
||||
@Scope("COMPOSITE")
|
||||
public class ShoppingCartImpl implements Cart, Total {
|
||||
|
||||
private Map<String, Item> cart;
|
||||
|
||||
@Init
|
||||
public void init() {
|
||||
cart = new HashMap<String, Item>();
|
||||
}
|
||||
|
||||
public Entry<String, Item>[] getAll() {
|
||||
Entry<String, Item>[] entries = new Entry[cart.size()];
|
||||
int i = 0;
|
||||
for (Map.Entry<String, Item> e: cart.entrySet()) {
|
||||
entries[i++] = new Entry<String, Item>(e.getKey(), e.getValue());
|
||||
}
|
||||
return entries;
|
||||
}
|
||||
|
||||
public Item get(String key) throws NotFoundException {
|
||||
Item item = cart.get(key);
|
||||
if (item == null) {
|
||||
throw new NotFoundException(key);
|
||||
} else {
|
||||
return item;
|
||||
}
|
||||
}
|
||||
|
||||
public String post(String key, Item item) {
|
||||
if (key == null) {
|
||||
key ="cart-" + UUID.randomUUID().toString();
|
||||
}
|
||||
cart.put(key, item);
|
||||
return key;
|
||||
}
|
||||
|
||||
public void put(String key, Item item) throws NotFoundException {
|
||||
if (!cart.containsKey(key)) {
|
||||
throw new NotFoundException(key);
|
||||
}
|
||||
cart.put(key, item);
|
||||
}
|
||||
|
||||
public void delete(String key) throws NotFoundException {
|
||||
if (key == null || key.equals("")) {
|
||||
cart.clear();
|
||||
} else {
|
||||
Item item = cart.remove(key);
|
||||
if (item == null)
|
||||
throw new NotFoundException(key);
|
||||
}
|
||||
}
|
||||
|
||||
public Entry<String, Item>[] query(String queryString) {
|
||||
List<Entry<String, Item>> entries = new ArrayList<Entry<String,Item>>();
|
||||
if (queryString.startsWith("name=")) {
|
||||
String name = queryString.substring(5);
|
||||
for (Map.Entry<String, Item> e: cart.entrySet()) {
|
||||
Item item = e.getValue();
|
||||
if (item.getName().equals(name)) {
|
||||
entries.add(new Entry<String, Item>(e.getKey(), e.getValue()));
|
||||
}
|
||||
}
|
||||
}
|
||||
return entries.toArray(new Entry[entries.size()]);
|
||||
}
|
||||
|
||||
public String getTotal() {
|
||||
double total = 0;
|
||||
String currencySymbol = "";
|
||||
if (!cart.isEmpty()) {
|
||||
Item item = cart.values().iterator().next();
|
||||
currencySymbol = item.getPrice().substring(0, 1);
|
||||
}
|
||||
for (Item item : cart.values()) {
|
||||
total += Double.valueOf(item.getPrice().substring(1));
|
||||
}
|
||||
return currencySymbol + String.valueOf(total);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,29 @@
|
|||
/*
|
||||
* 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 services;
|
||||
|
||||
import org.oasisopen.sca.annotation.Remotable;
|
||||
|
||||
@Remotable
|
||||
public interface Total {
|
||||
|
||||
String getTotal();
|
||||
|
||||
}
|
|
@ -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.
|
||||
-->
|
||||
<composite xmlns="http://docs.oasis-open.org/ns/opencsa/sca/200912"
|
||||
xmlns:tuscany="http://tuscany.apache.org/xmlns/sca/1.1"
|
||||
targetNamespace="http://store"
|
||||
name="store">
|
||||
|
||||
<component name="Store">
|
||||
<tuscany:implementation.widget location="uiservices/store.html"/>
|
||||
<service name="Widget">
|
||||
<tuscany:binding.http uri="/store"/>
|
||||
</service>
|
||||
<reference name="catalog" target="Catalog"/>
|
||||
<reference name="shoppingCart" target="ShoppingCart/Cart"/>
|
||||
<reference name="shoppingTotal" target="ShoppingCart/Total"/>
|
||||
</component>
|
||||
|
||||
<component name="Catalog">
|
||||
<implementation.java class="services.FruitsCatalogImpl"/>
|
||||
<property name="currencyCode">USD</property>
|
||||
<service name="Catalog">
|
||||
<tuscany:binding.jsonrpc uri="/Catalog"/>
|
||||
</service>
|
||||
<reference name="currencyConverter" target="CurrencyConverter"/>
|
||||
</component>
|
||||
|
||||
<component name="ShoppingCart">
|
||||
<implementation.java class="services.ShoppingCartImpl"/>
|
||||
<service name="Cart">
|
||||
<tuscany:binding.atom uri="/ShoppingCart/Cart"/>
|
||||
</service>
|
||||
<service name="Total">
|
||||
<tuscany:binding.jsonrpc uri="/ShoppingCart/Total"/>
|
||||
</service>
|
||||
</component>
|
||||
|
||||
<component name="CurrencyConverter">
|
||||
<implementation.java class="services.CurrencyConverterImpl"/>
|
||||
</component>
|
||||
|
||||
</composite>
|
|
@ -0,0 +1,162 @@
|
|||
<!--
|
||||
* 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.
|
||||
-->
|
||||
<html>
|
||||
<head>
|
||||
<title>Store</title>
|
||||
|
||||
<script type="text/javascript" src="../dojo/dojo.js"></script>
|
||||
<script type="text/javascript" src="store.js"></script>
|
||||
|
||||
<script language="JavaScript">
|
||||
|
||||
//@Reference
|
||||
var catalog = new tuscany.sca.Reference("catalog");
|
||||
|
||||
//@Reference
|
||||
var shoppingCart = new tuscany.sca.Reference("shoppingCart");
|
||||
|
||||
//@Reference
|
||||
var shoppingTotal = new tuscany.sca.Reference("shoppingTotal");
|
||||
|
||||
var catalogItems;
|
||||
|
||||
function catalog_getResponse(items,exception) {
|
||||
if(exception){
|
||||
alert(exception.message);
|
||||
return;
|
||||
}
|
||||
var catalog = "";
|
||||
|
||||
for (var i=0; i<items.length; i++) {
|
||||
var item = items[i].name + ' - ' + items[i].price;
|
||||
catalog += '<input name="items" type="checkbox" value="' +
|
||||
item + '">' + item + ' <br>';
|
||||
}
|
||||
document.getElementById('catalog').innerHTML=catalog;
|
||||
catalogItems = items;
|
||||
}
|
||||
|
||||
function shoppingCart_getResponse(feed) {
|
||||
if (feed != null) {
|
||||
var entries = feed.getElementsByTagName("entry");
|
||||
var list = "";
|
||||
for (var i=0; i<entries.length; i++) {
|
||||
var content = entries[i].getElementsByTagName("content")[0];
|
||||
var name = content.getElementsByTagName("name")[0].firstChild.nodeValue;
|
||||
var price = content.getElementsByTagName("price")[0].firstChild.nodeValue;
|
||||
list += name + ' - ' + price + ' <br>';
|
||||
}
|
||||
document.getElementById("shoppingCart").innerHTML = list;
|
||||
|
||||
if (entries.length != 0) {
|
||||
try {
|
||||
shoppingTotal.getTotal().addCallback(shoppingTotal_getTotalResponse);
|
||||
}
|
||||
catch(e){
|
||||
alert(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function shoppingTotal_getTotalResponse(total,exception) {
|
||||
if(exception) {
|
||||
alert(exception.message);
|
||||
return;
|
||||
}
|
||||
document.getElementById('total').innerHTML = total;
|
||||
}
|
||||
|
||||
function shoppingCart_postResponse(entry) {
|
||||
shoppingCart.get("").addCallback(shoppingCart_getResponse);
|
||||
}
|
||||
|
||||
function addToCart() {
|
||||
var items = document.catalogForm.items;
|
||||
var j = 0;
|
||||
for (var i=0; i<items.length; i++) {
|
||||
if (items[i].checked) {
|
||||
var entry = '<entry xmlns="http://www.w3.org/2005/Atom"><title>item</title><content type="text/xml">' +
|
||||
'<Item xmlns="http://services/">' +
|
||||
'<name xmlns="">' + catalogItems[i].name + '</name>' + '<price xmlns="">' + catalogItems[i].price + '</price>' +
|
||||
'</Item>' + '</content></entry>';
|
||||
shoppingCart.post(entry).addCallback(shoppingCart_postResponse);
|
||||
items[i].checked = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
function checkoutCart() {
|
||||
document.getElementById('store').innerHTML='<h2>' +
|
||||
'Thanks for Shopping With Us!</h2>'+
|
||||
'<h2>Your Order</h2>'+
|
||||
'<form name="orderForm">'+
|
||||
document.getElementById('shoppingCart').innerHTML+
|
||||
'<br>'+
|
||||
document.getElementById('total').innerHTML+
|
||||
'<br>'+
|
||||
'<br>'+
|
||||
'<input type="submit" value="Continue Shopping">'+
|
||||
'</form>';
|
||||
shoppingCart.del("");
|
||||
}
|
||||
function deleteCart() {
|
||||
shoppingCart.del("");
|
||||
document.getElementById('shoppingCart').innerHTML = "";
|
||||
document.getElementById('total').innerHTML = "";
|
||||
}
|
||||
|
||||
function init() {
|
||||
try {
|
||||
catalog.get().addCallback(catalog_getResponse);
|
||||
shoppingCart.get("").addCallback(shoppingCart_getResponse);
|
||||
}
|
||||
catch(e){
|
||||
alert(e);
|
||||
}
|
||||
}
|
||||
|
||||
</script>
|
||||
|
||||
</head>
|
||||
|
||||
<body onload="init()">
|
||||
<h1>Store</h1>
|
||||
<div id="store">
|
||||
<h2>Catalog</h2>
|
||||
<form name="catalogForm">
|
||||
<div id="catalog" ></div>
|
||||
<br>
|
||||
<input type="button" onClick="addToCart()" value="Add to Cart">
|
||||
</form>
|
||||
|
||||
<br>
|
||||
|
||||
<h2>Your Shopping Cart</h2>
|
||||
<form name="shoppingCartForm">
|
||||
<div id="shoppingCart"></div>
|
||||
<br>
|
||||
<div id="total"></div>
|
||||
<br>
|
||||
<input type="button" onClick="checkoutCart()" value="Checkout">
|
||||
<input type="button" onClick="deleteCart()" value="Empty">
|
||||
<a href="../ShoppingCart/Cart/">(feed)</a>
|
||||
</form>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,29 @@
|
|||
/*
|
||||
* 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 client;
|
||||
|
||||
import org.oasisopen.sca.annotation.Remotable;
|
||||
|
||||
@Remotable
|
||||
public interface Shopper {
|
||||
|
||||
String shop(String itemName, int quantity);
|
||||
|
||||
}
|
|
@ -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 client;
|
||||
|
||||
import org.apache.tuscany.sca.data.collection.NotFoundException;
|
||||
import org.oasisopen.sca.annotation.Reference;
|
||||
|
||||
import services.Cart;
|
||||
import services.Catalog;
|
||||
import services.Item;
|
||||
import services.Total;
|
||||
|
||||
public class ShopperImpl implements Shopper {
|
||||
|
||||
@Reference
|
||||
public Catalog catalog;
|
||||
|
||||
@Reference
|
||||
public Cart shoppingCart;
|
||||
|
||||
@Reference
|
||||
public Total shoppingTotal;
|
||||
|
||||
public String shop(String itemName, int quantity) {
|
||||
|
||||
Item[] items = catalog.get();
|
||||
for (Item item: items) {
|
||||
if (item.getName().startsWith(itemName)) {
|
||||
|
||||
try {
|
||||
shoppingCart.delete("");
|
||||
} catch (NotFoundException e) {
|
||||
// ignore
|
||||
}
|
||||
|
||||
for (int i = 0; i < quantity; i++) {
|
||||
shoppingCart.post("item" + i, item);
|
||||
}
|
||||
|
||||
return shoppingTotal.getTotal();
|
||||
}
|
||||
}
|
||||
|
||||
return "";
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,121 @@
|
|||
/*
|
||||
* 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 store;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.net.MalformedURLException;
|
||||
|
||||
import junit.framework.Assert;
|
||||
|
||||
import org.apache.tuscany.sca.node.Contribution;
|
||||
import org.apache.tuscany.sca.node.ContributionLocationHelper;
|
||||
import org.apache.tuscany.sca.node.Node;
|
||||
import org.apache.tuscany.sca.node.NodeFactory;
|
||||
import org.junit.AfterClass;
|
||||
import org.junit.BeforeClass;
|
||||
import org.junit.Ignore;
|
||||
import org.junit.Test;
|
||||
|
||||
import client.Shopper;
|
||||
|
||||
import com.gargoylesoftware.htmlunit.BrowserVersion;
|
||||
import com.gargoylesoftware.htmlunit.FailingHttpStatusCodeException;
|
||||
import com.gargoylesoftware.htmlunit.NicelyResynchronizingAjaxController;
|
||||
import com.gargoylesoftware.htmlunit.WebClient;
|
||||
import com.gargoylesoftware.htmlunit.html.HtmlCheckBoxInput;
|
||||
import com.gargoylesoftware.htmlunit.html.HtmlForm;
|
||||
import com.gargoylesoftware.htmlunit.html.HtmlPage;
|
||||
|
||||
|
||||
/**
|
||||
* Test the store-merger.
|
||||
*
|
||||
* @version $Rev$ $Date$
|
||||
*/
|
||||
public class StoreTestCase {
|
||||
private static Node nodeStore;
|
||||
|
||||
public static void main(String[] args) throws Exception {
|
||||
setUp();
|
||||
testWaitForInput();
|
||||
tearDown();
|
||||
}
|
||||
|
||||
@BeforeClass
|
||||
public static void setUp() throws Exception {
|
||||
String storeLocation = ContributionLocationHelper.getContributionLocation("store.composite");
|
||||
String storeClientLocation = ContributionLocationHelper.getContributionLocation("store-client.composite");
|
||||
|
||||
nodeStore = NodeFactory.newInstance().createNode(new Contribution("store", storeLocation), new Contribution("storeClient", storeClientLocation));
|
||||
nodeStore.start();
|
||||
}
|
||||
|
||||
@AfterClass
|
||||
public static void tearDown() throws Exception {
|
||||
nodeStore.stop();
|
||||
}
|
||||
|
||||
public static void testWaitForInput() {
|
||||
try {
|
||||
System.out.println("press enter to continue)");
|
||||
System.in.read();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testShop() {
|
||||
Shopper shopper = nodeStore.getService(Shopper.class, "StoreClient");
|
||||
|
||||
String total = shopper.shop("Orange", 5);
|
||||
System.out.println("Total: " + total);
|
||||
|
||||
Assert.assertEquals("$17.75", total);
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testStoreWidget() throws FailingHttpStatusCodeException, MalformedURLException, IOException {
|
||||
WebClient webClient = new WebClient(BrowserVersion.FIREFOX_3);
|
||||
webClient.setRedirectEnabled(true);
|
||||
webClient.setThrowExceptionOnScriptError(false);
|
||||
//webClient.waitForBackgroundJavaScript(100000);
|
||||
//webClient.waitForBackgroundJavaScriptStartingBefore(100000);
|
||||
webClient.setAjaxController(new NicelyResynchronizingAjaxController());
|
||||
|
||||
HtmlPage page = (HtmlPage) webClient.getPage("http://localhost:8080/store/store.html");
|
||||
|
||||
HtmlForm form = (HtmlForm) page.getFormByName("catalogForm");
|
||||
|
||||
try {
|
||||
Thread.sleep(1000);
|
||||
} catch (InterruptedException e) {
|
||||
}
|
||||
|
||||
HtmlCheckBoxInput catalogItems = (HtmlCheckBoxInput) form.getInputByName("items");
|
||||
|
||||
System.out.println(">>>" + catalogItems.getAttribute("value"));
|
||||
Assert.assertEquals("Apple - $2.99", catalogItems.getAttribute("value"));
|
||||
|
||||
webClient.closeAllWindows();
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,38 @@
|
|||
<?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"
|
||||
xmlns:tuscany="http://tuscany.apache.org/xmlns/sca/1.1"
|
||||
targetNamespace="http://store"
|
||||
name="store-client">
|
||||
|
||||
<component name="StoreClient">
|
||||
<implementation.java class="client.ShopperImpl"/>
|
||||
<reference name="catalog">
|
||||
<tuscany:binding.jsonrpc uri="http://localhost:8080/Catalog"/>
|
||||
</reference>
|
||||
<reference name="shoppingCart">
|
||||
<tuscany:binding.atom uri="http://localhost:8080/ShoppingCart/Cart"/>
|
||||
</reference>
|
||||
<reference name="shoppingTotal">
|
||||
<tuscany:binding.jsonrpc uri="http://localhost:8080/ShoppingCart/Total"/>
|
||||
</reference>
|
||||
</component>
|
||||
|
||||
</composite>
|
BIN
sca-java-2.x/contrib/samples/applications/store/store.png
Normal file
BIN
sca-java-2.x/contrib/samples/applications/store/store.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 15 KiB |
304
sca-java-2.x/contrib/samples/applications/store/store.svg
Normal file
304
sca-java-2.x/contrib/samples/applications/store/store.svg
Normal file
|
@ -0,0 +1,304 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!--
|
||||
* 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.
|
||||
-->
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://web.resource.org/cc/"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="1052.3622"
|
||||
height="744.09448"
|
||||
id="svg2"
|
||||
sodipodi:version="0.32"
|
||||
inkscape:version="0.45.1"
|
||||
sodipodi:docbase="C:\simon\tuscany\java-head\sca\samples\store"
|
||||
sodipodi:docname="store.svg"
|
||||
version="1.0"
|
||||
inkscape:output_extension="org.inkscape.output.svg.inkscape"
|
||||
inkscape:export-filename="C:\simon\tuscany\java-head\sca\samples\store\store.png"
|
||||
inkscape:export-xdpi="52.84"
|
||||
inkscape:export-ydpi="52.84">
|
||||
<defs
|
||||
id="defs4" />
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
gridtolerance="10000"
|
||||
guidetolerance="10"
|
||||
objecttolerance="10"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="1.4"
|
||||
inkscape:cx="538.06165"
|
||||
inkscape:cy="341.69129"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="g2997"
|
||||
inkscape:window-width="1466"
|
||||
inkscape:window-height="831"
|
||||
inkscape:window-x="117"
|
||||
inkscape:window-y="80" />
|
||||
<metadata
|
||||
id="metadata7">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1">
|
||||
<g
|
||||
id="g2997">
|
||||
<rect
|
||||
rx="14.335117"
|
||||
ry="17.743465"
|
||||
y="197.1973"
|
||||
x="447.35422"
|
||||
height="419.39099"
|
||||
width="464.23727"
|
||||
id="rect2067"
|
||||
style="opacity:1;fill:#90baf4;fill-opacity:1;stroke:#060000;stroke-width:2.28840661;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
|
||||
<flowRoot
|
||||
id="flowRoot2954"
|
||||
xml:space="preserve"
|
||||
transform="translate(189.90868,1.0101522)"><flowRegion
|
||||
id="flowRegion2956"><rect
|
||||
y="212.66591"
|
||||
x="281.42856"
|
||||
height="61.42857"
|
||||
width="170"
|
||||
id="rect2958" /></flowRegion><flowPara
|
||||
id="flowPara2171">store</flowPara></flowRoot> <rect
|
||||
style="fill:#317fed;fill-opacity:1;stroke:#060000;stroke-width:2.30182266;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="rect2175"
|
||||
width="118.21779"
|
||||
height="111.27543"
|
||||
x="491.60019"
|
||||
y="247.75989"
|
||||
rx="7.1507306"
|
||||
ry="9.2311935" />
|
||||
<flowRoot
|
||||
xml:space="preserve"
|
||||
id="flowRoot2177"
|
||||
transform="translate(223.8585,41.670449)"><flowRegion
|
||||
id="flowRegion2179"><rect
|
||||
id="rect2181"
|
||||
width="170"
|
||||
height="61.42857"
|
||||
x="281.42856"
|
||||
y="212.66591" /></flowRegion><flowPara
|
||||
id="flowPara2183">ufs</flowPara></flowRoot> <path
|
||||
style="fill:#5b9d05;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="M 474.29877,279.45598 L 507.63381,279.45598 L 513.69472,292.58796 L 506.62366,304.7098 L 474.29877,304.7098 L 481.87492,292.58796 L 474.29877,279.45598 z "
|
||||
id="path2187" />
|
||||
<rect
|
||||
style="fill:#317fed;fill-opacity:1;stroke:#060000;stroke-width:2;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="rect2191"
|
||||
width="115.66247"
|
||||
height="85.862968"
|
||||
x="493.07068"
|
||||
y="503.27759"
|
||||
rx="6.9961648"
|
||||
ry="7.1230249" />
|
||||
<flowRoot
|
||||
xml:space="preserve"
|
||||
id="flowRoot2193"
|
||||
transform="translate(225.47992,297.33908)"><flowRegion
|
||||
id="flowRegion2195"><rect
|
||||
id="rect2197"
|
||||
width="170"
|
||||
height="61.42857"
|
||||
x="281.42856"
|
||||
y="212.66591" /></flowRegion><flowPara
|
||||
id="flowPara2199">ShoppingCart</flowPara></flowRoot> <path
|
||||
style="fill:#5b9d05;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="M 475.92019,535.12461 L 509.25523,535.12461 L 515.31614,548.25659 L 508.24508,560.37843 L 475.92019,560.37843 L 483.49634,548.25659 L 475.92019,535.12461 z "
|
||||
id="path2203" />
|
||||
<rect
|
||||
style="fill:#317fed;fill-opacity:1;stroke:#060000;stroke-width:2;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="rect2207"
|
||||
width="115.66247"
|
||||
height="85.862968"
|
||||
x="761.44415"
|
||||
y="391.31604"
|
||||
rx="6.9961648"
|
||||
ry="7.1230249" />
|
||||
<flowRoot
|
||||
xml:space="preserve"
|
||||
id="flowRoot2209"
|
||||
transform="translate(487.8534,185.37751)"><flowRegion
|
||||
id="flowRegion2211"><rect
|
||||
id="rect2213"
|
||||
width="170"
|
||||
height="61.42857"
|
||||
x="281.42856"
|
||||
y="212.66591" /></flowRegion><flowPara
|
||||
id="flowPara2215">CurrencyConverter</flowPara></flowRoot> <path
|
||||
style="fill:#5b9d05;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="M 744.29367,423.16304 L 777.62871,423.16304 L 783.68962,436.29502 L 776.61856,448.41686 L 744.29367,448.41686 L 751.86982,436.29502 L 744.29367,423.16304 z "
|
||||
id="path2219" />
|
||||
<rect
|
||||
style="opacity:1;fill:#0064ff;fill-opacity:1;stroke:#000000;stroke-width:0.9612025;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="rect2223"
|
||||
width="104.08451"
|
||||
height="113.17588"
|
||||
x="138.37151"
|
||||
y="350.1156"
|
||||
rx="0"
|
||||
ry="0.048917599" />
|
||||
<path
|
||||
style="fill:#1a73fe;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:1"
|
||||
d="M 138.21429,462.66591 L 115.35714,479.80877 L 267.85714,479.80877 L 241.78571,463.02305 L 138.21429,462.66591 z "
|
||||
id="path3197" />
|
||||
<rect
|
||||
style="opacity:1;fill:#f1f4f8;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="rect3199"
|
||||
width="92.5"
|
||||
height="97.14286"
|
||||
x="143.57143"
|
||||
y="358.38019"
|
||||
ry="3.6203461"
|
||||
rx="3.9285715" />
|
||||
<image
|
||||
y="366.6889"
|
||||
x="156.24066"
|
||||
id="image3323"
|
||||
height="78.571434"
|
||||
width="58.57143"
|
||||
sodipodi:absref="C:\simon\tuscany\evangelism\whitepapers\shoppingcart.png"
|
||||
xlink:href="C:\simon\tuscany\evangelism\whitepapers\shoppingcart.png" />
|
||||
<image
|
||||
y="270.52304"
|
||||
x="526.42859"
|
||||
id="image3342"
|
||||
height="78.571434"
|
||||
width="58.57143"
|
||||
sodipodi:absref="C:\simon\tuscany\evangelism\whitepapers\shoppingcart.png"
|
||||
xlink:href="C:\simon\tuscany\evangelism\whitepapers\shoppingcart.png" />
|
||||
<path
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="M 242.85714,374.80877 C 245.71429,374.80877 345.71429,374.80877 345.71429,374.80877 L 345.71429,291.95162 L 481.42858,291.95162"
|
||||
id="path3348"
|
||||
sodipodi:nodetypes="cccc" />
|
||||
<path
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="M 210.71429,406.95163 L 345,406.95163 L 345,437.66591 L 481.42857,437.66591"
|
||||
id="path3350"
|
||||
sodipodi:nodetypes="cccc" />
|
||||
<path
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="M 210.71429,439.09448 L 325.71429,439.09448 L 325.71429,548.3802 L 482.85714,548.3802"
|
||||
id="path3352"
|
||||
sodipodi:nodetypes="cccc" />
|
||||
<path
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="M 626.42857,436.23734 C 750,437.66591 752.14286,436.23734 752.14286,436.23734"
|
||||
id="path3354"
|
||||
sodipodi:nodetypes="cc" />
|
||||
<flowRoot
|
||||
xml:space="preserve"
|
||||
id="flowRoot3356"
|
||||
transform="translate(-94.285714,25)"><flowRegion
|
||||
id="flowRegion3358"><rect
|
||||
id="rect3360"
|
||||
width="142.14285"
|
||||
height="21.428572"
|
||||
x="655"
|
||||
y="349.80878" /></flowRegion><flowPara
|
||||
id="flowPara3362">CurrenyCode</flowPara></flowRoot> <flowRoot
|
||||
xml:space="preserve"
|
||||
id="flowRoot3364"
|
||||
transform="translate(-250.76562,-76.210859)"><flowRegion
|
||||
id="flowRegion3366"><rect
|
||||
id="rect3368"
|
||||
width="142.14285"
|
||||
height="21.428572"
|
||||
x="655"
|
||||
y="349.80878" /></flowRegion><flowPara
|
||||
id="flowPara3370">HTTP</flowPara></flowRoot> <flowRoot
|
||||
xml:space="preserve"
|
||||
id="flowRoot3372"
|
||||
transform="translate(-273.62277,70.931998)"><flowRegion
|
||||
id="flowRegion3374"><rect
|
||||
id="rect3376"
|
||||
width="142.14285"
|
||||
height="21.428572"
|
||||
x="655"
|
||||
y="349.80878" /></flowRegion><flowPara
|
||||
id="flowPara3378">JSONRPC</flowPara></flowRoot> <flowRoot
|
||||
xml:space="preserve"
|
||||
id="flowRoot3380"
|
||||
transform="translate(-243.62277,183.07485)"><flowRegion
|
||||
id="flowRegion3382"><rect
|
||||
id="rect3384"
|
||||
width="142.14285"
|
||||
height="21.428572"
|
||||
x="655"
|
||||
y="349.80878" /></flowRegion><flowPara
|
||||
id="flowPara3386">Atom</flowPara></flowRoot> </g>
|
||||
<rect
|
||||
style="fill:#317fed;fill-opacity:1;stroke:#060000;stroke-width:2;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="rect2988"
|
||||
width="115.66247"
|
||||
height="85.862968"
|
||||
x="491.56897"
|
||||
y="392.70135"
|
||||
rx="6.9961648"
|
||||
ry="7.1230249" />
|
||||
<flowRoot
|
||||
xml:space="preserve"
|
||||
id="flowRoot2966"
|
||||
transform="translate(223.97819,186.76283)"><flowRegion
|
||||
id="flowRegion2968"><rect
|
||||
id="rect2970"
|
||||
width="170"
|
||||
height="61.42857"
|
||||
x="281.42856"
|
||||
y="212.66591" /></flowRegion><flowPara
|
||||
id="flowPara2972">Catalog</flowPara></flowRoot> <rect
|
||||
style="opacity:1;fill:#fff62c;fill-opacity:1;stroke:#060000;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="rect3006"
|
||||
width="21.718224"
|
||||
height="20.708065"
|
||||
x="537.53094"
|
||||
y="377.04398"
|
||||
rx="10.859112"
|
||||
ry="0" />
|
||||
<path
|
||||
style="fill:#5b9d05;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="M 474.41846,424.54836 L 507.7535,424.54836 L 513.81441,437.68034 L 506.74335,449.80218 L 474.41846,449.80218 L 481.99461,437.68034 L 474.41846,424.54836 z "
|
||||
id="path3017" />
|
||||
<path
|
||||
style="fill:#ae62bf;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="M 587.6709,422.71008 L 621.00594,422.71008 L 627.06685,435.84206 L 619.99579,447.9639 L 587.6709,447.9639 L 595.24705,435.84206 L 587.6709,422.71008 z "
|
||||
id="path3019" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 13 KiB |
|
@ -0,0 +1,17 @@
|
|||
Manifest-Version: 1.0
|
||||
SCA-Version: 1.1
|
||||
Bundle-Name: Apache Tuscany SCA Sample Binding
|
||||
Bundle-Vendor: The Apache Software Foundation
|
||||
Bundle-Version: 2.0.0
|
||||
Bundle-ManifestVersion: 2
|
||||
Bundle-License: http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
Bundle-Description: Apache Tuscany SCA Sample Binding
|
||||
Import-Package: org.apache.tuscany.sca.assembly;version="2.0.0",
|
||||
org.apache.tuscany.sca.core;version="2.0.0",
|
||||
org.apache.tuscany.sca.interfacedef;version="2.0.0",
|
||||
org.apache.tuscany.sca.invocation;version="2.0.0",
|
||||
org.apache.tuscany.sca.provider;version="2.0.0",
|
||||
org.apache.tuscany.sca.runtime;version="2.0.0"
|
||||
Bundle-SymbolicName: org.apache.tuscany.sca.binding.sample
|
||||
Bundle-DocURL: http://www.apache.org/
|
||||
Bundle-RequiredExecutionEnvironment: J2SE-1.5,JavaSE-1.6
|
|
@ -0,0 +1,8 @@
|
|||
Sample Binding Extension
|
||||
===============================
|
||||
This sample demonstrates how to develop a new binding type for Apache
|
||||
Tuscany SCA.
|
||||
|
||||
See http://tuscany.apache.org/documentation-2x/20-beta-samples-documentation.html
|
||||
for more information
|
||||
|
|
@ -0,0 +1,92 @@
|
|||
<?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-samples</artifactId>
|
||||
<version>2.0-SNAPSHOT</version>
|
||||
<relativePath>../../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
<artifactId>sample-binding-extension</artifactId>
|
||||
<name>Apache Tuscany SCA Sample Binding Extension</name>
|
||||
|
||||
<dependencies>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.apache.tuscany.sca</groupId>
|
||||
<artifactId>tuscany-assembly-xml</artifactId>
|
||||
<version>2.0-SNAPSHOT</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.apache.tuscany.sca</groupId>
|
||||
<artifactId>tuscany-host-http</artifactId>
|
||||
<version>2.0-SNAPSHOT</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>javax.servlet</groupId>
|
||||
<artifactId>servlet-api</artifactId>
|
||||
<version>2.5</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.apache.tuscany.sca</groupId>
|
||||
<artifactId>tuscany-host-jetty</artifactId>
|
||||
<version>2.0-SNAPSHOT</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.apache.tuscany.sca</groupId>
|
||||
<artifactId>tuscany-node-impl</artifactId>
|
||||
<version>2.0-SNAPSHOT</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.apache.tuscany.sca</groupId>
|
||||
<artifactId>tuscany-implementation-java-runtime</artifactId>
|
||||
<version>2.0-SNAPSHOT</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.apache.tuscany.sca</groupId>
|
||||
<artifactId>tuscany-sca-api</artifactId>
|
||||
<version>2.0-SNAPSHOT</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>junit</groupId>
|
||||
<artifactId>junit</artifactId>
|
||||
<version>4.8.1</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
|
||||
</dependencies>
|
||||
|
||||
</project>
|
|
@ -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 sample.binding;
|
||||
|
||||
import javax.xml.namespace.QName;
|
||||
|
||||
import org.apache.tuscany.sca.provider.BaseBindingImpl;
|
||||
|
||||
/**
|
||||
* Represents a binding to a Sample service.
|
||||
*/
|
||||
public class SampleBinding extends BaseBindingImpl {
|
||||
|
||||
public static final QName TYPE = new QName(SCA11_TUSCANY_NS, "binding.sample");
|
||||
|
||||
private String someAttr;
|
||||
|
||||
public SampleBinding() {
|
||||
}
|
||||
|
||||
public QName getType() {
|
||||
return TYPE;
|
||||
}
|
||||
|
||||
public String getSomeAttr() {
|
||||
return someAttr;
|
||||
}
|
||||
|
||||
public void setSomeAttr(String someAttr) {
|
||||
this.someAttr = someAttr;
|
||||
}
|
||||
|
||||
}
|
|
@ -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 sample.binding;
|
||||
|
||||
|
||||
/**
|
||||
* Factory implementation to create Sample Models
|
||||
*/
|
||||
public class SampleBindingFactory {
|
||||
|
||||
public SampleBinding createSampleBinding() {
|
||||
return new SampleBinding();
|
||||
}
|
||||
|
||||
}
|
|
@ -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 sample.binding.runtime;
|
||||
|
||||
import sample.binding.SampleBinding;
|
||||
import org.apache.tuscany.sca.core.ExtensionPointRegistry;
|
||||
import org.apache.tuscany.sca.provider.BindingProviderFactory;
|
||||
import org.apache.tuscany.sca.provider.ReferenceBindingProvider;
|
||||
import org.apache.tuscany.sca.provider.ServiceBindingProvider;
|
||||
import org.apache.tuscany.sca.runtime.RuntimeEndpoint;
|
||||
import org.apache.tuscany.sca.runtime.RuntimeEndpointReference;
|
||||
|
||||
public class SampleBindingProviderFactory implements BindingProviderFactory<SampleBinding> {
|
||||
|
||||
public SampleBindingProviderFactory(ExtensionPointRegistry extensionPoints) {
|
||||
}
|
||||
|
||||
public Class<SampleBinding> getModelType() {
|
||||
return SampleBinding.class;
|
||||
}
|
||||
|
||||
public ReferenceBindingProvider createReferenceBindingProvider(RuntimeEndpointReference endpoint) {
|
||||
return new SampleReferenceBindingProvider(endpoint);
|
||||
}
|
||||
|
||||
public ServiceBindingProvider createServiceBindingProvider(RuntimeEndpoint endpoint) {
|
||||
return new SampleServiceBindingProvider(endpoint);
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,55 @@
|
|||
/*
|
||||
* 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.binding.runtime;
|
||||
|
||||
import org.apache.tuscany.sca.assembly.EndpointReference;
|
||||
import org.apache.tuscany.sca.interfacedef.InterfaceContract;
|
||||
import org.apache.tuscany.sca.interfacedef.Operation;
|
||||
import org.apache.tuscany.sca.invocation.Invoker;
|
||||
import org.apache.tuscany.sca.provider.ReferenceBindingProvider;
|
||||
|
||||
public class SampleReferenceBindingProvider implements ReferenceBindingProvider {
|
||||
|
||||
private EndpointReference endpoint;
|
||||
private InterfaceContract contract;
|
||||
|
||||
public SampleReferenceBindingProvider(EndpointReference endpoint) {
|
||||
this.endpoint = endpoint;
|
||||
}
|
||||
|
||||
public Invoker createInvoker(Operation operation) {
|
||||
return new SampleReferenceInvoker(operation, endpoint);
|
||||
}
|
||||
|
||||
public void start() {
|
||||
}
|
||||
|
||||
public void stop() {
|
||||
}
|
||||
|
||||
public InterfaceContract getBindingInterfaceContract() {
|
||||
return contract;
|
||||
}
|
||||
|
||||
public boolean supportsOneWayInvocation() {
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,53 @@
|
|||
/*
|
||||
* 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.binding.runtime;
|
||||
|
||||
import org.apache.tuscany.sca.assembly.EndpointReference;
|
||||
import org.apache.tuscany.sca.interfacedef.Operation;
|
||||
import org.apache.tuscany.sca.invocation.Invoker;
|
||||
import org.apache.tuscany.sca.invocation.Message;
|
||||
|
||||
public class SampleReferenceInvoker implements Invoker {
|
||||
|
||||
protected Operation operation;
|
||||
protected EndpointReference endpoint;
|
||||
|
||||
public SampleReferenceInvoker(Operation operation, EndpointReference endpoint) {
|
||||
this.operation = operation;
|
||||
this.endpoint = endpoint;
|
||||
}
|
||||
|
||||
public Message invoke(Message msg) {
|
||||
try {
|
||||
|
||||
return doInvoke(msg);
|
||||
|
||||
} catch (Exception e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
public Message doInvoke(Message msg) {
|
||||
// Add some code here to make an invocation over the Sample binding protocol
|
||||
// For this sample we'll just get it from the static stash
|
||||
SampleServiceInvoker fi = SampleStash.getService(endpoint.getBinding().getURI());
|
||||
return fi.invokeService(msg);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,57 @@
|
|||
/*
|
||||
* 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.binding.runtime;
|
||||
|
||||
import sample.binding.SampleBinding;
|
||||
import org.apache.tuscany.sca.interfacedef.InterfaceContract;
|
||||
import org.apache.tuscany.sca.provider.ServiceBindingProvider;
|
||||
import org.apache.tuscany.sca.runtime.RuntimeEndpoint;
|
||||
|
||||
public class SampleServiceBindingProvider implements ServiceBindingProvider {
|
||||
|
||||
private RuntimeEndpoint endpoint;
|
||||
private InterfaceContract contract;
|
||||
|
||||
public SampleServiceBindingProvider(RuntimeEndpoint endpoint) {
|
||||
this.endpoint = endpoint;
|
||||
}
|
||||
|
||||
public void start() {
|
||||
// add some code here to start the service
|
||||
|
||||
// For this sample we'll just share it in a static
|
||||
SampleStash.addService(endpoint.getBinding().getURI(), new SampleServiceInvoker(endpoint));
|
||||
|
||||
System.out.println("someAttr=" + ((SampleBinding)endpoint.getBinding()).getSomeAttr());
|
||||
}
|
||||
|
||||
public void stop() {
|
||||
SampleStash.removeService(endpoint.getBinding().getURI());
|
||||
}
|
||||
|
||||
public InterfaceContract getBindingInterfaceContract() {
|
||||
return contract;
|
||||
}
|
||||
|
||||
public boolean supportsOneWayInvocation() {
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
|
@ -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 sample.binding.runtime;
|
||||
|
||||
import org.apache.tuscany.sca.invocation.Message;
|
||||
import org.apache.tuscany.sca.runtime.RuntimeEndpoint;
|
||||
|
||||
public class SampleServiceInvoker {
|
||||
|
||||
private RuntimeEndpoint wire;
|
||||
|
||||
public SampleServiceInvoker(RuntimeEndpoint wire) {
|
||||
this.wire = wire;
|
||||
}
|
||||
|
||||
/**
|
||||
* Send the request down the wire to invoke the service
|
||||
*/
|
||||
public Message invokeService(Message msg) {
|
||||
return wire.invoke(msg);
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,44 @@
|
|||
/*
|
||||
* 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.binding.runtime;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* Simplistic static Map to share service endpoints with references
|
||||
*/
|
||||
public class SampleStash {
|
||||
|
||||
private static Map<String, SampleServiceInvoker> services = new HashMap<String, SampleServiceInvoker>();
|
||||
|
||||
public static void addService(String uri, SampleServiceInvoker SampleServiceInvoker) {
|
||||
services.put(uri, SampleServiceInvoker);
|
||||
}
|
||||
|
||||
public static SampleServiceInvoker getService(String uri) {
|
||||
return services.get(uri);
|
||||
}
|
||||
|
||||
public static void removeService(String uri) {
|
||||
services.remove(uri);
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,20 @@
|
|||
# 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.
|
||||
|
||||
# Implementation class for the artifact processor extension
|
||||
org.apache.tuscany.sca.assembly.xml.DefaultBeanModelProcessor;qname=http://tuscany.apache.org/xmlns/sca/1.1#binding.sample,model=sample.binding.SampleBinding,factory=sample.binding.SampleBindingFactory
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
# 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.
|
||||
#
|
||||
binding-sample.xsd
|
||||
|
|
@ -0,0 +1,20 @@
|
|||
# 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.
|
||||
|
||||
# Implementation class for the binding extension
|
||||
sample.binding.runtime.SampleBindingProviderFactory;model=sample.binding.SampleBinding
|
||||
|
|
@ -0,0 +1,20 @@
|
|||
# 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.
|
||||
|
||||
# Implementation class for model factory
|
||||
sample.binding.SampleBindingFactory
|
||||
|
|
@ -0,0 +1,37 @@
|
|||
<?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.
|
||||
-->
|
||||
<schema xmlns="http://www.w3.org/2001/XMLSchema"
|
||||
targetNamespace="http://tuscany.apache.org/xmlns/sca/1.1"
|
||||
xmlns:sca="http://docs.oasis-open.org/ns/opencsa/sca/200912"
|
||||
xmlns:t="http://tuscany.apache.org/xmlns/sca/1.1"
|
||||
elementFormDefault="qualified">
|
||||
|
||||
<import namespace="http://docs.oasis-open.org/ns/opencsa/sca/200912" />
|
||||
|
||||
<element name="binding.sample" type="t:SampleBinding" substitutionGroup="sca:binding"/>
|
||||
|
||||
<complexType name="SampleBinding">
|
||||
<complexContent>
|
||||
<extension base="sca:Binding">
|
||||
<attribute name="someAttr" type="string" use="optional"/>
|
||||
</extension>
|
||||
</complexContent>
|
||||
</complexType>
|
||||
</schema>
|
|
@ -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 helloworld;
|
||||
|
||||
import org.oasisopen.sca.annotation.Reference;
|
||||
|
||||
public class HelloWorldClient implements HelloWorldService {
|
||||
|
||||
@Reference
|
||||
public HelloWorldService ref;
|
||||
|
||||
public String sayHello(String name) {
|
||||
return ref.sayHello(name);
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,28 @@
|
|||
/*
|
||||
* 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 helloworld;
|
||||
|
||||
|
||||
public class HelloWorldImpl implements HelloWorldService {
|
||||
|
||||
public String sayHello(String name) {
|
||||
return "Hello " + name;
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,28 @@
|
|||
/*
|
||||
* 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 helloworld;
|
||||
|
||||
import org.oasisopen.sca.annotation.Remotable;
|
||||
|
||||
@Remotable
|
||||
public interface HelloWorldService {
|
||||
|
||||
String sayHello(String name);
|
||||
|
||||
}
|
|
@ -0,0 +1,52 @@
|
|||
/*
|
||||
* 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 test;
|
||||
|
||||
import helloworld.HelloWorldService;
|
||||
import junit.framework.Assert;
|
||||
|
||||
import org.apache.tuscany.sca.node.Node;
|
||||
import org.apache.tuscany.sca.node.NodeFactory;
|
||||
import org.junit.AfterClass;
|
||||
import org.junit.BeforeClass;
|
||||
import org.junit.Test;
|
||||
|
||||
public class SampleBindingTestCase {
|
||||
|
||||
private static Node node;
|
||||
|
||||
@Test
|
||||
public void testSayHello() {
|
||||
HelloWorldService service = node.getService(HelloWorldService.class, "HelloWorldClient/HelloWorldService");
|
||||
Assert.assertEquals("Hello boo", service.sayHello("boo"));
|
||||
}
|
||||
|
||||
@BeforeClass
|
||||
public static void init() throws Exception {
|
||||
node = NodeFactory.newInstance().createNode("helloworld.composite").start();
|
||||
}
|
||||
|
||||
@AfterClass
|
||||
public static void destroy() throws Exception {
|
||||
if (node != null) {
|
||||
node.stop();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Reference in a new issue