diff options
Diffstat (limited to '')
-rw-r--r-- | sca-cpp/trunk/modules/java/eval.hpp | 4 | ||||
-rw-r--r-- | sca-cpp/trunk/modules/java/mod-java.cpp | 47 | ||||
-rw-r--r-- | sca-cpp/trunk/modules/java/mod-java.hpp | 21 | ||||
-rw-r--r-- | sca-cpp/trunk/modules/java/org/apache/tuscany/Service.java | 22 | ||||
-rw-r--r-- | sca-cpp/trunk/modules/java/test/Client.java | 12 | ||||
-rw-r--r-- | sca-cpp/trunk/modules/java/test/ClientImpl.java | 18 | ||||
-rw-r--r-- | sca-cpp/trunk/modules/java/test/Server.java | 12 | ||||
-rw-r--r-- | sca-cpp/trunk/modules/java/test/ServerImpl.java | 26 |
8 files changed, 61 insertions, 101 deletions
diff --git a/sca-cpp/trunk/modules/java/eval.hpp b/sca-cpp/trunk/modules/java/eval.hpp index 9140fe75b4..58a1ab5ff9 100644 --- a/sca-cpp/trunk/modules/java/eval.hpp +++ b/sca-cpp/trunk/modules/java/eval.hpp @@ -501,8 +501,8 @@ const failable<value> evalClass(const JavaRuntime& jr, const value& expr, const // The start, stop, and restart functions are optional const value fn = car<value>(expr); - if (fn == "start" || fn == "stop" || fn == "restart") - return value(false); + if (fn == "start" || fn == "restart" || "stop") + return value(lambda<value(const list<value>&)>()); return mkfailure<value>(string("Couldn't find function: ") + car<value>(expr) + " : " + lastException(jr)); } diff --git a/sca-cpp/trunk/modules/java/mod-java.cpp b/sca-cpp/trunk/modules/java/mod-java.cpp index 4b8e7dca56..510f9574b0 100644 --- a/sca-cpp/trunk/modules/java/mod-java.cpp +++ b/sca-cpp/trunk/modules/java/mod-java.cpp @@ -37,40 +37,41 @@ namespace server { namespace modeval { /** - * Start the module. + * Apply a lifecycle start or restart event. */ -const failable<bool> start(unused ServerConf& sc) { - // Start a Java runtime - sc.moduleConf = new (gc_new<java::JavaRuntime>()) java::JavaRuntime(); - return true; -} +struct javaLifecycle { + javaLifecycle(java::JavaRuntime& jr) : jr(jr) { + } + const value operator()(const list<value>& params) const { + const value func = car(params); + if (func == "javaRuntime") + return (gc_ptr<value>)(value*)(void*)&jr; + return lambda<value(const list<value>&)>(); + } + java::JavaRuntime& jr; +}; -/** - * Stop the module. - */ -const failable<bool> stop(unused ServerConf& sc) { - return true; -} +const value applyLifecycle(unused const list<value>& params) { -/** - * Restart the module. - */ -const failable<bool> restart(ServerConf& sc) { - // Start a Java runtime - sc.moduleConf = new (gc_new<java::JavaRuntime>()) java::JavaRuntime(); - return true; + // Create a Java runtime + java::JavaRuntime& jr = *(new (gc_new<java::JavaRuntime>()) java::JavaRuntime()); + + // Return the function to invoke on subsequent events + return failable<value>(lambda<value(const list<value>&)>(javaLifecycle(jr))); } /** * Evaluate a Java component implementation and convert it to an applicable * lambda function. */ -const failable<lambda<value(const list<value>&)> > evalImplementation(const string& path, const value& impl, const list<value>& px, modeval::ServerConf& sc) { +const failable<lambda<value(const list<value>&)> > evalImplementation(const string& path, const value& impl, const list<value>& px, const lambda<value(const list<value>&)>& lifecycle) { const string itype(elementName(impl)); - if (contains(itype, ".java")) - return modjava::evalImplementation(path, impl, px, sc); + if (contains(itype, ".java")) { + const void* p = (gc_ptr<value>)lifecycle(mklist<value>("javaRuntime")); + return modjava::evalImplementation(path, impl, px, *(java::JavaRuntime*)p); + } if (contains(itype, ".cpp")) - return modcpp::evalImplementation(path, impl, px, sc); + return modcpp::evalImplementation(path, impl, px); return mkfailure<lambda<value(const list<value>&)> >(string("Unsupported implementation type: ") + itype); } diff --git a/sca-cpp/trunk/modules/java/mod-java.hpp b/sca-cpp/trunk/modules/java/mod-java.hpp index ccb6d9262b..e7da06e930 100644 --- a/sca-cpp/trunk/modules/java/mod-java.hpp +++ b/sca-cpp/trunk/modules/java/mod-java.hpp @@ -34,20 +34,12 @@ #include "value.hpp" #include "monad.hpp" #include "eval.hpp" -#include "../server/mod-eval.hpp" namespace tuscany { namespace server { namespace modjava { /** - * Return the Java runtime configured in a server. - */ -java::JavaRuntime& javaRuntime(modeval::ServerConf sc) { - return *(java::JavaRuntime*)sc.moduleConf; -} - -/** * Apply a Java component implementation function. */ struct applyImplementation { @@ -59,11 +51,10 @@ struct applyImplementation { const value operator()(const list<value>& params) const { const value expr = append<value>(params, px); debug(expr, "modeval::java::applyImplementation::input"); - const failable<value> val = java::evalClass(jr, expr, impl); + const failable<value> res = java::evalClass(jr, expr, impl); + const value val = !hasContent(res)? mklist<value>(value(), reason(res)) : mklist<value>(content(res)); debug(val, "modeval::java::applyImplementation::result"); - if (!hasContent(val)) - return mklist<value>(value(), reason(val)); - return mklist<value>(content(val)); + return val; } }; @@ -71,12 +62,12 @@ struct applyImplementation { * Evaluate a Java component implementation and convert it to an applicable * lambda function. */ -const failable<lambda<value(const list<value>&)> > evalImplementation(const string& path, const value& impl, const list<value>& px, modeval::ServerConf& sc) { +const failable<lambda<value(const list<value>&)> > evalImplementation(const string& path, const value& impl, const list<value>& px, java::JavaRuntime& jr) { const string cn(attributeValue("class", impl)); - const failable<java::JavaClass> jc = java::readClass(javaRuntime(sc), path, cn); + const failable<java::JavaClass> jc = java::readClass(jr, path, cn); if (!hasContent(jc)) return mkfailure<lambda<value(const list<value>&)> >(reason(jc)); - return lambda<value(const list<value>&)>(applyImplementation(content(jc), px, javaRuntime(sc))); + return lambda<value(const list<value>&)>(applyImplementation(content(jc), px, jr)); } } diff --git a/sca-cpp/trunk/modules/java/org/apache/tuscany/Service.java b/sca-cpp/trunk/modules/java/org/apache/tuscany/Service.java index eedba5f46f..a00d5b1b53 100644 --- a/sca-cpp/trunk/modules/java/org/apache/tuscany/Service.java +++ b/sca-cpp/trunk/modules/java/org/apache/tuscany/Service.java @@ -26,34 +26,24 @@ package org.apache.tuscany; public interface Service { /** - * Post a new item to a resource. + * Post a new item to a collection of items. */ - String post(Iterable<?> item); + Iterable<String> post(Iterable<String> collection, Iterable<?> item); /** * Return an item. */ - Iterable<?> get(String id); + Iterable<?> get(Iterable<String> id); /** - * Return all items in the resource. + * Update an item. */ - Iterable<?> getall(); - - /** - * Update am item. - */ - boolean put(String id, Iterable<?> item); + boolean put(Iterable<String> id, Iterable<?> item); /** * Delete an item. */ - boolean delete(String id); - - /** - * Delete all items in the resource. - */ - boolean deleteall(); + boolean delete(Iterable<String> id); /** * Evaluate an expression. diff --git a/sca-cpp/trunk/modules/java/test/Client.java b/sca-cpp/trunk/modules/java/test/Client.java index ff2d3fee13..c3bd875fcc 100644 --- a/sca-cpp/trunk/modules/java/test/Client.java +++ b/sca-cpp/trunk/modules/java/test/Client.java @@ -23,16 +23,12 @@ public interface Client { String echo(String x); - Iterable<?> getall(); + Iterable<?> get(Iterable<String> id); - Iterable<?> get(String id); + Iterable<String> post(Iterable<String> collection, Iterable<?> item); - String post(Iterable<?> item); + Boolean put(Iterable<String> id, Iterable<?> item); - Boolean put(String id, Iterable<?> entry); - - Boolean deleteall(); - - Boolean delete(String id); + Boolean delete(Iterable<String> id); } diff --git a/sca-cpp/trunk/modules/java/test/ClientImpl.java b/sca-cpp/trunk/modules/java/test/ClientImpl.java index 4bd3498dd5..ade2ba302e 100644 --- a/sca-cpp/trunk/modules/java/test/ClientImpl.java +++ b/sca-cpp/trunk/modules/java/test/ClientImpl.java @@ -25,27 +25,19 @@ public class ClientImpl { return server.echo(x); } - public Iterable<?> getall(Server server) { - return server.getall(); - } - - public Iterable<?> get(String id, Server server) { + public Iterable<?> get(Iterable<String> id, Server server) { return server.get(id); } - public String post(Iterable<?> item, Server server) { - return server.post(item); + public Iterable<String> post(Iterable<String> collection, Iterable<?> item, Server server) { + return server.post(collection, item); } - public Boolean put(String id, Iterable<?> item, Server server) { + public Boolean put(Iterable<String> id, Iterable<?> item, Server server) { return server.put(id, item); } - public Boolean deleteall(Server server) { - return server.deleteall(); - } - - public Boolean delete(String id, Server server) { + public Boolean delete(Iterable<String> id, Server server) { return server.delete(id); } diff --git a/sca-cpp/trunk/modules/java/test/Server.java b/sca-cpp/trunk/modules/java/test/Server.java index 917ccfd6b9..3dfe3c84ef 100644 --- a/sca-cpp/trunk/modules/java/test/Server.java +++ b/sca-cpp/trunk/modules/java/test/Server.java @@ -23,16 +23,12 @@ public interface Server { String echo(String x); - Iterable<?> getall(); + Iterable<?> get(Iterable<String> id); - Iterable<?> get(String id); + Iterable<String> post(Iterable<String> collection, Iterable<?> item); - String post(Iterable<?> item); + Boolean put(Iterable<String> id, Iterable<?> item); - Boolean put(String id, Iterable<?> entry); - - Boolean deleteall(); - - Boolean delete(String id); + Boolean delete(Iterable<String> id); } diff --git a/sca-cpp/trunk/modules/java/test/ServerImpl.java b/sca-cpp/trunk/modules/java/test/ServerImpl.java index dd4e227123..d979c20a15 100644 --- a/sca-cpp/trunk/modules/java/test/ServerImpl.java +++ b/sca-cpp/trunk/modules/java/test/ServerImpl.java @@ -27,31 +27,25 @@ public class ServerImpl { return x; } - public Iterable<?> getall() { - return list("Sample Feed", "123456789", - list("Item", "111", list(list("'javaClass", "services.Item"), list("'name", "Apple"), list("'currencyCode", "USD"), list("'currencySymbol", "$"), list("'price", 2.99))), - list("Item", "222", list(list("'javaClass", "services.Item"), list("'name", "Orange"), list("'currencyCode", "USD"), list("'currencySymbol", "$"), list("'price", 3.55))), - list("Item", "333", list(list("'javaClass", "services.Item"), list("'name", "Pear"), list("'currencyCode", "USD"), list("'currencySymbol", "$"), list("'price", 1.55)))); - } - - public Iterable<?> get(String id) { + public Iterable<?> get(Iterable<String> id) { + if (isNil(id)) + return list("Sample Feed", "123456789", + list("Item", "111", list(list("'javaClass", "services.Item"), list("'name", "Apple"), list("'currencyCode", "USD"), list("'currencySymbol", "$"), list("'price", 2.99))), + list("Item", "222", list(list("'javaClass", "services.Item"), list("'name", "Orange"), list("'currencyCode", "USD"), list("'currencySymbol", "$"), list("'price", 3.55))), + list("Item", "333", list(list("'javaClass", "services.Item"), list("'name", "Pear"), list("'currencyCode", "USD"), list("'currencySymbol", "$"), list("'price", 1.55)))); Iterable<?> entry = list(list("'javaClass", "services.Item"), list("'name", "Apple"), list("'currencyCode", "USD"), list("'currencySymbol", "$"), list("'price", 2.99)); return list("Item", id, entry); } - public String post(Iterable<?> item) { - return "123456789"; + public Iterable<String> post(Iterable<String> collection, Iterable<?> item) { + return list("123456789"); } - public Boolean put(String id, Iterable<?> entry) { - return true; - } - - public Boolean deleteall() { + public Boolean put(Iterable<String> id, Iterable<?> item) { return true; } - public Boolean delete(String id) { + public Boolean delete(Iterable<String> id) { return true; } } |