Return-Path: X-Original-To: apmail-celix-commits-archive@www.apache.org Delivered-To: apmail-celix-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 9AA7CCECB for ; Fri, 19 Dec 2014 08:18:13 +0000 (UTC) Received: (qmail 75089 invoked by uid 500); 19 Dec 2014 08:18:13 -0000 Delivered-To: apmail-celix-commits-archive@celix.apache.org Received: (qmail 74831 invoked by uid 500); 19 Dec 2014 08:18:13 -0000 Mailing-List: contact commits-help@celix.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@celix.apache.org Delivered-To: mailing list commits@celix.apache.org Received: (qmail 74810 invoked by uid 99); 19 Dec 2014 08:18:13 -0000 Received: from eris.apache.org (HELO hades.apache.org) (140.211.11.105) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 19 Dec 2014 08:18:13 +0000 Received: from hades.apache.org (localhost [127.0.0.1]) by hades.apache.org (ASF Mail Server at hades.apache.org) with ESMTP id 4D390AC08CC; Fri, 19 Dec 2014 08:18:11 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1646648 - in /celix/trunk: dependency_manager_2/ dependency_manager_2/private/include/ dependency_manager_2/private/src/ dependency_manager_2/public/include/ examples/ examples/whiteboard/publisherA/ examples/whiteboard/publisherB/ example... Date: Fri, 19 Dec 2014 08:18:10 -0000 To: commits@celix.apache.org From: abroekhuis@apache.org X-Mailer: svnmailer-1.0.9 Message-Id: <20141219081812.4D390AC08CC@hades.apache.org> Author: abroekhuis Date: Fri Dec 19 08:18:09 2014 New Revision: 1646648 URL: http://svn.apache.org/r1646648 Log: Update dep manager code, updated example for testing. Added: celix/trunk/dependency_manager_2/private/src/dm_event.c Modified: celix/trunk/dependency_manager_2/CMakeLists.txt celix/trunk/dependency_manager_2/private/include/dm_component_impl.h celix/trunk/dependency_manager_2/private/include/dm_service_dependency_impl.h celix/trunk/dependency_manager_2/private/src/dm_activator_base.c celix/trunk/dependency_manager_2/private/src/dm_component_impl.c celix/trunk/dependency_manager_2/private/src/dm_service_dependency.c celix/trunk/dependency_manager_2/public/include/dm_activator_base.h celix/trunk/dependency_manager_2/public/include/dm_component.h celix/trunk/dependency_manager_2/public/include/dm_event.h celix/trunk/dependency_manager_2/public/include/dm_service_dependency.h celix/trunk/examples/CMakeLists.txt celix/trunk/examples/deploy.cmake celix/trunk/examples/whiteboard/publisherA/CMakeLists.txt celix/trunk/examples/whiteboard/publisherB/CMakeLists.txt celix/trunk/examples/whiteboard/tracker/CMakeLists.txt celix/trunk/examples/whiteboard/tracker/private/src/activator.c celix/trunk/examples/whiteboard/tracker_depman/CMakeLists.txt celix/trunk/examples/whiteboard/tracker_depman/private/include/tracker.h celix/trunk/examples/whiteboard/tracker_depman/private/src/dependency_activator.c celix/trunk/examples/whiteboard/tracker_depman/private/src/tracker.c Modified: celix/trunk/dependency_manager_2/CMakeLists.txt URL: http://svn.apache.org/viewvc/celix/trunk/dependency_manager_2/CMakeLists.txt?rev=1646648&r1=1646647&r2=1646648&view=diff ============================================================================== --- celix/trunk/dependency_manager_2/CMakeLists.txt (original) +++ celix/trunk/dependency_manager_2/CMakeLists.txt Fri Dec 19 08:18:09 2014 @@ -36,7 +36,11 @@ if (DEPENDENCY_MANAGER2) ) add_library(dependency_manager2 STATIC - private/src/dm_activator_base private/src/dm_component_impl private/src/dm_dependency_manager_impl) + private/src/dm_activator_base + private/src/dm_component_impl + private/src/dm_service_dependency + private/src/dm_event + private/src/dm_dependency_manager_impl) include_directories("public/include") include_directories("private/include") include_directories("${PROJECT_SOURCE_DIR}/utils/public/include") Modified: celix/trunk/dependency_manager_2/private/include/dm_component_impl.h URL: http://svn.apache.org/viewvc/celix/trunk/dependency_manager_2/private/include/dm_component_impl.h?rev=1646648&r1=1646647&r2=1646648&view=diff ============================================================================== --- celix/trunk/dependency_manager_2/private/include/dm_component_impl.h (original) +++ celix/trunk/dependency_manager_2/private/include/dm_component_impl.h Fri Dec 19 08:18:09 2014 @@ -87,4 +87,6 @@ celix_status_t component_getBundleContex celix_status_t component_handleEvent(dm_component_pt component, dm_service_dependency_pt dependency, dm_event_pt event); +celix_status_t component_setCallbacks(dm_component_pt component, init_fpt init, start_fpt start, stop_fpt, destroy_fpt); + #endif /* COMPONENT_IMPL_H_ */ Modified: celix/trunk/dependency_manager_2/private/include/dm_service_dependency_impl.h URL: http://svn.apache.org/viewvc/celix/trunk/dependency_manager_2/private/include/dm_service_dependency_impl.h?rev=1646648&r1=1646647&r2=1646648&view=diff ============================================================================== --- celix/trunk/dependency_manager_2/private/include/dm_service_dependency_impl.h (original) +++ celix/trunk/dependency_manager_2/private/include/dm_service_dependency_impl.h Fri Dec 19 08:18:09 2014 @@ -29,6 +29,9 @@ #include +#include "service_tracker.h" +#include "service_tracker_customizer.h" + #include "dm_service_dependency.h" typedef celix_status_t (*service_add_fpt)(void *handle, service_reference_pt reference, void *service); Modified: celix/trunk/dependency_manager_2/private/src/dm_activator_base.c URL: http://svn.apache.org/viewvc/celix/trunk/dependency_manager_2/private/src/dm_activator_base.c?rev=1646648&r1=1646647&r2=1646648&view=diff ============================================================================== --- celix/trunk/dependency_manager_2/private/src/dm_activator_base.c (original) +++ celix/trunk/dependency_manager_2/private/src/dm_activator_base.c Fri Dec 19 08:18:09 2014 @@ -1,7 +1,8 @@ -#include "dm_activator_base.h" - #include +#include "bundle_activator.h" +#include "dm_activator_base.h" + struct dm_dependency_activator_base { dm_dependency_manager_pt manager; @@ -35,7 +36,7 @@ celix_status_t bundleActivator_start(voi status = dependencyManager_create(dependency_activator->context, &dependency_activator->manager); if (status == CELIX_SUCCESS) { - dm_init(dependency_activator->manager, context, dependency_activator->userData); + dm_init(dependency_activator->userData, context, dependency_activator->manager); } return status; @@ -45,7 +46,7 @@ celix_status_t bundleActivator_stop(void celix_status_t status = CELIX_SUCCESS; dependency_activator_base_pt dependency_activator = (dependency_activator_base_pt) userData; - dm_destroy(dependency_activator->manager, dependency_activator->context, dependency_activator->userData); + dm_destroy(dependency_activator->userData, dependency_activator->context, dependency_activator->manager); dependency_activator->userData = NULL; dependency_activator->manager = NULL; Modified: celix/trunk/dependency_manager_2/private/src/dm_component_impl.c URL: http://svn.apache.org/viewvc/celix/trunk/dependency_manager_2/private/src/dm_component_impl.c?rev=1646648&r1=1646647&r2=1646648&view=diff ============================================================================== --- celix/trunk/dependency_manager_2/private/src/dm_component_impl.c (original) +++ celix/trunk/dependency_manager_2/private/src/dm_component_impl.c Fri Dec 19 08:18:09 2014 @@ -93,6 +93,8 @@ celix_status_t component_create(bundle_c (*component)->context = context; (*component)->manager = manager; + (*component)->state = DM_CMP_STATE_INACTIVE; + (*component)->callbackInit = NULL; (*component)->callbackStart = NULL; (*component)->callbackStop = NULL; @@ -105,6 +107,7 @@ celix_status_t component_create(bundle_c pthread_mutex_init(&(*component)->mutex, NULL); (*component)->isStarted = false; + (*component)->active = false; (*component)->dependencyEvents = hashMap_create(NULL, NULL, NULL, NULL); (*component)->executor = NULL; @@ -126,13 +129,14 @@ celix_status_t component_addServiceDepen while (dependency != NULL) { arrayList_add(dependenciesList, dependency); - executor_executeTask(component->executor, component, component_addTask, dependenciesList); dependency = va_arg(dependencies, dm_service_dependency_pt); } va_end(dependencies); + executor_executeTask(component->executor, component, component_addTask, dependenciesList); + return status; } @@ -188,6 +192,7 @@ celix_status_t component_removeTask(dm_c celix_status_t component_start(dm_component_pt component) { celix_status_t status = CELIX_SUCCESS; + component->active = true; executor_executeTask(component->executor, component, component_startTask, NULL); return status; @@ -205,6 +210,7 @@ celix_status_t component_startTask(dm_co celix_status_t component_stop(dm_component_pt component) { celix_status_t status = CELIX_SUCCESS; + component->active = false; executor_executeTask(component->executor, component, component_stopTask, NULL); return status; @@ -273,6 +279,10 @@ celix_status_t component_handleAdded(dm_ celix_status_t status = CELIX_SUCCESS; array_list_pt events = hashMap_get(component->dependencyEvents, dependency); + if (events == NULL) { + arrayList_create(&events); + hashMap_put(component->dependencyEvents, dependency, events); + } arrayList_add(events, event); serviceDependency_setAvailable(dependency, true); @@ -524,6 +534,8 @@ celix_status_t component_calculateNewSta return status; } + *newState = currentState; + return status; } @@ -544,7 +556,9 @@ celix_status_t component_performTransiti component_invokeAddRequiredDependencies(component); // component_invokeAutoConfigDependencies(component); dm_component_state_pt stateBeforeCallingInit = component->state; - component->callbackInit(component->implementation); + if (component->callbackInit) { + component->callbackInit(component->implementation); + } if (stateBeforeCallingInit == component->state) { // #TODO Add listener support // notifyListeners(newState); // init did not change current state, we can notify about this new state @@ -556,7 +570,9 @@ celix_status_t component_performTransiti if (oldState == DM_CMP_STATE_INSTANTIATED_AND_WAITING_FOR_REQUIRED && newState == DM_CMP_STATE_TRACKING_OPTIONAL) { component_invokeAddRequiredInstanceBoundDependencies(component); // component_invokeAutoConfigInstanceBoundDependencies(component); - component->callbackStart(component->implementation); + if (component->callbackStart) { + component->callbackStart(component->implementation); + } component_invokeAddOptionalDependencies(component); component_registerService(component); // #TODO Add listener support @@ -567,7 +583,9 @@ celix_status_t component_performTransiti if (oldState == DM_CMP_STATE_TRACKING_OPTIONAL && newState == DM_CMP_STATE_INSTANTIATED_AND_WAITING_FOR_REQUIRED) { component_unregisterService(component); component_invokeRemoveOptionalDependencies(component); - component->callbackStop(component->implementation); + if (component->callbackStop) { + component->callbackStop(component->implementation); + } component_invokeRemoveInstanceBoundDependencies(component); // #TODO Add listener support // notifyListeners(newState); @@ -576,7 +594,9 @@ celix_status_t component_performTransiti } if (oldState == DM_CMP_STATE_INSTANTIATED_AND_WAITING_FOR_REQUIRED && newState == DM_CMP_STATE_WAITING_FOR_REQUIRED) { - component->callbackDestroy(component->implementation); + if (component->callbackDestroy) { + component->callbackDestroy(component->implementation); + } component_invokeRemoveRequiredDependencies(component); // #TODO Add listener support // notifyListeners(newState); @@ -666,9 +686,11 @@ celix_status_t component_invokeAddRequir if (required && !instanceBound) { array_list_pt events = hashMap_get(component->dependencyEvents, dependency); - for (int i = 0; i < arrayList_size(events); i++) { - dm_event_pt event = arrayList_get(events, i); - serviceDependency_invokeAdd(dependency, event); + if (events) { + for (int i = 0; i < arrayList_size(events); i++) { + dm_event_pt event = arrayList_get(events, i); + serviceDependency_invokeAdd(dependency, event); + } } } } @@ -690,9 +712,11 @@ celix_status_t component_invokeAddRequir if (instanceBound && required) { array_list_pt events = hashMap_get(component->dependencyEvents, dependency); - for (int i = 0; i < arrayList_size(events); i++) { - dm_event_pt event = arrayList_get(events, i); - serviceDependency_invokeAdd(dependency, event); + if (events) { + for (int i = 0; i < arrayList_size(events); i++) { + dm_event_pt event = arrayList_get(events, i); + serviceDependency_invokeAdd(dependency, event); + } } } } @@ -712,9 +736,11 @@ celix_status_t component_invokeAddOption if (!required) { array_list_pt events = hashMap_get(component->dependencyEvents, dependency); - for (int i = 0; i < arrayList_size(events); i++) { - dm_event_pt event = arrayList_get(events, i); - serviceDependency_invokeAdd(dependency, event); + if (events) { + for (int i = 0; i < arrayList_size(events); i++) { + dm_event_pt event = arrayList_get(events, i); + serviceDependency_invokeAdd(dependency, event); + } } } } @@ -734,9 +760,11 @@ celix_status_t component_invokeRemoveOpt if (!required) { array_list_pt events = hashMap_get(component->dependencyEvents, dependency); - for (int i = 0; i < arrayList_size(events); i++) { - dm_event_pt event = arrayList_get(events, i); - serviceDependency_invokeRemove(dependency, event); + if (events) { + for (int i = 0; i < arrayList_size(events); i++) { + dm_event_pt event = arrayList_get(events, i); + serviceDependency_invokeRemove(dependency, event); + } } } } @@ -756,9 +784,11 @@ celix_status_t component_invokeRemoveIns if (instanceBound) { array_list_pt events = hashMap_get(component->dependencyEvents, dependency); - for (int i = 0; i < arrayList_size(events); i++) { - dm_event_pt event = arrayList_get(events, i); - serviceDependency_invokeRemove(dependency, event); + if (events) { + for (int i = 0; i < arrayList_size(events); i++) { + dm_event_pt event = arrayList_get(events, i); + serviceDependency_invokeRemove(dependency, event); + } } } } @@ -780,9 +810,11 @@ celix_status_t component_invokeRemoveReq if (!instanceBound && required) { array_list_pt events = hashMap_get(component->dependencyEvents, dependency); - for (int i = 0; i < arrayList_size(events); i++) { - dm_event_pt event = arrayList_get(events, i); - serviceDependency_invokeRemove(dependency, event); + if (events) { + for (int i = 0; i < arrayList_size(events); i++) { + dm_event_pt event = arrayList_get(events, i); + serviceDependency_invokeRemove(dependency, event); + } } } } @@ -819,6 +851,17 @@ celix_status_t component_unregisterServi return status; } +celix_status_t component_setCallbacks(dm_component_pt component, init_fpt init, start_fpt start, stop_fpt stop, destroy_fpt destroy) { + if (component->active) { + return CELIX_ILLEGAL_STATE; + } + component->callbackInit = init; + component->callbackStart = start; + component->callbackStop = stop; + component->callbackDestroy = destroy; + return CELIX_SUCCESS; +} + celix_status_t component_isAvailable(dm_component_pt component, bool *available) { *available = component->state == DM_CMP_STATE_TRACKING_OPTIONAL; return CELIX_SUCCESS; @@ -932,13 +975,13 @@ celix_status_t executor_runTasks(dm_exec executor->runningThread = NULL; pthread_mutex_unlock(&executor->mutex); - pthread_mutex_lock(&executor->mutex); - if (executor->runningThread == NULL) { - executor->runningThread = currentThread; - execute = true; - } - pthread_mutex_unlock(&executor->mutex); - } while (!linkedList_isEmpty(executor->workQueue) && execute); +// pthread_mutex_lock(&executor->mutex); +// if (executor->runningThread == NULL) { +// executor->runningThread = currentThread; +// execute = true; +// } +// pthread_mutex_unlock(&executor->mutex); + } while (!linkedList_isEmpty(executor->workQueue)); // && execute return status; } Added: celix/trunk/dependency_manager_2/private/src/dm_event.c URL: http://svn.apache.org/viewvc/celix/trunk/dependency_manager_2/private/src/dm_event.c?rev=1646648&view=auto ============================================================================== --- celix/trunk/dependency_manager_2/private/src/dm_event.c (added) +++ celix/trunk/dependency_manager_2/private/src/dm_event.c Fri Dec 19 08:18:09 2014 @@ -0,0 +1,30 @@ +/* + * dm_event.c + * + * Created on: 18 Dec 2014 + * Author: abroekhuis + */ + +#include + +#include "dm_event.h" + +celix_status_t event_create(dm_event_type_e event_type, bundle_pt bundle, bundle_context_pt context, service_reference_pt reference, void *service, dm_event_pt *event) { + celix_status_t status = CELIX_SUCCESS; + + *event = calloc(1, sizeof(**event)); + if (!*event) { + status = CELIX_ENOMEM; + } + + if (status == CELIX_SUCCESS) { + (*event)->bundle = bundle; + (*event)->event_type = event_type; + (*event)->context = context; + (*event)->reference = reference; + (*event)->service = service; + } + + return status; +} + Modified: celix/trunk/dependency_manager_2/private/src/dm_service_dependency.c URL: http://svn.apache.org/viewvc/celix/trunk/dependency_manager_2/private/src/dm_service_dependency.c?rev=1646648&r1=1646647&r2=1646648&view=diff ============================================================================== --- celix/trunk/dependency_manager_2/private/src/dm_service_dependency.c (original) +++ celix/trunk/dependency_manager_2/private/src/dm_service_dependency.c Fri Dec 19 08:18:09 2014 @@ -24,7 +24,18 @@ * \copyright Apache License, Version 2.0 */ +#include +#include + +#include "constants.h" + #include "dm_service_dependency_impl.h" +#include "dm_component_impl.h" +#include "dm_event.h" + +static celix_status_t serviceDependency_addedService(void *_ptr, service_reference_pt reference, void *service); +static celix_status_t serviceDependency_modifiedService(void *_ptr, service_reference_pt reference, void *service); +static celix_status_t serviceDependency_removedService(void *_ptr, service_reference_pt reference, void *service); celix_status_t serviceDependency_create(dm_service_dependency_pt *dependency_ptr) { celix_status_t status = CELIX_SUCCESS; @@ -49,6 +60,9 @@ celix_status_t serviceDependency_create( (*dependency_ptr)->tracked_service_name = NULL; (*dependency_ptr)->tracked_filter_unmodified = NULL; (*dependency_ptr)->tracked_filter = NULL; + + (*dependency_ptr)->tracker = NULL; + (*dependency_ptr)->tracker_customizer = NULL; } return status; @@ -85,7 +99,7 @@ celix_status_t serviceDependency_setServ dependency->tracked_filter = strdup(filter); } else { int len = strlen(serviceName) + strlen(OSGI_FRAMEWORK_OBJECTCLASS) + strlen(filter) + 7; - char *nfilter[len]; + char nfilter[len]; snprintf(nfilter, len, "(&(%s=%s)%s)", OSGI_FRAMEWORK_OBJECTCLASS, serviceName, filter); dependency->tracked_filter = strdup(nfilter); } @@ -98,7 +112,7 @@ celix_status_t serviceDependency_setServ return status; } -celix_status_t serviceDependency_setCallbacks(dm_service_dependency_pt dependency, service_add_fpt add, service_change_fpt change, service_remove_fpt remove) { +celix_status_t serviceDependency_setCallbacks(dm_service_dependency_pt dependency, service_add_fpt add, service_change_fpt change, service_remove_fpt remove, service_swap_fpt swap) { celix_status_t status = CELIX_SUCCESS; if (!dependency) { @@ -109,6 +123,7 @@ celix_status_t serviceDependency_setCall dependency->add = add; dependency->change = change; dependency->remove = remove; + dependency->swap = swap; } return status; @@ -158,6 +173,7 @@ celix_status_t serviceDependency_start(d } if (status == CELIX_SUCCESS) { + dependency->tracker_customizer = NULL; status = serviceTrackerCustomizer_create(dependency, NULL, serviceDependency_addedService, serviceDependency_modifiedService, serviceDependency_removedService, &dependency->tracker_customizer); } @@ -271,7 +287,7 @@ celix_status_t serviceDependency_invokeR return status; } -celix_status_t serviceDependency_invokeSwap(dm_service_dependency_pt dependency, dm_event_pt event) { +celix_status_t serviceDependency_invokeSwap(dm_service_dependency_pt dependency, dm_event_pt event, dm_event_pt newEvent) { celix_status_t status = CELIX_SUCCESS; if (!dependency) { @@ -279,7 +295,7 @@ celix_status_t serviceDependency_invokeS } if (status == CELIX_SUCCESS) { - dependency->swap(dependency->component->implementation, event->reference, event->service); + dependency->swap(dependency->component->implementation, event->reference, event->service, newEvent->reference, newEvent->service); } return status; @@ -327,11 +343,12 @@ celix_status_t serviceDependency_isInsta return status; } -celix_status_t serviceDependency_addedService(dm_service_dependency_pt dependency, service_reference_pt reference, void *service) { +celix_status_t serviceDependency_addedService(void *_ptr, service_reference_pt reference, void *service) { celix_status_t status = CELIX_SUCCESS; bundle_context_pt context = NULL; bundle_pt bundle = NULL; dm_event_pt event = NULL; + dm_service_dependency_pt dependency = _ptr; if (!dependency || !reference || !service) { status = CELIX_ILLEGAL_ARGUMENT; @@ -362,11 +379,12 @@ celix_status_t serviceDependency_addedSe return status; } -celix_status_t serviceDependency_modifiedService(dm_service_dependency_pt dependency, service_reference_pt reference, void *service) { +celix_status_t serviceDependency_modifiedService(void *_ptr, service_reference_pt reference, void *service) { celix_status_t status = CELIX_SUCCESS; bundle_context_pt context = NULL; bundle_pt bundle = NULL; dm_event_pt event = NULL; + dm_service_dependency_pt dependency = _ptr; if (!dependency || !reference || !service) { status = CELIX_ILLEGAL_ARGUMENT; @@ -397,11 +415,12 @@ celix_status_t serviceDependency_modifie return status; } -celix_status_t serviceDependency_removedService(dm_service_dependency_pt dependency, service_reference_pt reference, void *service) { +celix_status_t serviceDependency_removedService(void *_ptr, service_reference_pt reference, void *service) { celix_status_t status = CELIX_SUCCESS; bundle_context_pt context = NULL; bundle_pt bundle = NULL; dm_event_pt event = NULL; + dm_service_dependency_pt dependency = _ptr; if (!dependency || !reference || !service) { status = CELIX_ILLEGAL_ARGUMENT; Modified: celix/trunk/dependency_manager_2/public/include/dm_activator_base.h URL: http://svn.apache.org/viewvc/celix/trunk/dependency_manager_2/public/include/dm_activator_base.h?rev=1646648&r1=1646647&r2=1646648&view=diff ============================================================================== --- celix/trunk/dependency_manager_2/public/include/dm_activator_base.h (original) +++ celix/trunk/dependency_manager_2/public/include/dm_activator_base.h Fri Dec 19 08:18:09 2014 @@ -6,7 +6,7 @@ #include "dm_dependency_manager.h" celix_status_t dm_create(bundle_context_pt context, void ** userData); -celix_status_t dm_init(dm_dependency_manager_pt manager, bundle_context_pt context, void * userData); -celix_status_t dm_destroy(dm_dependency_manager_pt manager, bundle_context_pt context, void * userData); +celix_status_t dm_init(void * userData, bundle_context_pt context, dm_dependency_manager_pt manager); +celix_status_t dm_destroy(void * userData, bundle_context_pt context, dm_dependency_manager_pt manager); #endif /* DM_ACTIVATOR_BASE_H_ */ Modified: celix/trunk/dependency_manager_2/public/include/dm_component.h URL: http://svn.apache.org/viewvc/celix/trunk/dependency_manager_2/public/include/dm_component.h?rev=1646648&r1=1646647&r2=1646648&view=diff ============================================================================== --- celix/trunk/dependency_manager_2/public/include/dm_component.h (original) +++ celix/trunk/dependency_manager_2/public/include/dm_component.h Fri Dec 19 08:18:09 2014 @@ -27,6 +27,8 @@ #ifndef COMPONENT_H_ #define COMPONENT_H_ +#include "celix_errno.h" + typedef struct dm_component *dm_component_pt; Modified: celix/trunk/dependency_manager_2/public/include/dm_event.h URL: http://svn.apache.org/viewvc/celix/trunk/dependency_manager_2/public/include/dm_event.h?rev=1646648&r1=1646647&r2=1646648&view=diff ============================================================================== --- celix/trunk/dependency_manager_2/public/include/dm_event.h (original) +++ celix/trunk/dependency_manager_2/public/include/dm_event.h Fri Dec 19 08:18:09 2014 @@ -27,6 +27,10 @@ #ifndef DM_EVENT_H_ #define DM_EVENT_H_ +#include "service_reference.h" +#include "bundle_context.h" +#include "bundle.h" + enum dm_event_type { DM_EVENT_ADDED, DM_EVENT_CHANGED, Modified: celix/trunk/dependency_manager_2/public/include/dm_service_dependency.h URL: http://svn.apache.org/viewvc/celix/trunk/dependency_manager_2/public/include/dm_service_dependency.h?rev=1646648&r1=1646647&r2=1646648&view=diff ============================================================================== --- celix/trunk/dependency_manager_2/public/include/dm_service_dependency.h (original) +++ celix/trunk/dependency_manager_2/public/include/dm_service_dependency.h Fri Dec 19 08:18:09 2014 @@ -34,6 +34,8 @@ typedef struct dm_service_dependency *dm_service_dependency_pt; +celix_status_t serviceDependency_create(dm_service_dependency_pt *dependency_ptr); + celix_status_t serviceDependency_setComponent(dm_service_dependency_pt dependency, dm_component_pt component); //celix_status_t serviceDependency_removeComponent(dm_service_dependency_pt dependency, dm_component_pt component); Modified: celix/trunk/examples/CMakeLists.txt URL: http://svn.apache.org/viewvc/celix/trunk/examples/CMakeLists.txt?rev=1646648&r1=1646647&r2=1646648&view=diff ============================================================================== --- celix/trunk/examples/CMakeLists.txt (original) +++ celix/trunk/examples/CMakeLists.txt Fri Dec 19 08:18:09 2014 @@ -20,7 +20,7 @@ if (EXAMPLES) add_subdirectory(hello_world_test) #add_subdirectory(mongoose) - #add_subdirectory(whiteboard) + add_subdirectory(whiteboard) add_subdirectory(echo_service) add_subdirectory(osgi-in-action/chapter04-correct-lookup) Modified: celix/trunk/examples/deploy.cmake URL: http://svn.apache.org/viewvc/celix/trunk/examples/deploy.cmake?rev=1646648&r1=1646647&r2=1646648&view=diff ============================================================================== --- celix/trunk/examples/deploy.cmake (original) +++ celix/trunk/examples/deploy.cmake Fri Dec 19 08:18:09 2014 @@ -20,7 +20,7 @@ if (EXAMPLES) deploy(chapter04-correct-listener BUNDLES shell shell_tui log_service chapter04-correct-listener) deploy("hello_world" BUNDLES shell shell_tui apache_celix_examples_hello_world hello_world_test log_service) - #deploy("wb" BUNDLES tracker publisherA publisherB shell shell_tui log_service log_writer) - #deploy("wb_dp" BUNDLES tracker_depman publisherA publisherB shell shell_tui log_service log_writer) + deploy("wb" BUNDLES tracker publisherA publisherB shell shell_tui log_service log_writer) + deploy("wb_dp" BUNDLES tracker_depman publisherA publisherB shell shell_tui log_service log_writer) deploy("echo" BUNDLES echo_server echo_client shell shell_tui) endif (EXAMPLES) \ No newline at end of file Modified: celix/trunk/examples/whiteboard/publisherA/CMakeLists.txt URL: http://svn.apache.org/viewvc/celix/trunk/examples/whiteboard/publisherA/CMakeLists.txt?rev=1646648&r1=1646647&r2=1646648&view=diff ============================================================================== --- celix/trunk/examples/whiteboard/publisherA/CMakeLists.txt (original) +++ celix/trunk/examples/whiteboard/publisherA/CMakeLists.txt Fri Dec 19 08:18:09 2014 @@ -15,10 +15,11 @@ # specific language governing permissions and limitations # under the License. +SET(BUNDLE_SYMBOLICNAME "apache_celix_examples_publisher_a") +SET(BUNDLE_VERSION "0.0.1") + bundle(publisherA SOURCES private/src/activator private/src/publisher) include_directories("../publisherService/public/include") include_directories("../publisherService/private/include") include_directories("${PROJECT_SOURCE_DIR}/utils/public/include") target_link_libraries(publisherA celix_framework) - -package(publisherA FILES ../publisherService/public/include/publisher.h) \ No newline at end of file Modified: celix/trunk/examples/whiteboard/publisherB/CMakeLists.txt URL: http://svn.apache.org/viewvc/celix/trunk/examples/whiteboard/publisherB/CMakeLists.txt?rev=1646648&r1=1646647&r2=1646648&view=diff ============================================================================== --- celix/trunk/examples/whiteboard/publisherB/CMakeLists.txt (original) +++ celix/trunk/examples/whiteboard/publisherB/CMakeLists.txt Fri Dec 19 08:18:09 2014 @@ -15,10 +15,11 @@ # specific language governing permissions and limitations # under the License. +SET(BUNDLE_SYMBOLICNAME "apache_celix_examples_publisher_b") +SET(BUNDLE_VERSION "0.0.1") + bundle(publisherB SOURCES private/src/activator private/src/publisher) include_directories("../publisherService/public/include") include_directories("../publisherService/private/include") target_link_libraries(publisherB celix_framework) include_directories("${PROJECT_SOURCE_DIR}/utils/public/include") - -package(publisherB FILES ../publisherService/public/include/publisher.h) \ No newline at end of file Modified: celix/trunk/examples/whiteboard/tracker/CMakeLists.txt URL: http://svn.apache.org/viewvc/celix/trunk/examples/whiteboard/tracker/CMakeLists.txt?rev=1646648&r1=1646647&r2=1646648&view=diff ============================================================================== --- celix/trunk/examples/whiteboard/tracker/CMakeLists.txt (original) +++ celix/trunk/examples/whiteboard/tracker/CMakeLists.txt Fri Dec 19 08:18:09 2014 @@ -15,6 +15,9 @@ # specific language governing permissions and limitations # under the License. +SET(BUNDLE_SYMBOLICNAME "apache_celix_examples_tracker") +SET(BUNDLE_VERSION "0.0.1") + bundle(tracker SOURCES private/src/activator) include_directories("../publisherService/public/include") include_directories("${PROJECT_SOURCE_DIR}/utils/public/include") Modified: celix/trunk/examples/whiteboard/tracker/private/src/activator.c URL: http://svn.apache.org/viewvc/celix/trunk/examples/whiteboard/tracker/private/src/activator.c?rev=1646648&r1=1646647&r2=1646648&view=diff ============================================================================== --- celix/trunk/examples/whiteboard/tracker/private/src/activator.c (original) +++ celix/trunk/examples/whiteboard/tracker/private/src/activator.c Fri Dec 19 08:18:09 2014 @@ -24,6 +24,8 @@ * \copyright Apache License, Version 2.0 */ #include +#include + #include "celixbool.h" #include "bundle_activator.h" @@ -35,11 +37,11 @@ struct data { bundle_context_pt context; service_tracker_pt tracker; array_list_pt publishers; - apr_thread_t *sender; + pthread_t sender; bool running; }; -static void *APR_THREAD_FUNC trk_send(apr_thread_t *thd, void *handle) { +static void *trk_send(void *handle) { struct data * data = (struct data *) handle; while (data->running) { int i; @@ -47,9 +49,9 @@ static void *APR_THREAD_FUNC trk_send(ap publisher_service_pt pub = arrayList_get(data->publishers, i); pub->invoke(pub->publisher, "test"); } - apr_sleep(1000000); + usleep(1000000); } - apr_thread_exit(thd, APR_SUCCESS); + pthread_exit(NULL); return NULL; } @@ -70,7 +72,6 @@ celix_status_t addedServ(void * handle, } celix_status_t modifiedServ(void * handle, service_reference_pt ref, void * service) { - struct data * data = (struct data *) handle; printf("Modified\n"); return CELIX_SUCCESS; } @@ -83,10 +84,9 @@ celix_status_t removedServ(void * handle } celix_status_t bundleActivator_create(bundle_context_pt context, void **userData) { - apr_pool_t *pool; - celix_status_t status = bundleContext_getMemoryPool(context, &pool); + celix_status_t status = CELIX_SUCCESS; if (status == CELIX_SUCCESS) { - *userData = apr_palloc(pool, sizeof(struct data)); + *userData = calloc(1, sizeof(struct data)); ((struct data *) (*userData))->publishers = NULL; arrayList_create(&((struct data *) (*userData))->publishers); } else { @@ -97,8 +97,6 @@ celix_status_t bundleActivator_create(bu celix_status_t bundleActivator_start(void * userData, bundle_context_pt context) { celix_status_t status = CELIX_SUCCESS; - apr_pool_t *pool; - status = bundleContext_getMemoryPool(context, &pool); if (status == CELIX_SUCCESS) { struct data * data = (struct data *) userData; service_tracker_customizer_pt cust = NULL; @@ -106,15 +104,15 @@ celix_status_t bundleActivator_start(voi data->context = context; - serviceTrackerCustomizer_create(pool, data, addingServ, addedServ, modifiedServ, removedServ, &cust); - serviceTracker_create(pool, context, (char *) PUBLISHER_NAME, cust, &tracker); + serviceTrackerCustomizer_create(data, addingServ, addedServ, modifiedServ, removedServ, &cust); + serviceTracker_create(context, (char *) PUBLISHER_NAME, cust, &tracker); data->tracker = tracker; serviceTracker_open(tracker); data->running = true; - apr_thread_create(&data->sender, NULL, trk_send, data, pool); + pthread_create(&data->sender, NULL, trk_send, data); } else { status = CELIX_START_ERROR; } @@ -124,12 +122,11 @@ celix_status_t bundleActivator_start(voi celix_status_t bundleActivator_stop(void * userData, bundle_context_pt context) { celix_status_t status = CELIX_SUCCESS; struct data * data = (struct data *) userData; - apr_status_t stat; printf("Stop\n"); serviceTracker_close(data->tracker); data->running = false; - apr_thread_join(&stat, data->sender); + pthread_join(data->sender, NULL); return status; } Modified: celix/trunk/examples/whiteboard/tracker_depman/CMakeLists.txt URL: http://svn.apache.org/viewvc/celix/trunk/examples/whiteboard/tracker_depman/CMakeLists.txt?rev=1646648&r1=1646647&r2=1646648&view=diff ============================================================================== --- celix/trunk/examples/whiteboard/tracker_depman/CMakeLists.txt (original) +++ celix/trunk/examples/whiteboard/tracker_depman/CMakeLists.txt Fri Dec 19 08:18:09 2014 @@ -15,6 +15,9 @@ # specific language governing permissions and limitations # under the License. +SET(BUNDLE_SYMBOLICNAME "apache_celix_examples_tracker_dm") +SET(BUNDLE_VERSION "0.0.1") + bundle(tracker_depman SOURCES private/src/dependency_activator private/src/tracker @@ -22,8 +25,9 @@ bundle(tracker_depman SOURCES private/include/tracker.h ) include_directories("private/include") -include_directories("${PROJECT_SOURCE_DIR}/dependency_manager/public/include") +include_directories("${PROJECT_SOURCE_DIR}/dependency_manager_2/public/include") +include_directories("${PROJECT_SOURCE_DIR}/dependency_manager_2/private/include") include_directories("../publisherService/public/include") include_directories("${PROJECT_SOURCE_DIR}/utils/public/include") include_directories("${PROJECT_SOURCE_DIR}/log_service/public/include") -target_link_libraries(tracker_depman celix_framework dependency_manager) +target_link_libraries(tracker_depman celix_framework -Wl,-all_load dependency_manager2) Modified: celix/trunk/examples/whiteboard/tracker_depman/private/include/tracker.h URL: http://svn.apache.org/viewvc/celix/trunk/examples/whiteboard/tracker_depman/private/include/tracker.h?rev=1646648&r1=1646647&r2=1646648&view=diff ============================================================================== --- celix/trunk/examples/whiteboard/tracker_depman/private/include/tracker.h (original) +++ celix/trunk/examples/whiteboard/tracker_depman/private/include/tracker.h Fri Dec 19 08:18:09 2014 @@ -27,25 +27,30 @@ #ifndef TRACKER_H_ #define TRACKER_H_ -#include "service_component.h" +#include "dm_component.h" #include "log_service.h" struct data { - service_pt service; + dm_component_pt service; bundle_context_pt context; array_list_pt publishers; - apr_thread_t *sender; + pthread_t sender; bool running; log_service_pt logger; }; -void tracker_addedServ(void * handle, service_reference_pt ref, void * service); -void tracker_modifiedServ(void * handle, service_reference_pt ref, void * service); -void tracker_removedServ(void * handle, service_reference_pt ref, void * service); - -void tracker_addLog(void * handle, service_reference_pt ref, void * service); -void tracker_modifiedLog(void * handle, service_reference_pt ref, void * service); -void tracker_removeLog(void * handle, service_reference_pt ref, void * service); +celix_status_t tracker_addedServ(void * handle, service_reference_pt ref, void * service); +celix_status_t tracker_modifiedServ(void * handle, service_reference_pt ref, void * service); +celix_status_t tracker_removedServ(void * handle, service_reference_pt ref, void * service); + +celix_status_t tracker_addLog(void * handle, service_reference_pt ref, void * service); +celix_status_t tracker_modifiedLog(void * handle, service_reference_pt ref, void * service); +celix_status_t tracker_removeLog(void * handle, service_reference_pt ref, void * service); + +celix_status_t service_init(void * userData); +celix_status_t service_start(void * userData); +celix_status_t service_stop(void * userData); +celix_status_t service_destroy(void * userData); #endif /* TRACKER_H_ */ Modified: celix/trunk/examples/whiteboard/tracker_depman/private/src/dependency_activator.c URL: http://svn.apache.org/viewvc/celix/trunk/examples/whiteboard/tracker_depman/private/src/dependency_activator.c?rev=1646648&r1=1646647&r2=1646648&view=diff ============================================================================== --- celix/trunk/examples/whiteboard/tracker_depman/private/src/dependency_activator.c (original) +++ celix/trunk/examples/whiteboard/tracker_depman/private/src/dependency_activator.c Fri Dec 19 08:18:09 2014 @@ -27,14 +27,17 @@ #include #include "celixbool.h" -#include "dependency_activator_base.h" -#include "service_component_private.h" +#include "dm_activator_base.h" +#include "dm_service_dependency.h" +#include "dm_service_dependency_impl.h" +#include "dm_component_impl.h" #include "publisher.h" #include "tracker.h" #include "log_service.h" #include "bundle_context.h" -void * dm_create(bundle_context_pt context) { +celix_status_t dm_create(bundle_context_pt context, void **userData) { + printf("Create\n"); struct data * data = malloc(sizeof(*data)); data->publishers = NULL; arrayList_create(&data->publishers); @@ -43,42 +46,47 @@ void * dm_create(bundle_context_pt conte data->sender = 0; data->service = NULL; data->logger = NULL; - return data; + *userData = data; + return CELIX_SUCCESS; } -void dm_init(void * userData, bundle_context_pt context, dependency_manager_pt manager) { +celix_status_t dm_init(void * userData, bundle_context_pt context, dm_dependency_manager_pt manager) { + printf("Init\n"); struct data * data = (struct data *) userData; - service_pt service = NULL; - service_dependency_pt dep = NULL; - service_dependency_pt dep2 = NULL; + dm_component_pt service = NULL; + dm_service_dependency_pt dep = NULL; + dm_service_dependency_pt dep2 = NULL; data->context = context; - service = dependencyActivatorBase_createService(manager); - serviceComponent_setImplementation(service, data); + component_create(context, manager, &service); + component_setImplementation(service, data); + component_setCallbacks(service, service_init, service_start, service_stop, service_destroy); - dep = dependencyActivatorBase_createServiceDependency(manager); + serviceDependency_create(&dep); serviceDependency_setRequired(dep, false); serviceDependency_setService(dep, PUBLISHER_NAME, "(|(id=A)(id=B))"); - serviceDependency_setCallbacks(dep, tracker_addedServ, tracker_modifiedServ, tracker_removedServ); - serviceComponent_addServiceDependency(service, dep); + serviceDependency_setCallbacks(dep, tracker_addedServ, tracker_modifiedServ, tracker_removedServ, NULL); + component_addServiceDependency(service, dep, NULL); - dep2 = dependencyActivatorBase_createServiceDependency(manager); + serviceDependency_create(&dep2); serviceDependency_setRequired(dep2, false); serviceDependency_setService(dep2, (char *) OSGI_LOGSERVICE_NAME, NULL); - serviceDependency_setCallbacks(dep2, tracker_addLog, tracker_modifiedLog, tracker_removeLog); - serviceComponent_addServiceDependency(service, dep2); + serviceDependency_setCallbacks(dep2, tracker_addLog, tracker_modifiedLog, tracker_removeLog, NULL); + component_addServiceDependency(service, dep2, NULL); data->service = service; dependencyManager_add(manager, service); + return CELIX_SUCCESS; } -void dm_destroy(void * userData, bundle_context_pt context, dependency_manager_pt manager) { +celix_status_t dm_destroy(void * userData, bundle_context_pt context, dm_dependency_manager_pt manager) { struct data * data = (struct data *) userData; dependencyManager_remove(manager, data->service); arrayList_destroy(data->publishers); data->publishers = NULL; free(data); data = NULL; + return CELIX_SUCCESS; } Modified: celix/trunk/examples/whiteboard/tracker_depman/private/src/tracker.c URL: http://svn.apache.org/viewvc/celix/trunk/examples/whiteboard/tracker_depman/private/src/tracker.c?rev=1646648&r1=1646647&r2=1646648&view=diff ============================================================================== --- celix/trunk/examples/whiteboard/tracker_depman/private/src/tracker.c (original) +++ celix/trunk/examples/whiteboard/tracker_depman/private/src/tracker.c Fri Dec 19 08:18:09 2014 @@ -25,16 +25,18 @@ */ #include #include +#include + #include "celixbool.h" -#include "service.h" #include "publisher.h" #include "tracker.h" #include "log_service.h" -static void *APR_THREAD_FUNC dp_send(apr_thread_t *thd, void *handle) { +static void *dp_send(void *handle) { struct data * data = (struct data *) handle; while (data->running) { + printf("Running\n"); int i; for (i = 0; i < arrayList_size(data->publishers); i++) { publisher_service_pt pub = (publisher_service_pt) arrayList_get(data->publishers, i); @@ -43,69 +45,74 @@ static void *APR_THREAD_FUNC dp_send(apr data->logger->log(data->logger->logger, OSGI_LOGSERVICE_INFO, "Sending message to publisher"); } } - apr_sleep(1000000); + usleep(1000000); } - apr_thread_exit(thd, APR_SUCCESS); + pthread_exit(NULL); return NULL; } -void service_init(void * userData) { - +celix_status_t service_init(void * userData) { + return CELIX_SUCCESS; } -void service_start(void * userData) { +celix_status_t service_start(void * userData) { struct data * data = (struct data *) userData; - apr_pool_t *pool = NULL; data->running = true; - bundleContext_getMemoryPool(data->context, &pool); - apr_thread_create(&data->sender, NULL, dp_send, data, pool); + pthread_create(&data->sender, NULL, dp_send, data); + return CELIX_SUCCESS; } -void service_stop(void * userData) { - apr_status_t stat; +celix_status_t service_stop(void * userData) { struct data * data = (struct data *) userData; data->running = false; - apr_thread_join(&stat, data->sender); + pthread_join(data->sender, NULL); + return CELIX_SUCCESS; } -void service_destroy(void * userData) { - +celix_status_t service_destroy(void * userData) { + return CELIX_SUCCESS; } -void tracker_addedServ(void * handle, service_reference_pt ref, void * service) { +celix_status_t tracker_addedServ(void * handle, service_reference_pt ref, void * service) { struct data * data = (struct data *) handle; arrayList_add(data->publishers, service); - printf("Service Added\n"); + printf("Service Added %p\n", service); + return CELIX_SUCCESS; } -void tracker_modifiedServ(void * handle, service_reference_pt ref, void * service) { +celix_status_t tracker_modifiedServ(void * handle, service_reference_pt ref, void * service) { struct data * data = (struct data *) handle; printf("Service Changed\n"); + return CELIX_SUCCESS; } -void tracker_removedServ(void * handle, service_reference_pt ref, void * service) { +celix_status_t tracker_removedServ(void * handle, service_reference_pt ref, void * service) { struct data * data = (struct data *) handle; arrayList_removeElement(data->publishers, service); printf("Service Removed\n"); + return CELIX_SUCCESS; } -void tracker_addLog(void *handle, service_reference_pt ref, void *service) { +celix_status_t tracker_addLog(void *handle, service_reference_pt ref, void *service) { struct data * data = (struct data *) handle; printf("Add log\n"); data->logger = service; ((log_service_pt) service)->log(((log_service_pt) service)->logger, OSGI_LOGSERVICE_DEBUG, "test"); + return CELIX_SUCCESS; } -void tracker_modifiedLog(void *handle, service_reference_pt ref, void *service) { +celix_status_t tracker_modifiedLog(void *handle, service_reference_pt ref, void *service) { struct data * data = (struct data *) handle; printf("Modify log\n"); data->logger = service; ((log_service_pt) service)->log(((log_service_pt) service)->logger, OSGI_LOGSERVICE_DEBUG, "test"); + return CELIX_SUCCESS; } -void tracker_removeLog(void *handle, service_reference_pt ref, void *service) { +celix_status_t tracker_removeLog(void *handle, service_reference_pt ref, void *service) { struct data * data = (struct data *) handle; data->logger = NULL; printf("Remove log\n"); + return CELIX_SUCCESS; }