Minor cleanup, renamed mcache to memcache, added a uuid util function to get consistent and unique uuids across languages.
git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@921270 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
39a1a1829a
commit
5a390791d3
19 changed files with 96 additions and 48 deletions
10
sca-cpp/trunk/components/cache/Makefile.am
vendored
10
sca-cpp/trunk/components/cache/Makefile.am
vendored
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -27,7 +27,7 @@
|
|||
#include "stream.hpp"
|
||||
#include "string.hpp"
|
||||
#include "perf.hpp"
|
||||
#include "mcache.hpp"
|
||||
#include "memcache.hpp"
|
||||
|
||||
namespace tuscany {
|
||||
namespace cache {
|
||||
|
|
@ -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>
|
||||
|
||||
|
|
@ -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>();
|
||||
}
|
||||
|
||||
|
|
@ -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 */
|
||||
|
|
@ -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 }'`
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@
|
|||
sleep 1
|
||||
|
||||
# Test
|
||||
./mcache-test 2>/dev/null
|
||||
./memcache-test 2>/dev/null
|
||||
rc=$?
|
||||
|
||||
# Cleanup
|
||||
|
|
|
|||
2
sca-cpp/trunk/components/cache/server-test
vendored
2
sca-cpp/trunk/components/cache/server-test
vendored
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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 }'`
|
||||
|
|
|
|||
|
|
@ -80,7 +80,7 @@ eval-shell
|
|||
json-test
|
||||
cache-test
|
||||
client-test
|
||||
mcache-test
|
||||
memcache-test
|
||||
curl-test
|
||||
scdl-test
|
||||
jni-test
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
||||
|
|
@ -276,6 +287,19 @@ jobject JNICALL nativeInvoke(JNIEnv* env, jobject self, unused jobject proxy, jo
|
|||
return valueToJobject(jl.jr, value(), result);
|
||||
}
|
||||
|
||||
/**
|
||||
* 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.
|
||||
*/
|
||||
|
|
|
|||
32
sca-cpp/trunk/modules/java/org/apache/tuscany/UUIDUtil.java
Normal file
32
sca-cpp/trunk/modules/java/org/apache/tuscany/UUIDUtil.java
Normal file
|
|
@ -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();
|
||||
|
||||
}
|
||||
|
|
@ -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 }'`
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -20,8 +20,7 @@
|
|||
package store;
|
||||
|
||||
import static org.apache.tuscany.IterableUtil.*;
|
||||
|
||||
import java.util.UUID;
|
||||
import static org.apache.tuscany.UUIDUtil.*;
|
||||
|
||||
import org.apache.tuscany.Service;
|
||||
|
||||
|
|
@ -43,18 +42,11 @@ public class ShoppingCartImpl {
|
|||
return cart;
|
||||
}
|
||||
|
||||
/**
|
||||
* 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))))
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue