You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@celix.apache.org by ab...@apache.org on 2012/05/14 10:12:18 UTC

svn commit: r1338052 - in /incubator/celix/trunk: framework/private/src/ framework/public/include/ remote_services/ remote_services/discovery/ remote_services/example_proxy/private/src/ remote_services/example_service/ remote_services/remote_service_ad...

Author: abroekhuis
Date: Mon May 14 08:12:17 2012
New Revision: 1338052

URL: http://svn.apache.org/viewvc?rev=1338052&view=rev
Log:
Small updates to Remote Service Admin

Added:
    incubator/celix/trunk/remote_services/utils/
    incubator/celix/trunk/remote_services/utils/CMakeLists.txt
      - copied, changed from r1333342, incubator/celix/trunk/remote_services/example_service/CMakeLists.txt
    incubator/celix/trunk/remote_services/utils/private/
    incubator/celix/trunk/remote_services/utils/private/src/
    incubator/celix/trunk/remote_services/utils/private/src/remote_services_utils.c
    incubator/celix/trunk/remote_services/utils/public/
    incubator/celix/trunk/remote_services/utils/public/include/
    incubator/celix/trunk/remote_services/utils/public/include/remote_constants.h
      - copied, changed from r1333342, incubator/celix/trunk/remote_services/remote_service_admin/public/include/remote_constants.h
    incubator/celix/trunk/remote_services/utils/public/include/remote_services_utils.h
Removed:
    incubator/celix/trunk/remote_services/remote_service_admin/public/include/remote_constants.h
Modified:
    incubator/celix/trunk/framework/private/src/service_registration.c
    incubator/celix/trunk/framework/private/src/service_registry.c
    incubator/celix/trunk/framework/public/include/service_registry.h
    incubator/celix/trunk/remote_services/CMakeLists.txt
    incubator/celix/trunk/remote_services/discovery/CMakeLists.txt
    incubator/celix/trunk/remote_services/example_proxy/private/src/example_proxy_activator.c
    incubator/celix/trunk/remote_services/example_service/CMakeLists.txt
    incubator/celix/trunk/remote_services/remote_service_admin/CMakeLists.txt
    incubator/celix/trunk/remote_services/remote_service_admin/private/src/import_registration_impl.c
    incubator/celix/trunk/remote_services/remote_service_admin/private/src/remote_service_admin_activator.c
    incubator/celix/trunk/remote_services/topology_manager/CMakeLists.txt
    incubator/celix/trunk/remote_services/topology_manager/private/src/activator.c
    incubator/celix/trunk/remote_services/topology_manager/private/src/topology_manager.c

Modified: incubator/celix/trunk/framework/private/src/service_registration.c
URL: http://svn.apache.org/viewvc/incubator/celix/trunk/framework/private/src/service_registration.c?rev=1338052&r1=1338051&r2=1338052&view=diff
==============================================================================
--- incubator/celix/trunk/framework/private/src/service_registration.c (original)
+++ incubator/celix/trunk/framework/private/src/service_registration.c Mon May 14 08:12:17 2012
@@ -57,6 +57,8 @@ struct serviceRegistration {
 	int nrOfServices;
 };
 
+static celix_status_t serviceRegistration_initializeProperties(SERVICE_REGISTRATION registration, PROPERTIES properties);
+
 celix_status_t serviceRegistration_createInternal(apr_pool_t *pool, SERVICE_REGISTRY registry, BUNDLE bundle, char * serviceName, long serviceId,
         void * serviceObject, PROPERTIES dictionary, bool isFactory, SERVICE_REGISTRATION *registration);
 
@@ -75,7 +77,6 @@ SERVICE_REGISTRATION serviceRegistration
 celix_status_t serviceRegistration_createInternal(apr_pool_t *pool, SERVICE_REGISTRY registry, BUNDLE bundle, char * serviceName, long serviceId,
         void * serviceObject, PROPERTIES dictionary, bool isFactory, SERVICE_REGISTRATION *registration) {
     celix_status_t status = CELIX_SUCCESS;
-	char * sId = (char *)malloc(sizeof(serviceId) + 1);
 	SERVICE_REFERENCE reference;
 
     *registration = (SERVICE_REGISTRATION) apr_palloc(pool, sizeof(**registration));
@@ -86,17 +87,6 @@ celix_status_t serviceRegistration_creat
     (*registration)->references = NULL;
     arrayList_create(pool, &(*registration)->references);
 
-	if (dictionary == NULL) {
-		dictionary = properties_create();
-	}
-
-	
-	sprintf(sId, "%ld", serviceId);
-	properties_set(dictionary, (char *) SERVICE_ID, sId);
-	properties_set(dictionary, (char *) OBJECTCLASS, serviceName);
-
-	(*registration)->properties = dictionary;
-
 	(*registration)->serviceId = serviceId;
 	(*registration)->svcObj = serviceObject;
 	if (isFactory) {
@@ -110,7 +100,8 @@ celix_status_t serviceRegistration_creat
 	(*registration)->isUnregistering = false;
 	apr_thread_mutex_create(&(*registration)->mutex, 0, pool);
 
-	free(sId);
+	serviceRegistration_initializeProperties(*registration, dictionary);
+
 	return CELIX_SUCCESS;
 }
 
@@ -126,6 +117,23 @@ void serviceRegistration_destroy(SERVICE
 //	free(registration);
 }
 
+static celix_status_t serviceRegistration_initializeProperties(SERVICE_REGISTRATION registration, PROPERTIES dictionary) {
+	char * sId = (char *)malloc(sizeof(registration->serviceId) + 1);
+
+	if (dictionary == NULL) {
+		dictionary = properties_create();
+	}
+
+	registration->properties = dictionary;
+
+	sprintf(sId, "%ld", registration->serviceId);
+	properties_set(dictionary, (char *) SERVICE_ID, sId);
+	properties_set(dictionary, (char *) OBJECTCLASS, registration->className);
+	free(sId);
+
+	return CELIX_SUCCESS;
+}
+
 bool serviceRegistration_isValid(SERVICE_REGISTRATION registration) {
 	return registration == NULL ? false : registration->svcObj != NULL;
 }
@@ -178,6 +186,16 @@ celix_status_t serviceRegistration_getPr
 	return status;
 }
 
+celix_status_t serviceRegistration_setProperties(SERVICE_REGISTRATION registration, PROPERTIES properties) {
+	PROPERTIES oldProps = registration->properties;
+
+	serviceRegistration_initializeProperties(registration, properties);
+
+	serviceRegistry_servicePropertiesModified(registration->registry, registration, oldProps);
+
+	return CELIX_SUCCESS;
+}
+
 celix_status_t serviceRegistration_getRegistry(SERVICE_REGISTRATION registration, SERVICE_REGISTRY *registry) {
 	celix_status_t status = CELIX_SUCCESS;
 

Modified: incubator/celix/trunk/framework/private/src/service_registry.c
URL: http://svn.apache.org/viewvc/incubator/celix/trunk/framework/private/src/service_registry.c?rev=1338052&r1=1338051&r2=1338052&view=diff
==============================================================================
--- incubator/celix/trunk/framework/private/src/service_registry.c (original)
+++ incubator/celix/trunk/framework/private/src/service_registry.c Mon May 14 08:12:17 2012
@@ -540,3 +540,11 @@ celix_status_t serviceRegistry_getListen
 
 	return status;
 }
+
+celix_status_t serviceRegistry_servicePropertiesModified(SERVICE_REGISTRY registry, SERVICE_REGISTRATION registration, PROPERTIES oldprops) {
+	if (registry->serviceChanged != NULL) {
+		registry->serviceChanged(registry->framework, MODIFIED, registration, oldprops);
+	}
+
+	return CELIX_SUCCESS;
+}

Modified: incubator/celix/trunk/framework/public/include/service_registry.h
URL: http://svn.apache.org/viewvc/incubator/celix/trunk/framework/public/include/service_registry.h?rev=1338052&r1=1338051&r2=1338052&view=diff
==============================================================================
--- incubator/celix/trunk/framework/public/include/service_registry.h (original)
+++ incubator/celix/trunk/framework/public/include/service_registry.h Mon May 14 08:12:17 2012
@@ -55,4 +55,6 @@ celix_status_t serviceRegistry_createSer
 
 celix_status_t serviceRegistry_getListenerHooks(SERVICE_REGISTRY registry, apr_pool_t *pool, ARRAY_LIST *hooks);
 
+celix_status_t serviceRegistry_servicePropertiesModified(SERVICE_REGISTRY registry, SERVICE_REGISTRATION registration, PROPERTIES oldprops);
+
 #endif /* SERVICE_REGISTRY_H_ */

Modified: incubator/celix/trunk/remote_services/CMakeLists.txt
URL: http://svn.apache.org/viewvc/incubator/celix/trunk/remote_services/CMakeLists.txt?rev=1338052&r1=1338051&r2=1338052&view=diff
==============================================================================
--- incubator/celix/trunk/remote_services/CMakeLists.txt (original)
+++ incubator/celix/trunk/remote_services/CMakeLists.txt Mon May 14 08:12:17 2012
@@ -16,6 +16,8 @@
 # under the License.
 
 #add_subdirectory(mongoose)
+add_subdirectory(utils)
+
 add_subdirectory(topology_manager)
 add_subdirectory(remote_service_admin)
 add_subdirectory(discovery)

Modified: incubator/celix/trunk/remote_services/discovery/CMakeLists.txt
URL: http://svn.apache.org/viewvc/incubator/celix/trunk/remote_services/discovery/CMakeLists.txt?rev=1338052&r1=1338051&r2=1338052&view=diff
==============================================================================
--- incubator/celix/trunk/remote_services/discovery/CMakeLists.txt (original)
+++ incubator/celix/trunk/remote_services/discovery/CMakeLists.txt Mon May 14 08:12:17 2012
@@ -17,6 +17,7 @@
 
 include_directories("/opt/local/include")
 include_directories("${PROJECT_SOURCE_DIR}/utils/public/include")
+include_directories("${PROJECT_SOURCE_DIR}/remote_services/utils/public/include")
 include_directories("${PROJECT_SOURCE_DIR}/remote_services/discovery/private/include")
 include_directories("${PROJECT_SOURCE_DIR}/remote_services/endpoint_listener/public/include")
 include_directories("${PROJECT_SOURCE_DIR}/remote_services/remote_service_admin/public/include")

Modified: incubator/celix/trunk/remote_services/example_proxy/private/src/example_proxy_activator.c
URL: http://svn.apache.org/viewvc/incubator/celix/trunk/remote_services/example_proxy/private/src/example_proxy_activator.c?rev=1338052&r1=1338051&r2=1338052&view=diff
==============================================================================
--- incubator/celix/trunk/remote_services/example_proxy/private/src/example_proxy_activator.c (original)
+++ incubator/celix/trunk/remote_services/example_proxy/private/src/example_proxy_activator.c Mon May 14 08:12:17 2012
@@ -69,7 +69,10 @@ celix_status_t bundleActivator_start(voi
 	services[1] = REMOTE_PROXY;
 
 	bundleContext_registerService(context, EXAMPLE_SERVICE, exampleService, NULL, &activator->service);
-	bundleContext_registerService(context, REMOTE_PROXY, exampleProxy, NULL, &activator->proxy);
+
+	PROPERTIES props = properties_create();
+	properties_set(props, (char *) "proxy.interface", (char *) EXAMPLE_SERVICE);
+	bundleContext_registerService(context, REMOTE_PROXY, exampleProxy, props, &activator->proxy);
 
 	return status;
 }

Modified: incubator/celix/trunk/remote_services/example_service/CMakeLists.txt
URL: http://svn.apache.org/viewvc/incubator/celix/trunk/remote_services/example_service/CMakeLists.txt?rev=1338052&r1=1338051&r2=1338052&view=diff
==============================================================================
--- incubator/celix/trunk/remote_services/example_service/CMakeLists.txt (original)
+++ incubator/celix/trunk/remote_services/example_service/CMakeLists.txt Mon May 14 08:12:17 2012
@@ -16,6 +16,7 @@
 # under the License.
 
 include_directories("${PROJECT_SOURCE_DIR}/utils/public/include")
+include_directories("${PROJECT_SOURCE_DIR}/remote_services/utils/public/include")
 include_directories("${PROJECT_SOURCE_DIR}/remote_services/remote_service_admin/public/include")
 include_directories("${PROJECT_SOURCE_DIR}/remote_services/example_service/private/include")
 include_directories("${PROJECT_SOURCE_DIR}/remote_services/example_service/public/include")

Modified: incubator/celix/trunk/remote_services/remote_service_admin/CMakeLists.txt
URL: http://svn.apache.org/viewvc/incubator/celix/trunk/remote_services/remote_service_admin/CMakeLists.txt?rev=1338052&r1=1338051&r2=1338052&view=diff
==============================================================================
--- incubator/celix/trunk/remote_services/remote_service_admin/CMakeLists.txt (original)
+++ incubator/celix/trunk/remote_services/remote_service_admin/CMakeLists.txt Mon May 14 08:12:17 2012
@@ -18,6 +18,7 @@
 link_directories("/opt/local/lib")
 include_directories("/opt/local/include")
 include_directories("${PROJECT_SOURCE_DIR}/utils/public/include")
+include_directories("${PROJECT_SOURCE_DIR}/remote_services/utils/public/include")
 include_directories("${PROJECT_SOURCE_DIR}/remote_services/remote_service_admin/public/include")
 include_directories("${PROJECT_SOURCE_DIR}/remote_services/remote_service_admin/private/include")
 include_directories("${PROJECT_SOURCE_DIR}/remote_services/endpoint_listener/public/include")

Modified: incubator/celix/trunk/remote_services/remote_service_admin/private/src/import_registration_impl.c
URL: http://svn.apache.org/viewvc/incubator/celix/trunk/remote_services/remote_service_admin/private/src/import_registration_impl.c?rev=1338052&r1=1338051&r2=1338052&view=diff
==============================================================================
--- incubator/celix/trunk/remote_services/remote_service_admin/private/src/import_registration_impl.c (original)
+++ incubator/celix/trunk/remote_services/remote_service_admin/private/src/import_registration_impl.c Mon May 14 08:12:17 2012
@@ -9,6 +9,8 @@
 
 #include <apr_strings.h>
 
+#include <constants.h>
+
 #include "celix_errno.h"
 
 #include "import_registration_impl.h"
@@ -83,7 +85,9 @@ celix_status_t importRegistration_create
 		custumizer->modifiedService = importRegistration_proxyModified;
 		custumizer->removedService = importRegistration_proxyRemoved;
 
-		status = serviceTracker_create(registration->pool, registration->context, REMOTE_PROXY, custumizer, tracker);
+		char *filter = apr_pstrcat(registration->pool, "(&(", OBJECTCLASS, "=", REMOTE_PROXY,
+				")(proxy.interface=", registration->endpointDescription->service, "))", NULL);
+		status = serviceTracker_createWithFilter(registration->pool, registration->context, filter, custumizer, tracker);
 	}
 
 	return status;

Modified: incubator/celix/trunk/remote_services/remote_service_admin/private/src/remote_service_admin_activator.c
URL: http://svn.apache.org/viewvc/incubator/celix/trunk/remote_services/remote_service_admin/private/src/remote_service_admin_activator.c?rev=1338052&r1=1338051&r2=1338052&view=diff
==============================================================================
--- incubator/celix/trunk/remote_services/remote_service_admin/private/src/remote_service_admin_activator.c (original)
+++ incubator/celix/trunk/remote_services/remote_service_admin/private/src/remote_service_admin_activator.c Mon May 14 08:12:17 2012
@@ -35,6 +35,8 @@ celix_status_t bundleActivator_create(BU
 				status = CELIX_ENOMEM;
 			} else {
 				activator->pool = pool;
+				activator->admin = NULL;
+				activator->registration = NULL;
 
 				*userData = activator;
 			}

Modified: incubator/celix/trunk/remote_services/topology_manager/CMakeLists.txt
URL: http://svn.apache.org/viewvc/incubator/celix/trunk/remote_services/topology_manager/CMakeLists.txt?rev=1338052&r1=1338051&r2=1338052&view=diff
==============================================================================
--- incubator/celix/trunk/remote_services/topology_manager/CMakeLists.txt (original)
+++ incubator/celix/trunk/remote_services/topology_manager/CMakeLists.txt Mon May 14 08:12:17 2012
@@ -16,9 +16,10 @@
 # under the License.
 
 include_directories("${PROJECT_SOURCE_DIR}/utils/public/include")
+include_directories("${PROJECT_SOURCE_DIR}/remote_services/utils/public/include")
 include_directories("${PROJECT_SOURCE_DIR}/remote_services/topology_manager/private/include")
 include_directories("${PROJECT_SOURCE_DIR}/remote_services/endpoint_listener/public/include")
 include_directories("${PROJECT_SOURCE_DIR}/remote_services/remote_service_admin/public/include")
 
 bundle(topology_manager SOURCES private/src/topology_manager private/src/activator)
-target_link_libraries(topology_manager framework ${APRUTIL_LIBRARY})
+target_link_libraries(topology_manager framework remote_services_utils ${APRUTIL_LIBRARY})

Modified: incubator/celix/trunk/remote_services/topology_manager/private/src/activator.c
URL: http://svn.apache.org/viewvc/incubator/celix/trunk/remote_services/topology_manager/private/src/activator.c?rev=1338052&r1=1338051&r2=1338052&view=diff
==============================================================================
--- incubator/celix/trunk/remote_services/topology_manager/private/src/activator.c (original)
+++ incubator/celix/trunk/remote_services/topology_manager/private/src/activator.c Mon May 14 08:12:17 2012
@@ -9,7 +9,6 @@
 #include <stdlib.h>
 
 #include <apr_strings.h>
-#include <apr_uuid.h>
 
 #include "constants.h"
 #include "bundle_activator.h"
@@ -21,6 +20,8 @@
 #include "remote_constants.h"
 #include "listener_hook_service.h"
 
+#include "remote_services_utils.h"
+
 struct activator {
 	apr_pool_t *pool;
 	BUNDLE_CONTEXT context;
@@ -34,9 +35,8 @@ struct activator {
 	SERVICE_REGISTRATION hook;
 };
 
-celix_status_t bundleActivator_createRSATracker(struct activator *activator, SERVICE_TRACKER *tracker);
-celix_status_t bundleActivator_createServiceListener(struct activator *activator, SERVICE_LISTENER *listener);
-celix_status_t topologyManagerActivator_getUUID(struct activator *activator, char **uuidStr);
+static celix_status_t bundleActivator_createRSATracker(struct activator *activator, SERVICE_TRACKER *tracker);
+static celix_status_t bundleActivator_createServiceListener(struct activator *activator, SERVICE_LISTENER *listener);
 
 celix_status_t bundleActivator_create(BUNDLE_CONTEXT context, void **userData) {
 	celix_status_t status = CELIX_SUCCESS;
@@ -45,31 +45,38 @@ celix_status_t bundleActivator_create(BU
 	struct activator *activator = NULL;
 
 	bundleContext_getMemoryPool(context, &parentPool);
-	apr_pool_create(&pool, parentPool);
-	activator = apr_palloc(pool, sizeof(*activator));
-	if (!activator) {
-		status = CELIX_ENOMEM;
+	if (apr_pool_create(&pool, parentPool) != APR_SUCCESS) {
+		status = CELIX_BUNDLE_EXCEPTION;
 	} else {
-		activator->pool = pool;
-		activator->context = context;
-		activator->endpointListenerService = NULL;
-		activator->hook = NULL;
-		activator->manager = NULL;
-		activator->remoteServiceAdminTracker = NULL;
-		activator->serviceListener = NULL;
-
-		topologyManager_create(context, pool, &activator->manager);
-
-		bundleActivator_createRSATracker(activator, &activator->remoteServiceAdminTracker);
-		bundleActivator_createServiceListener(activator, &activator->serviceListener);
-
-		*userData = activator;
+		activator = apr_palloc(pool, sizeof(*activator));
+		if (!activator) {
+			status = CELIX_ENOMEM;
+		} else {
+			activator->pool = pool;
+			activator->context = context;
+			activator->endpointListenerService = NULL;
+			activator->hook = NULL;
+			activator->manager = NULL;
+			activator->remoteServiceAdminTracker = NULL;
+			activator->serviceListener = NULL;
+
+			status = topologyManager_create(context, pool, &activator->manager);
+			if (status == CELIX_SUCCESS) {
+				status = bundleActivator_createRSATracker(activator, &activator->remoteServiceAdminTracker);
+				if (status == CELIX_SUCCESS) {
+					status = bundleActivator_createServiceListener(activator, &activator->serviceListener);
+					if (status == CELIX_SUCCESS) {
+						*userData = activator;
+					}
+				}
+			}
+		}
 	}
 
 	return status;
 }
 
-celix_status_t bundleActivator_createRSATracker(struct activator *activator, SERVICE_TRACKER *tracker) {
+static celix_status_t bundleActivator_createRSATracker(struct activator *activator, SERVICE_TRACKER *tracker) {
 	celix_status_t status = CELIX_SUCCESS;
 
 	SERVICE_TRACKER_CUSTOMIZER custumizer = (SERVICE_TRACKER_CUSTOMIZER) apr_palloc(activator->pool, sizeof(*custumizer));
@@ -88,7 +95,7 @@ celix_status_t bundleActivator_createRSA
 	return status;
 }
 
-celix_status_t bundleActivator_createServiceListener(struct activator *activator, SERVICE_LISTENER *listener) {
+static celix_status_t bundleActivator_createServiceListener(struct activator *activator, SERVICE_LISTENER *listener) {
 	celix_status_t status = CELIX_SUCCESS;
 	apr_pool_t *pool;
 	apr_pool_create(&pool, activator->pool);
@@ -117,7 +124,7 @@ celix_status_t bundleActivator_start(voi
 
 	PROPERTIES props = properties_create();
 	char *uuid = NULL;
-	topologyManagerActivator_getUUID(activator, &uuid);
+	remoteServicesUtils_getUUID(pool, context, &uuid);
 	char *scope = apr_pstrcat(pool, "(&(", OBJECTCLASS, "=*)(!(", ENDPOINT_FRAMEWORK_UUID, "=", uuid, ")))", NULL);
 	properties_set(props, (char *) ENDPOINT_LISTENER_SCOPE, scope);
 
@@ -152,22 +159,3 @@ celix_status_t bundleActivator_destroy(v
 	celix_status_t status = CELIX_SUCCESS;
 	return status;
 }
-
-celix_status_t topologyManagerActivator_getUUID(struct activator *activator, char **uuidStr) {
-	celix_status_t status = CELIX_SUCCESS;
-	apr_pool_t *pool = NULL;
-	apr_pool_create(&pool, activator->pool);
-
-	status = bundleContext_getProperty(activator->context, ENDPOINT_FRAMEWORK_UUID, uuidStr);
-	if (status == CELIX_SUCCESS) {
-		if (*uuidStr == NULL) {
-			apr_uuid_t uuid;
-			apr_uuid_get(&uuid);
-			*uuidStr = apr_palloc(pool, APR_UUID_FORMATTED_LENGTH + 1);
-			apr_uuid_format(*uuidStr, &uuid);
-			setenv(ENDPOINT_FRAMEWORK_UUID, *uuidStr, 1);
-		}
-	}
-
-	return status;
-}

Modified: incubator/celix/trunk/remote_services/topology_manager/private/src/topology_manager.c
URL: http://svn.apache.org/viewvc/incubator/celix/trunk/remote_services/topology_manager/private/src/topology_manager.c?rev=1338052&r1=1338051&r2=1338052&view=diff
==============================================================================
--- incubator/celix/trunk/remote_services/topology_manager/private/src/topology_manager.c (original)
+++ incubator/celix/trunk/remote_services/topology_manager/private/src/topology_manager.c Mon May 14 08:12:17 2012
@@ -131,7 +131,6 @@ celix_status_t topologyManager_endpointA
 
 	status = topologyManager_importService(manager, endpoint);
 
-
 	return status;
 }
 

Copied: incubator/celix/trunk/remote_services/utils/CMakeLists.txt (from r1333342, incubator/celix/trunk/remote_services/example_service/CMakeLists.txt)
URL: http://svn.apache.org/viewvc/incubator/celix/trunk/remote_services/utils/CMakeLists.txt?p2=incubator/celix/trunk/remote_services/utils/CMakeLists.txt&p1=incubator/celix/trunk/remote_services/example_service/CMakeLists.txt&r1=1333342&r2=1338052&rev=1338052&view=diff
==============================================================================
--- incubator/celix/trunk/remote_services/example_service/CMakeLists.txt (original)
+++ incubator/celix/trunk/remote_services/utils/CMakeLists.txt Mon May 14 08:12:17 2012
@@ -16,12 +16,7 @@
 # under the License.
 
 include_directories("${PROJECT_SOURCE_DIR}/utils/public/include")
-include_directories("${PROJECT_SOURCE_DIR}/remote_services/remote_service_admin/public/include")
-include_directories("${PROJECT_SOURCE_DIR}/remote_services/example_service/private/include")
-include_directories("${PROJECT_SOURCE_DIR}/remote_services/example_service/public/include")
+include_directories("${PROJECT_SOURCE_DIR}/remote_services/utils/public/include")
 
-bundle(example SOURCES 
-	private/src/example_impl
-	private/src/example_activator  
-)
-target_link_libraries(example framework)
+add_library(remote_services_utils STATIC private/src/remote_services_utils.c)
+target_link_libraries(remote_services_utils ${APRUTIL_LIBRARY})

Added: incubator/celix/trunk/remote_services/utils/private/src/remote_services_utils.c
URL: http://svn.apache.org/viewvc/incubator/celix/trunk/remote_services/utils/private/src/remote_services_utils.c?rev=1338052&view=auto
==============================================================================
--- incubator/celix/trunk/remote_services/utils/private/src/remote_services_utils.c (added)
+++ incubator/celix/trunk/remote_services/utils/private/src/remote_services_utils.c Mon May 14 08:12:17 2012
@@ -0,0 +1,36 @@
+/*
+ * remote_services_utils.c
+ *
+ *  Created on: Apr 23, 2012
+ *      Author: alexander
+ */
+#include <stdlib.h>
+#include <stdio.h>
+
+#include <apr_strings.h>
+#include <apr_uuid.h>
+
+#include "remote_constants.h"
+#include "remote_services_utils.h"
+
+celix_status_t remoteServicesUtils_getUUID(apr_pool_t *pool, BUNDLE_CONTEXT context, char **uuidStr) {
+	celix_status_t status = CELIX_SUCCESS;
+
+	status = bundleContext_getProperty(context, ENDPOINT_FRAMEWORK_UUID, uuidStr);
+	if (status == CELIX_SUCCESS) {
+		if (*uuidStr == NULL) {
+			*uuidStr = apr_palloc(pool, APR_UUID_FORMATTED_LENGTH + 1);
+			if (!*uuidStr) {
+				status = CELIX_ENOMEM;
+			} else {
+				apr_uuid_t uuid;
+				apr_uuid_get(&uuid);
+				apr_uuid_format(*uuidStr, &uuid);
+				setenv(ENDPOINT_FRAMEWORK_UUID, *uuidStr, 1);
+			}
+		}
+	}
+
+	return status;
+}
+

Copied: incubator/celix/trunk/remote_services/utils/public/include/remote_constants.h (from r1333342, incubator/celix/trunk/remote_services/remote_service_admin/public/include/remote_constants.h)
URL: http://svn.apache.org/viewvc/incubator/celix/trunk/remote_services/utils/public/include/remote_constants.h?p2=incubator/celix/trunk/remote_services/utils/public/include/remote_constants.h&p1=incubator/celix/trunk/remote_services/remote_service_admin/public/include/remote_constants.h&r1=1333342&r2=1338052&rev=1338052&view=diff
==============================================================================
    (empty)

Added: incubator/celix/trunk/remote_services/utils/public/include/remote_services_utils.h
URL: http://svn.apache.org/viewvc/incubator/celix/trunk/remote_services/utils/public/include/remote_services_utils.h?rev=1338052&view=auto
==============================================================================
--- incubator/celix/trunk/remote_services/utils/public/include/remote_services_utils.h (added)
+++ incubator/celix/trunk/remote_services/utils/public/include/remote_services_utils.h Mon May 14 08:12:17 2012
@@ -0,0 +1,17 @@
+/*
+ * remote_services_utils.h
+ *
+ *  Created on: Apr 23, 2012
+ *      Author: alexander
+ */
+
+#ifndef REMOTE_SERVICES_UTILS_H_
+#define REMOTE_SERVICES_UTILS_H_
+
+#include <apr_general.h>
+#include <bundle_context.h>
+#include <celix_errno.h>
+
+celix_status_t remoteServicesUtils_getUUID(apr_pool_t *pool, BUNDLE_CONTEXT context, char **uuidStr);
+
+#endif /* REMOTE_SERVICES_UTILS_H_ */