diff options
Diffstat (limited to '')
-rwxr-xr-x | sca-cpp/trunk/modules/server/httpd-test | 7 | ||||
-rw-r--r-- | sca-cpp/trunk/modules/server/impl-test.cpp | 2 | ||||
-rw-r--r-- | sca-cpp/trunk/modules/server/mod-cpp.hpp | 29 | ||||
-rw-r--r-- | sca-cpp/trunk/modules/server/mod-eval.cpp | 27 | ||||
-rw-r--r-- | sca-cpp/trunk/modules/server/mod-eval.hpp | 141 | ||||
-rw-r--r-- | sca-cpp/trunk/modules/server/mod-scheme.hpp | 4 | ||||
-rw-r--r-- | sca-cpp/trunk/modules/server/mod-wiring.cpp | 86 | ||||
-rwxr-xr-x | sca-cpp/trunk/modules/server/server-test | 7 | ||||
-rwxr-xr-x | sca-cpp/trunk/modules/server/wiring-test | 7 |
9 files changed, 200 insertions, 110 deletions
diff --git a/sca-cpp/trunk/modules/server/httpd-test b/sca-cpp/trunk/modules/server/httpd-test index 79651c8351..86718f96c5 100755 --- a/sca-cpp/trunk/modules/server/httpd-test +++ b/sca-cpp/trunk/modules/server/httpd-test @@ -24,14 +24,11 @@ echo "Testing..." ./server-conf tmp ./scheme-conf tmp cat >>tmp/conf/httpd.conf <<EOF - -<Location /> SCAContribution `pwd`/ SCAComposite domain-test.composite -</Location> EOF -apachectl -k start -d `pwd`/tmp +../http/httpd-start tmp sleep 2 # Test HTTP GET @@ -71,7 +68,7 @@ if [ "$rc" = "0" ]; then fi # Cleanup -apachectl -k stop -d `pwd`/tmp +../http/httpd-stop tmp sleep 2 if [ "$rc" = "0" ]; then echo "OK" diff --git a/sca-cpp/trunk/modules/server/impl-test.cpp b/sca-cpp/trunk/modules/server/impl-test.cpp index 748e5f3837..51162d070d 100644 --- a/sca-cpp/trunk/modules/server/impl-test.cpp +++ b/sca-cpp/trunk/modules/server/impl-test.cpp @@ -70,7 +70,7 @@ const tuscany::value apply(const tuscany::list<tuscany::value>& params) { return tuscany::server::del(cdr(params)); if (func == "echo") return tuscany::server::echo(cdr(params)); - return tuscany::mkfailure<tuscany::value>(tuscany::string("Function not supported: ") + func); + return tuscany::mkfailure<tuscany::value>(); } } diff --git a/sca-cpp/trunk/modules/server/mod-cpp.hpp b/sca-cpp/trunk/modules/server/mod-cpp.hpp index f10b91dc28..19ba938034 100644 --- a/sca-cpp/trunk/modules/server/mod-cpp.hpp +++ b/sca-cpp/trunk/modules/server/mod-cpp.hpp @@ -37,7 +37,7 @@ #include "monad.hpp" #include "dynlib.hpp" #include "../scheme/driver.hpp" -#include "../http/httpd.hpp" +#include "mod-eval.hpp" namespace tuscany { namespace server { @@ -46,6 +46,21 @@ namespace modcpp { /** * Apply a C++ component implementation function. */ +const list<value> failableResult(const value& func, const list<value>& v) { + if (isNil(cdr(v))) + return v; + + // Report a failure with an empty reason as 'function not supported' + // Except for the start, stop, and restart functions, which are optional + const value reason = cadr(v); + if (length(reason) == 0) { + if (func == "start" || func == "stop" || func == "restart") + return mklist<value>(false); + return mklist<value>(value(), string("Function not supported: ") + func); + } + return v; +} + struct applyImplementation { const lib ilib; const lambda<value(const list<value>&)> impl; @@ -54,7 +69,10 @@ struct applyImplementation { } const value operator()(const list<value>& params) const { debug(params, "modeval::cpp::applyImplementation::input"); - const value val = impl(append(params, px)); + + // Apply the component implementation function + const value val = failableResult(car(params), impl(append(params, px))); + debug(val, "modeval::cpp::applyImplementation::result"); return val; } @@ -64,7 +82,9 @@ struct applyImplementation { * Evaluate a C++ 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) { +const failable<lambda<value(const list<value>&)> > evalImplementation(const string& path, const value& impl, const list<value>& px, unused modeval::ServerConf& sc) { + + // Configure the implementation's lambda function const value ipath(attributeValue("path", impl)); const value iname(attributeValue("library", impl)); const string fpath(isNil(ipath)? path + iname : path + ipath + "/" + iname); @@ -72,7 +92,8 @@ const failable<lambda<value(const list<value>&)> > evalImplementation(const stri const failable<lambda<value(const list<value>&)> > evalf(dynlambda<value(const list<value>&)>("apply", ilib)); if (!hasContent(evalf)) return evalf; - return lambda<value(const list<value>&)>(applyImplementation(ilib, content(evalf), px)); + const lambda<value(const list<value>&)> l(applyImplementation(ilib, content(evalf), px)); + return l; } } diff --git a/sca-cpp/trunk/modules/server/mod-eval.cpp b/sca-cpp/trunk/modules/server/mod-eval.cpp index 54ca171ec4..5a9b87ca2f 100644 --- a/sca-cpp/trunk/modules/server/mod-eval.cpp +++ b/sca-cpp/trunk/modules/server/mod-eval.cpp @@ -37,15 +37,36 @@ namespace server { namespace modeval { /** + * Start the module. + */ +const failable<bool> start(unused ServerConf& sc) { + return true; +} + +/** + * Stop the module. + */ +const failable<bool> stop(unused ServerConf& sc) { + return true; +} + +/** + * Restart the module. + */ +const failable<bool> restart(unused ServerConf& sc) { + return true; +} + +/** * Evaluate a Scheme or C++ 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) { +const failable<lambda<value(const list<value>&)> > evalImplementation(const string& path, const value& impl, const list<value>& px, ServerConf& sc) { const string itype(elementName(impl)); if (contains(itype, ".scheme")) - return modscheme::evalImplementation(path, impl, px); + return modscheme::evalImplementation(path, impl, px, sc); if (contains(itype, ".cpp")) - return modcpp::evalImplementation(path, impl, px); + return modcpp::evalImplementation(path, impl, px, sc); return mkfailure<lambda<value(const list<value>&)> >(string("Unsupported implementation type: ") + itype); } diff --git a/sca-cpp/trunk/modules/server/mod-eval.hpp b/sca-cpp/trunk/modules/server/mod-eval.hpp index b622283fed..0e68e63016 100644 --- a/sca-cpp/trunk/modules/server/mod-eval.hpp +++ b/sca-cpp/trunk/modules/server/mod-eval.hpp @@ -19,6 +19,9 @@ /* $Rev$ $Date$ */ +#ifndef tuscany_modeval_hpp +#define tuscany_modeval_hpp + /** * HTTPD module used to eval component implementations. */ @@ -50,22 +53,13 @@ namespace modeval { */ class ServerConf { public: - ServerConf(server_rec* s) : s(s), home(""), wiringServerName("") { + ServerConf(server_rec* s) : s(s), moduleConf(NULL), home(""), wiringServerName(""), contributionPath(""), compositeName("") { } const server_rec* s; + void* moduleConf; string home; string wiringServerName; -}; - -/** - * Directory configuration. - */ -class DirConf { -public: - DirConf(char* dirspec) : dirspec(dirspec), contributionPath(""), compositeName("") { - } - const char* dirspec; string contributionPath; string compositeName; list<value> implementations; @@ -262,9 +256,9 @@ int handler(request_rec *r) { httpdDebugRequest(r, "modeval::handler::input"); // Get the component implementation lambda - DirConf& dc = httpd::dirConf<DirConf>(r, &mod_tuscany_eval); + const ServerConf& sc = httpd::serverConf<ServerConf>(r, &mod_tuscany_eval); const list<value> path(httpd::pathValues(r->uri)); - const list<value> impl(assoctree<value>(cadr(path), dc.implementations)); + const list<value> impl(assoctree<value>(cadr(path), sc.implementations)); if (isNil(impl)) return HTTP_NOT_FOUND; @@ -322,8 +316,8 @@ const list<value> propProxies(const list<value>& props) { /** * Evaluate a component and convert it to an applicable lambda function. */ -const value evalComponent(DirConf& dc, 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 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, ServerConf& sc); const value impl = scdl::implementation(comp); @@ -342,23 +336,19 @@ const value evalComponent(DirConf& dc, ServerConf& sc, server_rec& server, const const list<value> ppx(propProxies(scdl::properties(comp))); // Evaluate the component implementation and convert it to an applicable lambda function - const failable<lambda<value(const list<value>&)> > cimpl(evalImplementation(dc.contributionPath, impl, append(rpx, ppx))); + const failable<lambda<value(const list<value>&)> > cimpl(evalImplementation(sc.contributionPath, impl, append(rpx, ppx), sc)); if (!hasContent(cimpl)) return reason(cimpl); return content(cimpl); } /** - * Return a tree of component-name + configured-implementation pairs. + * Return a list of component-name + configured-implementation pairs. */ -const list<value> componentToImplementationAssoc(DirConf& dc, ServerConf& sc, server_rec& server, const list<value>& c) { +const list<value> componentToImplementationAssoc(ServerConf& sc, server_rec& server, const list<value>& c) { if (isNil(c)) return c; - return cons<value>(mklist<value>(scdl::name(car(c)), evalComponent(dc, sc, server, car(c))), componentToImplementationAssoc(dc, sc, server, cdr(c))); -} - -const list<value> componentToImplementationTree(DirConf& dc, ServerConf& sc, server_rec& server, const list<value>& c) { - return mkbtree(sort(componentToImplementationAssoc(dc, sc, server, c))); + return cons<value>(mklist<value>(scdl::name(car(c)), evalComponent(sc, server, car(c))), componentToImplementationAssoc(sc, server, cdr(c))); } /** @@ -372,48 +362,73 @@ const failable<list<value> > readComponents(const string& path) { } /** - * Configure the components declared in the deployed composite. + * Apply a list of component implementations to a (start, stop or restart) lifecycle expression. */ -const bool confComponents(DirConf& dc, ServerConf& sc, server_rec& server) { - if (dc.contributionPath == "" || dc.compositeName == "") +const failable<bool> applyLifecycleExpr(const list<value> impls, const list<value>& expr) { + if (isNil(impls)) return true; - const failable<list<value> > comps = readComponents(dc.contributionPath + dc.compositeName); + + // Evaluate lifecycle expression against a component implementation lambda + const lambda<value(const list<value>&)> l(cadr<value>(car(impls))); + const failable<value> r = failableResult(l(expr)); + if (!hasContent(r)) + return mkfailure<bool>(reason(r)); + + return applyLifecycleExpr(cdr(impls), expr); +} + +/** + * Configure the components declared in the deployed composite. + */ +const failable<bool> confComponents(const string& lifecycle, ServerConf& sc, server_rec& server) { + if (sc.contributionPath == "" || sc.compositeName == "") + return false; + + // Read the components and get their implementation lambda functions + const failable<list<value> > comps = readComponents(sc.contributionPath + sc.compositeName); if (!hasContent(comps)) - return true; - dc.implementations = componentToImplementationTree(dc, sc, server, content(comps)); - debug(dc.implementations, "modeval::confComponents::implementations"); - return true; + return mkfailure<bool>(reason(comps)); + const list<value> impls = componentToImplementationAssoc(sc, server, content(comps)); + + // Store the implementation lambda functions in a tree for fast retrieval + sc.implementations = mkbtree(sort(impls)); + debug(sc.implementations, "modeval::confComponents::implementations"); + + // Start or restart the component implementations + return applyLifecycleExpr(impls, mklist<value>(lifecycle)); } /** * Configuration commands. */ -const char *confHome(cmd_parms *cmd, unused void *c, const char *arg) { +const char* confHome(cmd_parms *cmd, unused void *c, const char *arg) { gc_scoped_pool pool(cmd->pool); ServerConf& sc = httpd::serverConf<ServerConf>(cmd, &mod_tuscany_eval); sc.home = arg; return NULL; } -const char *confWiringServerName(cmd_parms *cmd, unused void *c, const char *arg) { +const char* confWiringServerName(cmd_parms *cmd, unused void *c, const char *arg) { gc_scoped_pool pool(cmd->pool); ServerConf& sc = httpd::serverConf<ServerConf>(cmd, &mod_tuscany_eval); sc.wiringServerName = arg; return NULL; } -const char *confContribution(cmd_parms *cmd, void *c, const char *arg) { +const char* confContribution(cmd_parms *cmd, unused void *c, const char *arg) { gc_scoped_pool pool(cmd->pool); ServerConf& sc = httpd::serverConf<ServerConf>(cmd, &mod_tuscany_eval); - DirConf& dc = *(DirConf*)c; - dc.contributionPath = arg; - confComponents(dc, sc, *cmd->server); + sc.contributionPath = arg; return NULL; } -const char *confComposite(cmd_parms *cmd, void *c, const char *arg) { +const char* confComposite(cmd_parms *cmd, unused void *c, const char *arg) { gc_scoped_pool pool(cmd->pool); ServerConf& sc = httpd::serverConf<ServerConf>(cmd, &mod_tuscany_eval); - DirConf& dc = *(DirConf*)c; - dc.compositeName = arg; - confComponents(dc, sc, *cmd->server); + sc.compositeName = arg; + return NULL; +} + +const char* confEnv(unused cmd_parms *cmd, unused void *c, const char *name, const char *value) { + gc_scoped_pool pool(cmd->pool); + setenv(name, value != NULL? value : "", 1); return NULL; } @@ -423,15 +438,49 @@ const char *confComposite(cmd_parms *cmd, void *c, const char *arg) { const command_rec commands[] = { AP_INIT_TAKE1("TuscanyHome", (const char*(*)())confHome, NULL, RSRC_CONF, "Tuscany home directory"), AP_INIT_TAKE1("SCAWiringServerName", (const char*(*)())confWiringServerName, NULL, RSRC_CONF, "SCA wiring server name"), - AP_INIT_TAKE1("SCAContribution", (const char*(*)())confContribution, NULL, ACCESS_CONF, "SCA contribution location"), - AP_INIT_TAKE1("SCAComposite", (const char*(*)())confComposite, NULL, ACCESS_CONF, "SCA composite location"), + AP_INIT_TAKE1("SCAContribution", (const char*(*)())confContribution, NULL, RSRC_CONF, "SCA contribution location"), + AP_INIT_TAKE1("SCAComposite", (const char*(*)())confComposite, NULL, RSRC_CONF, "SCA composite location"), + AP_INIT_TAKE12("SetEnv", (const char*(*)())confEnv, NULL, OR_FILEINFO, "Environment variable name and optional value"), {NULL, NULL, NULL, 0, NO_ARGS, NULL} }; -int postConfig(unused apr_pool_t *p, unused apr_pool_t *plog, unused apr_pool_t *ptemp, unused server_rec *s) { +int postConfig(apr_pool_t *p, unused apr_pool_t *plog, unused apr_pool_t *ptemp, server_rec *s) { + extern const failable<bool> start(ServerConf& sc); + extern const failable<bool> restart(ServerConf& sc); + gc_scoped_pool pool(p); + ServerConf& sc = httpd::serverConf<ServerConf>(s, &mod_tuscany_eval); + + // Count the calls to post config + const string k("tuscany::modeval::postConfig"); + const int count = httpd::userData(k, s); + httpd::putUserData(k, count +1, s); + + // Count == 0, do nothing as post config is always called twice, + // count == 1 is the first start, count > 1 is a restart + if (count == 0) + return OK; + if (count == 1) { + debug("modeval::postConfig::start"); + start(sc); + } + if (count > 1) { + debug("modeval::postConfig::restart"); + restart(sc); + } + + // Configure the components deployed to the server + debug(sc.wiringServerName, "modeval::postConfig::wiringServerName"); + debug(sc.contributionPath, "modeval::postConfig::contributionPath"); + debug(sc.compositeName, "modeval::postConfig::compositeName"); + const failable<bool> res = confComponents(count > 1? "restart" : "start", sc, *s); + if (!hasContent(res)) + return -1; return OK; } +/** + * Child process initialization. + */ void childInit(apr_pool_t* p, server_rec* svr_rec) { gc_scoped_pool pool(p); ServerConf* c = (ServerConf*)ap_get_module_config(svr_rec->module_config, &mod_tuscany_eval); @@ -457,7 +506,7 @@ extern "C" { module AP_MODULE_DECLARE_DATA mod_tuscany_eval = { STANDARD20_MODULE_STUFF, // dir config and merger - tuscany::httpd::makeDirConf<tuscany::server::modeval::DirConf>, NULL, + NULL, NULL, // server config and merger tuscany::httpd::makeServerConf<tuscany::server::modeval::ServerConf>, NULL, // commands and hooks @@ -465,3 +514,5 @@ module AP_MODULE_DECLARE_DATA mod_tuscany_eval = { }; } + +#endif diff --git a/sca-cpp/trunk/modules/server/mod-scheme.hpp b/sca-cpp/trunk/modules/server/mod-scheme.hpp index fd03ebb43e..e18eececf6 100644 --- a/sca-cpp/trunk/modules/server/mod-scheme.hpp +++ b/sca-cpp/trunk/modules/server/mod-scheme.hpp @@ -34,7 +34,7 @@ #include "value.hpp" #include "monad.hpp" #include "../scheme/eval.hpp" -#include "../http/httpd.hpp" +#include "../server/mod-eval.hpp" namespace tuscany { namespace server { @@ -73,7 +73,7 @@ struct applyImplementation { * Evaluate a Scheme 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) { +const failable<lambda<value(const list<value>&)> > evalImplementation(const string& path, const value& impl, const list<value>& px, unused modeval::ServerConf& sc) { const string fpath(path + attributeValue("script", impl)); ifstream is(fpath); if (fail(is)) diff --git a/sca-cpp/trunk/modules/server/mod-wiring.cpp b/sca-cpp/trunk/modules/server/mod-wiring.cpp index aef2f00c83..e21f8be773 100644 --- a/sca-cpp/trunk/modules/server/mod-wiring.cpp +++ b/sca-cpp/trunk/modules/server/mod-wiring.cpp @@ -48,11 +48,16 @@ namespace modwiring { */ class ServerConf { public: - ServerConf(server_rec* s) : s(s), home(""), wiringServerName("") { + ServerConf(server_rec* s) : s(s), start(false), home(""), wiringServerName(""), contributionPath(""), compositeName("") { } const server_rec* s; + bool start; string home; string wiringServerName; + string contributionPath; + string compositeName; + list<value> references; + list<value> services; }; /** @@ -61,20 +66,6 @@ public: const bool useModProxy = true; /** - * Directory configuration. - */ -class DirConf { -public: - DirConf(char* dirspec) : dirspec(dirspec), contributionPath(""), compositeName("") { - } - const char* dirspec; - string contributionPath; - string compositeName; - list<value> references; - list<value> services; -}; - -/** * Returns true if a URI is absolute. */ const bool isAbsolute(const string& uri) { @@ -90,9 +81,9 @@ int translateReference(request_rec *r) { debug(r->uri, "modwiring::translateReference::uri"); // Find the requested component - DirConf& dc = httpd::dirConf<DirConf>(r, &mod_tuscany_wiring); + const ServerConf& sc = httpd::serverConf<ServerConf>(r, &mod_tuscany_wiring); const list<value> rpath(httpd::pathValues(r->uri)); - const list<value> comp(assoctree(cadr(rpath), dc.references)); + const list<value> comp(assoctree(cadr(rpath), sc.references)); if (isNil(comp)) return HTTP_NOT_FOUND; @@ -155,9 +146,9 @@ int translateService(request_rec *r) { debug(r->uri, "modwiring::translateService::uri"); // Find the requested component - DirConf& dc = httpd::dirConf<DirConf>(r, &mod_tuscany_wiring); + const ServerConf& sc = httpd::serverConf<ServerConf>(r, &mod_tuscany_wiring); const list<value> path(httpd::pathValues(r->uri)); - const list<value> svc(assocPath(path, dc.services)); + const list<value> svc(assocPath(path, sc.services)); if (isNil(svc)) return DECLINED; debug(svc, "modwiring::translateService::service"); @@ -282,16 +273,19 @@ const list<value> uriToComponentTree(const list<value>& c) { /** * Configure the components declared in the server's deployment composite. */ -const bool confComponents(DirConf& dc) { - if (dc.contributionPath == "" || dc.compositeName == "") +const bool confComponents(ServerConf& sc) { + if (sc.contributionPath == "" || sc.compositeName == "") return true; - const failable<list<value> > comps = readComponents(dc.contributionPath + dc.compositeName); + + // Read the component configuration and store the references and service + // URIs in trees for fast retrieval later + const failable<list<value> > comps = readComponents(sc.contributionPath + sc.compositeName); if (!hasContent(comps)) return true; - dc.references = componentReferenceToTargetTree(content(comps)); - debug(dc.references, "modwiring::confComponents::references"); - dc.services = uriToComponentTree(content(comps)); - debug(dc.services, "modwiring::confComponents::services"); + sc.references = componentReferenceToTargetTree(content(comps)); + debug(sc.references, "modwiring::confComponents::references"); + sc.services = uriToComponentTree(content(comps)); + debug(sc.services, "modwiring::confComponents::services"); return true; } @@ -310,18 +304,16 @@ const char *confWiringServerName(cmd_parms *cmd, unused void *c, const char *arg sc.wiringServerName = arg; return NULL; } -const char *confContribution(cmd_parms *cmd, void *c, const char *arg) { +const char *confContribution(cmd_parms *cmd, unused void *c, const char *arg) { gc_scoped_pool pool(cmd->pool); - DirConf& dc = *(DirConf*)c; - dc.contributionPath = arg; - confComponents(dc); + ServerConf& sc = httpd::serverConf<ServerConf>(cmd, &mod_tuscany_wiring); + sc.contributionPath = arg; return NULL; } -const char *confComposite(cmd_parms *cmd, void *c, const char *arg) { +const char *confComposite(cmd_parms *cmd, unused void *c, const char *arg) { gc_scoped_pool pool(cmd->pool); - DirConf& dc = *(DirConf*)c; - dc.compositeName = arg; - confComponents(dc); + ServerConf& sc = httpd::serverConf<ServerConf>(cmd, &mod_tuscany_wiring); + sc.compositeName = arg; return NULL; } @@ -330,14 +322,28 @@ const char *confComposite(cmd_parms *cmd, void *c, const char *arg) { */ const command_rec commands[] = { AP_INIT_TAKE1("TuscanyHome", (const char*(*)())confHome, NULL, RSRC_CONF, "Tuscany home directory"), - AP_INIT_TAKE1("SCAWiringServerName", (const char*(*)())confWiringServerName, NULL, ACCESS_CONF, "SCA wiring server name"), - AP_INIT_TAKE1("SCAContribution", (const char*(*)())confContribution, NULL, ACCESS_CONF, "SCA contribution location"), - AP_INIT_TAKE1("SCAComposite", (const char*(*)())confComposite, NULL, ACCESS_CONF, "SCA composite location"), + AP_INIT_TAKE1("SCAWiringServerName", (const char*(*)())confWiringServerName, NULL, RSRC_CONF, "SCA wiring server name"), + AP_INIT_TAKE1("SCAContribution", (const char*(*)())confContribution, NULL, RSRC_CONF, "SCA contribution location"), + AP_INIT_TAKE1("SCAComposite", (const char*(*)())confComposite, NULL, RSRC_CONF, "SCA composite location"), {NULL, NULL, NULL, 0, NO_ARGS, NULL} }; -int postConfig(unused apr_pool_t *p, unused apr_pool_t *plog, unused apr_pool_t *ptemp, unused server_rec *s) { - return OK; +int postConfig(unused apr_pool_t *p, unused apr_pool_t *plog, unused apr_pool_t *ptemp, server_rec *s) { + // Count the calls to post config, skip the first one as + // postConfig is always called twice + const string k("tuscany::modwiring::postConfig"); + const int count = httpd::userData(k, s); + httpd::putUserData(k, count +1, s); + if (count == 0) + return OK; + + // Configure the wiring for the deployed components + ServerConf& sc = httpd::serverConf<ServerConf>(s, &mod_tuscany_wiring); + debug(sc.wiringServerName, "modwiring::postConfig::wiringServerName"); + debug(sc.contributionPath, "modwiring::postConfig::contributionPath"); + debug(sc.compositeName, "modwiring::postConfig::compositeName"); + confComponents(sc); + return OK; } void childInit(apr_pool_t* p, server_rec* svr_rec) { @@ -365,7 +371,7 @@ extern "C" { module AP_MODULE_DECLARE_DATA mod_tuscany_wiring = { STANDARD20_MODULE_STUFF, // dir config and merger - tuscany::httpd::makeDirConf<tuscany::server::modwiring::DirConf>, NULL, + NULL, NULL, // server config and merger tuscany::httpd::makeServerConf<tuscany::server::modwiring::ServerConf>, NULL, // commands and hooks diff --git a/sca-cpp/trunk/modules/server/server-test b/sca-cpp/trunk/modules/server/server-test index 97b3fd919b..e1d9932a5d 100755 --- a/sca-cpp/trunk/modules/server/server-test +++ b/sca-cpp/trunk/modules/server/server-test @@ -22,14 +22,11 @@ ./server-conf tmp ./scheme-conf tmp cat >>tmp/conf/httpd.conf <<EOF - -<Location /> SCAContribution `pwd`/ SCAComposite domain-test.composite -</Location> EOF -apachectl -k start -d `pwd`/tmp +../http/httpd-start tmp sleep 2 # Test @@ -37,6 +34,6 @@ sleep 2 rc=$? # Cleanup -apachectl -k stop -d `pwd`/tmp +../http/httpd-stop tmp sleep 2 return $rc diff --git a/sca-cpp/trunk/modules/server/wiring-test b/sca-cpp/trunk/modules/server/wiring-test index 29eef996e6..0deab33d68 100755 --- a/sca-cpp/trunk/modules/server/wiring-test +++ b/sca-cpp/trunk/modules/server/wiring-test @@ -24,14 +24,11 @@ echo "Testing..." ./server-conf tmp ./scheme-conf tmp cat >>tmp/conf/httpd.conf <<EOF - -<Location /> SCAContribution `pwd`/ SCAComposite domain-test.composite -</Location> EOF -apachectl -k start -d `pwd`/tmp +../http/httpd-start tmp sleep 2 # Test HTTP GET @@ -71,7 +68,7 @@ if [ "$rc" = "0" ]; then fi # Cleanup -apachectl -k stop -d `pwd`/tmp +../http/httpd-stop tmp sleep 2 if [ "$rc" = "0" ]; then echo "OK" |