You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by js...@apache.org on 2010/02/01 08:57:33 UTC

svn commit: r905203 - in /tuscany/sca-cpp/trunk: ./ components/chat/ components/queue/

Author: jsdelfino
Date: Mon Feb  1 07:57:32 2010
New Revision: 905203

URL: http://svn.apache.org/viewvc?rev=905203&view=rev
Log:
Added build configuration and dependencies for chat and queue components.

Added:
    tuscany/sca-cpp/trunk/components/chat/chat-listener.cpp
    tuscany/sca-cpp/trunk/components/chat/chat-sender.cpp
      - copied, changed from r904734, tuscany/sca-cpp/trunk/components/chat/chat.composite
    tuscany/sca-cpp/trunk/components/chat/server-test.scm
    tuscany/sca-cpp/trunk/components/chat/xmpp.hpp
      - copied, changed from r904734, tuscany/sca-cpp/trunk/components/chat/chat.composite
    tuscany/sca-cpp/trunk/components/queue/qpid.hpp
    tuscany/sca-cpp/trunk/components/queue/queue-listener.cpp
    tuscany/sca-cpp/trunk/components/queue/queue-sender.cpp
    tuscany/sca-cpp/trunk/components/queue/server-test.scm
Modified:
    tuscany/sca-cpp/trunk/INSTALL
    tuscany/sca-cpp/trunk/README
    tuscany/sca-cpp/trunk/components/chat/Makefile.am
    tuscany/sca-cpp/trunk/components/chat/chat.composite
    tuscany/sca-cpp/trunk/components/queue/Makefile.am
    tuscany/sca-cpp/trunk/components/queue/queue.composite
    tuscany/sca-cpp/trunk/configure.ac

Modified: tuscany/sca-cpp/trunk/INSTALL
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/INSTALL?rev=905203&r1=905202&r2=905203&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/INSTALL (original)
+++ tuscany/sca-cpp/trunk/INSTALL Mon Feb  1 07:57:32 2010
@@ -14,32 +14,44 @@
 doxygen-1.6.1
 
 Install the following binaries:
-curl-7.19.5
-memcached-1.2.8
+curl-7.19.5 (http://curl.haxx.se)
+memcached-1.2.8 (http://memcached.org/)
 
 
 Then install the following development dependencies:
 
-HTTP server and APR
-httpd-2.2-13
-libapr-1-0.3.8
+Apache HTTP server and APR:
+httpd-2.2-13 (http://httpd.apache.org/)
+libapr-1-0.3.8 (http://apr.apache.org/)
 libaprutil-1-0.3.9
 
-XML
-libxml2-2.7.5
+XML:
+libxml2-2.7.5 (http://xmlsoft.org/)
 
-CURL
-libcurl4-7.19.5
+CURL:
+libcurl4-7.19.5 (http://curl.haxx.se)
 
-JSON
-SpiderMonkey libmozjs
-(included in xulrunner-1.9.1.7)
+JSON:
+Mozilla SpiderMonkey libmozjs (http://www.mozilla.org/js/spidermonkey/)
+included in xulrunner-1.9.1.7
 
 Optional dependencies:
 
-Axis2/C 1.6.0
-Python 2.6
-a Java 6 SDK
+Web Services:
+Apache Axis2/C 1.6.0 (http://ws.apache.org/axis2/c/)
+
+Queueing:
+Apache Qpid/C++ 0.6 (http://qpid.apache.org/)
+
+Python:
+Python 2.6 (http://www.python.org/)
+
+Java:
+a Java 5+ JDK (http://openjdk.java.net/, http://harmony.apache.org/)
+
+XMPP Chat:
+Libstrophe (http://code.stanziq.com/cgit/strophe/libstrophe/)
+build it from source at git://code.stanziq.com//libstrophe
 
 
 To configure the Tuscany SCA build do this:
@@ -61,9 +73,15 @@
 To enable support for Java component implementations:
 --enable-java
 
-To build the Web service utility component (using Axis2C):
+To build the Web service utility component (requires Apache Axis2/C):
 --enable-webservice
 
+To build the Queue utility component (requires Apache Qpid/C++):
+--enable-queue
+
+To build the Chat utility component (requires Libstrophe):
+--enable-chat
+
 To generate doxygen documentation, add:
 --enable-doxygen
 
@@ -72,18 +90,20 @@
 ./configure --help
 
 
-Here's an example configuration, tested on Ubuntu 9.10, with development
-dependencies installed in the standard directories and HTTPD and Axis2C
-installed under $HOME:
+Here's an example configuration, tested on Ubuntu 9.10, with the system
+dependencies installed in the standard system directories and some of the
+dependencies installed under $HOME:
 
 ./configure --prefix=$HOME/tuscany-sca-cpp-bin \
 --with-apr=$HOME/httpd-2.2.13-bin --with-httpd=$HOME/httpd-2.2.13-bin \
---with-curl=/usr --with-libxml2=/usr \
+--with-libcurl=/usr --with-libxml2=/usr \
 --with-js-include=/usr/include/xulrunner-1.9.1.7/unstable \
 --with-js-lib=/usr/lib/xulrunner-1.9.1.7 \
 --enable-python --with-python=/usr \
 --enable-java --with-java=/usr/lib/jvm/default-java \
 --enable-webservice --with-axis2c=$HOME/axis2c-1.6.0-bin \
+--enable-queue --with-qpidc=$HOME/qpidc-0.6-bin \
+--enable-chat --with-libstrophe=$HOME/libstrophe \
 --enable-maintainer-mode
 
 
@@ -113,17 +133,35 @@
 Building dependencies from source
 =================================
 
-Here are example build and install steps for HTTPD (including APR) and Axis2/C:
+Here are example build and install steps for some of the dependencies.
 
+Apache HTTPD, including APR:
 ./configure --enable-ssl --enable-proxy --enable-rewrite --with-included-apr \
 --with-mpm=prefork --prefix=$HOME/httpd-2.2.13-bin
 make
 make install
 export PATH=$HOME/httpd-2-2.13-bin/bin:$PATH
 
+Apache Axis2/C:
 ./configure --enable-libxml2 --enable-openssl --enable-libcurl \
 --with-apache2=$HOME/httpd-2.2.13-bin/include --prefix=$HOME/axis2c-1.6.0-bin
 make
 make install
 export AXIS2C_HOME=$HOME/axis2c-1.6.0-bin
 
+Apache Qpid/C++:
+./configure --prefix=$HOME/qpidc-0.6-bin
+make
+make install
+
+Libstrophe:
+git clone git://code.stanziq.com/libstrophe
+cd libstrophe
+git submodule init
+git submodule update
+aclocal
+automake --add-missing --foreign --copy
+autoconf
+./configure
+make
+

Modified: tuscany/sca-cpp/trunk/README
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/README?rev=905203&r1=905202&r2=905203&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/README (original)
+++ tuscany/sca-cpp/trunk/README Mon Feb  1 07:57:32 2010
@@ -37,15 +37,14 @@
  |   |   |-- python           Support for Python components
  |   |   |-- scheme           Support for Scheme components
  |   |   |-- server           Apache HTTPD server integration
- |   |   |-- xmpp             XMPP protocol support
  |   |
  |   |-- components           Useful SCA components
- |   |   |-- cache            Key/value cache (requires Memcached)
+ |   |   |-- cache            Key/value cache
  |   |   |-- chat             XMPP chat
  |   |   |-- log              Logger
- |   |   |-- queue            AMQP message queue (requires Apache Qpid/C++)
+ |   |   |-- queue            AMQP message queue
  |   |   |-- store            Persistent store
- |   |   |-- webservice       Web service gateway (requires Apache Axis2/C)
+ |   |   |-- webservice       Web service gateway
  |   |
  |   |-- test                 Integration tests
  |   |

Modified: tuscany/sca-cpp/trunk/components/chat/Makefile.am
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/components/chat/Makefile.am?rev=905203&r1=905202&r2=905203&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/components/chat/Makefile.am (original)
+++ tuscany/sca-cpp/trunk/components/chat/Makefile.am Mon Feb  1 07:57:32 2010
@@ -15,6 +15,17 @@
 #  specific language governing permissions and limitations
 #  under the License.
 
-if WANT_STORE
+if WANT_CHAT
+
+INCLUDES = -I${LIBSTROPHE_INCLUDE}
+
+compdir=$(prefix)/components/chat
+comp_LTLIBRARIES = libchat-sender.la libchat-listener.la
+
+libchat_sender_la_SOURCES = chat-sender.cpp
+libchat_sender_la_LDFLAGS = -L${LIBSTROPHE_LIB} -R${LIBSTROPHE_LIB} -lstrophe -lexpat -lssl -lresolv
+
+libchat_listener_la_SOURCES = chat-listener.cpp
+libchat_listener_la_LDFLAGS = -L${LIBSTROPHE_LIB} -R${LIBSTROPHE_LIB} -lstrophe -lexpat -lssl -lresolv
 
 endif

Added: tuscany/sca-cpp/trunk/components/chat/chat-listener.cpp
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/components/chat/chat-listener.cpp?rev=905203&view=auto
==============================================================================
--- tuscany/sca-cpp/trunk/components/chat/chat-listener.cpp (added)
+++ tuscany/sca-cpp/trunk/components/chat/chat-listener.cpp Mon Feb  1 07:57:32 2010
@@ -0,0 +1,57 @@
+/*
+ * 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.
+ */
+
+/* $Rev$ $Date$ */
+
+/**
+ * XMPP chat listener component implementation.
+ */
+
+#include "string.hpp"
+#include "function.hpp"
+#include "list.hpp"
+#include "value.hpp"
+#include "monad.hpp"
+#include "xmpp.hpp"
+
+namespace tuscany {
+namespace chat {
+
+/**
+ * Initialize the component.
+ */
+const failable<value> init(unused const list<value>& params) {
+    //TODO establish a session with an XMPP server for a JID and mark the current server instance busy
+
+    return value(true);
+}
+
+}
+}
+
+extern "C" {
+
+const tuscany::value apply(const tuscany::list<tuscany::value>& params) {
+    const tuscany::value func(car(params));
+    if (func == "init")
+        return tuscany::chat::init(cdr(params));
+    return tuscany::mkfailure<tuscany::value>(tuscany::string("Function not supported: ") + func);
+}
+
+}

Copied: tuscany/sca-cpp/trunk/components/chat/chat-sender.cpp (from r904734, tuscany/sca-cpp/trunk/components/chat/chat.composite)
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/components/chat/chat-sender.cpp?p2=tuscany/sca-cpp/trunk/components/chat/chat-sender.cpp&p1=tuscany/sca-cpp/trunk/components/chat/chat.composite&r1=904734&r2=905203&rev=905203&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/components/chat/chat.composite (original)
+++ tuscany/sca-cpp/trunk/components/chat/chat-sender.cpp Mon Feb  1 07:57:32 2010
@@ -1,5 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
+/*
  * 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
@@ -7,27 +6,53 @@
  * 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.    
--->
-<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="chat">
-        
-    <component name="chat">
-        <implementation.cpp path=".libs" library="libchat"/>
-        <property name="jid">sample@apache.org</property>
-        <service name="chat">
-            <t:binding.http uri="chat"/>
-        </service>
-    </component>     
+ * under the License.
+ */
 
-</composite>
+/* $Rev$ $Date$ */
+
+/**
+ * XMPP chat sender component implementation.
+ */
+
+#include "string.hpp"
+#include "function.hpp"
+#include "list.hpp"
+#include "value.hpp"
+#include "monad.hpp"
+#include "xmpp.hpp"
+
+namespace tuscany {
+namespace chat {
+
+/**
+ * Post an item to an XMPP JID.
+ */
+const failable<value> post(unused const list<value>& params) {
+
+    //TODO post the item
+
+    return value(true);
+}
+
+}
+}
+
+extern "C" {
+
+const tuscany::value apply(const tuscany::list<tuscany::value>& params) {
+    const tuscany::value func(car(params));
+    if (func == "post")
+        return tuscany::chat::post(cdr(params));
+    return tuscany::mkfailure<tuscany::value>(tuscany::string("Function not supported: ") + func);
+}
+
+}

Modified: tuscany/sca-cpp/trunk/components/chat/chat.composite
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/components/chat/chat.composite?rev=905203&r1=905202&r2=905203&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/components/chat/chat.composite (original)
+++ tuscany/sca-cpp/trunk/components/chat/chat.composite Mon Feb  1 07:57:32 2010
@@ -22,11 +22,24 @@
   targetNamespace="http://tuscany.apache.org/xmlns/sca/components"
   name="chat">
         
-    <component name="chat">
-        <implementation.cpp path=".libs" library="libchat"/>
+    <component name="chat-sender">
+        <implementation.cpp path=".libs" library="libchat-sender"/>
         <property name="jid">sample@apache.org</property>
-        <service name="chat">
-            <t:binding.http uri="chat"/>
+        <service name="chat-sender">
+            <t:binding.http uri="print-sender"/>
+        </service>
+    </component>
+
+    <component name="chat-listener">
+        <implementation.cpp path=".libs" library="libchat-listener"/>
+        <property name="jid">sample@apache.org</property>
+        <reference name="relay" target="print"/>
+    </component>
+
+    <component name="print">
+        <t:implementation.scheme script="server-test.scm"/>
+        <service name="print">
+            <t:binding.http uri="print"/>
         </service>
     </component>     
 

Added: tuscany/sca-cpp/trunk/components/chat/server-test.scm
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/components/chat/server-test.scm?rev=905203&view=auto
==============================================================================
--- tuscany/sca-cpp/trunk/components/chat/server-test.scm (added)
+++ tuscany/sca-cpp/trunk/components/chat/server-test.scm Mon Feb  1 07:57:32 2010
@@ -0,0 +1,3 @@
+; Chat test case
+
+(define (print x) (display x))

Copied: tuscany/sca-cpp/trunk/components/chat/xmpp.hpp (from r904734, tuscany/sca-cpp/trunk/components/chat/chat.composite)
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/components/chat/xmpp.hpp?p2=tuscany/sca-cpp/trunk/components/chat/xmpp.hpp&p1=tuscany/sca-cpp/trunk/components/chat/chat.composite&r1=904734&r2=905203&rev=905203&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/components/chat/chat.composite (original)
+++ tuscany/sca-cpp/trunk/components/chat/xmpp.hpp Mon Feb  1 07:57:32 2010
@@ -1,5 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
+/*
  * 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
@@ -7,27 +6,32 @@
  * 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.    
--->
-<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="chat">
-        
-    <component name="chat">
-        <implementation.cpp path=".libs" library="libchat"/>
-        <property name="jid">sample@apache.org</property>
-        <service name="chat">
-            <t:binding.http uri="chat"/>
-        </service>
-    </component>     
+ * under the License.
+ */
 
-</composite>
+/* $Rev$ $Date$ */
+
+#ifndef tuscany_queue_hpp
+#define tuscany_queue_hpp
+
+/**
+ * XMPP support functions.
+ */
+
+#include "strophe.h"
+
+namespace tuscany {
+namespace chat {
+
+}
+}
+
+#endif /* tuscany_xmpp_hpp */

Modified: tuscany/sca-cpp/trunk/components/queue/Makefile.am
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/components/queue/Makefile.am?rev=905203&r1=905202&r2=905203&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/components/queue/Makefile.am (original)
+++ tuscany/sca-cpp/trunk/components/queue/Makefile.am Mon Feb  1 07:57:32 2010
@@ -17,4 +17,15 @@
 
 if WANT_QUEUE
 
+INCLUDES = -I${QPIDC_INCLUDE}
+
+compdir=$(prefix)/components/queue
+comp_LTLIBRARIES = libqueue-sender.la libqueue-listener.la
+
+libqueue_sender_la_SOURCES = queue-sender.cpp
+libqueue_sender_la_LDFLAGS = -L${QPIDC_LIB} -R${QPIDC_LIB} -lqpidclient
+
+libqueue_listener_la_SOURCES = queue-listener.cpp
+libqueue_listener_la_LDFLAGS = -L${QPIDC_LIB} -R${QPIDC_LIB} -lqpidclient
+
 endif

Added: tuscany/sca-cpp/trunk/components/queue/qpid.hpp
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/components/queue/qpid.hpp?rev=905203&view=auto
==============================================================================
--- tuscany/sca-cpp/trunk/components/queue/qpid.hpp (added)
+++ tuscany/sca-cpp/trunk/components/queue/qpid.hpp Mon Feb  1 07:57:32 2010
@@ -0,0 +1,135 @@
+/*
+ * 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.
+ */
+
+/* $Rev$ $Date$ */
+
+#ifndef tuscany_queue_hpp
+#define tuscany_queue_hpp
+
+/**
+ * AMQP queue access functions.
+ */
+
+// Ignore conversion issues and redundant declarations in Qpid headers
+#ifdef WANT_MAINTAINER_MODE
+#pragma GCC diagnostic ignored "-Wconversion"
+#pragma GCC diagnostic ignored "-Wredundant-decls"
+#endif
+
+#include <qpid/client/Connection.h>
+#include <qpid/client/Session.h>
+
+#include "string.hpp"
+#include "list.hpp"
+#include "value.hpp"
+#include "monad.hpp"
+#include "../../modules/scheme/eval.hpp"
+
+namespace tuscany {
+namespace queue {
+
+/**
+ * Represents a Qpid connection.
+ */
+class QpidConnection {
+public:
+    QpidConnection() : owner(true) {
+        c.open("localhost", 5672);
+    }
+
+    QpidConnection(const QpidConnection& qc) : owner(false), c(qc.c) {
+    }
+
+    ~QpidConnection() {
+        if (!owner)
+            return;
+        c.close();
+    }
+
+private:
+    friend class QpidSession;
+
+    const bool owner;
+    qpid::client::Connection c;
+
+};
+
+/**
+ * Represents a Qpid session.
+ */
+class QpidSession {
+public:
+    QpidSession(QpidConnection& qc) : owner(true), s(qc.c.newSession()) {
+    }
+
+    QpidSession(const QpidSession& qs) : owner(false), s(qs.s) {
+    }
+
+    ~QpidSession() {
+        if (!owner)
+            return;
+        s.close();
+    }
+
+private:
+    friend qpid::client::Session session(const QpidSession& qs);
+
+    const bool owner;
+    qpid::client::Session s;
+};
+
+qpid::client::Session session(const QpidSession& qs) {
+    return qs.s;
+}
+
+/**
+ * Declare a key / AMQP queue pair.
+ */
+const failable<bool> declareQueue(const string& key, const string& name, QpidSession& qs) {
+    session(qs).queueDeclare(qpid::client::arg::queue=c_str(name));
+    session(qs).exchangeBind(qpid::client::arg::exchange="amq.direct", qpid::client::arg::queue=c_str(name), qpid::client::arg::bindingKey=c_str(key));
+    return true;
+}
+
+/**
+ * Post a key / value pair in message to an AMQP broker.
+ */
+const failable<bool> post(const string& key, const value& val, QpidSession& qs) {
+
+    // Convert the value to a string
+    const string vs(scheme::writeValue(val));
+
+    // Send in a message with the given key.
+    qpid::client::Message message;
+    message.getDeliveryProperties().setRoutingKey(c_str(key));
+    message.setData(c_str(vs));
+    session(qs).messageTransfer(qpid::client::arg::content=message,  qpid::client::arg::destination="amq.direct");
+    return true;
+}
+
+}
+}
+
+// Re-enable conversion and redundant declarations warnings
+#ifdef WANT_MAINTAINER_MODE
+#pragma GCC diagnostic warning "-Wconversion"
+#pragma GCC diagnostic warning "-Wredundant-decls"
+#endif
+
+#endif /* tuscany_qpid_hpp */

Added: tuscany/sca-cpp/trunk/components/queue/queue-listener.cpp
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/components/queue/queue-listener.cpp?rev=905203&view=auto
==============================================================================
--- tuscany/sca-cpp/trunk/components/queue/queue-listener.cpp (added)
+++ tuscany/sca-cpp/trunk/components/queue/queue-listener.cpp Mon Feb  1 07:57:32 2010
@@ -0,0 +1,72 @@
+/*
+ * 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.
+ */
+
+/* $Rev$ $Date$ */
+
+/**
+ * AMQP queue listener component implementation.
+ */
+
+#include "string.hpp"
+#include "function.hpp"
+#include "list.hpp"
+#include "value.hpp"
+#include "monad.hpp"
+#include "qpid.hpp"
+
+// Ignore conversion issues and redundant declarations in Qpid headers
+#ifdef WANT_MAINTAINER_MODE
+#pragma GCC diagnostic ignored "-Wconversion"
+#pragma GCC diagnostic ignored "-Wredundant-decls"
+#endif
+
+namespace tuscany {
+namespace queue {
+
+QpidConnection qc;
+
+/**
+ * Initialize the component.
+ */
+const failable<value> init(const list<value>& params) {
+    QpidSession qs(qc);
+
+    // Declare the configured AMQP key / queue pair
+    const value key = ((lambda<value(list<value>)>)caddr(params))(list<value>());
+    const value qname = ((lambda<value(list<value>)>)cadddr(params))(list<value>());
+    declareQueue(key, qname, qs);
+
+    //TODO create a subscription and mark the current server instance busy
+
+    return value(true);
+}
+
+}
+}
+
+extern "C" {
+
+const tuscany::value apply(const tuscany::list<tuscany::value>& params) {
+    const tuscany::value func(car(params));
+    if (func == "init")
+        return tuscany::queue::init(cdr(params));
+    return tuscany::mkfailure<tuscany::value>(tuscany::string("Function not supported: ") + func);
+}
+
+}

Added: tuscany/sca-cpp/trunk/components/queue/queue-sender.cpp
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/components/queue/queue-sender.cpp?rev=905203&view=auto
==============================================================================
--- tuscany/sca-cpp/trunk/components/queue/queue-sender.cpp (added)
+++ tuscany/sca-cpp/trunk/components/queue/queue-sender.cpp Mon Feb  1 07:57:32 2010
@@ -0,0 +1,69 @@
+/*
+ * 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.
+ */
+
+/* $Rev$ $Date$ */
+
+/**
+ * AMQP queue sender component implementation.
+ */
+
+#include "string.hpp"
+#include "function.hpp"
+#include "list.hpp"
+#include "value.hpp"
+#include "monad.hpp"
+#include "qpid.hpp"
+
+// Ignore conversion issues and redundant declarations in Qpid headers
+#ifdef WANT_MAINTAINER_MODE
+#pragma GCC diagnostic ignored "-Wconversion"
+#pragma GCC diagnostic ignored "-Wredundant-decls"
+#endif
+
+namespace tuscany {
+namespace queue {
+
+QpidConnection qc;
+
+/**
+ * Post an item to a queue.
+ */
+const failable<value> post(const list<value>& params) {
+    QpidSession qs(qc);
+
+    // Post the item
+    const value key = ((lambda<value(list<value>)>)cadr(params))(list<value>());
+    post(key, car(params), qs);
+
+    return value(true);
+}
+
+}
+}
+
+extern "C" {
+
+const tuscany::value apply(const tuscany::list<tuscany::value>& params) {
+    const tuscany::value func(car(params));
+    if (func == "post")
+        return tuscany::queue::post(cdr(params));
+    return tuscany::mkfailure<tuscany::value>(tuscany::string("Function not supported: ") + func);
+}
+
+}

Modified: tuscany/sca-cpp/trunk/components/queue/queue.composite
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/components/queue/queue.composite?rev=905203&r1=905202&r2=905203&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/components/queue/queue.composite (original)
+++ tuscany/sca-cpp/trunk/components/queue/queue.composite Mon Feb  1 07:57:32 2010
@@ -24,7 +24,7 @@
         
     <component name="queue-sender">
         <implementation.cpp path=".libs" library="libqueue-sender"/>
-        <property name="uri">amqp://localhost:5672/print</property>
+        <property name="key">print</property>
         <service name="queue-sender">
             <t:binding.http uri="print-sender"/>
         </service>
@@ -32,12 +32,13 @@
 
     <component name="queue-listener">
         <implementation.cpp path=".libs" library="libqueue-listener"/>
-        <property name="uri">amqp://localhost:5672/print</property>
+        <property name="key">print</property>
+        <property name="queue">printq</property>
         <reference name="relay" target="print"/>
     </component>
 
     <component name="print">
-        <t:implementation.scheme script="print.scm"/>
+        <t:implementation.scheme script="server-test.scm"/>
         <service name="print">
             <t:binding.http uri="print"/>
         </service>

Added: tuscany/sca-cpp/trunk/components/queue/server-test.scm
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/components/queue/server-test.scm?rev=905203&view=auto
==============================================================================
--- tuscany/sca-cpp/trunk/components/queue/server-test.scm (added)
+++ tuscany/sca-cpp/trunk/components/queue/server-test.scm Mon Feb  1 07:57:32 2010
@@ -0,0 +1,3 @@
+; Queue test case
+
+(define (print x) (display x))

Modified: tuscany/sca-cpp/trunk/configure.ac
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/configure.ac?rev=905203&r1=905202&r2=905203&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/configure.ac (original)
+++ tuscany/sca-cpp/trunk/configure.ac Mon Feb  1 07:57:32 2010
@@ -54,19 +54,19 @@
   AM_CONDITIONAL([DARWIN], false)
 fi
 
-# Configure path to CURL includes and lib.
-AC_MSG_CHECKING([for curl])
-AC_ARG_WITH([curl], [AC_HELP_STRING([--with-curl=PATH], [path to installed curl [default=/usr]])], [
-  CURL_INCLUDE="${withval}/include"
-  CURL_LIB="${withval}/lib"
+# Configure path to LIBCURL includes and lib.
+AC_MSG_CHECKING([for libcurl])
+AC_ARG_WITH([libcurl], [AC_HELP_STRING([--with-libcurl=PATH], [path to installed libcurl [default=/usr]])], [
+  LIBCURL_INCLUDE="${withval}/include"
+  LIBCURL_LIB="${withval}/lib"
   AC_MSG_RESULT("${withval}")
 ], [
-  CURL_INCLUDE="/usr/include"
-  CURL_LIB="/usr/lib"
+  LIBCURL_INCLUDE="/usr/include"
+  LIBCURL_LIB="/usr/lib"
   AC_MSG_RESULT(/usr)
 ])
-AC_SUBST(CURL_INCLUDE)
-AC_SUBST(CURL_LIB)
+AC_SUBST(LIBCURL_INCLUDE)
+AC_SUBST(LIBCURL_LIB)
 
 # Configure path to libxml2 includes and lib.
 AC_MSG_CHECKING([for libxml2])
@@ -103,9 +103,9 @@
 AC_SUBST(JS_INCLUDE)
 AC_SUBST(JS_LIB)
 
-# Configure path to APR and HTTPD includes and libs.
+# Configure path to Apache APR and HTTPD includes and libs.
 AC_MSG_CHECKING([for apr])
-AC_ARG_WITH([apr], [AC_HELP_STRING([--with-apr=PATH], [path to installed APR [default=/usr/local/apache2]])], [
+AC_ARG_WITH([apr], [AC_HELP_STRING([--with-apr=PATH], [path to installed Apache APR [default=/usr/local/apache2]])], [
   APR_INCLUDE="${withval}/include"
   APR_LIB="${withval}/lib"
   AC_MSG_RESULT("${withval}")
@@ -118,7 +118,7 @@
 AC_SUBST(APR_LIB)
 
 AC_MSG_CHECKING([for httpd])
-AC_ARG_WITH([httpd], [AC_HELP_STRING([--with-httpd=PATH], [path to installed HTTPD [default=/usr/local/apache2]])], [
+AC_ARG_WITH([httpd], [AC_HELP_STRING([--with-httpd=PATH], [path to installed Apache HTTPD [default=/usr/local/apache2]])], [
   HTTPD_INCLUDE="${withval}/include"
   AC_MSG_RESULT("${withval}")
 ], [
@@ -140,7 +140,7 @@
 defaultlibs="${LIBS}"
 
 # Configure default includes.
-cxxflags="${cxxflags} ${INCLUDES} -I. -I${TUSCANY_SCACPP}/kernel -I${APR_INCLUDE} -I${LIBXML2_INCLUDE} -I${JS_INCLUDE} -I${CURL_INCLUDE}"
+cxxflags="${cxxflags} ${INCLUDES} -I. -I${TUSCANY_SCACPP}/kernel -I${APR_INCLUDE} -I${LIBXML2_INCLUDE} -I${JS_INCLUDE} -I${LIBCURL_INCLUDE}"
 
 # Check for libraries required by all modules and add them to LD options.
 AC_MSG_NOTICE([checking for required libraries])
@@ -149,13 +149,13 @@
 ldflags="${ldflags} -L${APR_LIB} -R${APR_LIB} -lapr-1 -laprutil-1"
 
 # Check for libraries only required by some modules and add their search path to LD options.  
-LIBS="-L${CURL_LIB} ${defaultlibs}"
-AC_CHECK_LIB([curl], [curl_global_init], [], [AC_MSG_ERROR([couldn't find a suitable libcurl, use --with-curl=PATH])])
+LIBS="-L${LIBCURL_LIB} ${defaultlibs}"
+AC_CHECK_LIB([curl], [curl_global_init], [], [AC_MSG_ERROR([couldn't find a suitable libcurl, use --with-libcurl=PATH])])
 LIBS="-L${JS_LIB} ${defaultlibs}"
 AC_CHECK_LIB([mozjs], [JS_NewContext], [], [AC_MSG_ERROR([couldn't find a suitable libmozjs, use --with-js-lib=PATH])])
 LIBS="-L${LIBXML2_LIB} ${defaultlibs}"
 AC_CHECK_LIB([xml2], [xmlInitParser], [], [AC_MSG_ERROR([couldn't find a suitable libxml2, use --with-libxml2=PATH])])
-ldflags="${ldflags} -L${CURL_LIB} -R${CURL_LIB} -L${JS_LIB} -R${JS_LIB} -L${LIBXML2_LIB} -R${LIBXML2_LIB}"
+ldflags="${ldflags} -L${LIBCURL_LIB} -R${LIBCURL_LIB} -L${JS_LIB} -R${JS_LIB} -L${LIBXML2_LIB} -R${LIBXML2_LIB}"
 
 # Check for required header files.
 AC_MSG_NOTICE([checking for header files])
@@ -345,9 +345,9 @@
   AM_CONDITIONAL([WANT_JAVA], false)
 fi
 
-# Configure path to Axis2C includes and lib.
+# Configure path to Apache Axis2C includes and lib.
 AC_MSG_CHECKING([for axis2c])
-AC_ARG_WITH([axis2c], [AC_HELP_STRING([--with-axis2c=PATH], [path to installed Axis2C [default=/usr/local/axis2c]])], [
+AC_ARG_WITH([axis2c], [AC_HELP_STRING([--with-axis2c=PATH], [path to installed Apache Axis2C [default=/usr/local/axis2c]])], [
   AXIS2C_INCLUDE="${withval}/include/axis2-1.6.0"
   AXIS2C_LIB="${withval}/lib"
   AC_MSG_RESULT("${withval}")
@@ -401,6 +401,20 @@
   AM_CONDITIONAL([WANT_STORE], false)
 fi
 
+# Configure path to Apache Qpid/C++ includes and lib.
+AC_MSG_CHECKING([for qpidc])
+AC_ARG_WITH([qpidc], [AC_HELP_STRING([--with-qpidc=PATH], [path to installed Apache Qpid/C++ [default=/usr/local]])], [
+  QPIDC_INCLUDE="${withval}/include"
+  QPIDC_LIB="${withval}/lib"
+  AC_MSG_RESULT("${withval}")
+], [
+  QPIDC_INCLUDE="/usr/local/include"
+  QPIDC_LIB="/usr/local/lib"
+  AC_MSG_RESULT(/usr/local)
+])
+AC_SUBST(QPIDC_INCLUDE)
+AC_SUBST(QPIDC_LIB)
+
 # Enable Queue component.
 AC_MSG_CHECKING([whether to enable the Queue component])
 AC_ARG_ENABLE(queue, [AS_HELP_STRING([--enable-queue], [enable Queue component [default=no]])],
@@ -415,12 +429,28 @@
   esac ],
 [ AC_MSG_RESULT(no)])
 if test "${want_queue}" = "true"; then
+  LIBS="-L${QPIDC_LIB} ${default_LIBS}"
+  #AC_CHECK_LIB([qpidclient], [], [], [AC_MSG_ERROR([couldn't find a suitable libqpidclient, use --with-qpidc=PATH])])
   AM_CONDITIONAL([WANT_QUEUE], true)
   AC_DEFINE([WANT_QUEUE], 1, [enable Queue component])
 else
   AM_CONDITIONAL([WANT_QUEUE], false)
 fi
 
+# Configure path to Libstrophe includes and lib.
+AC_MSG_CHECKING([for libstrophe])
+AC_ARG_WITH([libstrophe], [AC_HELP_STRING([--with-libstrophe=PATH], [path to libstrophe source build [default=${HOME}/libstrophe]])], [
+  LIBSTROPHE_INCLUDE="${withval}"
+  LIBSTROPHE_LIB="${withval}"
+  AC_MSG_RESULT("${withval}")
+], [
+  LIBSTROPHE_INCLUDE="${HOME}/libstrophe"
+  LIBSTROPHE_LIB="${HOME}/libstrophe"
+  AC_MSG_RESULT(${HOME}/libstrophe)
+])
+AC_SUBST(LIBSTROPHE_INCLUDE)
+AC_SUBST(LIBSTROPHE_LIB)
+
 # Enable Chat component.
 AC_MSG_CHECKING([whether to enable the Chat component])
 AC_ARG_ENABLE(chat, [AS_HELP_STRING([--enable-chat], [enable Chat component [default=no]])],
@@ -435,6 +465,8 @@
   esac ],
 [ AC_MSG_RESULT(no)])
 if test "${want_chat}" = "true"; then
+  LIBS="-L${LIBSTROPHE_LIB} ${default_LIBS}"
+  AC_CHECK_LIB([strophe], [xmpp_initialize], [], [AC_MSG_ERROR([couldn't find a suitable libstrophe, use --with-libstrophe=PATH])], [-lexpat -lssl -lresolv])
   AM_CONDITIONAL([WANT_CHAT], true)
   AC_DEFINE([WANT_CHAT], 1, [enable Chat component])
 else