diff options
19 files changed, 96 insertions, 48 deletions
diff --git a/sca-cpp/trunk/components/cache/Makefile.am b/sca-cpp/trunk/components/cache/Makefile.am index d9ab3f805b..b7397c64da 100644 --- a/sca-cpp/trunk/components/cache/Makefile.am +++ b/sca-cpp/trunk/components/cache/Makefile.am @@ -18,14 +18,14 @@ comp_SCRIPTS = memcached-start memcached-stop compdir=$(prefix)/components/cache -comp_LTLIBRARIES = libmcache.la -libmcache_la_SOURCES = mcache.cpp +comp_LTLIBRARIES = libmemcache.la +libmemcache_la_SOURCES = memcache.cpp -mcache_test_SOURCES = mcache-test.cpp -mcache_test_LDFLAGS = -lxml2 +memcache_test_SOURCES = memcache-test.cpp +memcache_test_LDFLAGS = -lxml2 client_test_SOURCES = client-test.cpp client_test_LDFLAGS = -lxml2 -lcurl -lmozjs -noinst_PROGRAMS = mcache-test client-test +noinst_PROGRAMS = memcache-test client-test TESTS = memcached-test server-test diff --git a/sca-cpp/trunk/components/cache/client-test.cpp b/sca-cpp/trunk/components/cache/client-test.cpp index ddf093a6dc..e3ec449e69 100644 --- a/sca-cpp/trunk/components/cache/client-test.cpp +++ b/sca-cpp/trunk/components/cache/client-test.cpp @@ -36,7 +36,7 @@ namespace tuscany { namespace cache { -const string uri("http://localhost:8090/mcache"); +const string uri("http://localhost:8090/memcache"); bool testCache() { http::CURLSession cs; diff --git a/sca-cpp/trunk/components/cache/mcache-test.cpp b/sca-cpp/trunk/components/cache/memcache-test.cpp index 316372c5be..bc590fa047 100644 --- a/sca-cpp/trunk/components/cache/mcache-test.cpp +++ b/sca-cpp/trunk/components/cache/memcache-test.cpp @@ -27,7 +27,7 @@ #include "stream.hpp" #include "string.hpp" #include "perf.hpp" -#include "mcache.hpp" +#include "memcache.hpp" namespace tuscany { namespace cache { diff --git a/sca-cpp/trunk/components/cache/mcache.composite b/sca-cpp/trunk/components/cache/memcache.composite index 15411dd702..c9a147960e 100644 --- a/sca-cpp/trunk/components/cache/mcache.composite +++ b/sca-cpp/trunk/components/cache/memcache.composite @@ -20,12 +20,12 @@ <composite xmlns="http://docs.oasis-open.org/ns/opencsa/sca/200912" xmlns:t="http://tuscany.apache.org/xmlns/sca/1.1" targetNamespace="http://tuscany.apache.org/xmlns/sca/components" - name="mcache"> + name="memcache"> - <component name="mcache"> - <implementation.cpp path=".libs" library="libmcache"/> - <service name="mcache"> - <t:binding.http uri="mcache"/> + <component name="memcache"> + <implementation.cpp path=".libs" library="libmemcache"/> + <service name="memcache"> + <t:binding.http uri="memcache"/> </service> </component> diff --git a/sca-cpp/trunk/components/cache/mcache.cpp b/sca-cpp/trunk/components/cache/memcache.cpp index 782de605c6..304975614e 100644 --- a/sca-cpp/trunk/components/cache/mcache.cpp +++ b/sca-cpp/trunk/components/cache/memcache.cpp @@ -31,10 +31,10 @@ #include "list.hpp" #include "value.hpp" #include "monad.hpp" -#include "mcache.hpp" +#include "memcache.hpp" namespace tuscany { -namespace mcache { +namespace memcache { /** * Get an item from the cache. @@ -126,7 +126,7 @@ extern "C" { const tuscany::value apply(const tuscany::list<tuscany::value>& params) { const tuscany::value func(car(params)); if (func == "start") - return tuscany::mcache::start(cdr(params)); + return tuscany::memcache::start(cdr(params)); return tuscany::mkfailure<tuscany::value>(); } diff --git a/sca-cpp/trunk/components/cache/mcache.hpp b/sca-cpp/trunk/components/cache/memcache.hpp index 4751975099..c630f6fd55 100644 --- a/sca-cpp/trunk/components/cache/mcache.hpp +++ b/sca-cpp/trunk/components/cache/memcache.hpp @@ -19,8 +19,8 @@ /* $Rev$ $Date$ */ -#ifndef tuscany_mcache_hpp -#define tuscany_mcache_hpp +#ifndef tuscany_memcache_hpp +#define tuscany_memcache_hpp /** * Memcached access functions. @@ -121,7 +121,7 @@ const failable<bool> put(const value& key, const value& val, const MemCached& ca const string vs(scheme::writeValue(val)); const apr_status_t rc = apr_memcache_set(cache.mc, c_str(ks), const_cast<char*>(c_str(vs)), length(vs), 0, 27); if (rc != APR_SUCCESS) - return mkfailure<bool>("Could not add entry"); + return mkfailure<bool>("Could not set entry"); debug(true, "cache::put::result"); return true; @@ -172,4 +172,4 @@ const failable<bool> del(const value& key, const MemCached& cache) { } } -#endif /* tuscany_mcache_hpp */ +#endif /* tuscany_memcache_hpp */ diff --git a/sca-cpp/trunk/components/cache/memcached-stop b/sca-cpp/trunk/components/cache/memcached-stop index b999228b46..bd2c208f46 100755 --- a/sca-cpp/trunk/components/cache/memcached-stop +++ b/sca-cpp/trunk/components/cache/memcached-stop @@ -20,4 +20,4 @@ # Stop memcached mc="memcached -l 127.0.0.1 -m 4 -p 11211" -kill `ps -f | grep -v grep | grep "${mc}" | awk '{ print $2 }'` +kill `ps -ef | grep -v grep | grep "${mc}" | awk '{ print $2 }'` diff --git a/sca-cpp/trunk/components/cache/memcached-test b/sca-cpp/trunk/components/cache/memcached-test index d4b9c04eda..842e8d2030 100755 --- a/sca-cpp/trunk/components/cache/memcached-test +++ b/sca-cpp/trunk/components/cache/memcached-test @@ -22,7 +22,7 @@ sleep 1 # Test -./mcache-test 2>/dev/null +./memcache-test 2>/dev/null rc=$? # Cleanup diff --git a/sca-cpp/trunk/components/cache/server-test b/sca-cpp/trunk/components/cache/server-test index 4942f547bc..a77736f33c 100755 --- a/sca-cpp/trunk/components/cache/server-test +++ b/sca-cpp/trunk/components/cache/server-test @@ -23,7 +23,7 @@ ../../modules/server/scheme-conf tmp cat >>tmp/conf/httpd.conf <<EOF SCAContribution `pwd`/ -SCAComposite mcache.composite +SCAComposite memcache.composite EOF ./memcached-start diff --git a/sca-cpp/trunk/components/queue/qpidd-stop b/sca-cpp/trunk/components/queue/qpidd-stop index 6fb0467cff..3baf2fee27 100755 --- a/sca-cpp/trunk/components/queue/qpidd-stop +++ b/sca-cpp/trunk/components/queue/qpidd-stop @@ -23,4 +23,4 @@ here=`readlink -f $0`; here=`dirname $here` qpid_prefix=`cat $here/qpidc.prefix` qpidd="$qpid_prefix/sbin/qpidd" -kill `ps -f | grep -v grep | grep "${qpidd}" | awk '{ print $2 }'` +kill `ps -ef | grep -v grep | grep "${qpidd}" | awk '{ print $2 }'` diff --git a/sca-cpp/trunk/etc/git-exclude b/sca-cpp/trunk/etc/git-exclude index f2d3d08eda..dc92823c14 100644 --- a/sca-cpp/trunk/etc/git-exclude +++ b/sca-cpp/trunk/etc/git-exclude @@ -80,7 +80,7 @@ eval-shell json-test cache-test client-test -mcache-test +memcache-test curl-test scdl-test jni-test diff --git a/sca-cpp/trunk/modules/java/eval.hpp b/sca-cpp/trunk/modules/java/eval.hpp index 7da1f20a38..a1cf6ae576 100644 --- a/sca-cpp/trunk/modules/java/eval.hpp +++ b/sca-cpp/trunk/modules/java/eval.hpp @@ -26,6 +26,7 @@ * Java component implementation evaluation logic. */ #include <jni.h> +#include <apr_uuid.h> #include "list.hpp" #include "value.hpp" @@ -46,6 +47,7 @@ namespace java { * Represent a Java VM runtime. */ jobject JNICALL nativeInvoke(JNIEnv *env, jobject self, jobject proxy, jobject method, jobjectArray args); +jobject JNICALL nativeUUID(JNIEnv *env); class JavaRuntime { public: @@ -133,13 +135,21 @@ public: iterableIsNil = env->GetStaticMethodID(iterableUtilClass, "isNil", "(Ljava/lang/Object;)Z"); iterableCar = env->GetStaticMethodID(iterableUtilClass, "car", "(Ljava/lang/Object;)Ljava/lang/Object;"); iterableCdr = env->GetStaticMethodID(iterableUtilClass, "cdr", "(Ljava/lang/Object;)Ljava/lang/Iterable;"); + uuidClass = env->FindClass("org/apache/tuscany/UUIDUtil"); // Register our native invocation handler function - JNINativeMethod nm; - nm.name = const_cast<char*>("invoke"); - nm.signature = const_cast<char*>("(Ljava/lang/Object;Ljava/lang/reflect/Method;[Ljava/lang/Object;)Ljava/lang/Object;"); - nm.fnPtr = (void*)nativeInvoke; - env->RegisterNatives(invokerClass, &nm, 1); + JNINativeMethod invokenm; + invokenm.name = const_cast<char*>("invoke"); + invokenm.signature = const_cast<char*>("(Ljava/lang/Object;Ljava/lang/reflect/Method;[Ljava/lang/Object;)Ljava/lang/Object;"); + invokenm.fnPtr = (void*)nativeInvoke; + env->RegisterNatives(invokerClass, &invokenm, 1); + + // Register our native UUID function + JNINativeMethod uuidnm; + uuidnm.name = const_cast<char*>("uuid"); + uuidnm.signature = const_cast<char*>("()Ljava/lang/String;"); + uuidnm.fnPtr = (void*)nativeUUID; + env->RegisterNatives(uuidClass, &uuidnm, 1); } JavaVM* jvm; @@ -173,6 +183,7 @@ public: jmethodID iterableCar; jmethodID iterableCdr; jmethodID iterableIsNil; + jclass uuidClass; }; /** @@ -247,8 +258,8 @@ public: }; /** - * Invocation handler invoke method, dispatches to the lambda function wrapped - * in the invocation handler. + * Native implementation of the InvocationHandler.invoke Java method. + * Dispatches the call to the lambda function wrapped in the invocation handler. */ jobject JNICALL nativeInvoke(JNIEnv* env, jobject self, unused jobject proxy, jobject method, jobjectArray args) { @@ -277,6 +288,19 @@ jobject JNICALL nativeInvoke(JNIEnv* env, jobject self, unused jobject proxy, jo } /** + * Native implementation of IterableUtil.uuid. We are providing a native implementation + * of this function as java.util.UUID seems to behave differently with different JDKs. + */ +jobject JNICALL nativeUUID(JNIEnv* env) { + apr_uuid_t uuid; + apr_uuid_get(&uuid); + char buf[APR_UUID_FORMATTED_LENGTH]; + apr_uuid_format(buf, &uuid); + string s(buf, APR_UUID_FORMATTED_LENGTH); + return env->NewStringUTF(c_str(s)); +} + +/** * Convert a lambda function to Java proxy. */ const jobject mkJavaLambda(const JavaRuntime& jr, unused const value& iface, const lambda<value(const list<value>&)>& l) { diff --git a/sca-cpp/trunk/modules/java/org/apache/tuscany/UUIDUtil.java b/sca-cpp/trunk/modules/java/org/apache/tuscany/UUIDUtil.java new file mode 100644 index 0000000000..60076c62ca --- /dev/null +++ b/sca-cpp/trunk/modules/java/org/apache/tuscany/UUIDUtil.java @@ -0,0 +1,32 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.tuscany; + +/** + * A fast and portable UUID generator function. + */ +public class UUIDUtil { + + /** + * Return a UUID. + */ + public static native String uuid(); + +} diff --git a/sca-cpp/trunk/modules/wsgi/wsgi-stop b/sca-cpp/trunk/modules/wsgi/wsgi-stop index fa6f42d643..d1e09185f4 100755 --- a/sca-cpp/trunk/modules/wsgi/wsgi-stop +++ b/sca-cpp/trunk/modules/wsgi/wsgi-stop @@ -24,4 +24,4 @@ port=$1 python_prefix=`cat $here/../python/python.prefix` py="$python_prefix/bin/python composite.py $port" -kill `ps -f | grep -v grep | grep "${py}" | awk '{ print $2 }'` +kill `ps -ef | grep -v grep | grep "${py}" | awk '{ print $2 }'` diff --git a/sca-cpp/trunk/test/store-cpp/store.composite b/sca-cpp/trunk/test/store-cpp/store.composite index 3839a8b816..056f7b4c68 100644 --- a/sca-cpp/trunk/test/store-cpp/store.composite +++ b/sca-cpp/trunk/test/store-cpp/store.composite @@ -50,7 +50,7 @@ </component> <component name="Cache"> - <implementation.cpp path="../../components/cache/.libs" library="libmcache"/> + <implementation.cpp path="../../components/cache/.libs" library="libmemcache"/> <service name="Cache"> <t:binding.atom uri="cache"/> </service> diff --git a/sca-cpp/trunk/test/store-java/store.composite b/sca-cpp/trunk/test/store-java/store.composite index 5024d79ee6..8d733db134 100644 --- a/sca-cpp/trunk/test/store-java/store.composite +++ b/sca-cpp/trunk/test/store-java/store.composite @@ -50,7 +50,7 @@ </component> <component name="Cache"> - <implementation.cpp path="../../components/cache/.libs" library="libmcache"/> + <implementation.cpp path="../../components/cache/.libs" library="libmemcache"/> <service name="Cache"> <t:binding.atom uri="cache"/> </service> diff --git a/sca-cpp/trunk/test/store-java/store/ShoppingCartImpl.java b/sca-cpp/trunk/test/store-java/store/ShoppingCartImpl.java index 6620cbbbb0..878e0cff49 100644 --- a/sca-cpp/trunk/test/store-java/store/ShoppingCartImpl.java +++ b/sca-cpp/trunk/test/store-java/store/ShoppingCartImpl.java @@ -14,14 +14,13 @@ * "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. */ package store; import static org.apache.tuscany.IterableUtil.*; - -import java.util.UUID; +import static org.apache.tuscany.UUIDUtil.*; import org.apache.tuscany.Service; @@ -44,17 +43,10 @@ public class ShoppingCartImpl { } /** - * Returns a UUID. - */ - String uuid() { - return UUID.randomUUID().toString(); - } - - /** * Post a new item to the cart. Create a new cart if necessary. */ public Iterable<String> post(final Iterable<String> collection, final Iterable<?> item, final Service cache) { - final String id = this.uuid(); + final String id = uuid(); final Iterable<?> newItem = list(car(item), id, caddr(item)); final Iterable<?> cart = cons(newItem, this.getcart(cartId, cache)); final Iterable<String> iid = list(cartId); @@ -65,7 +57,7 @@ public class ShoppingCartImpl { /** * Find an item in the cart. */ - public Iterable<?> find(final String id, final Iterable<?> cart) { + Iterable<?> find(final String id, final Iterable<?> cart) { if(isNil(cart)) return cons("Item", list("0", list())); if(id.equals(cadr(car(cart)))) diff --git a/sca-cpp/trunk/test/store-python/store.composite b/sca-cpp/trunk/test/store-python/store.composite index 8dc9950204..889f514624 100644 --- a/sca-cpp/trunk/test/store-python/store.composite +++ b/sca-cpp/trunk/test/store-python/store.composite @@ -60,7 +60,7 @@ </component> <component name="Cache"> - <implementation.cpp path="../../components/cache/.libs" library="libmcache"/> + <implementation.cpp path="../../components/cache/.libs" library="libmemcache"/> <service name="Cache"> <t:binding.atom uri="cache"/> </service> diff --git a/sca-cpp/trunk/test/store-scheme/store.composite b/sca-cpp/trunk/test/store-scheme/store.composite index 94e066acad..36b155b595 100644 --- a/sca-cpp/trunk/test/store-scheme/store.composite +++ b/sca-cpp/trunk/test/store-scheme/store.composite @@ -60,7 +60,7 @@ </component> <component name="Cache"> - <implementation.cpp path="../../components/cache/.libs" library="libmcache"/> + <implementation.cpp path="../../components/cache/.libs" library="libmemcache"/> <service name="Cache"> <t:binding.atom uri="cache"/> </service> |