summaryrefslogtreecommitdiffstats
path: root/sca-cpp/trunk/modules/java
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--sca-cpp/trunk/modules/java/eval.hpp4
-rw-r--r--sca-cpp/trunk/modules/java/mod-java.cpp47
-rw-r--r--sca-cpp/trunk/modules/java/mod-java.hpp21
-rw-r--r--sca-cpp/trunk/modules/java/org/apache/tuscany/Service.java22
-rw-r--r--sca-cpp/trunk/modules/java/test/Client.java12
-rw-r--r--sca-cpp/trunk/modules/java/test/ClientImpl.java18
-rw-r--r--sca-cpp/trunk/modules/java/test/Server.java12
-rw-r--r--sca-cpp/trunk/modules/java/test/ServerImpl.java26
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;
}
}