diff options
Diffstat (limited to 'sandbox/sebastien/cpp/apr-2/samples/store-cpp')
13 files changed, 687 insertions, 0 deletions
diff --git a/sandbox/sebastien/cpp/apr-2/samples/store-cpp/Makefile.am b/sandbox/sebastien/cpp/apr-2/samples/store-cpp/Makefile.am new file mode 100644 index 0000000000..1a642e583c --- /dev/null +++ b/sandbox/sebastien/cpp/apr-2/samples/store-cpp/Makefile.am @@ -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. + + +dist_sample_SCRIPTS = start stop ssl-start +sampledir = $(prefix)/samples/store-cpp + +nobase_dist_sample_DATA = currency-converter.cpp fruits-catalog.cpp shopping-cart.cpp store.composite htdocs/*.html + +sample_LTLIBRARIES = libcurrency-converter.la libfruits-catalog.la libshopping-cart.la +noinst_DATA = libcurrency-converter.so libfruits-catalog.so libshopping-cart.so + +libcurrency_converter_la_SOURCES = currency-converter.cpp +libcurrency-converter.so: + ln -s .libs/libcurrency-converter.so + +libfruits_catalog_la_SOURCES = fruits-catalog.cpp +libfruits-catalog.so: + ln -s .libs/libfruits-catalog.so + +libshopping_cart_la_SOURCES = shopping-cart.cpp +libshopping-cart.so: + ln -s .libs/libshopping-cart.so + +dist_noinst_SCRIPTS = server-test +TESTS = server-test diff --git a/sandbox/sebastien/cpp/apr-2/samples/store-cpp/currency-converter.cpp b/sandbox/sebastien/cpp/apr-2/samples/store-cpp/currency-converter.cpp new file mode 100644 index 0000000000..5f0702490a --- /dev/null +++ b/sandbox/sebastien/cpp/apr-2/samples/store-cpp/currency-converter.cpp @@ -0,0 +1,67 @@ +/* + * 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. + */ + +/* $Rev$ $Date$ */ + +/** + * Currency converter component implementation. + */ + +#include "string.hpp" +#include "function.hpp" +#include "list.hpp" +#include "value.hpp" +#include "monad.hpp" + +namespace tuscany { +namespace store { + +/** + * Convert an amount from USD to a currency. + */ +const failable<value> convert(unused const value& from, const value& to, const value& amount) { + if (to == string("EUR")) + return value(0.70 * (double)amount); + return amount; +} + +/** + * Return a currency symbol. + */ +const failable<value> symbol(const value& currency) { + if (currency == string("EUR")) + return value(string("E")); + return value(string("$")); +} + +} +} + +extern "C" { + +const tuscany::value apply(const tuscany::list<tuscany::value>& params) { + const tuscany::value func(car(params)); + if (func == "convert") + return tuscany::store::convert(cadr(params), caddr(params), cadddr(params)); + if (func == "symbol") + return tuscany::store::symbol(cadr(params)); + return tuscany::mkfailure<tuscany::value>(); +} + +} diff --git a/sandbox/sebastien/cpp/apr-2/samples/store-cpp/fruits-catalog.cpp b/sandbox/sebastien/cpp/apr-2/samples/store-cpp/fruits-catalog.cpp new file mode 100644 index 0000000000..ce5ebfec6f --- /dev/null +++ b/sandbox/sebastien/cpp/apr-2/samples/store-cpp/fruits-catalog.cpp @@ -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. + */ + +/* $Rev$ $Date$ */ + +/** + * Catalog component implementation. + */ + +#include "string.hpp" +#include "function.hpp" +#include "list.hpp" +#include "value.hpp" +#include "monad.hpp" + +namespace tuscany { +namespace store { + +/** + * Returns the catalog. + */ +struct convert { + const lambda<value(const list<value>&)> converter; + const string currency; + convert(const lambda<value(const list<value>&)>& converter, const string& currency) : converter(converter), currency(currency) { + } + const value operator()(const value& price) const { + return converter(mklist<value>("convert", string("USD"), currency, price)); + } +}; + +const list<value> mkfruit(const string& name, const string& code, const string& symbol, const double price) { + return list<value>() + + mklist<value>("name", name) + mklist<value>("currencyCode", code) + mklist<value>("currencySymbol", symbol) + mklist<value>("price", price); +} + +const failable<value> items(const lambda<value(const list<value>&)> converter, const lambda<value(const list<value>&)> currencyCode) { + const string currency(currencyCode(list<value>())); + const string symbol(converter(mklist<value>("symbol", currency))); + const lambda<value(const value&)> conv(convert(converter, currency)); + + return value(list<value>() + + mkfruit("Apple", currency, symbol, conv(2.99)) + + mkfruit("Orange", currency, symbol, conv(3.55)) + + mkfruit("Pear", currency, symbol, conv(1.55))); +} + +} +} + +extern "C" { + +const tuscany::value apply(const tuscany::list<tuscany::value>& params) { + const tuscany::value func(car(params)); + if (func == "items") + return tuscany::store::items(cadr(params), caddr(params)); + return tuscany::mkfailure<tuscany::value>(); +} + +} diff --git a/sandbox/sebastien/cpp/apr-2/samples/store-cpp/htdocs/index.html b/sandbox/sebastien/cpp/apr-2/samples/store-cpp/htdocs/index.html new file mode 100644 index 0000000000..3945e45bb7 --- /dev/null +++ b/sandbox/sebastien/cpp/apr-2/samples/store-cpp/htdocs/index.html @@ -0,0 +1,150 @@ +<!--
+ * 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="/component.js"></script>
+
+<script type="text/javascript">
+var store = sca.component("Store");
+var catalog = sca.defun(sca.reference(store, "catalog"), "items");
+var shoppingCart = sca.reference(store, "shoppingCart");
+var shoppingTotal = sca.defun(sca.reference(store, "shoppingTotal"), "total");
+
+var catalogItems;
+
+function catalog_itemsResponse(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;
+
+ shoppingTotal.total(shoppingTotal_totalResponse);
+ }
+}
+
+function shoppingTotal_totalResponse(total, exception) {
+ if (exception) {
+ alert(exception.message);
+ return;
+ }
+ document.getElementById('total').innerHTML = total;
+}
+
+function shoppingCart_postResponse(entry) {
+ shoppingCart.get("", 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 type="text">Item</title><content type="application/xml">' +
+ '<item>' +
+ '<name>' + catalogItems[i].name + '</name>' +
+ '<currencyCode>' + catalogItems[i].currencyCode + '</currencyCode>' +
+ '<currencySymbol>' + catalogItems[i].currencySymbol + '</currencySymbol>' +
+ '<price>' + catalogItems[i].price + '</price>' +
+ '</item>' +
+ '</content></entry>';
+ shoppingCart.post(entry, 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("", null);
+ document.getElementById('shoppingCart').innerHTML = "";
+ document.getElementById('total').innerHTML = "";
+}
+
+function init() {
+ try {
+ catalog.items(catalog_itemsResponse);
+ shoppingCart.get("", 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/">(feed)</a>
+</form>
+</div>
+
+</body>
+</html>
diff --git a/sandbox/sebastien/cpp/apr-2/samples/store-cpp/htdocs/test/items-request.txt b/sandbox/sebastien/cpp/apr-2/samples/store-cpp/htdocs/test/items-request.txt new file mode 100644 index 0000000000..ecf564cb98 --- /dev/null +++ b/sandbox/sebastien/cpp/apr-2/samples/store-cpp/htdocs/test/items-request.txt @@ -0,0 +1 @@ +{"id": 1, "method": "items", "params": []} diff --git a/sandbox/sebastien/cpp/apr-2/samples/store-cpp/htdocs/test/items-result.txt b/sandbox/sebastien/cpp/apr-2/samples/store-cpp/htdocs/test/items-result.txt new file mode 100644 index 0000000000..56f87d2778 --- /dev/null +++ b/sandbox/sebastien/cpp/apr-2/samples/store-cpp/htdocs/test/items-result.txt @@ -0,0 +1 @@ +{"id":1,"result":[{"name":"Apple","currencyCode":"USD","currencySymbol":"$","price":2.99},{"name":"Orange","currencyCode":"USD","currencySymbol":"$","price":3.55},{"name":"Pear","currencyCode":"USD","currencySymbol":"$","price":1.55}]}
\ No newline at end of file diff --git a/sandbox/sebastien/cpp/apr-2/samples/store-cpp/htdocs/test/shopping-cart-entry.xml b/sandbox/sebastien/cpp/apr-2/samples/store-cpp/htdocs/test/shopping-cart-entry.xml new file mode 100644 index 0000000000..25a284294c --- /dev/null +++ b/sandbox/sebastien/cpp/apr-2/samples/store-cpp/htdocs/test/shopping-cart-entry.xml @@ -0,0 +1 @@ +<entry xmlns="http://www.w3.org/2005/Atom"><title type="text">Item</title><content type="application/xml"><item><name>Orange</name><currencyCode>USD</currencyCode><currencySymbol>$</currencySymbol><price>3.55</price></item></content></entry> diff --git a/sandbox/sebastien/cpp/apr-2/samples/store-cpp/server-test b/sandbox/sebastien/cpp/apr-2/samples/store-cpp/server-test new file mode 100755 index 0000000000..e0d8716449 --- /dev/null +++ b/sandbox/sebastien/cpp/apr-2/samples/store-cpp/server-test @@ -0,0 +1,58 @@ +#!/bin/sh + +# 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. + +echo "Testing..." +here=`readlink -f $0`; here=`dirname $here` +curl_prefix=`cat $here/../../modules/http/curl.prefix` + +# Setup +./start +sleep 2 + +# Test HTTP GET +$curl_prefix/bin/curl http://localhost:8090/ 2>/dev/null >tmp/index.html +diff tmp/index.html htdocs/index.html +rc=$? + +# Test Catalog +if [ "$rc" = "0" ]; then + $curl_prefix/bin/curl http://localhost:8090/references/Store/catalog -X POST -H "Content-type: application/json-rpc" --data @htdocs/test/items-request.txt >tmp/items-result.txt 2>/dev/null + diff tmp/items-result.txt htdocs/test/items-result.txt + rc=$? +fi + +# Test Shopping Cart +if [ "$rc" = "0" ]; then + $curl_prefix/bin/curl http://localhost:8090/references/Store/shoppingCart -X POST -H "Content-type: application/atom+xml" --data @htdocs/test/shopping-cart-entry.xml 2>/dev/null + rc=$? +fi +if [ "$rc" = "0" ]; then + $curl_prefix/bin/curl http://localhost:8090/references/Store/shoppingCart >tmp/shopping-cart-feed.xml 2>/dev/null + grep "3.55" tmp/shopping-cart-feed.xml >/dev/null + rc=$? +fi + +# Cleanup +./stop +sleep 2 + +if [ "$rc" = "0" ]; then + echo "OK" +fi +return $rc diff --git a/sandbox/sebastien/cpp/apr-2/samples/store-cpp/shopping-cart.cpp b/sandbox/sebastien/cpp/apr-2/samples/store-cpp/shopping-cart.cpp new file mode 100644 index 0000000000..738ab2f4c7 --- /dev/null +++ b/sandbox/sebastien/cpp/apr-2/samples/store-cpp/shopping-cart.cpp @@ -0,0 +1,135 @@ +/* + * 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. + */ + +/* $Rev$ $Date$ */ + +/** + * Shopping cart component implementation. + */ + +#include "string.hpp" +#include "function.hpp" +#include "list.hpp" +#include "value.hpp" +#include "monad.hpp" + +namespace tuscany { +namespace store { + +const string cartId("1234"); + +/** + * Get the shopping cart from the cache. Return an empty + * cart if not found. + */ +const list<value> getcart(const value& id, const lambda<value(const list<value>&)> cache) { + const value cart = cache(mklist<value>("get", mklist<value>(id))); + cerr << "cart value: " << cart << "\n"; + const failable<value> fcart = cart; + cerr << "cart fvalue: " << fcart << "\n"; + cerr << "cart content: " << content(fcart) << "\n"; + cerr << "cart reason: " << reason(fcart) << "\n"; + if (isNil(cart)) + return value(list<value>()); + return (list<value>)cart; +} + +/** + * Post a new item to the cart. Create a new cart if necessary. + */ +const failable<value> post(unused const list<value>& collection, const value& item, const lambda<value(const list<value>&)> cache) { + const value id(mkuuid()); + const list<value> newItem(mklist<value>(car<value>(item), id, caddr<value>(item))); + const list<value> cart(cons<value>(newItem, getcart(cartId, cache))); + cache(mklist<value>("put", mklist<value>(cartId), cart)); + return value(mklist<value>(id)); +} + +/** + * Find an item in the cart. + */ +const value find(const value& id, const list<value>& cart) { + if (isNil(cart)) + return cons<value>(string("Item"), mklist<value>("0", list<value>())); + if (id == cadr<value>(car(cart))) + return car(cart); + return find(id, cdr(cart)); +} + +/** + * Return items from the cart. + */ +const failable<value> get(const list<value>& id, const lambda<value(const list<value>&)> cache) { + if (isNil(id)) + return value(append(mklist<value>(string("Your Cart"), cartId), getcart(cartId, cache))); + return find(car(id), getcart(cartId, cache)); +} + +/** + * Delete items from the cart. + */ +const failable<value> del(const list<value>& id, unused const lambda<value(const list<value>&)> cache) { + if (isNil(id)) + return cache(mklist<value>("delete", mklist<value>(cartId))); + return value(true); +} + +/** + * Return the price of an item. + */ +const double price(const list<value>& item) { + return cadr<value>(assoc<value>("price", caddr(item))); +} + +/** + * Sum the prices of a list of items. + */ +const double sum(const list<value>& items) { + if (isNil(items)) + return 0; + return price(car(items)) + sum(cdr(items)); +} + +/** + * Return the total price of the items in the cart. + */ +const failable<value> total(const lambda<value(const list<value>&)> cache) { + const list<value> cart(getcart(cartId, cache)); + return value(sum(cart)); +} + +} +} + +extern "C" { + +const tuscany::value apply(const tuscany::list<tuscany::value>& params) { + const tuscany::value func(car(params)); + if (func == "post") + return tuscany::store::post(cadr(params), caddr(params), cadddr(params)); + if (func == "get") + return tuscany::store::get(cadr(params), caddr(params)); + if (func == "delete") + return tuscany::store::del(cadr(params), caddr(params)); + if (func == "total") + return tuscany::store::total(cadr(params)); + return tuscany::mkfailure<tuscany::value>(); +} + +} diff --git a/sandbox/sebastien/cpp/apr-2/samples/store-cpp/ssl-start b/sandbox/sebastien/cpp/apr-2/samples/store-cpp/ssl-start new file mode 100755 index 0000000000..01ee0eb76c --- /dev/null +++ b/sandbox/sebastien/cpp/apr-2/samples/store-cpp/ssl-start @@ -0,0 +1,36 @@ +#!/bin/sh + +# 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. + +../../modules/http/ssl-ca-conf tmp localhost +../../modules/http/ssl-cert-conf tmp localhost +../../modules/http/httpd-conf tmp localhost 8090 htdocs +../../modules/http/httpd-ssl-conf tmp 8453 +../../modules/http/basic-auth-conf tmp +../../modules/http/passwd-auth-conf tmp foo foo +../../modules/server/server-conf tmp +../../modules/server/cpp-conf tmp +cat >>tmp/conf/httpd.conf <<EOF +# Configure SCA Composite +SCAContribution `pwd`/ +SCAComposite store.composite + +EOF + +../../components/cache/memcached-start +../../modules/http/httpd-start tmp diff --git a/sandbox/sebastien/cpp/apr-2/samples/store-cpp/start b/sandbox/sebastien/cpp/apr-2/samples/store-cpp/start new file mode 100755 index 0000000000..7b9c0d6379 --- /dev/null +++ b/sandbox/sebastien/cpp/apr-2/samples/store-cpp/start @@ -0,0 +1,31 @@ +#!/bin/sh + +# 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. + +../../modules/http/httpd-conf tmp localhost 8090 htdocs +../../modules/server/server-conf tmp +../../modules/server/cpp-conf tmp +cat >>tmp/conf/httpd.conf <<EOF +# Configure SCA Composite +SCAContribution `pwd`/ +SCAComposite store.composite + +EOF + +../../components/cache/memcached-start +../../modules/http/httpd-start tmp diff --git a/sandbox/sebastien/cpp/apr-2/samples/store-cpp/stop b/sandbox/sebastien/cpp/apr-2/samples/store-cpp/stop new file mode 100755 index 0000000000..a59273b8ed --- /dev/null +++ b/sandbox/sebastien/cpp/apr-2/samples/store-cpp/stop @@ -0,0 +1,21 @@ +#!/bin/sh + +# 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. + +../../modules/http/httpd-stop tmp +../../components/cache/memcached-stop diff --git a/sandbox/sebastien/cpp/apr-2/samples/store-cpp/store.composite b/sandbox/sebastien/cpp/apr-2/samples/store-cpp/store.composite new file mode 100644 index 0000000000..8b5edede99 --- /dev/null +++ b/sandbox/sebastien/cpp/apr-2/samples/store-cpp/store.composite @@ -0,0 +1,70 @@ +<?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:t="http://tuscany.apache.org/xmlns/sca/1.1" + targetNamespace="http://store" + name="store"> + + <component name="Store"> + <t:implementation.widget location="store.html"/> + <service name="Widget"> + <t: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.cpp path="." library="libfruits-catalog"/> + <property name="currencyCode">USD</property> + <service name="Catalog"> + <t:binding.jsonrpc uri="catalog"/> + </service> + <reference name="currencyConverter" target="CurrencyConverter"/> + </component> + + <component name="ShoppingCart"> + <implementation.cpp path="." library="libshopping-cart"/> + <service name="ShoppingCart"> + <t:binding.atom uri="shoppingCart"/> + </service> + <service name="Total"> + <t:binding.jsonrpc uri="total"/> + </service> + <reference name="cache" target="Cache"/> + </component> + + <component name="CurrencyConverter"> + <implementation.cpp path="." library="libcurrency-converter"/> + <service name="CurrencyConverter"> + <t:binding.jsonrpc uri="currencyConverter"/> + </service> + </component> + + <component name="Cache"> + <implementation.cpp path="../../components/cache" library="libmemcache"/> + <service name="Cache"> + <t:binding.atom uri="cache"/> + </service> + <property name="servers">localhost:11211</property> + </component> + +</composite> |