Customer sample using Dojo + JSONRPC and OpenJPA

git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@681631 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
lresende 2008-08-01 08:33:24 +00:00
parent f62b939769
commit 8469692186
19 changed files with 1471 additions and 0 deletions

View file

@ -0,0 +1,104 @@
Customer Dojo RPC Sample
===========================
Note. This sample is currently not working correctly on WebSphere - see TUSCANY-1990
This sample demostrates the SCA JSONRPC binding using a simple web app that
uses the RPC support of the Dojo Toolkit to an SCA service.
The README in the samples directory (the directory above this) provides
general instructions about building and running samples. Take a look there
first.
As this sample provides a web app there is a manual step where the WAR file
that contains the sample is copied to your web app container. If you just want
to give this sample a go deploy the WAR file (target/sample-helloworld-dojo-webapp.war)
to you web application server.
Once the web app is deployed use your browser to visit the following URL;
http://localhost:8080/sample-helloworld-dojo-webapp
The port and hostname will of course vary depending on your local installation.
See also the similar helloworld-jsonrpc-webapp sample which also uses the SCA JSONRPC binding
but uses SCA scaDomain.js script on the client instead of the Dojo Toolkit.
Sample Overview
---------------
The sample provides a single service with an operation that reflects
a greeting back to the caller. The service is exposed using the JSONRPC
binding. The web app provided shows how the Dojo Toolkit JSON-RPC support can be
used to invoke the SCA service.
The web app provided shows how the service can be called by using the DOJO toolkit.
helloworld-dojo-webapp/
build-dojo.xml - This file is an Ant script used by the
sample build process to download the Dojo Toolkit
and get it included in the WAR file
for use by the sample.
src/
main/
java/
helloworldjsonrpc/
HelloWorldService.java - service interface
HelloWorldServiceImpl.java - service implementation
resources/
jsonrpc.composite - the SCA assembly for this sample
webapp
dojo/ - the Dojo toolkit (this directory is created only
when you build the samples from the source distribution)
META-INF/
sca-contribution.xml - specifies the composite to be deployed
WEB-INF/
web.xml - defines the listener that starts up the
Tuscany SCA runtime
HelloWorldJSONRPC.html - the web application that calls the
SCA service via JSONRPC
style.css - style sheet
helloworld-jsonrpc-webapp.png - a pictorial representation of the
sample .composite file
build.xml - the Ant build file that unpacks the
dojo installation
pom.xml - the Maven build file
Building And Running The Sample Using Ant
-----------------------------------------
With the binary distribution the sample can be built using Ant as
follows
cd helloworld-dojo-webapp
ant package
This should result in a war file (sample-helloworld-dojo-webapp.war) in the target
directory. Copy this war file to your web app deployment directory in your
web app container.
The process for getting the web app running will depend on which web app container
you are using. For example, if you are using Tomcat then it is simply a matter
of copying the WAR file to the webapps directory.
Once the web app is deployed use your browser to visit the following URL;
http://localhost:8080/sample-helloworld-dojo-webapp
The port and hostname will of course vary depending on your local installation.
You should see a web page that allows you to send messages, via JSONRPC, to the
application running in the Tuscany SCA Runtime
Building And Running The Sample Using Maven
-------------------------------------------
With either the binary or source distributions the sample can be built and run
using Maven as follows.
cd helloworld-dojo-webapp
mvn
Again this should result in a war file (sample-helloworld-dojo-webapp.war) in the target
directory. Follow the steps described in the previous section for running the web
app and for the expected results.

View file

@ -0,0 +1,110 @@
<!--
* 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.
-->
<fileset id="tuscany.jars" dir="../../modules">
<include name="tuscany-assembly-1.4-SNAPSHOT.jar"/>
<include name="tuscany-assembly-xml-1.4-SNAPSHOT.jar"/>
<include name="tuscany-assembly-xsd-1.4-SNAPSHOT.jar"/>
<include name="tuscany-binding-http-1.4-SNAPSHOT.jar"/>
<include name="tuscany-binding-http-runtime-1.4-SNAPSHOT.jar"/>
<include name="tuscany-binding-jsonrpc-1.4-SNAPSHOT.jar"/>
<include name="tuscany-binding-jsonrpc-runtime-1.4-SNAPSHOT.jar"/>
<include name="tuscany-binding-sca-1.4-SNAPSHOT.jar"/>
<include name="tuscany-binding-sca-xml-1.4-SNAPSHOT.jar"/>
<include name="tuscany-contribution-1.4-SNAPSHOT.jar"/>
<include name="tuscany-contribution-impl-1.4-SNAPSHOT.jar"/>
<include name="tuscany-contribution-java-1.4-SNAPSHOT.jar"/>
<include name="tuscany-contribution-namespace-1.4-SNAPSHOT.jar"/>
<include name="tuscany-contribution-xml-1.4-SNAPSHOT.jar"/>
<include name="tuscany-core-1.4-SNAPSHOT.jar"/>
<include name="tuscany-core-databinding-1.4-SNAPSHOT.jar"/>
<include name="tuscany-core-spi-1.4-SNAPSHOT.jar"/>
<include name="tuscany-data-api-1.4-SNAPSHOT.jar"/>
<include name="tuscany-databinding-1.4-SNAPSHOT.jar"/>
<include name="tuscany-databinding-jaxb-1.4-SNAPSHOT.jar"/>
<include name="tuscany-databinding-json-1.4-SNAPSHOT.jar"/>
<include name="tuscany-definitions-1.4-SNAPSHOT.jar"/>
<include name="tuscany-definitions-xml-1.4-SNAPSHOT.jar"/>
<include name="tuscany-endpoint-1.4-SNAPSHOT.jar"/>
<include name="tuscany-extensibility-1.4-SNAPSHOT.jar"/>
<include name="tuscany-host-embedded-1.4-SNAPSHOT.jar"/>
<include name="tuscany-host-http-1.4-SNAPSHOT.jar"/>
<include name="tuscany-host-jetty-1.4-SNAPSHOT.jar"/>
<include name="tuscany-implementation-java-1.4-SNAPSHOT.jar"/>
<include name="tuscany-implementation-java-runtime-1.4-SNAPSHOT.jar"/>
<include name="tuscany-implementation-java-xml-1.4-SNAPSHOT.jar"/>
<include name="tuscany-implementation-resource-1.4-SNAPSHOT.jar"/>
<include name="tuscany-implementation-resource-runtime-1.4-SNAPSHOT.jar"/>
<include name="tuscany-interface-1.4-SNAPSHOT.jar"/>
<include name="tuscany-interface-java-1.4-SNAPSHOT.jar"/>
<include name="tuscany-interface-java-jaxws-1.4-SNAPSHOT.jar"/>
<include name="tuscany-interface-java-xml-1.4-SNAPSHOT.jar"/>
<include name="tuscany-monitor-1.4-SNAPSHOT.jar"/>
<include name="tuscany-policy-1.4-SNAPSHOT.jar"/>
<include name="tuscany-policy-xml-1.4-SNAPSHOT.jar"/>
<include name="tuscany-sca-api-1.4-SNAPSHOT.jar"/>
<include name="tuscany-xsd-1.4-SNAPSHOT.jar"/>
</fileset>
<fileset id="3rdparty.jars" dir="../../lib">
<include name="XmlSchema-1.3.2.jar"/>
<include name="activation-1.1.jar"/>
<include name="ant-1.6.5.jar"/>
<include name="asm-all-3.1.jar"/>
<include name="axiom-api-1.2.5.jar"/>
<include name="axiom-impl-1.2.5.jar"/>
<include name="cglib-nodep-2.1_3.jar"/>
<include name="commons-collections-3.2.jar"/>
<include name="commons-lang-2.1.jar"/>
<include name="commons-logging-1.1.jar"/>
<include name="commons-pool-1.3.jar"/>
<include name="derby-10.1.2.1.jar"/>
<include name="geronimo-commonj_1.1_spec-1.0.jar"/>
<include name="geronimo-jms_1.1_spec-1.0.1.jar"/>
<include name="geronimo-jpa_3.0_spec-1.1.jar"/>
<include name="geronimo-jta_1.1_spec-1.1.jar"/>
<include name="hsqldb-1.8.0.1.jar"/>
<include name="jaxb-api-2.1.jar"/>
<include name="jaxb-impl-2.1.7.jar"/>
<include name="jaxen-1.1-beta-9.jar"/>
<include name="jaxws-api-2.1.jar"/>
<include name="jettison-1.0.1.jar"/>
<include name="jetty-6.1.7.jar"/>
<include name="jetty-util-6.1.7.jar"/>
<include name="json-rpc-1.0.jar"/>
<include name="jsr181-api-1.0-MR1.jar"/>
<include name="jsr250-api-1.0.jar"/>
<include name="log4j-1.2.13.jar"/>
<include name="mail-1.4.jar"/>
<include name="openjpa-1.0.0.jar"/>
<include name="openjpa-jdbc-1.0.0.jar"/>
<include name="openjpa-jdbc-5-1.0.0.jar"/>
<include name="openjpa-kernel-1.0.0.jar"/>
<include name="openjpa-kernel-5-1.0.0.jar"/>
<include name="openjpa-lib-1.0.0.jar"/>
<include name="openjpa-persistence-1.0.0.jar"/>
<include name="openjpa-persistence-jdbc-1.0.0.jar"/>
<include name="openjpa-xmlstore-1.0.0.jar"/>
<include name="serp-1.13.1.jar"/>
<include name="servlet-api-2.5.jar"/>
<include name="stax-api-1.0-2.jar"/>
<include name="stax-api-1.0.1.jar"/>
<include name="wstx-asl-3.2.1.jar"/>
<include name="xml-apis-1.3.03.jar"/>
</fileset>

View file

@ -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 name="DojoZipInstaller">
<property name="dojo.version" value="1.0.0"/>
<property name="unpack.location" value="${basedir}/target/classes/content/dojo"/>
<target name="check-dojo-installed">
<condition property="already.installed" >
<available file="${localRepository}/dojo/dojo/${dojo.version}/dojo-${dojo.version}.zip"/>
</condition>
<condition property="maven.suffix" value="">
<os family="unix"/>
</condition>
<condition property="maven.suffix" value=".bat">
<os family="windows"/>
</condition>
</target>
<target name="check-dojo-unpacked">
<condition property="already.unpacked" >
<available file="${unpack.location}"/>
</condition>
</target>
<target name="install-dojo" depends="check-dojo-installed" unless="already.installed">
<mkdir dir="${basedir}/target/dojo-download/"/>
<get src="http://download.dojotoolkit.org/release-${dojo.version}/dojo-release-${dojo.version}.zip"
dest="${basedir}/target/dojo-download/dojo-release-${dojo.version}.zip"
verbose="true"
usetimestamp="true"/>
<exec executable="mvn${maven.suffix}" dir="${basedir}" failonerror="false">
<arg line="install:install-file -DgroupId=dojo -DartifactId=dojo -Dversion=${dojo.version} -Dpackaging=zip -DgeneratePom=true -Dfile=${basedir}/target/dojo-download/dojo-release-${dojo.version}.zip"/>
</exec>
</target>
<target name="install-dojo-nomaven" depends="check-dojo-installed" unless="already.installed">
<mkdir dir="${basedir}/target/dojo-download/"/>
<get src="http://download.dojotoolkit.org/release-${dojo.version}/dojo-release-${dojo.version}.zip"
dest="${basedir}/target/dojo-download/dojo-release-${dojo.version}.zip"
verbose="true"
usetimestamp="true"/>
<copy file="${basedir}/target/dojo-download/dojo-release-${dojo.version}.zip"
tofile="${localRepository}/dojo/dojo/${dojo.version}/dojo-${dojo.version}.zip"/>
</target>
<target name="unpack-dojo-files" depends="check-dojo-installed, check-dojo-unpacked" unless="already.unpacked">
<fail message="dojo zip file not installed in local repository: ${localRepository}" unless="already.installed"/>
<mkdir dir="${basedir}/target/dojo-unpack-temp/"/>
<unzip src="${localRepository}/dojo/dojo/${dojo.version}/dojo-${dojo.version}.zip"
dest="${basedir}/target/dojo-unpack-temp/"
overwrite="false">
<patternset>
<include name="dojo-release-${dojo.version}/dojo/**"/>
<exclude name="dojo-release-${dojo.version}/dojo/tests/**"/>
<include name="dojo-release-${dojo.version}/dijit/**"/>
<exclude name="dojo-release-${dojo.version}/dojox/**"/>
<exclude name="dojo-release-${dojo.version}/util/**"/>
</patternset>
</unzip>
<move file="${basedir}/target/dojo-unpack-temp/dojo-release-${dojo.version}"
tofile="${unpack.location}"
verbose="true"/>
<delete dir="${basedir}/target/dojo-unpack-temp/"/>
</target>
<target name="clean-dojo-files">
<delete dir="${unpack.location}"/>
</target>
</project>

View file

@ -0,0 +1,70 @@
<!--
* 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.
-->
<!DOCTYPE project [
<!ENTITY buildDependency SYSTEM "build-dependency.xml">
]>
<project name="sample-helloworld-dojo-webapp" default="compile">
&buildDependency;
<target name="compile">
<mkdir dir="target/classes"/>
<javac destdir="target/classes" debug="on" source="1.5" target="1.5">
<src path="src\main\java"/>
<classpath>
<fileset refid="tuscany.jars"/>
<fileset refid="3rdparty.jars"/>
</classpath>
</javac>
<copy todir="target/classes">
<fileset dir="src\main\resources"/>
<fileset dir="src\main\resources"/>
</copy>
<ant antfile="./build-dojo.xml" target="install-dojo-nomaven">
<property name="localRepository" value="./target/repo"/>
</ant>
<ant antfile="./build-dojo.xml" target="unpack-dojo-files">
<property name="localRepository" value="./target/repo"/>
</ant>
<war destfile="target/sample-helloworld-dojo-webapp.war" webxml="src/main/webapp/WEB-INF/web.xml">
<fileset dir="src/main/webapp"/>
<lib refid="tuscany.jars"/>
<lib refid="3rdparty.jars"/>
<classes dir="target/classes"/>
</war>
<ant antfile="./build-dojo.xml" target="clean-dojo-files">
<property name="localRepository" value="./target/repo"/>
</ant>
</target>
<target name="package" depends="compile"/>
<target name="clean">
<delete includeemptydirs="true">
<fileset dir="target"/>
</delete>
</target>
</project>

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.7 KiB

View file

@ -0,0 +1,177 @@
<?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: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.44"
sodipodi:docbase="C:\simon\Projects\Tuscany\java\java-head\sca\samples\helloworld-jsonrpc-webapp"
sodipodi:docname="helloworld-jsonrpc-webapp.svg"
version="1.0"
inkscape:export-filename="C:\simon\Projects\Tuscany\java\java-head\sca\samples\helloworld-jsonrpc-webapp\helloworld-jsonrpc.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="516.28571"
inkscape:cy="414.63224"
inkscape:document-units="px"
inkscape:current-layer="layer1"
inkscape:window-width="1054"
inkscape:window-height="721"
inkscape:window-x="158"
inkscape:window-y="164" />
<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"
transform="translate(144.2857,52.85714)">
<rect
rx="8.0946665"
ry="12.692303"
y="192.00233"
x="258.31134"
height="299.99988"
width="262.14267"
id="rect2067"
style="opacity:1;fill:#90baf4;fill-opacity:1;stroke:#060000;stroke-width:1.99999893;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<flowRoot
id="flowRoot2954"
xml:space="preserve"><flowRegion
id="flowRegion2956"><rect
y="212.66591"
x="281.42856"
height="61.42857"
width="170"
id="rect2958" /></flowRegion><flowPara
id="flowPara2960">helloworldjsonrpc</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="449.91632"
y="349.31049"
rx="6.9961648"
ry="7.1230249" />
<flowRoot
xml:space="preserve"
id="flowRoot2966"
transform="translate(190.3256,143.3719)"><flowRegion
id="flowRegion2968"><rect
id="rect2970"
width="170"
height="61.42857"
x="281.42856"
y="212.66591" /></flowRegion><flowPara
id="flowPara2972">HelloWorld</flowPara><flowPara
id="flowPara1883">JSONService</flowPara><flowPara
id="flowPara1885">Component</flowPara></flowRoot> <path
style="fill:#5b9d05;fill-opacity:1;fill-rule:evenodd;stroke:black;stroke-width:1.00000036px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 373.48019,364.72909 L 455.16689,364.72909 L 470.019,392.34681 L 452.69154,417.84009 L 373.48019,417.84009 L 392.04536,392.34681 L 373.48019,364.72909 z "
id="path3017" />
<flowRoot
xml:space="preserve"
id="flowRoot1887"
transform="translate(113.6483,167.4037)"><flowRegion
id="flowRegion1889"><rect
id="rect1891"
width="170"
height="61.42857"
x="281.42856"
y="212.66591" /></flowRegion><flowPara
id="flowPara1893">HelloWorld</flowPara><flowPara
id="flowPara1897">Service</flowPara></flowRoot> <rect
style="opacity:1;fill:#f19a9a;fill-opacity:1;stroke:#2e2424;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:3, 1;stroke-dashoffset:0;stroke-opacity:1"
id="rect1888"
width="85"
height="97.85714"
x="214.28571"
y="340.52307"
rx="6.9961648"
ry="7.1230249" />
<flowRoot
xml:space="preserve"
id="flowRoot1892"
transform="translate(-56.88742,135.3526)"><flowRegion
id="flowRegion1894"><rect
id="rect1896"
width="170"
height="61.42857"
x="281.42856"
y="212.66591" /></flowRegion><flowPara
id="flowPara1900">WebApp</flowPara></flowRoot> <rect
style="opacity:1;fill:#f19a9a;fill-opacity:1;stroke:#2e2424;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:3, 1;stroke-dashoffset:0;stroke-opacity:1"
id="rect1912"
width="45.714287"
height="40.714287"
x="277.85715"
y="370.52304"
rx="6.9961648"
ry="7.1230249" />
<flowRoot
xml:space="preserve"
id="flowRoot1914"
transform="translate(1.400116,166.6895)"><flowRegion
id="flowRegion1916"><rect
id="rect1918"
width="170"
height="61.42857"
x="281.42856"
y="212.66591" /></flowRegion><flowPara
id="flowPara1920">DOJO</flowPara></flowRoot> <path
style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 324.28571,391.23734 C 391.42857,391.95163 391.42857,391.95163 391.42857,391.95163"
id="path1922" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 6.9 KiB

View file

@ -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.
--
DROP TABLE CUSTOMER;
CREATE TABLE CUSTOMER (
ID INT PRIMARY KEY NOT NULL GENERATED ALWAYS AS IDENTITY,
NAME VARCHAR(30),
PHONE VARCHAR(10),
ADDRESS VARCHAR(25),
CITY VARCHAR(15),
STATE VARCHAR(2),
ZIP VARCHAR(5));
INSERT INTO CUSTOMER (NAME, PHONE, ADDRESS, CITY, STATE, ZIP ) VALUES('Joe Smith', '4081234567', '1440 N 1st ST', 'SAN JOSE', 'CA', '95134');
INSERT INTO CUSTOMER (NAME, PHONE, ADDRESS, CITY, STATE, ZIP ) VALUES('Erik Johnson', '4081230987', '1440 N 1st ST', 'SAN JOSE', 'CA', '95134');
INSERT INTO CUSTOMER (NAME, PHONE, ADDRESS, CITY, STATE, ZIP ) VALUES('Mark Pensacola', '4085679988', '1440 N 1st ST', 'SAN JOSE', 'CA', '95134');

View file

@ -0,0 +1,245 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
-->
<project>
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.apache.tuscany.sca</groupId>
<artifactId>tuscany-sca</artifactId>
<version>1.4-SNAPSHOT</version>
<relativePath>../../pom.xml</relativePath>
</parent>
<artifactId>sample-customer-dojo</artifactId>
<name>Apache Tuscany SCA Customer DOJO Sample WebApp</name>
<repositories>
<repository>
<id>apache.incubator</id>
<url>http://people.apache.org/repo/m2-incubating-repository</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>org.apache.tuscany.sca</groupId>
<artifactId>tuscany-host-embedded</artifactId>
<version>1.4-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.apache.tuscany.sca</groupId>
<artifactId>tuscany-data-api</artifactId>
<version>1.4-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.apache.tuscany.sca</groupId>
<artifactId>tuscany-implementation-java-runtime</artifactId>
<version>1.4-SNAPSHOT</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.apache.tuscany.sca</groupId>
<artifactId>tuscany-binding-jsonrpc-runtime</artifactId>
<version>1.4-SNAPSHOT</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.apache.tuscany.sca</groupId>
<artifactId>tuscany-implementation-resource-runtime</artifactId>
<version>1.4-SNAPSHOT</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.apache.tuscany.sca</groupId>
<artifactId>tuscany-binding-http-runtime</artifactId>
<version>1.4-SNAPSHOT</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.apache.tuscany.sca</groupId>
<artifactId>tuscany-host-jetty</artifactId>
<version>1.4-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.apache.geronimo.specs</groupId>
<artifactId>geronimo-jpa_3.0_spec</artifactId>
<version>1.1</version>
</dependency>
<dependency>
<groupId>org.apache.openjpa</groupId>
<artifactId>openjpa</artifactId>
<version>1.0.0</version>
<exclusions>
<exclusion>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.derby</groupId>
<artifactId>derby</artifactId>
<version>10.1.2.1</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.2</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<finalName>${artifactId}</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<!-- version>1.1</version -->
<dependencies>
<dependency>
<groupId>ant</groupId>
<artifactId>ant-trax</artifactId>
<version>1.6.5</version>
</dependency>
</dependencies>
<executions>
<execution>
<id>install-dojo</id>
<phase>validate</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<ant antfile="./build-dojo.xml" target="install-dojo">
<property name="localRepository" value="${settings.localRepository}"/>
</ant>
</tasks>
</configuration>
</execution>
<execution>
<id>copy-dojo-files</id>
<phase>generate-resources</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<ant antfile="./build-dojo.xml" target="unpack-dojo-files">
<property name="localRepository" value="${settings.localRepository}"/>
<property name="artifactId" value="${artifactId}"/>
</ant>
</tasks>
</configuration>
</execution>
<execution>
<id>clean-dojo-files</id>
<phase>clean</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<ant antfile="./build-dojo.xml" target="clean-dojo-files">
<property name="localRepository" value="${settings.localRepository}"/>
<property name="artifactId" value="${artifactId}"/>
</ant>
</tasks>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.tuscany.sca</groupId>
<artifactId>tuscany-maven-ant-generator</artifactId>
<version>1.4-SNAPSHOT</version>
<executions>
<execution>
<configuration>
<buildDependencyFileOnly>true</buildDependencyFileOnly>
</configuration>
<goals>
<goal>generate</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>sql-maven-plugin</artifactId>
<!-- 1.1 due to MOJO-619 -->
<version>1.1-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>org.apache.derby</groupId>
<artifactId>derby</artifactId>
<version>10.1.2.1</version>
</dependency>
</dependencies>
<executions>
<execution>
<id>create-db</id>
<phase>generate-resources</phase>
<goals>
<goal>execute</goal>
</goals>
<configuration>
<driver>org.apache.derby.jdbc.EmbeddedDriver</driver>
<url>jdbc:derby:${pom.basedir}/target/classes/customer;create=true</url>
<autocommit>true</autocommit>
<onError>continue</onError>
<onConnectionError>skip</onConnectionError>
<delimiter>;</delimiter>
<srcFiles>
<srcFile>${pom.basedir}/customer.sql</srcFile>
</srcFiles>
</configuration>
</execution>
<!-- Shutdown DB in order to be able to run unit tests -->
<execution>
<id>shutdown-database-sothat-test-can-run</id>
<phase>process-test-resources</phase>
<goals>
<goal>execute</goal>
</goals>
<configuration>
<driver>org.apache.derby.jdbc.EmbeddedDriver</driver>
<url>jdbc:derby:${pom.basedir}/target/classes/customer;shutdown=true</url>
<skipOnConnectionError>true</skipOnConnectionError>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>

View file

@ -0,0 +1,93 @@
/*
* 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 customer;
import javax.persistence.Basic;
import javax.persistence.Entity;
import javax.persistence.Id;
@Entity
public class Customer {
@Id protected int id;
@Basic protected String name;
@Basic protected String phone;
@Basic protected String address;
@Basic protected String city;
@Basic protected String state;
@Basic protected String zip;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
public String getZip() {
return zip;
}
public void setZip(String zip) {
this.zip = zip;
}
}

View file

@ -0,0 +1,26 @@
/*
* 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 customer;
import org.apache.tuscany.sca.data.collection.Collection;
public interface CustomerCollection extends Collection<String, Customer> {
}

View file

@ -0,0 +1,101 @@
/*
* 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 customer;
import java.util.Iterator;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.Persistence;
import javax.persistence.Query;
import org.apache.tuscany.sca.data.collection.Entry;
import org.apache.tuscany.sca.data.collection.NotFoundException;
public class CustomerCollectionImpl implements CustomerCollection {
EntityManagerFactory emf = null;
EntityManager em = null;
public CustomerCollectionImpl() {
System.out.println(">>>");
try {
emf = Persistence.createEntityManagerFactory("customer-openJPA");
em = emf.createEntityManager();
} catch (Exception e) {
e.printStackTrace();
}
}
public void delete(String arg0) throws NotFoundException {
// TODO Auto-generated method stub
}
public Customer get(String arg0) throws NotFoundException {
// TODO Auto-generated method stub
return null;
}
public Entry<String, Customer>[] getAll() {
EntityTransaction tx = em.getTransaction();
try {
tx.begin();
Query q = em.createQuery("SELECT c FROM customer c");
List results = q.getResultList();
Iterator iter = results.iterator();
while (iter.hasNext()) {
Customer customer = (Customer)iter.next();
System.out.println(customer);
}
tx.commit();
} catch(Exception e) {
e.printStackTrace();
} finally {
if (tx.isActive()) {
tx.rollback();
}
em.close();
}
return null;
}
public String post(String arg0, Customer arg1) {
// TODO Auto-generated method stub
return null;
}
public void put(String arg0, Customer arg1) throws NotFoundException {
// TODO Auto-generated method stub
}
public Entry<String, Customer>[] query(String arg0) {
// TODO Auto-generated method stub
return null;
}
}

View file

@ -0,0 +1,31 @@
/*
* 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 customer;
import org.osoa.sca.annotations.Remotable;
@Remotable
public interface CustomerService {
Customer[] get();
Customer findCustomerByName(String name);
}

View file

@ -0,0 +1,117 @@
/*
* 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 customer;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.Persistence;
import javax.persistence.Query;
import org.osoa.sca.annotations.Destroy;
import org.osoa.sca.annotations.Init;
public class CustomerServiceImpl implements CustomerService {
EntityManagerFactory emf = null;
EntityManager em = null;
public CustomerServiceImpl() {
}
@Init
public void init() {
System.out.println(">>> Initializing JPA");
try {
emf = Persistence.createEntityManagerFactory("customer-openJPA");
em = emf.createEntityManager();
} catch (Exception e) {
e.printStackTrace();
}
}
@Destroy
public void destroy() {
emf.close();
}
public Customer[] get() {
EntityTransaction tx = em.getTransaction();
List<Customer> customers = new ArrayList<Customer>();
try {
tx.begin();
Query q = em.createQuery("SELECT c FROM customer c");
List results = q.getResultList();
Iterator iter = results.iterator();
while (iter.hasNext()) {
Customer customer = (Customer)iter.next();
customers.add(customer);
}
tx.commit();
} catch (Exception e) {
e.printStackTrace();
} finally {
if (tx.isActive()) {
tx.rollback();
}
em.close();
}
Customer[] customerArray = new Customer[customers.size()];
customers.toArray(customerArray);
return customerArray;
}
public Customer findCustomerByName(String name) {
EntityTransaction tx = em.getTransaction();
Customer customer = null;
try {
tx.begin();
Query q = em.createQuery("SELECT c FROM customer c WHERE c.name = '" + name + "'");
List results = q.getResultList();
Iterator iter = results.iterator();
while (iter.hasNext()) {
customer = (Customer)iter.next();
}
tx.commit();
} catch (Exception e) {
e.printStackTrace();
} finally {
if (tx.isActive()) {
tx.rollback();
}
em.close();
}
return customer;
}
}

View file

@ -0,0 +1,34 @@
/*
* 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.host.embedded.SCADomain;
public class Launch {
public static void main(String[] args) throws Exception {
System.out.println("Starting ...");
SCADomain scaDomain = SCADomain.newInstance("customer.composite");
System.out.println("store.composite ready for big business !!!");
System.in.read();
System.out.println("Stopping ...");
scaDomain.close();
System.out.println();
}
}

View file

@ -0,0 +1,51 @@
<?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.
-->
<entity-mappings xmlns="http://java.sun.com/xml/ns/persistence/orm"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm http://java.sun.com/xml/ns/persistence/orm_1_0.xsd"
version="1.0">
<entity class="customer.Customer" name="customer">
<table name="CUSTOMER"/>
<attributes>
<id name="id">
<generated-value strategy="TABLE"/>
</id>
<basic name="name">
<column name="NAME" length="30"/>
</basic>
<basic name="phone">
<column name="PHONE" length="10"/>
</basic>
<basic name="address">
<column name="ADDRESS" length="25"/>
</basic>
<basic name="city">
<column name="CITY" length="15"/>
</basic>
<basic name="state">
<column name="STATE" length="2"/>
</basic>
<basic name="zip">
<column name="ZIP" length="5"/>
</basic>
</attributes>
</entity>
</entity-mappings>

View file

@ -0,0 +1,40 @@
<?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.
-->
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd" version="1.0">
<persistence-unit name="customer-openJPA">
<mapping-file>orm.xml</mapping-file>
<class>customer.Customer</class>
<properties>
<property name="openjpa.ConnectionDriverName" value="org.apache.derby.jdbc.EmbeddedDriver"/>
<property name="openjpa.ConnectionURL" value="jdbc:derby:target/classes/customer"/>
<property name="openjpa.ConnectionUserName" value=""/>
<property name="openjpa.ConnectionPassword" value=""/>
<property name="openjpa.Log" value="DefaultLevel=TRACE, Tool=TRACE"/>
</properties>
</persistence-unit>
</persistence>

View file

@ -0,0 +1,26 @@
<?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://www.osoa.org/xmlns/sca/1.0"
targetNamespace="http://sample"
xmlns:sample="http://sample">
<deployable composite="sample:customer"/>
</contribution>

View file

@ -0,0 +1,77 @@
<html>
<!--
* 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.
-->
<head>
<title>Tuscany Dojo JSON-RPC Customer Example</TITLE>
<style type="text/css">
@import "dojo/dijit/themes/soria/soria.css";
@import "dojo/dojo/resources/dojo.css"
</style>
<script type="text/javascript">
var djConfig = {
parseOnLoad: true,
baseRelativePath: "dojo",
isDebug: true,
debugContainerId: "dojoDebug"
};
djConfig.usePlainJson=true ;
//djConfig.debugAtAllCosts = true;
</script>
<script type="text/javascript" src="dojo/dojo/dojo.js"></script>
<script type="text/javascript" src="dojo/dijit/dijit.js"></script>
<script type="text/javascript">
dojo.require("dojo.parser");
dojo.require("dojo.rpc.JsonService");
dojo.require("dijit.form.ValidationTextBox");
dojo.require("dijit.form.Button");
</script>
<link rel="stylesheet" type="text/css" href="style.css" />
</head>
<body class="soria">
<h2>Tuscany Dojo JSON-RPC Customer Sample</h2>
Customer Name :<br>
<input type="text" id="name" size="30" value="Joe Smith" dojoType="dijit.form.TextBox" trim="true" propercase="true" required="true" />
<input type="button" dojoType="dijit.form.Button" onclick="findCustomerByName()" />
<script type="text/javascript">
function findCustomerByName() {
var name = document.getElementById("name").value;
customerService.findCustomerByName(name).addCallback(contentCallBack);;
}
function contentCallBack(result) {
alert(result.name);
//var handlerNode = document.getElementById("ReturnedContent");
//handlerNode.innerHTML = "<p>" + result + "</p>" ;
}
var customerService = new dojo.rpc.JsonService("/CustomerService?smd");
</script>
</body>
</html>

View file

@ -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.
-->
<composite xmlns="http://www.osoa.org/xmlns/sca/1.0"
xmlns:tuscany="http://tuscany.apache.org/xmlns/sca/1.0"
targetNamespace="http://sample"
xmlns:sample="http://sample"
name="customer">
<component name="ui">
<tuscany:implementation.resource location="content"/>
<service name="Resource">
<tuscany:binding.http uri="/"/>
</service>
</component>
<service name="CustomerService" promote="CustomerServiceComponent/CustomerService">
<interface.java interface="customer.CustomerService"/>
<tuscany:binding.jsonrpc/>
</service>
<component name="CustomerServiceComponent">
<implementation.java class="customer.CustomerServiceImpl"/>
</component>
</composite>