You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by js...@apache.org on 2010/07/01 08:04:37 UTC

svn commit: r959521 - in /tuscany/sca-cpp/trunk: kernel/ modules/http/ modules/json/ modules/server/ modules/server/htdocs/js/ modules/wsgi/ samples/store-cpp/ samples/store-cpp/htdocs/ samples/store-gae/ samples/store-gae/htdocs/ samples/store-java/ s...

Author: jsdelfino
Date: Thu Jul  1 06:04:35 2010
New Revision: 959521

URL: http://svn.apache.org/viewvc?rev=959521&view=rev
Log:
Minimal support for implementation.widget, using simplified (and generic) JSONRPC and ATOMPub Javascript proxies. Minor changes to the server runtime to serve reference requests from widgets. Adjust and simplified samples using the widget support.

Added:
    tuscany/sca-cpp/trunk/modules/server/htdocs/js/
    tuscany/sca-cpp/trunk/modules/server/htdocs/js/tuscany-ref.js
    tuscany/sca-cpp/trunk/xsd/tuscany-sca-1.1-implementation-widget.xsd
      - copied, changed from r958437, tuscany/sca-cpp/trunk/xsd/tuscany-sca-1.1.xsd
Removed:
    tuscany/sca-cpp/trunk/samples/store-cpp/htdocs/store.js
    tuscany/sca-cpp/trunk/samples/store-gae/htdocs/store.js
    tuscany/sca-cpp/trunk/samples/store-java/htdocs/store.js
    tuscany/sca-cpp/trunk/samples/store-nosql/htdocs/store.js
    tuscany/sca-cpp/trunk/samples/store-python/htdocs/store.js
    tuscany/sca-cpp/trunk/samples/store-scheme/htdocs/store.js
    tuscany/sca-cpp/trunk/samples/store-sql/htdocs/store.js
Modified:
    tuscany/sca-cpp/trunk/kernel/string.hpp
    tuscany/sca-cpp/trunk/modules/http/httpd-conf
    tuscany/sca-cpp/trunk/modules/json/json-test.cpp
    tuscany/sca-cpp/trunk/modules/server/Makefile.am
    tuscany/sca-cpp/trunk/modules/server/mod-eval.hpp
    tuscany/sca-cpp/trunk/modules/server/mod-wiring.cpp
    tuscany/sca-cpp/trunk/modules/server/server-conf
    tuscany/sca-cpp/trunk/modules/wsgi/scdl.py
    tuscany/sca-cpp/trunk/samples/store-cpp/Makefile.am
    tuscany/sca-cpp/trunk/samples/store-cpp/fruits-catalog.cpp
    tuscany/sca-cpp/trunk/samples/store-cpp/htdocs/store.html
    tuscany/sca-cpp/trunk/samples/store-cpp/shopping-cart.cpp
    tuscany/sca-cpp/trunk/samples/store-cpp/store.composite
    tuscany/sca-cpp/trunk/samples/store-gae/Makefile.am
    tuscany/sca-cpp/trunk/samples/store-gae/domain-single.composite
    tuscany/sca-cpp/trunk/samples/store-gae/domain.composite
    tuscany/sca-cpp/trunk/samples/store-gae/fruits-catalog.py
    tuscany/sca-cpp/trunk/samples/store-gae/htdocs/store.html
    tuscany/sca-cpp/trunk/samples/store-gae/shopping-cart.py
    tuscany/sca-cpp/trunk/samples/store-gae/store.py
    tuscany/sca-cpp/trunk/samples/store-java/Makefile.am
    tuscany/sca-cpp/trunk/samples/store-java/htdocs/store.html
    tuscany/sca-cpp/trunk/samples/store-java/store.composite
    tuscany/sca-cpp/trunk/samples/store-java/store/FruitsCatalogImpl.java
    tuscany/sca-cpp/trunk/samples/store-java/store/ShoppingCartImpl.java
    tuscany/sca-cpp/trunk/samples/store-nosql/Makefile.am
    tuscany/sca-cpp/trunk/samples/store-nosql/fruits-catalog.scm
    tuscany/sca-cpp/trunk/samples/store-nosql/htdocs/store.html
    tuscany/sca-cpp/trunk/samples/store-nosql/shopping-cart.scm
    tuscany/sca-cpp/trunk/samples/store-nosql/store.composite
    tuscany/sca-cpp/trunk/samples/store-nosql/store.scm
    tuscany/sca-cpp/trunk/samples/store-python/Makefile.am
    tuscany/sca-cpp/trunk/samples/store-python/fruits-catalog.py
    tuscany/sca-cpp/trunk/samples/store-python/htdocs/store.html
    tuscany/sca-cpp/trunk/samples/store-python/shopping-cart.py
    tuscany/sca-cpp/trunk/samples/store-python/store.py
    tuscany/sca-cpp/trunk/samples/store-scheme/Makefile.am
    tuscany/sca-cpp/trunk/samples/store-scheme/fruits-catalog.scm
    tuscany/sca-cpp/trunk/samples/store-scheme/htdocs/store.html
    tuscany/sca-cpp/trunk/samples/store-scheme/script-test.scm
    tuscany/sca-cpp/trunk/samples/store-scheme/shopping-cart.scm
    tuscany/sca-cpp/trunk/samples/store-scheme/store.composite
    tuscany/sca-cpp/trunk/samples/store-scheme/store.scm
    tuscany/sca-cpp/trunk/samples/store-sql/Makefile.am
    tuscany/sca-cpp/trunk/samples/store-sql/fruits-catalog.scm
    tuscany/sca-cpp/trunk/samples/store-sql/htdocs/store.html
    tuscany/sca-cpp/trunk/samples/store-sql/shopping-cart.scm
    tuscany/sca-cpp/trunk/samples/store-sql/store.composite
    tuscany/sca-cpp/trunk/samples/store-sql/store.scm
    tuscany/sca-cpp/trunk/xsd/tuscany-sca-1.1.xsd

Modified: tuscany/sca-cpp/trunk/kernel/string.hpp
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/kernel/string.hpp?rev=959521&r1=959520&r2=959521&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/kernel/string.hpp (original)
+++ tuscany/sca-cpp/trunk/kernel/string.hpp Thu Jul  1 06:04:35 2010
@@ -241,6 +241,9 @@ const int find(const string& s1, const c
     return find(s1, s2, 0);
 }
 
+/**
+ * Return true if string s1 contains s2.
+ */
 const bool contains(const string& s1, const char* s2) {
     return find(s1, s2) != length(s1);
 }
@@ -253,6 +256,17 @@ const int find_first_of(const string& s1
 }
 
 /**
+ * Find the first occurence of a character in a string.
+ */
+const int find(const string& s, const char c) {
+    const char* cs = c_str(s);
+    const char* f = strchr(cs, c);
+    if (f == NULL)
+        return length(s);
+    return f - cs;
+}
+
+/**
  * Find the last occurence of a character in a string.
  */
 const int find_last(const string& s, const char c) {

Modified: tuscany/sca-cpp/trunk/modules/http/httpd-conf
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/modules/http/httpd-conf?rev=959521&r1=959520&r2=959521&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/modules/http/httpd-conf (original)
+++ tuscany/sca-cpp/trunk/modules/http/httpd-conf Thu Jul  1 06:04:35 2010
@@ -38,6 +38,7 @@ ServerName $host
 PidFile $root/logs/httpd.pid
 
 # Minimal set of modules
+LoadModule alias_module ${modules_prefix}/modules/mod_alias.so
 LoadModule authn_file_module ${modules_prefix}/modules/mod_authn_file.so
 LoadModule authn_default_module ${modules_prefix}/modules/mod_authn_default.so
 LoadModule authz_host_module ${modules_prefix}/modules/mod_authz_host.so

Modified: tuscany/sca-cpp/trunk/modules/json/json-test.cpp
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/modules/json/json-test.cpp?rev=959521&r1=959520&r2=959521&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/modules/json/json-test.cpp (original)
+++ tuscany/sca-cpp/trunk/modules/json/json-test.cpp Thu Jul  1 06:04:35 2010
@@ -93,11 +93,11 @@ bool testJSON() {
 bool testJSONRPC() {
     JSONContext cx;
     {
-        const string lm("{\"id\": 1, \"method\": \"system.listMethods\", \"params\": []}");
+        const string lm("{\"id\": 1, \"method\": \"test\", \"params\": []}");
         const list<value> e = content(readJSON(mklist(lm), cx));
         const list<value> v = elementsToValues(e);
         assert(assoc<value>("id", v) == mklist<value>("id", 1));
-        assert(assoc<value>("method", v) == mklist<value>("method", string("system.listMethods")));
+        assert(assoc<value>("method", v) == mklist<value>("method", string("test")));
         assert(assoc<value>("params", v) == mklist<value>("params", list<value>()));
     }
     {

Modified: tuscany/sca-cpp/trunk/modules/server/Makefile.am
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/modules/server/Makefile.am?rev=959521&r1=959520&r2=959521&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/modules/server/Makefile.am (original)
+++ tuscany/sca-cpp/trunk/modules/server/Makefile.am Thu Jul  1 06:04:35 2010
@@ -23,7 +23,7 @@ incldir = $(prefix)/include/modules/serv
 dist_mod_SCRIPTS = cpp-conf scheme-conf server-conf
 moddir = $(prefix)/modules/server
 
-EXTRA_DIST = domain-test.composite client-test.scm server-test.scm htdocs/*.xml htdocs/*.txt htdocs/*.html
+EXTRA_DIST = domain-test.composite client-test.scm server-test.scm htdocs/*.xml htdocs/*.txt htdocs/*.html htdocs/js/*.js
 
 mod_LTLIBRARIES = libmod_tuscany_eval.la libmod_tuscany_wiring.la
 noinst_DATA = libmod_tuscany_eval.so libmod_tuscany_wiring.so

Added: tuscany/sca-cpp/trunk/modules/server/htdocs/js/tuscany-ref.js
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/modules/server/htdocs/js/tuscany-ref.js?rev=959521&view=auto
==============================================================================
--- tuscany/sca-cpp/trunk/modules/server/htdocs/js/tuscany-ref.js (added)
+++ tuscany/sca-cpp/trunk/modules/server/htdocs/js/tuscany-ref.js Thu Jul  1 06:04:35 2010
@@ -0,0 +1,553 @@
+/*
+ * 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.    
+ *
+ * The JSON-RPC client code is based on Jan-Klaas' JavaScript
+ * o lait library (jsolait).
+ *
+ * $Id: jsonrpc.js,v 1.36.2.3 2006/03/08 15:09:37 mclark Exp $
+ *
+ * Copyright (c) 2003-2004 Jan-Klaas Kollhof
+ * Copyright (c) 2005 Michael Clark, Metaparadigm Pte Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License").
+ */
+
+/**
+ * Escape a character.
+ */
+function escapeJSONChar(c) {
+    if(c == "\"" || c == "\\") return "\\" + c;
+    else if (c == "\b") return "\\b";
+    else if (c == "\f") return "\\f";
+    else if (c == "\n") return "\\n";
+    else if (c == "\r") return "\\r";
+    else if (c == "\t") return "\\t";
+    var hex = c.charCodeAt(0).toString(16);
+    if(hex.length == 1) return "\\u000" + hex;
+    else if(hex.length == 2) return "\\u00" + hex;
+    else if(hex.length == 3) return "\\u0" + hex;
+    else return "\\u" + hex;
+}
+
+/**
+ * Encode a string into JSON format.
+ */
+function escapeJSONString(s) {
+    /* The following should suffice but Safari's regex is broken
+       (doesn't support callback substitutions)
+       return "\"" + s.replace(/([^\u0020-\u007f]|[\\\"])/g,
+       escapeJSONChar) + "\"";
+    */
+
+    /* Rather inefficient way to do it */
+    var parts = s.split("");
+    for(var i = 0; i < parts.length; i++) {
+    var c = parts[i];
+    if(c == '"' ||
+       c == '\\' ||
+       c.charCodeAt(0) < 32 ||
+       c.charCodeAt(0) >= 128)
+        parts[i] = escapeJSONChar(parts[i]);
+    }
+    return "\"" + parts.join("") + "\"";
+}
+
+/**
+ * Marshall objects to JSON format.
+ */
+function toJSON(o) {
+    if(o == null) {
+        return "null";
+    } else if(o.constructor == String) {
+        return escapeJSONString(o);
+    } else if(o.constructor == Number) {
+        return o.toString();
+    } else if(o.constructor == Boolean) {
+        return o.toString();
+    } else if(o.constructor == Date) {
+        return '{javaClass: "java.util.Date", time: ' + o.valueOf() +'}';
+    } else if(o.constructor == Array) {
+        var v = [];
+        for(var i = 0; i < o.length; i++) v.push(toJSON(o[i]));
+        return "[" + v.join(", ") + "]";
+    } else {
+        var v = [];
+        for(attr in o) {
+            if(o[attr] == null) v.push("\"" + attr + "\": null");
+            else if(typeof o[attr] == "function"); /* skip */
+            else v.push(escapeJSONString(attr) + ": " + toJSON(o[attr]));
+        }
+        return "{" + v.join(", ") + "}";
+    }
+}
+
+/**
+ * HTTPBindingClient.Exception
+ */
+HTTPBindingClient.Exception = function(code, message, javaStack) {
+    this.code = code;
+    var name;
+    if(javaStack) {
+        this.javaStack = javaStack;
+        var m = javaStack.match(/^([^:]*)/);
+        if(m) name = m[0];
+    }
+    if(name) this.name = name;
+    else this.name = "HTTPBindingClientException";
+    this.message = message;
+};
+
+HTTPBindingClient.Exception.CODE_REMOTE_EXCEPTION = 490;
+HTTPBindingClient.Exception.CODE_ERR_CLIENT = 550;
+HTTPBindingClient.Exception.CODE_ERR_PARSE = 590;
+HTTPBindingClient.Exception.CODE_ERR_NOMETHOD = 591;
+HTTPBindingClient.Exception.CODE_ERR_UNMARSHALL = 592;
+HTTPBindingClient.Exception.CODE_ERR_MARSHALL = 593;
+
+HTTPBindingClient.Exception.prototype = new Error();
+HTTPBindingClient.Exception.prototype.toString = function(code, msg)
+{
+    return this.name + ": " + this.message;
+};
+
+/**
+ * Default top level exception handler
+ */
+HTTPBindingClient.default_ex_handler = function(e) { alert(e); };
+
+
+/**
+ * Client settable variables
+ */
+HTTPBindingClient.toplevel_ex_handler = HTTPBindingClient.default_ex_handler;
+HTTPBindingClient.profile_async = false;
+HTTPBindingClient.max_req_active = 1;
+HTTPBindingClient.requestId = 1;
+
+
+/**
+ * HTTPBindingClient implementation
+ */
+HTTPBindingClient.prototype._createApplyMethod = function() {
+    var fn = function() {
+        var args = [];
+        var callback = null;
+        var methodName = arguments[0];
+        for(var i = 1; i < arguments.length; i++) args.push(arguments[i]);
+
+        if(typeof args[args.length - 1] == "function") callback = args.pop();
+
+        var req = fn.client._makeRequest.call(fn.client, methodName, args, callback);
+        if(callback == null) {
+            return fn.client._sendRequest.call(fn.client, req);
+        } else {
+            HTTPBindingClient.async_requests.push(req);
+            HTTPBindingClient.kick_async();
+            return req.requestId;
+        }
+    };
+    fn.client = this;
+    return fn;
+};
+
+HTTPBindingClient._getCharsetFromHeaders = function(http) {
+    try {
+        var contentType = http.getResponseHeader("Content-type");
+        var parts = contentType.split(/\s*;\s*/);
+        for(var i = 0; i < parts.length; i++) {
+            if(parts[i].substring(0, 8) == "charset=")
+                return parts[i].substring(8, parts[i].length);
+        }
+    } catch (e) {}
+    return "UTF-8";
+};
+
+/**
+ * Async queue globals
+ */
+HTTPBindingClient.async_requests = [];
+HTTPBindingClient.async_inflight = {};
+HTTPBindingClient.async_responses = [];
+HTTPBindingClient.async_timeout = null;
+HTTPBindingClient.num_req_active = 0;
+
+HTTPBindingClient._async_handler = function() {
+    HTTPBindingClient.async_timeout = null;
+
+    while(HTTPBindingClient.async_responses.length > 0) {
+        var res = HTTPBindingClient.async_responses.shift();
+        if(res.canceled) continue;
+        if(res.profile) res.profile.dispatch = new Date();
+        try {
+            res.cb(res.result, res.ex, res.profile);
+        } catch(e) {
+            HTTPBindingClient.toplevel_ex_handler(e);
+        }
+    }
+
+    while(HTTPBindingClient.async_requests.length > 0 && HTTPBindingClient.num_req_active < HTTPBindingClient.max_req_active) {
+        var req = HTTPBindingClient.async_requests.shift();
+        if(req.canceled) continue;
+        req.client._sendRequest.call(req.client, req);
+    }
+};
+
+HTTPBindingClient.kick_async = function() {
+    if(HTTPBindingClient.async_timeout == null)
+        HTTPBindingClient.async_timeout = setTimeout(HTTPBindingClient._async_handler, 0);
+};
+
+HTTPBindingClient.cancelRequest = function(requestId) {
+    /* If it is in flight then mark it as canceled in the inflight map
+       and the XMLHttpRequest callback will discard the reply. */
+    if(HTTPBindingClient.async_inflight[requestId]) {
+        HTTPBindingClient.async_inflight[requestId].canceled = true;
+        return true;
+    }
+
+    /* If its not in flight yet then we can just mark it as canceled in
+       the the request queue and it will get discarded before being sent. */
+    for(var i in HTTPBindingClient.async_requests) {
+        if(HTTPBindingClient.async_requests[i].requestId == requestId) {
+            HTTPBindingClient.async_requests[i].canceled = true;
+            return true;
+        }
+    }
+
+    /* It may have returned from the network and be waiting for its callback
+       to be dispatched, so mark it as canceled in the response queue
+       and the response will get discarded before calling the callback. */
+    for(var i in HTTPBindingClient.async_responses) {
+        if(HTTPBindingClient.async_responses[i].requestId == requestId) {
+            HTTPBindingClient.async_responses[i].canceled = true;
+            return true;
+        }
+    }
+
+    return false;
+};
+
+HTTPBindingClient.prototype._makeRequest = function(methodName, args, cb) {
+    var req = {};
+    req.client = this;
+    req.requestId = HTTPBindingClient.requestId++;
+
+    var obj = {};
+    obj.id = req.requestId;
+    if (this.objectID)
+        obj.method = ".obj#" + this.objectID + "." + methodName;
+    else
+        obj.method = methodName;
+    obj.params = args;
+
+    if (cb) req.cb = cb;
+    if (HTTPBindingClient.profile_async)
+        req.profile = { "submit": new Date() };
+    req.data = toJSON(obj);
+
+    return req;
+};
+
+HTTPBindingClient.prototype._sendRequest = function(req) {
+    if(req.profile) req.profile.start = new Date();
+
+    /* Get free http object from the pool */
+    var http = HTTPBindingClient.poolGetHTTPRequest();
+    HTTPBindingClient.num_req_active++;
+
+    /* Send the request */
+    http.open("POST", this.uri, (req.cb != null));
+
+    /* setRequestHeader is missing in Opera 8 Beta */
+    try {
+        http.setRequestHeader("Content-type", "text/plain");
+    } catch(e) {}
+
+    /* Construct call back if we have one */
+    if(req.cb) {
+        var self = this;
+        http.onreadystatechange = function() {
+            if(http.readyState == 4) {
+                http.onreadystatechange = function () {};
+                var res = { "cb": req.cb, "result": null, "ex": null};
+                if (req.profile) {
+                    res.profile = req.profile;
+                    res.profile.end = new Date();
+                }
+                try { res.result = self._handleResponse(http); }
+                catch(e) { res.ex = e; }
+                if(!HTTPBindingClient.async_inflight[req.requestId].canceled)
+                    HTTPBindingClient.async_responses.push(res);
+                delete HTTPBindingClient.async_inflight[req.requestId];
+                HTTPBindingClient.kick_async();
+            }
+        };
+    } else {
+        http.onreadystatechange = function() {};
+    }
+
+    HTTPBindingClient.async_inflight[req.requestId] = req;
+    
+    try {
+        http.send(req.data);
+    } catch(e) {
+        HTTPBindingClient.poolReturnHTTPRequest(http);
+        HTTPBindingClient.num_req_active--;
+        throw new HTTPBindingClient.Exception(HTTPBindingClient.Exception.CODE_ERR_CLIENT, "Connection failed");
+    }
+
+    if(!req.cb) return this._handleResponse(http);
+};
+
+HTTPBindingClient.prototype._handleResponse = function(http) {
+    /* Get the charset */
+    if(!this.charset) {
+        this.charset = HTTPBindingClient._getCharsetFromHeaders(http);
+    }
+
+    /* Get request results */
+    var status, statusText, data;
+    try {
+        status = http.status;
+        statusText = http.statusText;
+        data = http.responseText;
+    } catch(e) {
+        HTTPBindingClient.poolReturnHTTPRequest(http);
+        HTTPBindingClient.num_req_active--;
+        HTTPBindingClient.kick_async();
+        throw new HTTPBindingClient.Exception(HTTPBindingClient.Exception.CODE_ERR_CLIENT, "Connection failed");
+    }
+
+    /* Return http object to the pool; */
+    HTTPBindingClient.poolReturnHTTPRequest(http);
+    HTTPBindingClient.num_req_active--;
+
+    /* Unmarshall the response */
+    if(status != 200) {
+        throw new HTTPBindingClient.Exception(status, statusText);
+    }
+    var obj;
+    try {
+        eval("obj = " + data);
+    } catch(e) {
+        throw new HTTPBindingClient.Exception(550, "error parsing result");
+    }
+    if(obj.error)
+        throw new HTTPBindingClient.Exception(obj.error.code, obj.error.msg, obj.error.trace);
+    var res = obj.result;
+
+    /* Handle CallableProxy */
+    if(res && res.objectID && res.JSONRPCType == "CallableReference")
+        return new HTTPBindingClient(this.uri, res.objectID);
+
+    return res;
+};
+
+
+/**
+ * XMLHttpRequest wrapper code
+ */
+HTTPBindingClient.http_spare = [];
+HTTPBindingClient.http_max_spare = 8;
+
+HTTPBindingClient.poolGetHTTPRequest = function() {
+    if(HTTPBindingClient.http_spare.length > 0) {
+        return HTTPBindingClient.http_spare.pop();
+    }
+    return HTTPBindingClient.getHTTPRequest();
+};
+
+HTTPBindingClient.poolReturnHTTPRequest = function(http) {
+    if(HTTPBindingClient.http_spare.length >= HTTPBindingClient.http_max_spare)
+        delete http;
+    else
+        HTTPBindingClient.http_spare.push(http);
+};
+
+HTTPBindingClient.msxmlNames = [ "MSXML2.XMLHTTP.5.0",
+                 "MSXML2.XMLHTTP.4.0",
+                 "MSXML2.XMLHTTP.3.0",
+                 "MSXML2.XMLHTTP",
+                 "Microsoft.XMLHTTP" ];
+
+HTTPBindingClient.getHTTPRequest = function() {
+    /* Mozilla XMLHttpRequest */
+    try {
+        HTTPBindingClient.httpObjectName = "XMLHttpRequest";
+        return new XMLHttpRequest();
+    } catch(e) {}
+
+    /* Microsoft MSXML ActiveX */
+    for (var i=0; i < HTTPBindingClient.msxmlNames.length; i++) {
+        try {
+            HTTPBindingClient.httpObjectName = HTTPBindingClient.msxmlNames[i];
+            return new ActiveXObject(HTTPBindingClient.msxmlNames[i]);
+        } catch (e) {}
+    }
+
+    /* None found */
+    HTTPBindingClient.httpObjectName = null;
+    throw new HTTPBindingClient.Exception(0, "Can't create XMLHttpRequest object");
+};
+
+
+HTTPBindingClient.prototype.get = function(id, responseFunction) {
+    var xhr = this.createXMLHttpRequest();
+    xhr.onreadystatechange = function() {
+        if (xhr.readyState == 4) {
+            if (xhr.status == 200) {
+                var strDocument = xhr.responseText;
+                var xmlDocument = xhr.responseXML;
+                if(!xmlDocument || xmlDocument.childNodes.length==0){ 
+                    xmlDocument = (new DOMParser()).parseFromString(strDocument, "text/xml");
+                } 
+                if (responseFunction != null) responseFunction(xmlDocument);
+            } else {
+                alert("get - Error getting data from the server");
+            }
+        }
+    }
+    xhr.open("GET", this.uri + '/' + id, true);
+    xhr.send(null);
+}    
+
+HTTPBindingClient.prototype.post = function (entry, responseFunction) {
+    var xhr = this.createXMLHttpRequest();
+    xhr.onreadystatechange = function() {
+        if (xhr.readyState == 4) {
+            if (xhr.status == 201) {
+                var strDocument = xhr.responseText;
+                var xmlDocument = xhr.responseXML;
+                if(!xmlDocument || xmlDocument.childNodes.length==0){ 
+                    xmlDocument = (new DOMParser()).parseFromString(strDocument, "text/xml");
+                } 
+                if (responseFunction != null) responseFunction(xmlDocument);
+            } else {
+                alert("post - Error getting data from the server");
+            }
+        }
+    }
+    xhr.open("POST", this.uri, true);
+    xhr.setRequestHeader("Content-Type", "application/atom+xml");
+    xhr.send(entry);
+}    
+
+HTTPBindingClient.prototype.put = function (id, entry, responseFunction) {
+    var xhr = this.createXMLHttpRequest();
+    xhr.onreadystatechange = function() {
+        if (xhr.readyState == 4) {
+            if (xhr.status == 200) {
+                var strDocument = xhr.responseText;
+                var xmlDocument = xhr.responseXML;
+                if(!xmlDocument || xmlDocument.childNodes.length==0){ 
+                    xmlDocument = (new DOMParser()).parseFromString(strDocument, "text/xml");
+                } 
+                if (responseFunction != null) responseFunction(xmlDocument);
+            } else {
+                alert("put - Error getting data from the server");
+            }
+        }
+    }
+    xhr.open("PUT", this.uri + '/' + id, true);
+    xhr.setRequestHeader("Content-Type", "application/atom+xml");
+    xhr.send(entry);
+}    
+
+HTTPBindingClient.prototype.del = function (id, responseFunction) {       
+    var xhr = this.createXMLHttpRequest();
+    xhr.onreadystatechange = function() {
+        if (xhr.readyState == 4) {
+            if (xhr.status == 200) {
+                if (responseFunction != null) responseFunction();
+            } else {
+                alert("delete - Error getting data from the server");
+            }
+        }
+    }
+    xhr.open("DELETE", this.uri + '/' + id, true);        
+    xhr.send(null);
+}
+
+HTTPBindingClient.prototype.createXMLHttpRequest = function () {
+    /* Mozilla XMLHttpRequest */
+    try { return new XMLHttpRequest(); } catch(e) {}      
+    
+    /* Microsoft MSXML ActiveX */
+    for (var i = 0; i < HTTPBindingClient.msxmlNames.length; i++) {
+        try { return new ActiveXObject(HTTPBindingClient.msxmlNames[i]); } catch (e) {}
+    }
+    alert("XML http request not supported");
+    return null;
+}
+
+/**
+ * Create Tuscany namespace.
+ */
+var tuscany;
+if (!tuscany) 
+    tuscany = {}; 
+if (!tuscany.sca)
+    tuscany.sca = {}; 
+
+/**
+ * Configure component name
+ */
+tuscany.sca.componentName = "Default";
+
+tuscany.sca.Component = function(name) {
+    tuscany.sca.componentName = name;
+    return name
+}
+
+/**
+ * Construct an HTTPBindingClient.
+ */
+function HTTPBindingClient(cname, uri, objectID) {
+    this.uri = "/references/" + cname + "/" + uri;
+    this.objectID = objectID;
+    this.apply = this._createApplyMethod();
+
+    if (typeof DOMParser == "undefined") {
+       DOMParser = function () {}
+    
+       DOMParser.prototype.parseFromString = function (str, contentType) {
+          if (typeof ActiveXObject != "undefined") {
+             var d = new ActiveXObject("MSXML.DomDocument");
+             d.loadXML(str);
+             return d;
+          } else if (typeof XMLHttpRequest != "undefined") {
+             var req = new XMLHttpRequest;
+             req.open("GET", "data:" + (contentType || "application/xml") +
+                             ";charset=utf-8," + encodeURIComponent(str), false);
+             if (req.overrideMimeType) {
+                req.overrideMimeType(contentType);
+             }
+             req.send(null);
+             return req.responseXML;
+          }
+      }
+   }
+};
+
+/**
+ * Construct a reference proxy
+ */
+tuscany.sca.Reference = function(name) {
+    return new HTTPBindingClient(tuscany.sca.componentName, name);
+}
+

Modified: tuscany/sca-cpp/trunk/modules/server/mod-eval.hpp
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/modules/server/mod-eval.hpp?rev=959521&r1=959520&r2=959521&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/modules/server/mod-eval.hpp (original)
+++ tuscany/sca-cpp/trunk/modules/server/mod-eval.hpp Thu Jul  1 06:04:35 2010
@@ -358,6 +358,22 @@ const list<value> propProxies(const list
 /**
  * Evaluate a component and convert it to an applicable lambda function.
  */
+struct implementationFailure {
+    const value reason;
+    implementationFailure(const value& r) : reason(r) {
+    }
+
+    // Default implementation representing an implementation that
+    // couldn't be evaluated. Report the evaluation error on all
+    // subsequent calls expect start/stop.
+    const value operator()(unused const list<value>& params) const {
+        const value func = car(params);
+        if (func == "start" || func == "stop")
+            return mklist<value>(lambda<value(const list<value>&)>());
+        return mklist<value>(value(), reason);
+    }
+};
+
 const value evalComponent(ServerConf& sc, server_rec& server, const value& comp) {
     extern const failable<lambda<value(const list<value>&)> > evalImplementation(const string& cpath, const value& impl, const list<value>& px, const lambda<value(const list<value>&)>& lifecycle);
 
@@ -380,7 +396,7 @@ const value evalComponent(ServerConf& sc
     // Evaluate the component implementation and convert it to an applicable lambda function
     const failable<lambda<value(const list<value>&)> > cimpl(evalImplementation(sc.contributionPath, impl, append(rpx, ppx), sc.lifecycle));
     if (!hasContent(cimpl))
-        return reason(cimpl);
+        return lambda<value(const list<value>&)>(implementationFailure(reason(cimpl)));
     return content(cimpl);
 }
 

Modified: tuscany/sca-cpp/trunk/modules/server/mod-wiring.cpp
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/modules/server/mod-wiring.cpp?rev=959521&r1=959520&r2=959521&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/modules/server/mod-wiring.cpp (original)
+++ tuscany/sca-cpp/trunk/modules/server/mod-wiring.cpp Thu Jul  1 06:04:35 2010
@@ -107,7 +107,7 @@ int translateReference(request_rec *r) {
     }
 
     // Route to a relative target URI using a local internal redirect
-    r->filename = apr_pstrdup(r->pool, c_str(string("/redirect:/components/") + target));
+    r->filename = apr_pstrdup(r->pool, c_str(string("/redirect:/components/") + substr(target, 0, find(target, '/'))));
     r->handler = "mod_tuscany_wiring";
     return OK;
 }

Modified: tuscany/sca-cpp/trunk/modules/server/server-conf
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/modules/server/server-conf?rev=959521&r1=959520&r2=959521&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/modules/server/server-conf (original)
+++ tuscany/sca-cpp/trunk/modules/server/server-conf Thu Jul  1 06:04:35 2010
@@ -23,6 +23,7 @@ root=`readlink -f $1`
 
 host=`cat $root/conf/httpd.conf | grep ServerName | awk '{ print $2 }'`
 port=`cat $root/conf/httpd.conf | grep Listen | tail -1 | awk '{ print $2 }'`
+
 ssl=`cat $root/conf/httpd.conf | grep "SSLEngine" | awk '{ print $2 }'`
 if [ "$ssl" = "on" ]; then
     protocol="https"
@@ -44,4 +45,7 @@ cat >>$root/conf/httpd.conf <<EOF
 LoadModule mod_tuscany_wiring $here/libmod_tuscany_wiring.so
 SCAWiringServerName $protocol://$host:$port
 
+Alias /js/tuscany-ref.js $here/htdocs/js/tuscany-ref.js
+
 EOF
+

Modified: tuscany/sca-cpp/trunk/modules/wsgi/scdl.py
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/modules/wsgi/scdl.py?rev=959521&r1=959520&r2=959521&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/modules/wsgi/scdl.py (original)
+++ tuscany/sca-cpp/trunk/modules/wsgi/scdl.py Thu Jul  1 06:04:35 2010
@@ -18,6 +18,7 @@
 # SCDL parsing functions
 
 from xml.etree.cElementTree import iterparse
+from sys import stderr
 from util import *
 from httputil import *
 
@@ -86,8 +87,8 @@ def references(e):
     if match(car(e), "start", "reference") == False:
         return references(cdr(e))
     if "target" in att(car(e)):
-        return cons(car(tokens(att(car(e))["target"])), references(cdr(e)))
-    return cons(binding(e), references(cdr(e)))
+        return cons((att(car(e))["name"], car(tokens(att(car(e))["target"]))), references(cdr(e)))
+    return cons((att(car(e))["name"], binding(e)), references(cdr(e)))
 
 # Return the list of properties under a SCDL component element
 def properties(e):
@@ -116,7 +117,7 @@ def components(e):
     if match(car(e), "start", "component") == False:
         return components(cdr(e))
     n = name(e)
-    return cons(mkcomponent(n, implementation(e), cons(("components", n), services(e)), references(e), properties(e)), components(cdr(e)))
+    return cons(mkcomponent(n, implementation(e), services(e), references(e), properties(e)), components(cdr(e)))
 
 # Find a component with a given name
 def nameToComponent(name, comps):
@@ -136,28 +137,80 @@ def matchingURI(u, svcs):
 
 # Return the (service URI, component) pair matching a given URI
 def uriToComponent(u, comps):
+    if car(u) == "components":
+        return componentURIToComponent(u, comps)
+    if car(u) == "references":
+        return referenceURIToComponent(u, comps)
+    return serviceURIToComponent(u, comps)
+
+def serviceURIToComponent(u, comps):
     if comps == ():
         return (None, None)
     m = matchingURI(u, car(comps).svcs)
     if m != None:
         return (m, car(comps))
-    return uriToComponent(u, cdr(comps))
+    return serviceURIToComponent(u, cdr(comps))
+
+def componentURIToComponent(u, comps):
+    comp = nameToComponent(cadr(u), comps)
+    if comps == None:
+        return (None, None)
+    return (u[0:2], comp)
+
+def referenceURIToComponent(u, comps):
+    sc = nameToComponent(cadr(u), comps)
+    if sc == None:
+        return (None, None)
+    
+    def referenceToComponent(r, refs):
+        if refs == ():
+            return None
+        if r == car(car(refs)):
+            return cadr(car(refs))
+        return referenceToComponent(r, cdr(refs))
+
+    tn = referenceToComponent(caddr(u), sc.refs)
+    if tn == None:
+        return (None, None)
+    tc = nameToComponent(tn, comps)
+    if tc == None:
+        return (None, None)
+    return (u[0:3], tc)
 
 # Evaluate a reference, return a proxy to the resolved component or an
 # HTTP client configured with the reference target uri
 def evalReference(r, comps):
-    if r.startswith("http://") or r.startswith("https://"):
-        return mkclient(r)
-    return nameToComponent(r, comps)
+    t = cadr(r)
+    if t.startswith("http://") or t.startswith("https://"):
+        return mkclient(t)
+    return nameToComponent(t, comps)
+
+# Evaluate a property, return a lambda function returning the property
+# value. The user and email properties are configured with the values
+# from the HTTP request, if any
+def evalProperty(p):
+    if (isTaggedList(p, "user")):
+        return lambda: userProperty(cadr(p))
+    if (isTaggedList(p, "email")):
+        return lambda: emailProperty(cadr(p))
+    return lambda: p
+
+def userProperty(v):
+    return "nobody"
+
+def emailProperty(v):
+    return "nobody@nowhere.com"
 
-# Evaluate a component, resolve its implementation and references
+# Evaluate a component, resolve its implementation, references and
+# properties
 def evalComponent(comp, comps):
     comp.mod = __import__(comp.impl)
 
     # Make a list of proxy lambda functions for the component references and properties
     # A reference proxy is the callable lambda function of the component wired to the reference
     # A property proxy is a lambda function that returns the value of the property
-    comp.proxies = tuple(map(lambda r: evalReference(r, comps), comp.refs)) + tuple(map(lambda v: lambda: v, comp.props))
+    print >> stderr, "evalComponent", comp.impl, comp.svcs, comp.refs, comp.props
+    comp.proxies = tuple(map(lambda r: evalReference(r, comps), comp.refs)) + tuple(map(lambda p: evalProperty(p), comp.props))
 
     return comp
 

Modified: tuscany/sca-cpp/trunk/samples/store-cpp/Makefile.am
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/samples/store-cpp/Makefile.am?rev=959521&r1=959520&r2=959521&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/samples/store-cpp/Makefile.am (original)
+++ tuscany/sca-cpp/trunk/samples/store-cpp/Makefile.am Thu Jul  1 06:04:35 2010
@@ -19,7 +19,7 @@
 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/.htaccess htdocs/*.html htdocs/*.js
+nobase_dist_sample_DATA = currency-converter.cpp fruits-catalog.cpp shopping-cart.cpp store.composite htdocs/.htaccess htdocs/*.html
 
 sample_LTLIBRARIES = libcurrency-converter.la libfruits-catalog.la libshopping-cart.la
 

Modified: tuscany/sca-cpp/trunk/samples/store-cpp/fruits-catalog.cpp
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/samples/store-cpp/fruits-catalog.cpp?rev=959521&r1=959520&r2=959521&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/samples/store-cpp/fruits-catalog.cpp (original)
+++ tuscany/sca-cpp/trunk/samples/store-cpp/fruits-catalog.cpp Thu Jul  1 06:04:35 2010
@@ -50,7 +50,7 @@ const list<value> mkfruit(const string& 
         mklist<value>("javaClass", string("services.Item")) + mklist<value>("name", name) + mklist<value>("currencyCode", code) + mklist<value>("currencySymbol", symbol) + mklist<value>("price", price);
 }
 
-const failable<value> get(const lambda<value(const list<value>&)> converter, const lambda<value(const list<value>&)> currencyCode) {
+const failable<value> getcatalog(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));
@@ -61,13 +61,6 @@ const failable<value> get(const lambda<v
         mkfruit("Pear", currency, symbol, conv(1.55)));
 }
 
-/**
- * TODO remove this JSON-RPC specific function.
- */
-const failable<value> listMethods(unused const lambda<value(const list<value>&)> converter, unused const lambda<value(const list<value>&)> currencyCode) {
-    return value(mklist<value>(string("Service.get")));
-}
-
 }
 }
 
@@ -75,10 +68,8 @@ extern "C" {
 
 const tuscany::value apply(const tuscany::list<tuscany::value>& params) {
     const tuscany::value func(car(params));
-    if (func == "get")
-        return tuscany::store::get(cadr(params), caddr(params));
-    if (func == "listMethods")
-        return tuscany::store::listMethods(cadr(params), caddr(params));
+    if (func == "getcatalog")
+        return tuscany::store::getcatalog(cadr(params), caddr(params));
     return tuscany::mkfailure<tuscany::value>();
 }
 

Modified: tuscany/sca-cpp/trunk/samples/store-cpp/htdocs/store.html
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/samples/store-cpp/htdocs/store.html?rev=959521&r1=959520&r2=959521&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/samples/store-cpp/htdocs/store.html (original)
+++ tuscany/sca-cpp/trunk/samples/store-cpp/htdocs/store.html Thu Jul  1 06:04:35 2010
@@ -20,10 +20,12 @@
 <head>
 <title>Store</title>
 
-<script type="text/javascript" src="store.js"></script>
+<script type="text/javascript" src="/js/tuscany-ref.js"></script>
 
 <script language="JavaScript">
 
+    var component = new tuscany.sca.Component("Store");
+
 	//@Reference
 	var catalog = new tuscany.sca.Reference("catalog");
 	
@@ -35,7 +37,7 @@
 	
 	var catalogItems;
 
-	function catalog_getResponse(items,exception) {
+	function catalog_getcatalogResponse(items,exception) {
 		if(exception){
 			alert(exception.message);
 			return;
@@ -50,8 +52,7 @@
 		document.getElementById('catalog').innerHTML=catalog;
 		catalogItems = items;
 
-		// TEMP		
-		shoppingTotal.gettotal(shoppingTotal_getTotalResponse);
+		shoppingTotal.apply("gettotal", shoppingTotal_gettotalResponse);
 	}
 	
 	function shoppingCart_getResponse(feed) {
@@ -68,7 +69,7 @@
 
 			if (entries.length != 0) {			
 					try	{
-						shoppingTotal.gettotal(shoppingTotal_getTotalResponse);
+						shoppingTotal.apply("gettotal", shoppingTotal_gettotalResponse);
 					}
 					catch(e){
 						alert(e);
@@ -77,7 +78,7 @@
 		}
 	}
 	
-	function shoppingTotal_getTotalResponse(total,exception) {
+	function shoppingTotal_gettotalResponse(total,exception) {
 		if(exception) { 
 			alert(exception.message); 
 			return;
@@ -130,7 +131,7 @@
 	function init() {
 			
 			try	{
-				catalog.get(catalog_getResponse);
+				catalog.apply("getcatalog", catalog_getcatalogResponse);
 				shoppingCart.get("", shoppingCart_getResponse);
 			}
 			catch(e){

Modified: tuscany/sca-cpp/trunk/samples/store-cpp/shopping-cart.cpp
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/samples/store-cpp/shopping-cart.cpp?rev=959521&r1=959520&r2=959521&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/samples/store-cpp/shopping-cart.cpp (original)
+++ tuscany/sca-cpp/trunk/samples/store-cpp/shopping-cart.cpp Thu Jul  1 06:04:35 2010
@@ -122,13 +122,6 @@ const failable<value> gettotal(const lam
     return value(sum(cart));
 }
 
-/**
- * TODO remove this JSON-RPC specific function.
- */
-const failable<value> listMethods(unused const lambda<value(const list<value>&)> converter) {
-    return value(mklist<value>(string("Service.gettotal")));
-}
-
 }
 }
 
@@ -144,8 +137,6 @@ const tuscany::value apply(const tuscany
         return tuscany::store::del(cadr(params), caddr(params));
     if (func == "gettotal")
         return tuscany::store::gettotal(cadr(params));
-    if (func == "listMethods")
-        return tuscany::store::listMethods(cadr(params));
     return tuscany::mkfailure<tuscany::value>();
 }
 

Modified: tuscany/sca-cpp/trunk/samples/store-cpp/store.composite
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/samples/store-cpp/store.composite?rev=959521&r1=959520&r2=959521&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/samples/store-cpp/store.composite (original)
+++ tuscany/sca-cpp/trunk/samples/store-cpp/store.composite Thu Jul  1 06:04:35 2010
@@ -22,6 +22,16 @@
   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>

Modified: tuscany/sca-cpp/trunk/samples/store-gae/Makefile.am
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/samples/store-gae/Makefile.am?rev=959521&r1=959520&r2=959521&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/samples/store-gae/Makefile.am (original)
+++ tuscany/sca-cpp/trunk/samples/store-gae/Makefile.am Thu Jul  1 06:04:35 2010
@@ -22,18 +22,21 @@ dist_sample_SCRIPTS = start stop
 sampledir = $(prefix)/samples/store-gae
 
 BUILT_SOURCES = target.stamp 
-target.stamp: app.yaml *.py *.composite $(top_builddir)/modules/wsgi/*.py htdocs/*
+target.stamp: app.yaml *.py *.composite $(top_builddir)/modules/wsgi/*.py htdocs/* $(top_builddir)/modules/server/htdocs/js/*
 	mkdir -p target
 	cp app.yaml *.py *.composite `ls $(top_builddir)/modules/wsgi/*.py | grep -v "\-test"` target
-	cp -R htdocs target/htdocs
+	mkdir -p target/htdocs
+	cp -R htdocs/* target/htdocs
+	mkdir target/htdocs/js
+	cp -R $(top_builddir)/modules/server/htdocs/js/* target/htdocs/js
 	touch target.stamp
 
 clean-local:
 	rm -rf target.stamp target
 
-nobase_sample_DATA = target/app.yaml target/*.py target/*.composite target/htdocs/*.html target/htdocs/*.js
+nobase_sample_DATA = target/app.yaml target/*.py target/*.composite target/htdocs/*.html target/htdocs/js/*.js
 
-EXTRA_DIST = app.yaml *.composite *.py htdocs/*.html htdocs/*.js
+EXTRA_DIST = app.yaml *.composite *.py htdocs/*.html
 
 dist_noinst_SCRIPTS = server-test
 TESTS = server-test

Modified: tuscany/sca-cpp/trunk/samples/store-gae/domain-single.composite
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/samples/store-gae/domain-single.composite?rev=959521&r1=959520&r2=959521&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/samples/store-gae/domain-single.composite (original)
+++ tuscany/sca-cpp/trunk/samples/store-gae/domain-single.composite Thu Jul  1 06:04:35 2010
@@ -43,7 +43,7 @@
      
     <component name="ShoppingCart">
         <t:implementation.python script="shopping-cart.py"/>
-        <service name="ShoppingCart">
+        <service name="Cart">
             <t:binding.atom uri="shoppingCart"/>
         </service>        
         <service name="Total">

Modified: tuscany/sca-cpp/trunk/samples/store-gae/domain.composite
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/samples/store-gae/domain.composite?rev=959521&r1=959520&r2=959521&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/samples/store-gae/domain.composite (original)
+++ tuscany/sca-cpp/trunk/samples/store-gae/domain.composite Thu Jul  1 06:04:35 2010
@@ -43,7 +43,7 @@
      
     <component name="ShoppingCart">
         <t:implementation.python script="shopping-cart.py"/>
-        <service name="ShoppingCart">
+        <service name="Cart">
             <t:binding.atom uri="shoppingCart"/>
         </service>        
         <service name="Total">

Modified: tuscany/sca-cpp/trunk/samples/store-gae/fruits-catalog.py
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/samples/store-gae/fruits-catalog.py?rev=959521&r1=959520&r2=959521&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/samples/store-gae/fruits-catalog.py (original)
+++ tuscany/sca-cpp/trunk/samples/store-gae/fruits-catalog.py Thu Jul  1 06:04:35 2010
@@ -17,7 +17,7 @@
 
 # Catalog implementation
 
-def get(converter, currencyCode):
+def getcatalog(converter, currencyCode):
   code = currencyCode()
   def convert(price):
       return converter("convert", "USD", code, price)
@@ -28,7 +28,3 @@ def get(converter, currencyCode):
     (("'javaClass", "services.Item"), ("'name", "Pear"), ("'currencyCode", code), ("'currencySymbol", symbol), ("'price", convert(1.55)))
   )
 
-# TODO remove these JSON-RPC specific functions
-def listMethods(converter, currencyCode):
-    return ("Service.get",)
-

Modified: tuscany/sca-cpp/trunk/samples/store-gae/htdocs/store.html
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/samples/store-gae/htdocs/store.html?rev=959521&r1=959520&r2=959521&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/samples/store-gae/htdocs/store.html (original)
+++ tuscany/sca-cpp/trunk/samples/store-gae/htdocs/store.html Thu Jul  1 06:04:35 2010
@@ -20,10 +20,12 @@
 <head>
 <title>Store</title>
 
-<script type="text/javascript" src="store.js"></script>
+<script type="text/javascript" src="/js/tuscany-ref.js"></script>
 
 <script language="JavaScript">
 
+    var component = new tuscany.sca.Component("Store");
+
 	//@Reference
 	var catalog = new tuscany.sca.Reference("catalog");
 	
@@ -35,7 +37,7 @@
 	
 	var catalogItems;
 
-	function catalog_getResponse(items,exception) {
+	function catalog_getcatalogResponse(items,exception) {
 		if(exception){
 			alert(exception.message);
 			return;
@@ -50,8 +52,7 @@
 		document.getElementById('catalog').innerHTML=catalog;
 		catalogItems = items;
 
-		// TEMP		
-		shoppingTotal.gettotal(shoppingTotal_getTotalResponse);
+		shoppingTotal.apply("gettotal", shoppingTotal_gettotalResponse);
 	}
 	
 	function shoppingCart_getResponse(feed) {
@@ -68,7 +69,7 @@
 
 			if (entries.length != 0) {			
 					try	{
-						shoppingTotal.gettotal(shoppingTotal_getTotalResponse);
+						shoppingTotal.apply("gettotal", shoppingTotal_gettotalResponse);
 					}
 					catch(e){
 						alert(e);
@@ -77,7 +78,7 @@
 		}
 	}
 	
-	function shoppingTotal_getTotalResponse(total,exception) {
+	function shoppingTotal_gettotalResponse(total,exception) {
 		if(exception) { 
 			alert(exception.message); 
 			return;
@@ -130,7 +131,7 @@
 	function init() {
 			
 			try	{
-				catalog.get(catalog_getResponse);
+				catalog.apply("getcatalog", catalog_getcatalogResponse);
 				shoppingCart.get("", shoppingCart_getResponse);
 			}
 			catch(e){

Modified: tuscany/sca-cpp/trunk/samples/store-gae/shopping-cart.py
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/samples/store-gae/shopping-cart.py?rev=959521&r1=959520&r2=959521&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/samples/store-gae/shopping-cart.py (original)
+++ tuscany/sca-cpp/trunk/samples/store-gae/shopping-cart.py Thu Jul  1 06:04:35 2010
@@ -72,6 +72,3 @@ def gettotal(cache):
     cart = getcart(cartId, cache)
     return sum(cart)
 
-# TODO remove these JSON-RPC specific functions
-def listMethods(cache):
-    return ("Service.gettotal",)

Modified: tuscany/sca-cpp/trunk/samples/store-gae/store.py
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/samples/store-gae/store.py?rev=959521&r1=959520&r2=959521&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/samples/store-gae/store.py (original)
+++ tuscany/sca-cpp/trunk/samples/store-gae/store.py Thu Jul  1 06:04:35 2010
@@ -27,7 +27,7 @@ def get(id, catalog, shoppingCart, shopp
     return shoppingCart("get", id)
 
 def getcatalog(catalog, shoppingCart, shoppingTotal):
-    return catalog("get")
+    return catalog("getcatalog")
 
 def gettotal(catalog, shoppingCart, shoppingTotal):
     return shoppingCart("gettotal")
@@ -38,7 +38,3 @@ def deleteall(catalog, shoppingCart, sho
 def delete(id, catalog, shoppingCart, shoppingTotal):
     return shoppingCart("delete", id)
 
-# TODO remove these JSON-RPC specific functions
-def listMethods(catalog, shoppingCart, shoppingTotal):
-    return ("Service.get", "Service.gettotal")
-

Modified: tuscany/sca-cpp/trunk/samples/store-java/Makefile.am
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/samples/store-java/Makefile.am?rev=959521&r1=959520&r2=959521&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/samples/store-java/Makefile.am (original)
+++ tuscany/sca-cpp/trunk/samples/store-java/Makefile.am Thu Jul  1 06:04:35 2010
@@ -26,7 +26,7 @@ AM_JAVACFLAGS = -cp ${top_builddir}/modu
 dist_sample_JAVA = store/*.java
 CLEANFILES = *.stamp store/*.class
 
-nobase_dist_sample_DATA = store.composite htdocs/.htaccess htdocs/*.html htdocs/*.js store/*.*
+nobase_dist_sample_DATA = store.composite htdocs/.htaccess htdocs/*.html store/*.*
 
 dist_noinst_SCRIPTS = server-test
 TESTS = server-test

Modified: tuscany/sca-cpp/trunk/samples/store-java/htdocs/store.html
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/samples/store-java/htdocs/store.html?rev=959521&r1=959520&r2=959521&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/samples/store-java/htdocs/store.html (original)
+++ tuscany/sca-cpp/trunk/samples/store-java/htdocs/store.html Thu Jul  1 06:04:35 2010
@@ -20,10 +20,12 @@
 <head>
 <title>Store</title>
 
-<script type="text/javascript" src="store.js"></script>
+<script type="text/javascript" src="/js/tuscany-ref.js"></script>
 
 <script language="JavaScript">
 
+    var component = new tuscany.sca.Component("Store");
+
 	//@Reference
 	var catalog = new tuscany.sca.Reference("catalog");
 	
@@ -35,7 +37,7 @@
 	
 	var catalogItems;
 
-	function catalog_getResponse(items,exception) {
+	function catalog_getcatalogResponse(items,exception) {
 		if(exception){
 			alert(exception.message);
 			return;
@@ -50,8 +52,7 @@
 		document.getElementById('catalog').innerHTML=catalog;
 		catalogItems = items;
 
-		// TEMP		
-		shoppingTotal.gettotal(shoppingTotal_getTotalResponse);
+		shoppingTotal.apply("gettotal", shoppingTotal_gettotalResponse);
 	}
 	
 	function shoppingCart_getResponse(feed) {
@@ -68,7 +69,7 @@
 
 			if (entries.length != 0) {			
 					try	{
-						shoppingTotal.gettotal(shoppingTotal_getTotalResponse);
+						shoppingTotal.apply("gettotal", shoppingTotal_gettotalResponse);
 					}
 					catch(e){
 						alert(e);
@@ -77,7 +78,7 @@
 		}
 	}
 	
-	function shoppingTotal_getTotalResponse(total,exception) {
+	function shoppingTotal_gettotalResponse(total,exception) {
 		if(exception) { 
 			alert(exception.message); 
 			return;
@@ -130,7 +131,7 @@
 	function init() {
 			
 			try	{
-				catalog.get(catalog_getResponse);
+				catalog.apply("getcatalog", catalog_getcatalogResponse);
 				shoppingCart.get("", shoppingCart_getResponse);
 			}
 			catch(e){

Modified: tuscany/sca-cpp/trunk/samples/store-java/store.composite
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/samples/store-java/store.composite?rev=959521&r1=959520&r2=959521&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/samples/store-java/store.composite (original)
+++ tuscany/sca-cpp/trunk/samples/store-java/store.composite Thu Jul  1 06:04:35 2010
@@ -22,6 +22,16 @@
   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.java class="store.FruitsCatalogImpl"/> 
         <property name="currencyCode">USD</property>

Modified: tuscany/sca-cpp/trunk/samples/store-java/store/FruitsCatalogImpl.java
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/samples/store-java/store/FruitsCatalogImpl.java?rev=959521&r1=959520&r2=959521&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/samples/store-java/store/FruitsCatalogImpl.java (original)
+++ tuscany/sca-cpp/trunk/samples/store-java/store/FruitsCatalogImpl.java Thu Jul  1 06:04:35 2010
@@ -31,7 +31,7 @@ public class FruitsCatalogImpl {
     /**
      * Returns the catalog.
      */
-    public Iterable<?> get(final CurrencyConverter converter, final Service currencyCode) {
+    public Iterable<?> getcatalog(final CurrencyConverter converter, final Service currencyCode) {
         final String code = currencyCode.eval();
 
         class Converter {
@@ -48,11 +48,4 @@ public class FruitsCatalogImpl {
                 list(list("'javaClass", "services.Item"), list("'name", "Pear"), list("'currencyCode", code), list("'currencySymbol", symbol), list("'price", c.convert(1.55))));
     }
 
-    /**
-     * TODO remove this JSON-RPC specific function.
-     */
-    public Iterable<?> listMethods(final CurrencyConverter converter, final Service currencyCode) {
-        return list("Service.get");
-    }
-
 }

Modified: tuscany/sca-cpp/trunk/samples/store-java/store/ShoppingCartImpl.java
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/samples/store-java/store/ShoppingCartImpl.java?rev=959521&r1=959520&r2=959521&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/samples/store-java/store/ShoppingCartImpl.java (original)
+++ tuscany/sca-cpp/trunk/samples/store-java/store/ShoppingCartImpl.java Thu Jul  1 06:04:35 2010
@@ -109,11 +109,4 @@ public class ShoppingCartImpl {
         return this.sum(cart);
     }
 
-    /**
-     * TODO remove this JSON-RPC specific function.
-     */
-    public Iterable<?> listMethods(final Service cache) {
-        return list("Service.gettotal");
-    }
-
 }

Modified: tuscany/sca-cpp/trunk/samples/store-nosql/Makefile.am
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/samples/store-nosql/Makefile.am?rev=959521&r1=959520&r2=959521&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/samples/store-nosql/Makefile.am (original)
+++ tuscany/sca-cpp/trunk/samples/store-nosql/Makefile.am Thu Jul  1 06:04:35 2010
@@ -18,7 +18,7 @@
 dist_sample_SCRIPTS = start stop ssl-start
 sampledir = $(prefix)/samples/store-nosql
 
-nobase_dist_sample_DATA = currency-converter.scm fruits-catalog.scm shopping-cart.scm store.scm store.composite htdocs/.htaccess htdocs/*.html htdocs/*.js
+nobase_dist_sample_DATA = currency-converter.scm fruits-catalog.scm shopping-cart.scm store.scm store.composite htdocs/.htaccess htdocs/*.html
 
 dist_noinst_SCRIPTS = server-test
 TESTS = server-test

Modified: tuscany/sca-cpp/trunk/samples/store-nosql/fruits-catalog.scm
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/samples/store-nosql/fruits-catalog.scm?rev=959521&r1=959520&r2=959521&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/samples/store-nosql/fruits-catalog.scm (original)
+++ tuscany/sca-cpp/trunk/samples/store-nosql/fruits-catalog.scm Thu Jul  1 06:04:35 2010
@@ -17,7 +17,7 @@
 
 ; Catalog implementation
 
-(define (get converter currencyCode)
+(define (getcatalog converter currencyCode)
   (define code (currencyCode))
   (define (convert price) (converter "convert" "USD" code price))
   (define symbol (converter "symbol" code))
@@ -28,6 +28,3 @@
   )
 )
 
-; TODO remove these JSON-RPC specific functions
-(define (listMethods converter currencyCode) (list "Service.get"))
-

Modified: tuscany/sca-cpp/trunk/samples/store-nosql/htdocs/store.html
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/samples/store-nosql/htdocs/store.html?rev=959521&r1=959520&r2=959521&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/samples/store-nosql/htdocs/store.html (original)
+++ tuscany/sca-cpp/trunk/samples/store-nosql/htdocs/store.html Thu Jul  1 06:04:35 2010
@@ -20,10 +20,12 @@
 <head>
 <title>Store</title>
 
-<script type="text/javascript" src="store.js"></script>
+<script type="text/javascript" src="/js/tuscany-ref.js"></script>
 
 <script language="JavaScript">
 
+    var component = new tuscany.sca.Component("Store");
+
 	//@Reference
 	var catalog = new tuscany.sca.Reference("catalog");
 	
@@ -35,7 +37,7 @@
 	
 	var catalogItems;
 
-	function catalog_getResponse(items,exception) {
+	function catalog_getcatalogResponse(items,exception) {
 		if(exception){
 			alert(exception.message);
 			return;
@@ -50,8 +52,7 @@
 		document.getElementById('catalog').innerHTML=catalog;
 		catalogItems = items;
 
-		// TEMP		
-		shoppingTotal.gettotal(shoppingTotal_getTotalResponse);
+		shoppingTotal.apply("gettotal", shoppingTotal_gettotalResponse);
 	}
 	
 	function shoppingCart_getResponse(feed) {
@@ -68,7 +69,7 @@
 
 			if (entries.length != 0) {			
 					try	{
-						shoppingTotal.gettotal(shoppingTotal_getTotalResponse);
+						shoppingTotal.apply("gettotal", shoppingTotal_gettotalResponse);
 					}
 					catch(e){
 						alert(e);
@@ -77,7 +78,7 @@
 		}
 	}
 	
-	function shoppingTotal_getTotalResponse(total,exception) {
+	function shoppingTotal_gettotalResponse(total,exception) {
 		if(exception) { 
 			alert(exception.message); 
 			return;
@@ -130,7 +131,7 @@
 	function init() {
 			
 			try	{
-				catalog.get(catalog_getResponse);
+				catalog.apply("getcatalog", catalog_getcatalogResponse);
 				shoppingCart.get("", shoppingCart_getResponse);
 			}
 			catch(e){

Modified: tuscany/sca-cpp/trunk/samples/store-nosql/shopping-cart.scm
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/samples/store-nosql/shopping-cart.scm?rev=959521&r1=959520&r2=959521&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/samples/store-nosql/shopping-cart.scm (original)
+++ tuscany/sca-cpp/trunk/samples/store-nosql/shopping-cart.scm Thu Jul  1 06:04:35 2010
@@ -80,5 +80,3 @@
   (sum cart)
 )
 
-; TODO remove these JSON-RPC specific functions
-(define (listMethods cache) (list "Service.gettotal"))

Modified: tuscany/sca-cpp/trunk/samples/store-nosql/store.composite
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/samples/store-nosql/store.composite?rev=959521&r1=959520&r2=959521&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/samples/store-nosql/store.composite (original)
+++ tuscany/sca-cpp/trunk/samples/store-nosql/store.composite Thu Jul  1 06:04:35 2010
@@ -43,7 +43,7 @@
      
     <component name="ShoppingCart">
         <t:implementation.scheme script="shopping-cart.scm"/>
-        <service name="ShoppingCart">
+        <service name="Cart">
             <t:binding.atom uri="shoppingCart"/>
         </service>        
         <service name="Total">

Modified: tuscany/sca-cpp/trunk/samples/store-nosql/store.scm
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/samples/store-nosql/store.scm?rev=959521&r1=959520&r2=959521&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/samples/store-nosql/store.scm (original)
+++ tuscany/sca-cpp/trunk/samples/store-nosql/store.scm Thu Jul  1 06:04:35 2010
@@ -30,7 +30,7 @@
 )
 
 (define (getcatalog catalog shoppingCart shoppingTotal)
-  (catalog "get")
+  (catalog "getcatalog")
 )
 
 (define (gettotal catalog shoppingCart shoppingTotal)
@@ -45,6 +45,3 @@
   (shoppingCart "delete" id)
 )
 
-; TODO remove these JSON-RPC specific functions
-(define (listMethods catalog shoppingCart shoppingTotal) (list "Service.getcatalog" "Service.gettotal"))
-

Modified: tuscany/sca-cpp/trunk/samples/store-python/Makefile.am
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/samples/store-python/Makefile.am?rev=959521&r1=959520&r2=959521&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/samples/store-python/Makefile.am (original)
+++ tuscany/sca-cpp/trunk/samples/store-python/Makefile.am Thu Jul  1 06:04:35 2010
@@ -20,7 +20,7 @@ if WANT_PYTHON
 dist_sample_SCRIPTS = start stop ssl-start
 sampledir = $(prefix)/samples/store-python
 
-nobase_dist_sample_DATA = currency-converter.py fruits-catalog.py shopping-cart.py store.py store.composite htdocs/.htaccess htdocs/*.html htdocs/*.js
+nobase_dist_sample_DATA = currency-converter.py fruits-catalog.py shopping-cart.py store.py store.composite htdocs/.htaccess htdocs/*.html
 
 dist_noinst_SCRIPTS = server-test
 TESTS = server-test

Modified: tuscany/sca-cpp/trunk/samples/store-python/fruits-catalog.py
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/samples/store-python/fruits-catalog.py?rev=959521&r1=959520&r2=959521&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/samples/store-python/fruits-catalog.py (original)
+++ tuscany/sca-cpp/trunk/samples/store-python/fruits-catalog.py Thu Jul  1 06:04:35 2010
@@ -17,7 +17,7 @@
 
 # Catalog implementation
 
-def get(converter, currencyCode):
+def getcatalog(converter, currencyCode):
   code = currencyCode()
   def convert(price):
       return converter("convert", "USD", code, price)
@@ -28,7 +28,3 @@ def get(converter, currencyCode):
     (("'javaClass", "services.Item"), ("'name", "Pear"), ("'currencyCode", code), ("'currencySymbol", symbol), ("'price", convert(1.55)))
   )
 
-# TODO remove these JSON-RPC specific functions
-def listMethods(converter, currencyCode):
-    return ("Service.get",)
-

Modified: tuscany/sca-cpp/trunk/samples/store-python/htdocs/store.html
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/samples/store-python/htdocs/store.html?rev=959521&r1=959520&r2=959521&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/samples/store-python/htdocs/store.html (original)
+++ tuscany/sca-cpp/trunk/samples/store-python/htdocs/store.html Thu Jul  1 06:04:35 2010
@@ -20,10 +20,12 @@
 <head>
 <title>Store</title>
 
-<script type="text/javascript" src="store.js"></script>
+<script type="text/javascript" src="/js/tuscany-ref.js"></script>
 
 <script language="JavaScript">
 
+    var component = new tuscany.sca.Component("Store");
+
 	//@Reference
 	var catalog = new tuscany.sca.Reference("catalog");
 	
@@ -35,7 +37,7 @@
 	
 	var catalogItems;
 
-	function catalog_getResponse(items,exception) {
+	function catalog_getcatalogResponse(items,exception) {
 		if(exception){
 			alert(exception.message);
 			return;
@@ -50,8 +52,7 @@
 		document.getElementById('catalog').innerHTML=catalog;
 		catalogItems = items;
 
-		// TEMP		
-		shoppingTotal.gettotal(shoppingTotal_getTotalResponse);
+		shoppingTotal.apply("gettotal", shoppingTotal_gettotalResponse);
 	}
 	
 	function shoppingCart_getResponse(feed) {
@@ -68,7 +69,7 @@
 
 			if (entries.length != 0) {			
 					try	{
-						shoppingTotal.gettotal(shoppingTotal_getTotalResponse);
+						shoppingTotal.apply("gettotal", shoppingTotal_gettotalResponse);
 					}
 					catch(e){
 						alert(e);
@@ -77,7 +78,7 @@
 		}
 	}
 	
-	function shoppingTotal_getTotalResponse(total,exception) {
+	function shoppingTotal_gettotalResponse(total,exception) {
 		if(exception) { 
 			alert(exception.message); 
 			return;
@@ -130,7 +131,7 @@
 	function init() {
 			
 			try	{
-				catalog.get(catalog_getResponse);
+				catalog.apply("getcatalog", catalog_getcatalogResponse);
 				shoppingCart.get("", shoppingCart_getResponse);
 			}
 			catch(e){

Modified: tuscany/sca-cpp/trunk/samples/store-python/shopping-cart.py
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/samples/store-python/shopping-cart.py?rev=959521&r1=959520&r2=959521&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/samples/store-python/shopping-cart.py (original)
+++ tuscany/sca-cpp/trunk/samples/store-python/shopping-cart.py Thu Jul  1 06:04:35 2010
@@ -73,6 +73,3 @@ def gettotal(cache):
     cart = getcart(cartId, cache)
     return sum(cart)
 
-# TODO remove these JSON-RPC specific functions
-def listMethods(cache):
-    return ("Service.gettotal",)

Modified: tuscany/sca-cpp/trunk/samples/store-python/store.py
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/samples/store-python/store.py?rev=959521&r1=959520&r2=959521&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/samples/store-python/store.py (original)
+++ tuscany/sca-cpp/trunk/samples/store-python/store.py Thu Jul  1 06:04:35 2010
@@ -27,7 +27,7 @@ def get(id, catalog, shoppingCart, shopp
     return shoppingCart("get", id)
 
 def getcatalog(catalog, shoppingCart, shoppingTotal):
-    return catalog("get")
+    return catalog("getcatalog")
 
 def gettotal(catalog, shoppingCart, shoppingTotal):
     return shoppingCart("gettotal")
@@ -38,7 +38,3 @@ def deleteall(catalog, shoppingCart, sho
 def delete(id, catalog, shoppingCart, shoppingTotal):
     return shoppingCart("delete", id)
 
-# TODO remove these JSON-RPC specific functions
-def listMethods(catalog, shoppingCart, shoppingTotal):
-    return ("Service.get", "Service.gettotal")
-

Modified: tuscany/sca-cpp/trunk/samples/store-scheme/Makefile.am
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/samples/store-scheme/Makefile.am?rev=959521&r1=959520&r2=959521&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/samples/store-scheme/Makefile.am (original)
+++ tuscany/sca-cpp/trunk/samples/store-scheme/Makefile.am Thu Jul  1 06:04:35 2010
@@ -18,7 +18,7 @@
 dist_sample_SCRIPTS = start stop ssl-start
 sampledir = $(prefix)/samples/store-scheme
 
-nobase_dist_sample_DATA = currency-converter.scm fruits-catalog.scm shopping-cart.scm store.scm store.composite htdocs/.htaccess htdocs/*.html htdocs/*.js
+nobase_dist_sample_DATA = currency-converter.scm fruits-catalog.scm shopping-cart.scm store.scm store.composite htdocs/.htaccess htdocs/*.html
 
 EXTRA_DIST = script-test.scm
 

Modified: tuscany/sca-cpp/trunk/samples/store-scheme/fruits-catalog.scm
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/samples/store-scheme/fruits-catalog.scm?rev=959521&r1=959520&r2=959521&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/samples/store-scheme/fruits-catalog.scm (original)
+++ tuscany/sca-cpp/trunk/samples/store-scheme/fruits-catalog.scm Thu Jul  1 06:04:35 2010
@@ -17,7 +17,7 @@
 
 ; Catalog implementation
 
-(define (get converter currencyCode)
+(define (getcatalog converter currencyCode)
   (define code (currencyCode))
   (define (convert price) (converter "convert" "USD" code price))
   (define symbol (converter "symbol" code))
@@ -28,6 +28,3 @@
   )
 )
 
-; TODO remove these JSON-RPC specific functions
-(define (listMethods converter currencyCode) (list "Service.get"))
-

Modified: tuscany/sca-cpp/trunk/samples/store-scheme/htdocs/store.html
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/samples/store-scheme/htdocs/store.html?rev=959521&r1=959520&r2=959521&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/samples/store-scheme/htdocs/store.html (original)
+++ tuscany/sca-cpp/trunk/samples/store-scheme/htdocs/store.html Thu Jul  1 06:04:35 2010
@@ -20,10 +20,12 @@
 <head>
 <title>Store</title>
 
-<script type="text/javascript" src="store.js"></script>
+<script type="text/javascript" src="/js/tuscany-ref.js"></script>
 
 <script language="JavaScript">
 
+    var component = new tuscany.sca.Component("Store");
+
 	//@Reference
 	var catalog = new tuscany.sca.Reference("catalog");
 	
@@ -35,7 +37,7 @@
 	
 	var catalogItems;
 
-	function catalog_getResponse(items,exception) {
+	function catalog_getcatalogResponse(items,exception) {
 		if(exception){
 			alert(exception.message);
 			return;
@@ -50,8 +52,7 @@
 		document.getElementById('catalog').innerHTML=catalog;
 		catalogItems = items;
 
-		// TEMP		
-		shoppingTotal.gettotal(shoppingTotal_getTotalResponse);
+		shoppingTotal.apply("gettotal", shoppingTotal_gettotalResponse);
 	}
 	
 	function shoppingCart_getResponse(feed) {
@@ -68,7 +69,7 @@
 
 			if (entries.length != 0) {			
 					try	{
-						shoppingTotal.gettotal(shoppingTotal_getTotalResponse);
+						shoppingTotal.apply("gettotal", shoppingTotal_gettotalResponse);
 					}
 					catch(e){
 						alert(e);
@@ -77,7 +78,7 @@
 		}
 	}
 	
-	function shoppingTotal_getTotalResponse(total,exception) {
+	function shoppingTotal_gettotalResponse(total,exception) {
 		if(exception) { 
 			alert(exception.message); 
 			return;
@@ -130,7 +131,7 @@
 	function init() {
 			
 			try	{
-				catalog.get(catalog_getResponse);
+				catalog.apply("getcatalog", catalog_getcatalogResponse);
 				shoppingCart.get("", shoppingCart_getResponse);
 			}
 			catch(e){

Modified: tuscany/sca-cpp/trunk/samples/store-scheme/script-test.scm
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/samples/store-scheme/script-test.scm?rev=959521&r1=959520&r2=959521&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/samples/store-scheme/script-test.scm (original)
+++ tuscany/sca-cpp/trunk/samples/store-scheme/script-test.scm Thu Jul  1 06:04:35 2010
@@ -53,7 +53,7 @@
 
 (define (catalog_impl converter op args)
   (cond
-    ((equal? op "get") (apply catalog_get (cons converter args)))
+    ((equal? op "getcatalog") (apply catalog_get (cons converter args)))
   )
 )
 
@@ -104,7 +104,7 @@
 )
 
 (define (storeui_getcatalog catalog)
-  (catalog "get")
+  (catalog "getcatalog")
 )
 
 (define (storeui_gettotal cart)

Modified: tuscany/sca-cpp/trunk/samples/store-scheme/shopping-cart.scm
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/samples/store-scheme/shopping-cart.scm?rev=959521&r1=959520&r2=959521&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/samples/store-scheme/shopping-cart.scm (original)
+++ tuscany/sca-cpp/trunk/samples/store-scheme/shopping-cart.scm Thu Jul  1 06:04:35 2010
@@ -80,5 +80,3 @@
   (sum cart)
 )
 
-; TODO remove these JSON-RPC specific functions
-(define (listMethods cache) (list "Service.gettotal"))

Modified: tuscany/sca-cpp/trunk/samples/store-scheme/store.composite
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/samples/store-scheme/store.composite?rev=959521&r1=959520&r2=959521&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/samples/store-scheme/store.composite (original)
+++ tuscany/sca-cpp/trunk/samples/store-scheme/store.composite Thu Jul  1 06:04:35 2010
@@ -43,7 +43,7 @@
      
     <component name="ShoppingCart">
         <t:implementation.scheme script="shopping-cart.scm"/>
-        <service name="ShoppingCart">
+        <service name="Cart">
             <t:binding.atom uri="shoppingCart"/>
         </service>        
         <service name="Total">

Modified: tuscany/sca-cpp/trunk/samples/store-scheme/store.scm
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/samples/store-scheme/store.scm?rev=959521&r1=959520&r2=959521&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/samples/store-scheme/store.scm (original)
+++ tuscany/sca-cpp/trunk/samples/store-scheme/store.scm Thu Jul  1 06:04:35 2010
@@ -30,7 +30,7 @@
 )
 
 (define (getcatalog catalog shoppingCart shoppingTotal)
-  (catalog "get")
+  (catalog "getcatalog")
 )
 
 (define (gettotal catalog shoppingCart shoppingTotal)
@@ -45,6 +45,3 @@
   (shoppingCart "delete" id)
 )
 
-; TODO remove these JSON-RPC specific functions
-(define (listMethods catalog shoppingCart shoppingTotal) (list "Service.getcatalog" "Service.gettotal"))
-

Modified: tuscany/sca-cpp/trunk/samples/store-sql/Makefile.am
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/samples/store-sql/Makefile.am?rev=959521&r1=959520&r2=959521&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/samples/store-sql/Makefile.am (original)
+++ tuscany/sca-cpp/trunk/samples/store-sql/Makefile.am Thu Jul  1 06:04:35 2010
@@ -20,7 +20,7 @@ if WANT_SQLDB
 dist_sample_SCRIPTS = start stop ssl-start
 sampledir = $(prefix)/samples/store-sql
 
-nobase_dist_sample_DATA = currency-converter.scm fruits-catalog.scm shopping-cart.scm store.scm store.composite htdocs/.htaccess htdocs/*.html htdocs/*.js
+nobase_dist_sample_DATA = currency-converter.scm fruits-catalog.scm shopping-cart.scm store.scm store.composite htdocs/.htaccess htdocs/*.html
 
 dist_noinst_SCRIPTS = server-test
 TESTS = server-test

Modified: tuscany/sca-cpp/trunk/samples/store-sql/fruits-catalog.scm
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/samples/store-sql/fruits-catalog.scm?rev=959521&r1=959520&r2=959521&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/samples/store-sql/fruits-catalog.scm (original)
+++ tuscany/sca-cpp/trunk/samples/store-sql/fruits-catalog.scm Thu Jul  1 06:04:35 2010
@@ -17,7 +17,7 @@
 
 ; Catalog implementation
 
-(define (get converter currencyCode)
+(define (getcatalog converter currencyCode)
   (define code (currencyCode))
   (define (convert price) (converter "convert" "USD" code price))
   (define symbol (converter "symbol" code))
@@ -28,6 +28,3 @@
   )
 )
 
-; TODO remove these JSON-RPC specific functions
-(define (listMethods converter currencyCode) (list "Service.get"))
-

Modified: tuscany/sca-cpp/trunk/samples/store-sql/htdocs/store.html
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/samples/store-sql/htdocs/store.html?rev=959521&r1=959520&r2=959521&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/samples/store-sql/htdocs/store.html (original)
+++ tuscany/sca-cpp/trunk/samples/store-sql/htdocs/store.html Thu Jul  1 06:04:35 2010
@@ -20,10 +20,12 @@
 <head>
 <title>Store</title>
 
-<script type="text/javascript" src="store.js"></script>
+<script type="text/javascript" src="/js/tuscany-ref.js"></script>
 
 <script language="JavaScript">
 
+    var component = new tuscany.sca.Component("Store");
+
 	//@Reference
 	var catalog = new tuscany.sca.Reference("catalog");
 	
@@ -35,7 +37,7 @@
 	
 	var catalogItems;
 
-	function catalog_getResponse(items,exception) {
+	function catalog_getcatalogResponse(items,exception) {
 		if(exception){
 			alert(exception.message);
 			return;
@@ -50,8 +52,7 @@
 		document.getElementById('catalog').innerHTML=catalog;
 		catalogItems = items;
 
-		// TEMP		
-		shoppingTotal.gettotal(shoppingTotal_getTotalResponse);
+		shoppingTotal.apply("gettotal", shoppingTotal_gettotalResponse);
 	}
 	
 	function shoppingCart_getResponse(feed) {
@@ -68,7 +69,7 @@
 
 			if (entries.length != 0) {			
 					try	{
-						shoppingTotal.gettotal(shoppingTotal_getTotalResponse);
+						shoppingTotal.apply("gettotal", shoppingTotal_gettotalResponse);
 					}
 					catch(e){
 						alert(e);
@@ -77,7 +78,7 @@
 		}
 	}
 	
-	function shoppingTotal_getTotalResponse(total,exception) {
+	function shoppingTotal_gettotalResponse(total,exception) {
 		if(exception) { 
 			alert(exception.message); 
 			return;
@@ -130,7 +131,7 @@
 	function init() {
 			
 			try	{
-				catalog.get(catalog_getResponse);
+				catalog.apply("getcatalog", catalog_getcatalogResponse);
 				shoppingCart.get("", shoppingCart_getResponse);
 			}
 			catch(e){

Modified: tuscany/sca-cpp/trunk/samples/store-sql/shopping-cart.scm
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/samples/store-sql/shopping-cart.scm?rev=959521&r1=959520&r2=959521&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/samples/store-sql/shopping-cart.scm (original)
+++ tuscany/sca-cpp/trunk/samples/store-sql/shopping-cart.scm Thu Jul  1 06:04:35 2010
@@ -80,5 +80,3 @@
   (sum cart)
 )
 
-; TODO remove these JSON-RPC specific functions
-(define (listMethods cache) (list "Service.gettotal"))

Modified: tuscany/sca-cpp/trunk/samples/store-sql/store.composite
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/samples/store-sql/store.composite?rev=959521&r1=959520&r2=959521&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/samples/store-sql/store.composite (original)
+++ tuscany/sca-cpp/trunk/samples/store-sql/store.composite Thu Jul  1 06:04:35 2010
@@ -43,7 +43,7 @@
      
     <component name="ShoppingCart">
         <t:implementation.scheme script="shopping-cart.scm"/>
-        <service name="ShoppingCart">
+        <service name="Cart">
             <t:binding.atom uri="shoppingCart"/>
         </service>        
         <service name="Total">

Modified: tuscany/sca-cpp/trunk/samples/store-sql/store.scm
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/samples/store-sql/store.scm?rev=959521&r1=959520&r2=959521&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/samples/store-sql/store.scm (original)
+++ tuscany/sca-cpp/trunk/samples/store-sql/store.scm Thu Jul  1 06:04:35 2010
@@ -30,7 +30,7 @@
 )
 
 (define (getcatalog catalog shoppingCart shoppingTotal)
-  (catalog "get")
+  (catalog "getcatalog")
 )
 
 (define (gettotal catalog shoppingCart shoppingTotal)
@@ -45,6 +45,3 @@
   (shoppingCart "delete" id)
 )
 
-; TODO remove these JSON-RPC specific functions
-(define (listMethods catalog shoppingCart shoppingTotal) (list "Service.getcatalog" "Service.gettotal"))
-

Copied: tuscany/sca-cpp/trunk/xsd/tuscany-sca-1.1-implementation-widget.xsd (from r958437, tuscany/sca-cpp/trunk/xsd/tuscany-sca-1.1.xsd)
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/xsd/tuscany-sca-1.1-implementation-widget.xsd?p2=tuscany/sca-cpp/trunk/xsd/tuscany-sca-1.1-implementation-widget.xsd&p1=tuscany/sca-cpp/trunk/xsd/tuscany-sca-1.1.xsd&r1=958437&r2=959521&rev=959521&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/xsd/tuscany-sca-1.1.xsd (original)
+++ tuscany/sca-cpp/trunk/xsd/tuscany-sca-1.1-implementation-widget.xsd Thu Jul  1 06:04:35 2010
@@ -7,28 +7,37 @@
  * 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.
+ * under the License.    
 -->
 <schema xmlns="http://www.w3.org/2001/XMLSchema"
-    targetNamespace="http://tuscany.apache.org/xmlns/sca/1.1">
+    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" schemaLocation="sca-1.1-cd05.xsd"/>
 
+    <element name="implementation.widget" type="t:WidgetImplementation" substitutionGroup="sca:implementation"/>
+    	
+    <complexType name="WidgetImplementation">
+        <complexContent>
+            <extension base="sca:Implementation">
+                <sequence>
+                    <any namespace="##targetNamespace" processContents="lax" 
+                    	minOccurs="0" maxOccurs="unbounded"/>
+                </sequence>
+                <attribute name="location" type="anyURI" use="required"/>
+                <anyAttribute namespace="##any" processContents="lax"/>
+            </extension>
+        </complexContent>
+    </complexType>
 
-    <include schemaLocation="tuscany-sca-1.1-binding-atom.xsd"/>    
-    <include schemaLocation="tuscany-sca-1.1-binding-http.xsd"/>
-    <include schemaLocation="tuscany-sca-1.1-binding-jsonrpc.xsd"/>
-    <include schemaLocation="tuscany-sca-1.1-binding-rest.xsd"/>
-    <include schemaLocation="tuscany-sca-1.1-binding-rss.xsd"/>
-
-    <include schemaLocation="tuscany-sca-1.1-implementation-python.xsd"/>
-    <include schemaLocation="tuscany-sca-1.1-implementation-scheme.xsd"/>
 </schema>

Modified: tuscany/sca-cpp/trunk/xsd/tuscany-sca-1.1.xsd
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/xsd/tuscany-sca-1.1.xsd?rev=959521&r1=959520&r2=959521&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/xsd/tuscany-sca-1.1.xsd (original)
+++ tuscany/sca-cpp/trunk/xsd/tuscany-sca-1.1.xsd Thu Jul  1 06:04:35 2010
@@ -22,7 +22,6 @@
 
     <import namespace="http://docs.oasis-open.org/ns/opencsa/sca/200912" schemaLocation="sca-1.1-cd05.xsd"/>
 
-
     <include schemaLocation="tuscany-sca-1.1-binding-atom.xsd"/>    
     <include schemaLocation="tuscany-sca-1.1-binding-http.xsd"/>
     <include schemaLocation="tuscany-sca-1.1-binding-jsonrpc.xsd"/>
@@ -31,4 +30,5 @@
 
     <include schemaLocation="tuscany-sca-1.1-implementation-python.xsd"/>
     <include schemaLocation="tuscany-sca-1.1-implementation-scheme.xsd"/>
+    <include schemaLocation="tuscany-sca-1.1-implementation-widget.xsd"/>
 </schema>