You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@celix.apache.org by pn...@apache.org on 2017/11/24 11:27:31 UTC
[2/2] celix git commit: CELIX-417: Refactors CMake usage for example
embedded, dm and dm_cxx
CELIX-417: Refactors CMake usage for example embedded, dm and dm_cxx
Project: http://git-wip-us.apache.org/repos/asf/celix/repo
Commit: http://git-wip-us.apache.org/repos/asf/celix/commit/1836cf84
Tree: http://git-wip-us.apache.org/repos/asf/celix/tree/1836cf84
Diff: http://git-wip-us.apache.org/repos/asf/celix/diff/1836cf84
Branch: refs/heads/feature/CELIX-417-cmake-refactor
Commit: 1836cf84110367ae052f0fb5cbb3eb859d540275
Parents: 486d4f0
Author: Pepijn Noltes <pe...@gmail.com>
Authored: Fri Nov 24 12:27:20 2017 +0100
Committer: Pepijn Noltes <pe...@gmail.com>
Committed: Fri Nov 24 12:27:20 2017 +0100
----------------------------------------------------------------------
examples/dm_example/CMakeLists.txt | 31 +++--
examples/dm_example/api/CMakeLists.txt | 19 +++
examples/dm_example/api/include/phase1.h | 44 +++++++
examples/dm_example/api/include/phase2.h | 41 +++++++
examples/dm_example/phase1/CMakeLists.txt | 18 ++-
.../phase1/private/include/phase1_cmp.h | 43 -------
.../phase1/private/src/phase1_activator.c | 85 --------------
.../dm_example/phase1/private/src/phase1_cmp.c | 99 ----------------
.../dm_example/phase1/src/phase1_activator.c | 85 ++++++++++++++
examples/dm_example/phase1/src/phase1_cmp.c | 99 ++++++++++++++++
examples/dm_example/phase1/src/phase1_cmp.h | 43 +++++++
examples/dm_example/phase2a/CMakeLists.txt | 19 ++-
.../phase2a/private/include/phase2a_cmp.h | 46 --------
.../phase2a/private/src/phase2a_activator.c | 95 ---------------
.../phase2a/private/src/phase2a_cmp.c | 116 -------------------
.../dm_example/phase2a/src/phase2a_activator.c | 95 +++++++++++++++
examples/dm_example/phase2a/src/phase2a_cmp.c | 116 +++++++++++++++++++
examples/dm_example/phase2a/src/phase2a_cmp.h | 46 ++++++++
examples/dm_example/phase2b/CMakeLists.txt | 21 ++--
.../phase2b/private/include/phase2b_cmp.h | 46 --------
.../phase2b/private/src/phase2b_activator.c | 95 ---------------
.../phase2b/private/src/phase2b_cmp.c | 115 ------------------
.../dm_example/phase2b/src/phase2b_activator.c | 95 +++++++++++++++
examples/dm_example/phase2b/src/phase2b_cmp.c | 115 ++++++++++++++++++
examples/dm_example/phase2b/src/phase2b_cmp.h | 46 ++++++++
examples/dm_example/phase3/CMakeLists.txt | 21 ++--
.../phase3/private/include/phase3_cmp.h | 45 -------
.../phase3/private/src/phase3_activator.c | 84 --------------
.../dm_example/phase3/private/src/phase3_cmp.c | 116 -------------------
.../dm_example/phase3/src/phase3_activator.c | 84 ++++++++++++++
examples/dm_example/phase3/src/phase3_cmp.c | 116 +++++++++++++++++++
examples/dm_example/phase3/src/phase3_cmp.h | 45 +++++++
examples/dm_example/services/phase1.h | 44 -------
examples/dm_example/services/phase2.h | 41 -------
examples/dm_example_cxx/CMakeLists.txt | 32 +++--
examples/dm_example_cxx/api/CMakeLists.txt | 19 +++
examples/dm_example_cxx/api/IName.h | 39 -------
examples/dm_example_cxx/api/IPhase1.h | 33 ------
examples/dm_example_cxx/api/IPhase2.h | 33 ------
examples/dm_example_cxx/api/include/IName.h | 39 +++++++
examples/dm_example_cxx/api/include/IPhase1.h | 33 ++++++
examples/dm_example_cxx/api/include/IPhase2.h | 33 ++++++
examples/dm_example_cxx/phase1/CMakeLists.txt | 17 +--
.../phase1/include/Phase1Activator.h | 36 ------
.../dm_example_cxx/phase1/include/Phase1Cmp.h | 44 -------
.../dm_example_cxx/phase1/src/Phase1Activator.h | 36 ++++++
examples/dm_example_cxx/phase1/src/Phase1Cmp.h | 44 +++++++
examples/dm_example_cxx/phase2/CMakeLists.txt | 51 ++++++++
.../phase2/include/Phase2Activator.h | 34 ------
.../dm_example_cxx/phase2/include/Phase2Cmp.h | 56 ---------
.../dm_example_cxx/phase2/src/Phase2Activator.h | 34 ++++++
examples/dm_example_cxx/phase2/src/Phase2Cmp.h | 56 +++++++++
.../phase2/src/Phase2aActivator.cc | 57 +++++++++
.../dm_example_cxx/phase2/src/Phase2aCmp.cc | 45 +++++++
.../phase2/src/Phase2bActivator.cc | 50 ++++++++
.../dm_example_cxx/phase2/src/Phase2bCmp.cc | 45 +++++++
examples/dm_example_cxx/phase2a/CMakeLists.txt | 41 -------
.../phase2a/src/Phase2aActivator.cc | 57 ---------
.../dm_example_cxx/phase2a/src/Phase2aCmp.cc | 45 -------
examples/dm_example_cxx/phase2b/CMakeLists.txt | 39 -------
.../phase2b/src/Phase2bActivator.cc | 50 --------
.../dm_example_cxx/phase2b/src/Phase2bCmp.cc | 45 -------
examples/dm_example_cxx/phase3/CMakeLists.txt | 17 +--
.../phase3/include/Phase3Activator.h | 33 ------
.../phase3/include/Phase3BaseActivator.h | 35 ------
.../dm_example_cxx/phase3/include/Phase3Cmp.h | 50 --------
.../dm_example_cxx/phase3/src/Phase3Activator.h | 33 ++++++
.../phase3/src/Phase3BaseActivator.h | 35 ++++++
examples/dm_example_cxx/phase3/src/Phase3Cmp.h | 50 ++++++++
.../phase3_locking/CMakeLists.txt | 16 +--
.../include/Phase3LockingActivator.h | 33 ------
.../phase3_locking/include/Phase3LockingCmp.h | 50 --------
.../phase3_locking/src/Phase3LockingActivator.h | 33 ++++++
.../phase3_locking/src/Phase3LockingCmp.h | 50 ++++++++
examples/embedding/CMakeLists.txt | 1 -
75 files changed, 1909 insertions(+), 1939 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/celix/blob/1836cf84/examples/dm_example/CMakeLists.txt
----------------------------------------------------------------------
diff --git a/examples/dm_example/CMakeLists.txt b/examples/dm_example/CMakeLists.txt
index 9a9e69b..2cef7ec 100644
--- a/examples/dm_example/CMakeLists.txt
+++ b/examples/dm_example/CMakeLists.txt
@@ -15,11 +15,8 @@
# specific language governing permissions and limitations
# under the License.
if (BUILD_DEPENDENCY_MANAGER)
- include_directories(
- ${PROJECT_SOURCE_DIR}/dependency_manager/public/include
- ${PROJECT_SOURCE_DIR}/utils/public/include
- services
- )
+
+ add_subdirectory(api)
add_subdirectory(phase1)
add_subdirectory(phase2a)
@@ -32,11 +29,11 @@ if (BUILD_DEPENDENCY_MANAGER)
BUNDLES
Celix::shell
Celix::shell_tui
- dm_shell
- phase1
- phase2a
- phase2b
- phase3
+ Celix::dm_shell
+ dm_example_phase1
+ dm_example_phase2a
+ dm_example_phase2b
+ dm_example_phase3
PROPERTIES
LOGHELPER_ENABLE_STDOUT_FALLBACK=true
)
@@ -53,13 +50,13 @@ if (BUILD_DEPENDENCY_MANAGER)
FROM dmbase
GROUP examples
BUNDLES
- ${CELIX_SHELL_BUNDLE}
- ${CELIX_SHELL_TUI_BUNDLE}
- dm_shell
- phase1
- phase2a
- phase2b
- phase3
+ Celix::shell
+ Celix::shell_tui
+ Celix::dm_shell
+ dm_example_phase1
+ dm_example_phase2a
+ dm_example_phase2b
+ dm_example_phase3
PROPERTIES
LOGHELPER_ENABLE_STDOUT_FALLBACK=true
)
http://git-wip-us.apache.org/repos/asf/celix/blob/1836cf84/examples/dm_example/api/CMakeLists.txt
----------------------------------------------------------------------
diff --git a/examples/dm_example/api/CMakeLists.txt b/examples/dm_example/api/CMakeLists.txt
new file mode 100644
index 0000000..900c8fb
--- /dev/null
+++ b/examples/dm_example/api/CMakeLists.txt
@@ -0,0 +1,19 @@
+# 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.
+
+add_library(dm_example_api INTERFACE)
+target_include_directories(dm_example_api INTERFACE include)
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/celix/blob/1836cf84/examples/dm_example/api/include/phase1.h
----------------------------------------------------------------------
diff --git a/examples/dm_example/api/include/phase1.h b/examples/dm_example/api/include/phase1.h
new file mode 100644
index 0000000..04e9da7
--- /dev/null
+++ b/examples/dm_example/api/include/phase1.h
@@ -0,0 +1,44 @@
+/**
+ *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.
+ */
+/*
+ * publisher.h
+ *
+ * \date Aug 23, 2010
+ * \author <a href="mailto:dev@celix.apache.org">Apache Celix Project Team</a>
+ * \copyright Apache License, Version 2.0
+ */
+
+#ifndef PHASE1_H_
+#define PHASE1_H_
+
+#define PHASE1_NAME "PHASE1"
+#define PHASE1_VERSION "1.2.2.0"
+#define PHASE1_RANGE_ALL "[1.2.2.0,4.5.6.x)"
+#define PHASE1_RANGE_EXACT "[1.2.2.0,1.2.2.0]"
+
+
+
+struct phase1_struct {
+ void *handle;
+ int (*getData)(void *handle, unsigned int *data);
+};
+
+typedef struct phase1_struct phase1_t;
+
+#endif /* PHASE1_H_ */
http://git-wip-us.apache.org/repos/asf/celix/blob/1836cf84/examples/dm_example/api/include/phase2.h
----------------------------------------------------------------------
diff --git a/examples/dm_example/api/include/phase2.h b/examples/dm_example/api/include/phase2.h
new file mode 100644
index 0000000..2f4df86
--- /dev/null
+++ b/examples/dm_example/api/include/phase2.h
@@ -0,0 +1,41 @@
+/**
+ *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.
+ */
+/*
+ * publisher.h
+ *
+ * \date Aug 23, 2010
+ * \author <a href="mailto:dev@celix.apache.org">Apache Celix Project Team</a>
+ * \copyright Apache License, Version 2.0
+ */
+
+#ifndef PHASE2_H
+#define PHASE2_H
+
+#define PHASE2_NAME "PHASE2"
+#define PHASE2_VERSION "1.0.0.0"
+
+struct phase2_struct {
+ void *handle;
+ void (*getData)(void *handle, double *data);
+};
+
+typedef struct phase2_struct phase2_t;
+
+
+#endif /* PHASE2_H */
http://git-wip-us.apache.org/repos/asf/celix/blob/1836cf84/examples/dm_example/phase1/CMakeLists.txt
----------------------------------------------------------------------
diff --git a/examples/dm_example/phase1/CMakeLists.txt b/examples/dm_example/phase1/CMakeLists.txt
index 6299688..5263bab 100644
--- a/examples/dm_example/phase1/CMakeLists.txt
+++ b/examples/dm_example/phase1/CMakeLists.txt
@@ -15,26 +15,24 @@
# specific language governing permissions and limitations
# under the License.
-include_directories(
- private/include
- ../services
-)
-add_bundle(phase1
+add_bundle(dm_example_phase1
SYMBOLIC_NAME phase1
VERSION 0.0.1
SOURCES
- private/src/phase1_activator
- private/src/phase1_cmp.c
+ src/phase1_activator
+ src/phase1_cmp.c
)
+target_include_directories(dm_example_phase1 PRIVATE src)
+target_link_libraries(dm_example_phase1 PRIVATE dm_example_api)
IF(APPLE)
- target_link_libraries(phase1 PRIVATE -Wl,-all_load dependency_manager_static)
+ target_link_libraries(dm_example_phase1 PRIVATE -Wl,-all_load Celix::dependency_manager_static)
else()
if(ENABLE_ADDRESS_SANITIZER)
#With asan there can be undefined symbols
- target_link_libraries(phase1 PRIVATE -Wl,--whole-archive dependency_manager_static -Wl,--no-whole-archive)
+ target_link_libraries(dm_example_phase1 PRIVATE -Wl,--whole-archive Celix::dependency_manager_static -Wl,--no-whole-archive)
else()
- target_link_libraries(phase1 PRIVATE -Wl,--no-undefined -Wl,--whole-archive dependency_manager_static -Wl,--no-whole-archive)
+ target_link_libraries(dm_example_phase1 PRIVATE -Wl,--no-undefined -Wl,--whole-archive Celix::dependency_manager_static -Wl,--no-whole-archive)
endif()
endif()
http://git-wip-us.apache.org/repos/asf/celix/blob/1836cf84/examples/dm_example/phase1/private/include/phase1_cmp.h
----------------------------------------------------------------------
diff --git a/examples/dm_example/phase1/private/include/phase1_cmp.h b/examples/dm_example/phase1/private/include/phase1_cmp.h
deleted file mode 100644
index 5715f6e..0000000
--- a/examples/dm_example/phase1/private/include/phase1_cmp.h
+++ /dev/null
@@ -1,43 +0,0 @@
-/**
- *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.
- */
-/*
- * publisher.h
- *
- * \date Oct 29, 2015
- * \author <a href="mailto:dev@celix.apache.org">Apache Celix Project Team</a>
- * \copyright Apache License, Version 2.0
- */
-
-#ifndef PHASE1_CMP_H
-#define PHASE1_CMP_H
-
-
-typedef struct phase1_cmp_struct phase1_cmp_t;
-
-phase1_cmp_t *phase1_create(void);
-int phase1_init(phase1_cmp_t *cmp);
-int phase1_start(phase1_cmp_t *cmp);
-int phase1_stop(phase1_cmp_t *cmp);
-int phase1_deinit(phase1_cmp_t *cmp);
-void phase1_destroy(phase1_cmp_t *cmp);
-
-int phase1_getData(phase1_cmp_t *cmp, unsigned int *data);
-
-
-#endif //PHASE1_CMP_H
http://git-wip-us.apache.org/repos/asf/celix/blob/1836cf84/examples/dm_example/phase1/private/src/phase1_activator.c
----------------------------------------------------------------------
diff --git a/examples/dm_example/phase1/private/src/phase1_activator.c b/examples/dm_example/phase1/private/src/phase1_activator.c
deleted file mode 100644
index 783e642..0000000
--- a/examples/dm_example/phase1/private/src/phase1_activator.c
+++ /dev/null
@@ -1,85 +0,0 @@
-/**
- *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.
- */
-/*
- * activator.c
- *
- * \date Oct 29, 2015
- * \author <a href="mailto:dev@celix.apache.org">Apache Celix Project Team</a>
- * \copyright Apache License, Version 2.0
- */
-#include <stdlib.h>
-#include <phase1_cmp.h>
-
-#include "bundle_activator.h"
-#include "dm_activator.h"
-
-#include "phase1.h"
-
-struct phase1_activator_struct {
- phase1_cmp_t *phase1Cmp;
- phase1_t phase1Serv;
-};
-
-celix_status_t dm_create(bundle_context_pt context, void **userData) {
- printf("PHASE1: dm_create\n");
- *userData = calloc(1, sizeof(struct phase1_activator_struct));
- return *userData != NULL ? CELIX_SUCCESS : CELIX_ENOMEM;
-}
-
-celix_status_t dm_init(void * userData, bundle_context_pt context, dm_dependency_manager_pt manager) {
- printf("PHASE1: dm_init\n");
- celix_status_t status = CELIX_SUCCESS;
-
-
- struct phase1_activator_struct *act = (struct phase1_activator_struct *)userData;
-
- act->phase1Cmp = phase1_create();
- if (act->phase1Cmp != NULL) {
-
- act->phase1Serv.handle = act->phase1Cmp;
- act->phase1Serv.getData = (void *)phase1_getData;
-
- properties_pt props = properties_create();
- properties_set(props, "id", "phase1");
-
- dm_component_pt cmp;
- component_create(context, "PHASE1_PROCESSING_COMPONENT", &cmp);
- component_setImplementation(cmp, act->phase1Cmp);
- component_setCallbacksSafe(cmp, phase1_cmp_t *, phase1_init, phase1_start, phase1_stop, phase1_deinit);
- component_addInterface(cmp, PHASE1_NAME, PHASE1_VERSION, &act->phase1Serv, props);
-
- dependencyManager_add(manager, cmp);
- } else {
- status = CELIX_ENOMEM;
- }
-
- return status;
-}
-
-celix_status_t dm_destroy(void * userData, bundle_context_pt context, dm_dependency_manager_pt manager) {
- printf("PHASE1: dm-destroy\n");
-
- struct phase1_activator_struct *act = (struct phase1_activator_struct *)userData;
- if (act->phase1Cmp != NULL) {
- phase1_destroy(act->phase1Cmp);
- }
- free(act);
-
- return CELIX_SUCCESS;
-}
http://git-wip-us.apache.org/repos/asf/celix/blob/1836cf84/examples/dm_example/phase1/private/src/phase1_cmp.c
----------------------------------------------------------------------
diff --git a/examples/dm_example/phase1/private/src/phase1_cmp.c b/examples/dm_example/phase1/private/src/phase1_cmp.c
deleted file mode 100644
index 75de182..0000000
--- a/examples/dm_example/phase1/private/src/phase1_cmp.c
+++ /dev/null
@@ -1,99 +0,0 @@
-/**
- *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.
- */
-/*
- * publisher.c
- *
- * \date Oct 29, 2015
- * \author <a href="mailto:dev@celix.apache.org">Apache Celix Project Team</a>
- * \copyright Apache License, Version 2.0
- */
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <string.h>
-#include <signal.h>
-
-#include "celix_threads.h"
-#include "phase1_cmp.h"
-
-#define SLEEPTIME 1000
-
-struct phase1_cmp_struct {
- celix_thread_t thread;
- bool running;
- unsigned int counter;
-};
-
-static void *phase1_thread(void *data);
-
-phase1_cmp_t *phase1_create(void) {
- phase1_cmp_t *cmp = calloc(1, sizeof(*cmp));
- if (cmp != NULL) {
- cmp->counter = 0;
- cmp->running = false;
- }
- return cmp;
-}
-
-int phase1_init(phase1_cmp_t *cmp) {
- printf("init phase1\n");
- return 0;
-}
-
-int phase1_start(phase1_cmp_t *cmp) {
- printf("start phase1\n");
- cmp->running = true;
- celixThread_create(&cmp->thread, NULL, phase1_thread, cmp);
- return 0;
-}
-
-int phase1_stop(phase1_cmp_t *cmp) {
- printf("stop phase1\n");
- cmp->running = false;
- celixThread_kill(cmp->thread, SIGUSR1);
- celixThread_join(cmp->thread, NULL);
- return 0;
-}
-
-int phase1_deinit(phase1_cmp_t *cmp) {
- printf("deinit phase1\n");
- return 0;
-}
-
-void phase1_destroy(phase1_cmp_t *cmp) {
- free(cmp);
- printf("destroy phase1\n");
-}
-
-static void *phase1_thread(void *data) {
- phase1_cmp_t *cmp = data;
-
- while (cmp->running) {
- cmp->counter += 1;
- usleep(SLEEPTIME);
- }
-
- celixThread_exit(NULL);
- return NULL;
-}
-
-int phase1_getData(phase1_cmp_t *cmp, unsigned int *data) {
- *data = cmp->counter;
- return 0;
-}
http://git-wip-us.apache.org/repos/asf/celix/blob/1836cf84/examples/dm_example/phase1/src/phase1_activator.c
----------------------------------------------------------------------
diff --git a/examples/dm_example/phase1/src/phase1_activator.c b/examples/dm_example/phase1/src/phase1_activator.c
new file mode 100644
index 0000000..783e642
--- /dev/null
+++ b/examples/dm_example/phase1/src/phase1_activator.c
@@ -0,0 +1,85 @@
+/**
+ *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.
+ */
+/*
+ * activator.c
+ *
+ * \date Oct 29, 2015
+ * \author <a href="mailto:dev@celix.apache.org">Apache Celix Project Team</a>
+ * \copyright Apache License, Version 2.0
+ */
+#include <stdlib.h>
+#include <phase1_cmp.h>
+
+#include "bundle_activator.h"
+#include "dm_activator.h"
+
+#include "phase1.h"
+
+struct phase1_activator_struct {
+ phase1_cmp_t *phase1Cmp;
+ phase1_t phase1Serv;
+};
+
+celix_status_t dm_create(bundle_context_pt context, void **userData) {
+ printf("PHASE1: dm_create\n");
+ *userData = calloc(1, sizeof(struct phase1_activator_struct));
+ return *userData != NULL ? CELIX_SUCCESS : CELIX_ENOMEM;
+}
+
+celix_status_t dm_init(void * userData, bundle_context_pt context, dm_dependency_manager_pt manager) {
+ printf("PHASE1: dm_init\n");
+ celix_status_t status = CELIX_SUCCESS;
+
+
+ struct phase1_activator_struct *act = (struct phase1_activator_struct *)userData;
+
+ act->phase1Cmp = phase1_create();
+ if (act->phase1Cmp != NULL) {
+
+ act->phase1Serv.handle = act->phase1Cmp;
+ act->phase1Serv.getData = (void *)phase1_getData;
+
+ properties_pt props = properties_create();
+ properties_set(props, "id", "phase1");
+
+ dm_component_pt cmp;
+ component_create(context, "PHASE1_PROCESSING_COMPONENT", &cmp);
+ component_setImplementation(cmp, act->phase1Cmp);
+ component_setCallbacksSafe(cmp, phase1_cmp_t *, phase1_init, phase1_start, phase1_stop, phase1_deinit);
+ component_addInterface(cmp, PHASE1_NAME, PHASE1_VERSION, &act->phase1Serv, props);
+
+ dependencyManager_add(manager, cmp);
+ } else {
+ status = CELIX_ENOMEM;
+ }
+
+ return status;
+}
+
+celix_status_t dm_destroy(void * userData, bundle_context_pt context, dm_dependency_manager_pt manager) {
+ printf("PHASE1: dm-destroy\n");
+
+ struct phase1_activator_struct *act = (struct phase1_activator_struct *)userData;
+ if (act->phase1Cmp != NULL) {
+ phase1_destroy(act->phase1Cmp);
+ }
+ free(act);
+
+ return CELIX_SUCCESS;
+}
http://git-wip-us.apache.org/repos/asf/celix/blob/1836cf84/examples/dm_example/phase1/src/phase1_cmp.c
----------------------------------------------------------------------
diff --git a/examples/dm_example/phase1/src/phase1_cmp.c b/examples/dm_example/phase1/src/phase1_cmp.c
new file mode 100644
index 0000000..75de182
--- /dev/null
+++ b/examples/dm_example/phase1/src/phase1_cmp.c
@@ -0,0 +1,99 @@
+/**
+ *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.
+ */
+/*
+ * publisher.c
+ *
+ * \date Oct 29, 2015
+ * \author <a href="mailto:dev@celix.apache.org">Apache Celix Project Team</a>
+ * \copyright Apache License, Version 2.0
+ */
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <string.h>
+#include <signal.h>
+
+#include "celix_threads.h"
+#include "phase1_cmp.h"
+
+#define SLEEPTIME 1000
+
+struct phase1_cmp_struct {
+ celix_thread_t thread;
+ bool running;
+ unsigned int counter;
+};
+
+static void *phase1_thread(void *data);
+
+phase1_cmp_t *phase1_create(void) {
+ phase1_cmp_t *cmp = calloc(1, sizeof(*cmp));
+ if (cmp != NULL) {
+ cmp->counter = 0;
+ cmp->running = false;
+ }
+ return cmp;
+}
+
+int phase1_init(phase1_cmp_t *cmp) {
+ printf("init phase1\n");
+ return 0;
+}
+
+int phase1_start(phase1_cmp_t *cmp) {
+ printf("start phase1\n");
+ cmp->running = true;
+ celixThread_create(&cmp->thread, NULL, phase1_thread, cmp);
+ return 0;
+}
+
+int phase1_stop(phase1_cmp_t *cmp) {
+ printf("stop phase1\n");
+ cmp->running = false;
+ celixThread_kill(cmp->thread, SIGUSR1);
+ celixThread_join(cmp->thread, NULL);
+ return 0;
+}
+
+int phase1_deinit(phase1_cmp_t *cmp) {
+ printf("deinit phase1\n");
+ return 0;
+}
+
+void phase1_destroy(phase1_cmp_t *cmp) {
+ free(cmp);
+ printf("destroy phase1\n");
+}
+
+static void *phase1_thread(void *data) {
+ phase1_cmp_t *cmp = data;
+
+ while (cmp->running) {
+ cmp->counter += 1;
+ usleep(SLEEPTIME);
+ }
+
+ celixThread_exit(NULL);
+ return NULL;
+}
+
+int phase1_getData(phase1_cmp_t *cmp, unsigned int *data) {
+ *data = cmp->counter;
+ return 0;
+}
http://git-wip-us.apache.org/repos/asf/celix/blob/1836cf84/examples/dm_example/phase1/src/phase1_cmp.h
----------------------------------------------------------------------
diff --git a/examples/dm_example/phase1/src/phase1_cmp.h b/examples/dm_example/phase1/src/phase1_cmp.h
new file mode 100644
index 0000000..5715f6e
--- /dev/null
+++ b/examples/dm_example/phase1/src/phase1_cmp.h
@@ -0,0 +1,43 @@
+/**
+ *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.
+ */
+/*
+ * publisher.h
+ *
+ * \date Oct 29, 2015
+ * \author <a href="mailto:dev@celix.apache.org">Apache Celix Project Team</a>
+ * \copyright Apache License, Version 2.0
+ */
+
+#ifndef PHASE1_CMP_H
+#define PHASE1_CMP_H
+
+
+typedef struct phase1_cmp_struct phase1_cmp_t;
+
+phase1_cmp_t *phase1_create(void);
+int phase1_init(phase1_cmp_t *cmp);
+int phase1_start(phase1_cmp_t *cmp);
+int phase1_stop(phase1_cmp_t *cmp);
+int phase1_deinit(phase1_cmp_t *cmp);
+void phase1_destroy(phase1_cmp_t *cmp);
+
+int phase1_getData(phase1_cmp_t *cmp, unsigned int *data);
+
+
+#endif //PHASE1_CMP_H
http://git-wip-us.apache.org/repos/asf/celix/blob/1836cf84/examples/dm_example/phase2a/CMakeLists.txt
----------------------------------------------------------------------
diff --git a/examples/dm_example/phase2a/CMakeLists.txt b/examples/dm_example/phase2a/CMakeLists.txt
index d8f9165..cda4971 100644
--- a/examples/dm_example/phase2a/CMakeLists.txt
+++ b/examples/dm_example/phase2a/CMakeLists.txt
@@ -15,26 +15,23 @@
# specific language governing permissions and limitations
# under the License.
-include_directories(
- private/include
- ../services
-)
-
-add_bundle(phase2a
+add_bundle(dm_example_phase2a
SYMBOLIC_NAME phase2a
VERSION 0.0.1
SOURCES
- private/src/phase2a_activator
- private/src/phase2a_cmp
+ src/phase2a_activator
+ src/phase2a_cmp
)
+target_include_directories(dm_example_phase2a PRIVATE src)
+target_link_libraries(dm_example_phase2a PRIVATE dm_example_api)
IF(APPLE)
- target_link_libraries(phase2a PRIVATE -Wl,-all_load dependency_manager_static)
+ target_link_libraries(dm_example_phase2a PRIVATE -Wl,-all_load Celix::dependency_manager_static)
else()
if(ENABLE_ADDRESS_SANITIZER)
#With asan there can be undefined symbols
- target_link_libraries(phase2a PRIVATE -Wl,--whole-archive dependency_manager_static -Wl,--no-whole-archive)
+ target_link_libraries(dm_example_phase2a PRIVATE -Wl,--whole-archive Celix::dependency_manager_static -Wl,--no-whole-archive)
else()
- target_link_libraries(phase2a PRIVATE -Wl,--no-undefined -Wl,--whole-archive dependency_manager_static -Wl,--no-whole-archive)
+ target_link_libraries(dm_example_phase2a PRIVATE -Wl,--no-undefined -Wl,--whole-archive Celix::dependency_manager_static -Wl,--no-whole-archive)
endif()
ENDIF()
http://git-wip-us.apache.org/repos/asf/celix/blob/1836cf84/examples/dm_example/phase2a/private/include/phase2a_cmp.h
----------------------------------------------------------------------
diff --git a/examples/dm_example/phase2a/private/include/phase2a_cmp.h b/examples/dm_example/phase2a/private/include/phase2a_cmp.h
deleted file mode 100644
index 060b23d..0000000
--- a/examples/dm_example/phase2a/private/include/phase2a_cmp.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/**
- *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.
- */
-/*
- * publisher.h
- *
- * \date Oct 29, 2015
- * \author <a href="mailto:dev@celix.apache.org">Apache Celix Project Team</a>
- * \copyright Apache License, Version 2.0
- */
-
-#ifndef PHASE2A_CMP_H
-#define PHASE2A_CMP_H
-
-#include "phase1.h"
-
-typedef struct phase2a_cmp_struct phase2a_cmp_t;
-
-phase2a_cmp_t *phase2a_create(void);
-int phase2a_init(phase2a_cmp_t *cmp);
-int phase2a_start(phase2a_cmp_t *cmp);
-int phase2a_stop(phase2a_cmp_t *cmp);
-int phase2a_deinit(phase2a_cmp_t *cmp);
-void phase2a_destroy(phase2a_cmp_t *cmp);
-
-int phase2a_setPhase1(phase2a_cmp_t *cmp, const phase1_t* phase1);
-
-int phase2a_getData(phase2a_cmp_t *cmp, double *data);
-
-
-#endif //PHASE2A_CMP_H
http://git-wip-us.apache.org/repos/asf/celix/blob/1836cf84/examples/dm_example/phase2a/private/src/phase2a_activator.c
----------------------------------------------------------------------
diff --git a/examples/dm_example/phase2a/private/src/phase2a_activator.c b/examples/dm_example/phase2a/private/src/phase2a_activator.c
deleted file mode 100644
index 6416c68..0000000
--- a/examples/dm_example/phase2a/private/src/phase2a_activator.c
+++ /dev/null
@@ -1,95 +0,0 @@
-/**
- *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.
- */
-/*
- * activator.c
- *
- * \date Oct 29, 2015
- * \author <a href="mailto:dev@celix.apache.org">Apache Celix Project Team</a>
- * \copyright Apache License, Version 2.0
- */
-#include <stdlib.h>
-#include <phase2a_cmp.h>
-
-#include "bundle_activator.h"
-#include "dm_activator.h"
-
-#include "phase1.h"
-#include "phase2.h"
-#include "phase2a_cmp.h"
-
-struct phase2a_activator_struct {
- phase2a_cmp_t *phase2aCmp;
- phase2_t phase2Serv;
-};
-
-celix_status_t dm_create(bundle_context_pt context, void **userData) {
- printf("phase2a: dm_create\n");
- *userData = calloc(1, sizeof(struct phase2a_activator_struct));
- return *userData != NULL ? CELIX_SUCCESS : CELIX_ENOMEM;
-}
-
-celix_status_t dm_init(void * userData, bundle_context_pt context, dm_dependency_manager_pt manager) {
- printf("phase2a: dm_init\n");
- celix_status_t status = CELIX_SUCCESS;
-
- struct phase2a_activator_struct *act = (struct phase2a_activator_struct *)userData;
-
- act->phase2aCmp = phase2a_create();
- if (act->phase2aCmp != NULL) {
-
- act->phase2Serv.handle = act->phase2aCmp;
- act->phase2Serv.getData = (void *)phase2a_getData;
-
- properties_pt props = properties_create();
- properties_set(props, "id", "phase2a");
-
- dm_component_pt cmp;
- component_create(context, "PHASE2A_PROCESSING_COMPONENT", &cmp);
- component_setImplementation(cmp, act->phase2aCmp);
- component_setCallbacksSafe(cmp, phase2a_cmp_t *, phase2a_init, phase2a_start, phase2a_stop, phase2a_deinit);
- component_addInterface(cmp, PHASE2_NAME, PHASE2_VERSION, &act->phase2Serv, props);
-
-
- dm_service_dependency_pt dep;
- serviceDependency_create(&dep);
- serviceDependency_setService(dep, PHASE1_NAME, PHASE1_RANGE_ALL, NULL);
- serviceDependency_setCallbacksSafe(dep, phase2a_cmp_t*, const phase1_t*, phase2a_setPhase1, NULL, NULL, NULL, NULL);
- serviceDependency_setStrategy(dep, DM_SERVICE_DEPENDENCY_STRATEGY_LOCKING);
- serviceDependency_setRequired(dep, true);
- component_addServiceDependency(cmp, dep);
-
- dependencyManager_add(manager, cmp);
- } else {
- status = CELIX_ENOMEM;
- }
-
- return status;
-}
-
-celix_status_t dm_destroy(void * userData, bundle_context_pt context, dm_dependency_manager_pt manager) {
- printf("phase2a: dm-destroy\n");
-
- struct phase2a_activator_struct *act = (struct phase2a_activator_struct *)userData;
- if (act->phase2aCmp != NULL) {
- phase2a_destroy(act->phase2aCmp);
- }
- free(act);
-
- return CELIX_SUCCESS;
-}
http://git-wip-us.apache.org/repos/asf/celix/blob/1836cf84/examples/dm_example/phase2a/private/src/phase2a_cmp.c
----------------------------------------------------------------------
diff --git a/examples/dm_example/phase2a/private/src/phase2a_cmp.c b/examples/dm_example/phase2a/private/src/phase2a_cmp.c
deleted file mode 100644
index d115b69..0000000
--- a/examples/dm_example/phase2a/private/src/phase2a_cmp.c
+++ /dev/null
@@ -1,116 +0,0 @@
-/**
- *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.
- */
-/*
- * publisher.c
- *
- * \date Oct 29, 2015
- * \author <a href="mailto:dev@celix.apache.org">Apache Celix Project Team</a>
- * \copyright Apache License, Version 2.0
- */
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <signal.h>
-
-#include "celix_threads.h"
-#include "phase2a_cmp.h"
-
-#define SLEEPTIME 2000000
-
-struct phase2a_cmp_struct {
- celix_thread_t thread;
- bool running;
- double currentValue;
- celix_thread_mutex_t mutex;
- const phase1_t* phase1Serv;
-};
-
-static void *phase2a_thread(void *data);
-
-phase2a_cmp_t *phase2a_create(void) {
- phase2a_cmp_t *cmp = calloc(1, sizeof(*cmp));
- if (cmp != NULL) {
- cmp->currentValue = 0.0;
- cmp->running = false;
- celixThreadMutex_create(&cmp->mutex, NULL);
- }
- return cmp;
-}
-
-int phase2a_init(phase2a_cmp_t *cmp) {
- printf("init phase2a\n");
- return 0;
-}
-
-int phase2a_start(phase2a_cmp_t *cmp) {
- printf("start phase2a\n");
- cmp->running = true;
- celixThread_create(&cmp->thread, NULL, phase2a_thread, cmp);
- return 0;
-}
-
-int phase2a_stop(phase2a_cmp_t *cmp) {
- printf("stop phase2a\n");
- cmp->running = false;
- celixThread_kill(cmp->thread, SIGUSR1);
- celixThread_join(cmp->thread, NULL);
- return 0;
-}
-
-int phase2a_deinit(phase2a_cmp_t *cmp) {
- printf("deinit phase2a\n");
- return 0;
-}
-
-void phase2a_destroy(phase2a_cmp_t *cmp) {
- celixThreadMutex_destroy(&cmp->mutex);
- free(cmp);
- printf("destroy phase2a\n");
-}
-
-int phase2a_setPhase1(phase2a_cmp_t *cmp, const phase1_t* phase1) {
- printf("phase2a_setPhase1 called!\n\n");
- celixThreadMutex_lock(&cmp->mutex);
- cmp->phase1Serv = phase1;
- celixThreadMutex_unlock(&cmp->mutex);
- return 0;
-}
-
-static void *phase2a_thread(void *data) {
- phase2a_cmp_t *cmp = data;
- unsigned int counter;
-
- while (cmp->running) {
- celixThreadMutex_lock(&cmp->mutex);
- if (cmp->phase1Serv != NULL) {
- cmp->phase1Serv->getData(cmp->phase1Serv->handle, &counter);
- cmp->currentValue = 1.0 / counter;
- }
- celixThreadMutex_unlock(&cmp->mutex);
- usleep(SLEEPTIME);
- }
-
- celixThread_exit(NULL);
- return NULL;
-}
-
-int phase2a_getData(phase2a_cmp_t *cmp, double *data) {
- *data = cmp->currentValue;
- return 0;
-}
http://git-wip-us.apache.org/repos/asf/celix/blob/1836cf84/examples/dm_example/phase2a/src/phase2a_activator.c
----------------------------------------------------------------------
diff --git a/examples/dm_example/phase2a/src/phase2a_activator.c b/examples/dm_example/phase2a/src/phase2a_activator.c
new file mode 100644
index 0000000..6416c68
--- /dev/null
+++ b/examples/dm_example/phase2a/src/phase2a_activator.c
@@ -0,0 +1,95 @@
+/**
+ *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.
+ */
+/*
+ * activator.c
+ *
+ * \date Oct 29, 2015
+ * \author <a href="mailto:dev@celix.apache.org">Apache Celix Project Team</a>
+ * \copyright Apache License, Version 2.0
+ */
+#include <stdlib.h>
+#include <phase2a_cmp.h>
+
+#include "bundle_activator.h"
+#include "dm_activator.h"
+
+#include "phase1.h"
+#include "phase2.h"
+#include "phase2a_cmp.h"
+
+struct phase2a_activator_struct {
+ phase2a_cmp_t *phase2aCmp;
+ phase2_t phase2Serv;
+};
+
+celix_status_t dm_create(bundle_context_pt context, void **userData) {
+ printf("phase2a: dm_create\n");
+ *userData = calloc(1, sizeof(struct phase2a_activator_struct));
+ return *userData != NULL ? CELIX_SUCCESS : CELIX_ENOMEM;
+}
+
+celix_status_t dm_init(void * userData, bundle_context_pt context, dm_dependency_manager_pt manager) {
+ printf("phase2a: dm_init\n");
+ celix_status_t status = CELIX_SUCCESS;
+
+ struct phase2a_activator_struct *act = (struct phase2a_activator_struct *)userData;
+
+ act->phase2aCmp = phase2a_create();
+ if (act->phase2aCmp != NULL) {
+
+ act->phase2Serv.handle = act->phase2aCmp;
+ act->phase2Serv.getData = (void *)phase2a_getData;
+
+ properties_pt props = properties_create();
+ properties_set(props, "id", "phase2a");
+
+ dm_component_pt cmp;
+ component_create(context, "PHASE2A_PROCESSING_COMPONENT", &cmp);
+ component_setImplementation(cmp, act->phase2aCmp);
+ component_setCallbacksSafe(cmp, phase2a_cmp_t *, phase2a_init, phase2a_start, phase2a_stop, phase2a_deinit);
+ component_addInterface(cmp, PHASE2_NAME, PHASE2_VERSION, &act->phase2Serv, props);
+
+
+ dm_service_dependency_pt dep;
+ serviceDependency_create(&dep);
+ serviceDependency_setService(dep, PHASE1_NAME, PHASE1_RANGE_ALL, NULL);
+ serviceDependency_setCallbacksSafe(dep, phase2a_cmp_t*, const phase1_t*, phase2a_setPhase1, NULL, NULL, NULL, NULL);
+ serviceDependency_setStrategy(dep, DM_SERVICE_DEPENDENCY_STRATEGY_LOCKING);
+ serviceDependency_setRequired(dep, true);
+ component_addServiceDependency(cmp, dep);
+
+ dependencyManager_add(manager, cmp);
+ } else {
+ status = CELIX_ENOMEM;
+ }
+
+ return status;
+}
+
+celix_status_t dm_destroy(void * userData, bundle_context_pt context, dm_dependency_manager_pt manager) {
+ printf("phase2a: dm-destroy\n");
+
+ struct phase2a_activator_struct *act = (struct phase2a_activator_struct *)userData;
+ if (act->phase2aCmp != NULL) {
+ phase2a_destroy(act->phase2aCmp);
+ }
+ free(act);
+
+ return CELIX_SUCCESS;
+}
http://git-wip-us.apache.org/repos/asf/celix/blob/1836cf84/examples/dm_example/phase2a/src/phase2a_cmp.c
----------------------------------------------------------------------
diff --git a/examples/dm_example/phase2a/src/phase2a_cmp.c b/examples/dm_example/phase2a/src/phase2a_cmp.c
new file mode 100644
index 0000000..d115b69
--- /dev/null
+++ b/examples/dm_example/phase2a/src/phase2a_cmp.c
@@ -0,0 +1,116 @@
+/**
+ *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.
+ */
+/*
+ * publisher.c
+ *
+ * \date Oct 29, 2015
+ * \author <a href="mailto:dev@celix.apache.org">Apache Celix Project Team</a>
+ * \copyright Apache License, Version 2.0
+ */
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <signal.h>
+
+#include "celix_threads.h"
+#include "phase2a_cmp.h"
+
+#define SLEEPTIME 2000000
+
+struct phase2a_cmp_struct {
+ celix_thread_t thread;
+ bool running;
+ double currentValue;
+ celix_thread_mutex_t mutex;
+ const phase1_t* phase1Serv;
+};
+
+static void *phase2a_thread(void *data);
+
+phase2a_cmp_t *phase2a_create(void) {
+ phase2a_cmp_t *cmp = calloc(1, sizeof(*cmp));
+ if (cmp != NULL) {
+ cmp->currentValue = 0.0;
+ cmp->running = false;
+ celixThreadMutex_create(&cmp->mutex, NULL);
+ }
+ return cmp;
+}
+
+int phase2a_init(phase2a_cmp_t *cmp) {
+ printf("init phase2a\n");
+ return 0;
+}
+
+int phase2a_start(phase2a_cmp_t *cmp) {
+ printf("start phase2a\n");
+ cmp->running = true;
+ celixThread_create(&cmp->thread, NULL, phase2a_thread, cmp);
+ return 0;
+}
+
+int phase2a_stop(phase2a_cmp_t *cmp) {
+ printf("stop phase2a\n");
+ cmp->running = false;
+ celixThread_kill(cmp->thread, SIGUSR1);
+ celixThread_join(cmp->thread, NULL);
+ return 0;
+}
+
+int phase2a_deinit(phase2a_cmp_t *cmp) {
+ printf("deinit phase2a\n");
+ return 0;
+}
+
+void phase2a_destroy(phase2a_cmp_t *cmp) {
+ celixThreadMutex_destroy(&cmp->mutex);
+ free(cmp);
+ printf("destroy phase2a\n");
+}
+
+int phase2a_setPhase1(phase2a_cmp_t *cmp, const phase1_t* phase1) {
+ printf("phase2a_setPhase1 called!\n\n");
+ celixThreadMutex_lock(&cmp->mutex);
+ cmp->phase1Serv = phase1;
+ celixThreadMutex_unlock(&cmp->mutex);
+ return 0;
+}
+
+static void *phase2a_thread(void *data) {
+ phase2a_cmp_t *cmp = data;
+ unsigned int counter;
+
+ while (cmp->running) {
+ celixThreadMutex_lock(&cmp->mutex);
+ if (cmp->phase1Serv != NULL) {
+ cmp->phase1Serv->getData(cmp->phase1Serv->handle, &counter);
+ cmp->currentValue = 1.0 / counter;
+ }
+ celixThreadMutex_unlock(&cmp->mutex);
+ usleep(SLEEPTIME);
+ }
+
+ celixThread_exit(NULL);
+ return NULL;
+}
+
+int phase2a_getData(phase2a_cmp_t *cmp, double *data) {
+ *data = cmp->currentValue;
+ return 0;
+}
http://git-wip-us.apache.org/repos/asf/celix/blob/1836cf84/examples/dm_example/phase2a/src/phase2a_cmp.h
----------------------------------------------------------------------
diff --git a/examples/dm_example/phase2a/src/phase2a_cmp.h b/examples/dm_example/phase2a/src/phase2a_cmp.h
new file mode 100644
index 0000000..060b23d
--- /dev/null
+++ b/examples/dm_example/phase2a/src/phase2a_cmp.h
@@ -0,0 +1,46 @@
+/**
+ *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.
+ */
+/*
+ * publisher.h
+ *
+ * \date Oct 29, 2015
+ * \author <a href="mailto:dev@celix.apache.org">Apache Celix Project Team</a>
+ * \copyright Apache License, Version 2.0
+ */
+
+#ifndef PHASE2A_CMP_H
+#define PHASE2A_CMP_H
+
+#include "phase1.h"
+
+typedef struct phase2a_cmp_struct phase2a_cmp_t;
+
+phase2a_cmp_t *phase2a_create(void);
+int phase2a_init(phase2a_cmp_t *cmp);
+int phase2a_start(phase2a_cmp_t *cmp);
+int phase2a_stop(phase2a_cmp_t *cmp);
+int phase2a_deinit(phase2a_cmp_t *cmp);
+void phase2a_destroy(phase2a_cmp_t *cmp);
+
+int phase2a_setPhase1(phase2a_cmp_t *cmp, const phase1_t* phase1);
+
+int phase2a_getData(phase2a_cmp_t *cmp, double *data);
+
+
+#endif //PHASE2A_CMP_H
http://git-wip-us.apache.org/repos/asf/celix/blob/1836cf84/examples/dm_example/phase2b/CMakeLists.txt
----------------------------------------------------------------------
diff --git a/examples/dm_example/phase2b/CMakeLists.txt b/examples/dm_example/phase2b/CMakeLists.txt
index a65b422..9afb6c7 100644
--- a/examples/dm_example/phase2b/CMakeLists.txt
+++ b/examples/dm_example/phase2b/CMakeLists.txt
@@ -15,28 +15,23 @@
# specific language governing permissions and limitations
# under the License.
-include_directories(
- private/include
- ../services
-)
-
-add_bundle(phase2b
+add_bundle(dm_example_phase2b
SYMBOLIC_NAME phase2b
VERSION 0.0.1
SOURCES
- private/src/phase2b_activator
- private/src/phase2b_cmp
+ src/phase2b_activator
+ src/phase2b_cmp
)
-
-#bundle_private_libs(phase2b dependency_manager)
+target_include_directories(dm_example_phase2b PRIVATE src)
+target_link_libraries(dm_example_phase2b PRIVATE dm_example_api)
IF(APPLE)
- target_link_libraries(phase2b PRIVATE -Wl,-all_load dependency_manager_static)
+ target_link_libraries(dm_example_phase2b PRIVATE -Wl,-all_load Celix::dependency_manager_static)
else()
if(ENABLE_ADDRESS_SANITIZER)
#With asan there can be undefined symbols
- target_link_libraries(phase2b PRIVATE -Wl,--whole-archive dependency_manager_static -Wl,--no-whole-archive)
+ target_link_libraries(dm_example_phase2b PRIVATE -Wl,--whole-archive Celix::dependency_manager_static -Wl,--no-whole-archive)
else()
- target_link_libraries(phase2b PRIVATE -Wl,--no-undefined -Wl,--whole-archive dependency_manager_static -Wl,--no-whole-archive)
+ target_link_libraries(dm_example_phase2b PRIVATE -Wl,--no-undefined -Wl,--whole-archive Celix::dependency_manager_static -Wl,--no-whole-archive)
endif()
ENDIF()
http://git-wip-us.apache.org/repos/asf/celix/blob/1836cf84/examples/dm_example/phase2b/private/include/phase2b_cmp.h
----------------------------------------------------------------------
diff --git a/examples/dm_example/phase2b/private/include/phase2b_cmp.h b/examples/dm_example/phase2b/private/include/phase2b_cmp.h
deleted file mode 100644
index 7ae0358..0000000
--- a/examples/dm_example/phase2b/private/include/phase2b_cmp.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/**
- *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.
- */
-/*
- * publisher.h
- *
- * \date Oct 29, 2015
- * \author <a href="mailto:dev@celix.apache.org">Apache Celix Project Team</a>
- * \copyright Apache License, Version 2.0
- */
-
-#ifndef PHASE2B_CMP_H
-#define PHASE2B_CMP_H
-
-#include "phase1.h"
-
-typedef struct phase2b_cmp_struct phase2b_cmp_t;
-
-phase2b_cmp_t *phase2b_create(void);
-int phase2b_init(phase2b_cmp_t *cmp);
-int phase2b_start(phase2b_cmp_t *cmp);
-int phase2b_stop(phase2b_cmp_t *cmp);
-int phase2b_deinit(phase2b_cmp_t *cmp);
-void phase2b_destroy(phase2b_cmp_t *cmp);
-
-int phase2b_setPhase1(phase2b_cmp_t *cmp, const phase1_t* phase1);
-
-int phase2b_getData(phase2b_cmp_t *cmp, double *data);
-
-
-#endif //PHASE2B_CMP_H
http://git-wip-us.apache.org/repos/asf/celix/blob/1836cf84/examples/dm_example/phase2b/private/src/phase2b_activator.c
----------------------------------------------------------------------
diff --git a/examples/dm_example/phase2b/private/src/phase2b_activator.c b/examples/dm_example/phase2b/private/src/phase2b_activator.c
deleted file mode 100644
index c7692d4..0000000
--- a/examples/dm_example/phase2b/private/src/phase2b_activator.c
+++ /dev/null
@@ -1,95 +0,0 @@
-/**
- *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.
- */
-/*
- * activator.c
- *
- * \date Oct 29, 2015
- * \author <a href="mailto:dev@celix.apache.org">Apache Celix Project Team</a>
- * \copyright Apache License, Version 2.0
- */
-#include <stdlib.h>
-#include <phase2b_cmp.h>
-
-#include "bundle_activator.h"
-#include "dm_activator.h"
-
-#include "phase1.h"
-#include "phase2.h"
-#include "phase2b_cmp.h"
-
-struct phase2b_activator_struct {
- phase2b_cmp_t *phase2bCmp;
- phase2_t phase2Serv;
-};
-
-celix_status_t dm_create(bundle_context_pt context, void **userData) {
- printf("phase2b: dm_create\n");
- *userData = calloc(1, sizeof(struct phase2b_activator_struct));
- return *userData != NULL ? CELIX_SUCCESS : CELIX_ENOMEM;
-}
-
-celix_status_t dm_init(void * userData, bundle_context_pt context, dm_dependency_manager_pt manager) {
- printf("phase2b: dm_init\n");
- celix_status_t status = CELIX_SUCCESS;
-
- struct phase2b_activator_struct *act = (struct phase2b_activator_struct *)userData;
-
- act->phase2bCmp = phase2b_create();
- if (act->phase2bCmp != NULL) {
-
- act->phase2Serv.handle = act->phase2bCmp;
- act->phase2Serv.getData = (void *)phase2b_getData;
-
- properties_pt props = properties_create();
- properties_set(props, "id", "phase2b");
-
- dm_component_pt cmp;
- component_create(context, "PHASE2B_PROCESSING_COMPONENT", &cmp);
- component_setImplementation(cmp, act->phase2bCmp);
- component_setCallbacksSafe(cmp, phase2b_cmp_t *, phase2b_init, phase2b_start, phase2b_stop, phase2b_deinit);
- component_addInterface(cmp, PHASE2_NAME, PHASE2_VERSION, &act->phase2Serv, props);
-
-
- dm_service_dependency_pt dep;
- serviceDependency_create(&dep);
- serviceDependency_setService(dep, PHASE1_NAME, PHASE1_RANGE_EXACT, NULL);
- serviceDependency_setCallbacksSafe(dep, phase2b_cmp_t*, const phase1_t*, phase2b_setPhase1, NULL, NULL, NULL, NULL);
- serviceDependency_setRequired(dep, true);
- serviceDependency_setStrategy(dep, DM_SERVICE_DEPENDENCY_STRATEGY_LOCKING);
- component_addServiceDependency(cmp, dep);
-
- dependencyManager_add(manager, cmp);
- } else {
- status = CELIX_ENOMEM;
- }
-
- return status;
-}
-
-celix_status_t dm_destroy(void * userData, bundle_context_pt context, dm_dependency_manager_pt manager) {
- printf("phase2b: dm-destroy\n");
-
- struct phase2b_activator_struct *act = (struct phase2b_activator_struct *)userData;
- if (act->phase2bCmp != NULL) {
- phase2b_destroy(act->phase2bCmp);
- }
- free(act);
-
- return CELIX_SUCCESS;
-}
http://git-wip-us.apache.org/repos/asf/celix/blob/1836cf84/examples/dm_example/phase2b/private/src/phase2b_cmp.c
----------------------------------------------------------------------
diff --git a/examples/dm_example/phase2b/private/src/phase2b_cmp.c b/examples/dm_example/phase2b/private/src/phase2b_cmp.c
deleted file mode 100644
index a74dcfa..0000000
--- a/examples/dm_example/phase2b/private/src/phase2b_cmp.c
+++ /dev/null
@@ -1,115 +0,0 @@
-/**
- *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.
- */
-/*
- * publisher.c
- *
- * \date Oct 29, 2015
- * \author <a href="mailto:dev@celix.apache.org">Apache Celix Project Team</a>
- * \copyright Apache License, Version 2.0
- */
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <signal.h>
-
-#include "celix_threads.h"
-#include "phase2b_cmp.h"
-
-#define SLEEPTIME 2000000
-
-struct phase2b_cmp_struct {
- celix_thread_t thread;
- bool running;
- double currentValue;
- celix_thread_mutex_t mutex;
- const phase1_t* phase1Serv;
-};
-
-static void *phase2b_thread(void *data);
-
-phase2b_cmp_t *phase2b_create(void) {
- phase2b_cmp_t *cmp = calloc(1, sizeof(*cmp));
- if (cmp != NULL) {
- cmp->currentValue = 0.0;
- cmp->running = false;
- celixThreadMutex_create(&cmp->mutex, NULL);
- }
- return cmp;
-}
-
-int phase2b_init(phase2b_cmp_t *cmp) {
- printf("init phase2b\n");
- return 0;
-}
-
-int phase2b_start(phase2b_cmp_t *cmp) {
- printf("start phase2b\n");
- cmp->running = true;
- celixThread_create(&cmp->thread, NULL, phase2b_thread, cmp);
- return 0;
-}
-
-int phase2b_stop(phase2b_cmp_t *cmp) {
- printf("stop phase2b\n");
- cmp->running = false;
- celixThread_kill(cmp->thread, SIGUSR1);
- celixThread_join(cmp->thread, NULL);
- return 0;
-}
-
-int phase2b_deinit(phase2b_cmp_t *cmp) {
- printf("deinit phase2b\n");
- return 0;
-}
-
-void phase2b_destroy(phase2b_cmp_t *cmp) {
- celixThreadMutex_destroy(&cmp->mutex);
- free(cmp);
- printf("destroy phase2b\n");
-}
-
-int phase2b_setPhase1(phase2b_cmp_t *cmp, const phase1_t* phase1) {
- celixThreadMutex_lock(&cmp->mutex);
- cmp->phase1Serv = phase1;
- celixThreadMutex_unlock(&cmp->mutex);
- return 0;
-}
-
-static void *phase2b_thread(void *data) {
- phase2b_cmp_t *cmp = data;
- unsigned int counter;
-
- while (cmp->running) {
- celixThreadMutex_lock(&cmp->mutex);
- if (cmp->phase1Serv != NULL) {
- cmp->phase1Serv->getData(cmp->phase1Serv->handle, &counter);
- cmp->currentValue = counter / 1000;
- }
- celixThreadMutex_unlock(&cmp->mutex);
- usleep(SLEEPTIME);
- }
-
- celixThread_exit(NULL);
- return NULL;
-}
-
-int phase2b_getData(phase2b_cmp_t *cmp, double *data) {
- *data = cmp->currentValue;
- return 0;
-}
http://git-wip-us.apache.org/repos/asf/celix/blob/1836cf84/examples/dm_example/phase2b/src/phase2b_activator.c
----------------------------------------------------------------------
diff --git a/examples/dm_example/phase2b/src/phase2b_activator.c b/examples/dm_example/phase2b/src/phase2b_activator.c
new file mode 100644
index 0000000..c7692d4
--- /dev/null
+++ b/examples/dm_example/phase2b/src/phase2b_activator.c
@@ -0,0 +1,95 @@
+/**
+ *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.
+ */
+/*
+ * activator.c
+ *
+ * \date Oct 29, 2015
+ * \author <a href="mailto:dev@celix.apache.org">Apache Celix Project Team</a>
+ * \copyright Apache License, Version 2.0
+ */
+#include <stdlib.h>
+#include <phase2b_cmp.h>
+
+#include "bundle_activator.h"
+#include "dm_activator.h"
+
+#include "phase1.h"
+#include "phase2.h"
+#include "phase2b_cmp.h"
+
+struct phase2b_activator_struct {
+ phase2b_cmp_t *phase2bCmp;
+ phase2_t phase2Serv;
+};
+
+celix_status_t dm_create(bundle_context_pt context, void **userData) {
+ printf("phase2b: dm_create\n");
+ *userData = calloc(1, sizeof(struct phase2b_activator_struct));
+ return *userData != NULL ? CELIX_SUCCESS : CELIX_ENOMEM;
+}
+
+celix_status_t dm_init(void * userData, bundle_context_pt context, dm_dependency_manager_pt manager) {
+ printf("phase2b: dm_init\n");
+ celix_status_t status = CELIX_SUCCESS;
+
+ struct phase2b_activator_struct *act = (struct phase2b_activator_struct *)userData;
+
+ act->phase2bCmp = phase2b_create();
+ if (act->phase2bCmp != NULL) {
+
+ act->phase2Serv.handle = act->phase2bCmp;
+ act->phase2Serv.getData = (void *)phase2b_getData;
+
+ properties_pt props = properties_create();
+ properties_set(props, "id", "phase2b");
+
+ dm_component_pt cmp;
+ component_create(context, "PHASE2B_PROCESSING_COMPONENT", &cmp);
+ component_setImplementation(cmp, act->phase2bCmp);
+ component_setCallbacksSafe(cmp, phase2b_cmp_t *, phase2b_init, phase2b_start, phase2b_stop, phase2b_deinit);
+ component_addInterface(cmp, PHASE2_NAME, PHASE2_VERSION, &act->phase2Serv, props);
+
+
+ dm_service_dependency_pt dep;
+ serviceDependency_create(&dep);
+ serviceDependency_setService(dep, PHASE1_NAME, PHASE1_RANGE_EXACT, NULL);
+ serviceDependency_setCallbacksSafe(dep, phase2b_cmp_t*, const phase1_t*, phase2b_setPhase1, NULL, NULL, NULL, NULL);
+ serviceDependency_setRequired(dep, true);
+ serviceDependency_setStrategy(dep, DM_SERVICE_DEPENDENCY_STRATEGY_LOCKING);
+ component_addServiceDependency(cmp, dep);
+
+ dependencyManager_add(manager, cmp);
+ } else {
+ status = CELIX_ENOMEM;
+ }
+
+ return status;
+}
+
+celix_status_t dm_destroy(void * userData, bundle_context_pt context, dm_dependency_manager_pt manager) {
+ printf("phase2b: dm-destroy\n");
+
+ struct phase2b_activator_struct *act = (struct phase2b_activator_struct *)userData;
+ if (act->phase2bCmp != NULL) {
+ phase2b_destroy(act->phase2bCmp);
+ }
+ free(act);
+
+ return CELIX_SUCCESS;
+}
http://git-wip-us.apache.org/repos/asf/celix/blob/1836cf84/examples/dm_example/phase2b/src/phase2b_cmp.c
----------------------------------------------------------------------
diff --git a/examples/dm_example/phase2b/src/phase2b_cmp.c b/examples/dm_example/phase2b/src/phase2b_cmp.c
new file mode 100644
index 0000000..a74dcfa
--- /dev/null
+++ b/examples/dm_example/phase2b/src/phase2b_cmp.c
@@ -0,0 +1,115 @@
+/**
+ *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.
+ */
+/*
+ * publisher.c
+ *
+ * \date Oct 29, 2015
+ * \author <a href="mailto:dev@celix.apache.org">Apache Celix Project Team</a>
+ * \copyright Apache License, Version 2.0
+ */
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <signal.h>
+
+#include "celix_threads.h"
+#include "phase2b_cmp.h"
+
+#define SLEEPTIME 2000000
+
+struct phase2b_cmp_struct {
+ celix_thread_t thread;
+ bool running;
+ double currentValue;
+ celix_thread_mutex_t mutex;
+ const phase1_t* phase1Serv;
+};
+
+static void *phase2b_thread(void *data);
+
+phase2b_cmp_t *phase2b_create(void) {
+ phase2b_cmp_t *cmp = calloc(1, sizeof(*cmp));
+ if (cmp != NULL) {
+ cmp->currentValue = 0.0;
+ cmp->running = false;
+ celixThreadMutex_create(&cmp->mutex, NULL);
+ }
+ return cmp;
+}
+
+int phase2b_init(phase2b_cmp_t *cmp) {
+ printf("init phase2b\n");
+ return 0;
+}
+
+int phase2b_start(phase2b_cmp_t *cmp) {
+ printf("start phase2b\n");
+ cmp->running = true;
+ celixThread_create(&cmp->thread, NULL, phase2b_thread, cmp);
+ return 0;
+}
+
+int phase2b_stop(phase2b_cmp_t *cmp) {
+ printf("stop phase2b\n");
+ cmp->running = false;
+ celixThread_kill(cmp->thread, SIGUSR1);
+ celixThread_join(cmp->thread, NULL);
+ return 0;
+}
+
+int phase2b_deinit(phase2b_cmp_t *cmp) {
+ printf("deinit phase2b\n");
+ return 0;
+}
+
+void phase2b_destroy(phase2b_cmp_t *cmp) {
+ celixThreadMutex_destroy(&cmp->mutex);
+ free(cmp);
+ printf("destroy phase2b\n");
+}
+
+int phase2b_setPhase1(phase2b_cmp_t *cmp, const phase1_t* phase1) {
+ celixThreadMutex_lock(&cmp->mutex);
+ cmp->phase1Serv = phase1;
+ celixThreadMutex_unlock(&cmp->mutex);
+ return 0;
+}
+
+static void *phase2b_thread(void *data) {
+ phase2b_cmp_t *cmp = data;
+ unsigned int counter;
+
+ while (cmp->running) {
+ celixThreadMutex_lock(&cmp->mutex);
+ if (cmp->phase1Serv != NULL) {
+ cmp->phase1Serv->getData(cmp->phase1Serv->handle, &counter);
+ cmp->currentValue = counter / 1000;
+ }
+ celixThreadMutex_unlock(&cmp->mutex);
+ usleep(SLEEPTIME);
+ }
+
+ celixThread_exit(NULL);
+ return NULL;
+}
+
+int phase2b_getData(phase2b_cmp_t *cmp, double *data) {
+ *data = cmp->currentValue;
+ return 0;
+}
http://git-wip-us.apache.org/repos/asf/celix/blob/1836cf84/examples/dm_example/phase2b/src/phase2b_cmp.h
----------------------------------------------------------------------
diff --git a/examples/dm_example/phase2b/src/phase2b_cmp.h b/examples/dm_example/phase2b/src/phase2b_cmp.h
new file mode 100644
index 0000000..7ae0358
--- /dev/null
+++ b/examples/dm_example/phase2b/src/phase2b_cmp.h
@@ -0,0 +1,46 @@
+/**
+ *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.
+ */
+/*
+ * publisher.h
+ *
+ * \date Oct 29, 2015
+ * \author <a href="mailto:dev@celix.apache.org">Apache Celix Project Team</a>
+ * \copyright Apache License, Version 2.0
+ */
+
+#ifndef PHASE2B_CMP_H
+#define PHASE2B_CMP_H
+
+#include "phase1.h"
+
+typedef struct phase2b_cmp_struct phase2b_cmp_t;
+
+phase2b_cmp_t *phase2b_create(void);
+int phase2b_init(phase2b_cmp_t *cmp);
+int phase2b_start(phase2b_cmp_t *cmp);
+int phase2b_stop(phase2b_cmp_t *cmp);
+int phase2b_deinit(phase2b_cmp_t *cmp);
+void phase2b_destroy(phase2b_cmp_t *cmp);
+
+int phase2b_setPhase1(phase2b_cmp_t *cmp, const phase1_t* phase1);
+
+int phase2b_getData(phase2b_cmp_t *cmp, double *data);
+
+
+#endif //PHASE2B_CMP_H
http://git-wip-us.apache.org/repos/asf/celix/blob/1836cf84/examples/dm_example/phase3/CMakeLists.txt
----------------------------------------------------------------------
diff --git a/examples/dm_example/phase3/CMakeLists.txt b/examples/dm_example/phase3/CMakeLists.txt
index 9547e04..1784057 100644
--- a/examples/dm_example/phase3/CMakeLists.txt
+++ b/examples/dm_example/phase3/CMakeLists.txt
@@ -15,28 +15,23 @@
# specific language governing permissions and limitations
# under the License.
-include_directories(
- private/include
- ../services
-)
-
-add_bundle(phase3
+add_bundle(dm_example_phase3
SYMBOLIC_NAME phase3
VERSION 0.0.1
SOURCES
- private/src/phase3_activator
- private/src/phase3_cmp
+ src/phase3_activator
+ src/phase3_cmp
)
-
-#bundle_private_libs(phase3 dependency_manager)
+target_include_directories(dm_example_phase3 PRIVATE src)
+target_link_libraries(dm_example_phase3 PRIVATE dm_example_api)
IF(APPLE)
- target_link_libraries(phase3 PRIVATE -Wl,-all_load dependency_manager_static)
+ target_link_libraries(dm_example_phase3 PRIVATE -Wl,-all_load dependency_manager_static)
else()
if(ENABLE_ADDRESS_SANITIZER)
#With asan there can be undefined symbols
- target_link_libraries(phase3 PRIVATE -Wl,--whole-archive dependency_manager_static -Wl,--no-whole-archive)
+ target_link_libraries(dm_example_phase3 PRIVATE -Wl,--whole-archive Celix::dependency_manager_static -Wl,--no-whole-archive)
else()
- target_link_libraries(phase3 PRIVATE -Wl,--no-undefined -Wl,--whole-archive dependency_manager_static -Wl,--no-whole-archive)
+ target_link_libraries(dm_example_phase3 PRIVATE -Wl,--no-undefined -Wl,--whole-archive Celix::dependency_manager_static -Wl,--no-whole-archive)
endif()
ENDIF()
http://git-wip-us.apache.org/repos/asf/celix/blob/1836cf84/examples/dm_example/phase3/private/include/phase3_cmp.h
----------------------------------------------------------------------
diff --git a/examples/dm_example/phase3/private/include/phase3_cmp.h b/examples/dm_example/phase3/private/include/phase3_cmp.h
deleted file mode 100644
index 9c63845..0000000
--- a/examples/dm_example/phase3/private/include/phase3_cmp.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/**
- *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.
- */
-/*
- * publisher.h
- *
- * \date Oct 29, 2015
- * \author <a href="mailto:dev@celix.apache.org">Apache Celix Project Team</a>
- * \copyright Apache License, Version 2.0
- */
-
-#ifndef PHASE3_CMP_H
-#define PHASE3_CMP_H
-
-#include "phase2.h"
-
-typedef struct phase3_cmp_struct phase3_cmp_t;
-
-phase3_cmp_t *phase3_create();
-int phase3_init(phase3_cmp_t *cmp);
-int phase3_start(phase3_cmp_t *cmp);
-int phase3_stop(phase3_cmp_t *cmp);
-int phase3_deinit(phase3_cmp_t *cmp);
-void phase3_destroy(phase3_cmp_t *cmp);
-
-int phase3_addPhase2(phase3_cmp_t *cmp, const phase2_t* phase2);
-int phase3_removePhase2(phase3_cmp_t *cmp, const phase2_t* phase2);
-
-
-#endif //PHASE3_CMP_H
http://git-wip-us.apache.org/repos/asf/celix/blob/1836cf84/examples/dm_example/phase3/private/src/phase3_activator.c
----------------------------------------------------------------------
diff --git a/examples/dm_example/phase3/private/src/phase3_activator.c b/examples/dm_example/phase3/private/src/phase3_activator.c
deleted file mode 100644
index 64b7a0b..0000000
--- a/examples/dm_example/phase3/private/src/phase3_activator.c
+++ /dev/null
@@ -1,84 +0,0 @@
-/**
- *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.
- */
-/*
- * activator.c
- *
- * \date Oct 29, 2015
- * \author <a href="mailto:dev@celix.apache.org">Apache Celix Project Team</a>
- * \copyright Apache License, Version 2.0
- */
-#include <stdlib.h>
-
-#include "bundle_activator.h"
-#include "dm_activator.h"
-
-#include "phase2.h"
-#include "phase3_cmp.h"
-
-struct phase3_activator_struct {
- phase3_cmp_t *phase3Cmp;
-};
-
-celix_status_t dm_create(bundle_context_pt context, void **userData) {
- printf("phase3: dm_create\n");
- *userData = calloc(1, sizeof(struct phase3_activator_struct));
- return *userData != NULL ? CELIX_SUCCESS : CELIX_ENOMEM;
-}
-
-celix_status_t dm_init(void * userData, bundle_context_pt context, dm_dependency_manager_pt manager) {
- printf("phase3: dm_init\n");
- celix_status_t status = CELIX_SUCCESS;
-
- struct phase3_activator_struct *act = (struct phase3_activator_struct *)userData;
-
- act->phase3Cmp = phase3_create();
- if (act->phase3Cmp != NULL) {
-
- dm_component_pt cmp;
- component_create(context, "PHASE3_PROCESSING_COMPONENT", &cmp);
- component_setImplementation(cmp, act->phase3Cmp);
- component_setCallbacksSafe(cmp, phase3_cmp_t *, phase3_init, phase3_start, phase3_stop, phase3_deinit);
-
- dm_service_dependency_pt dep;
- serviceDependency_create(&dep);
- serviceDependency_setService(dep, PHASE2_NAME, NULL, NULL);
- serviceDependency_setStrategy(dep, DM_SERVICE_DEPENDENCY_STRATEGY_SUSPEND); //SUSPEND Strategy is default
- serviceDependency_setCallbacksSafe(dep, phase3_cmp_t*, const phase2_t*, NULL, phase3_addPhase2, NULL, phase3_removePhase2, NULL);
- serviceDependency_setRequired(dep, true);
- component_addServiceDependency(cmp, dep);
-
- dependencyManager_add(manager, cmp);
- } else {
- status = CELIX_ENOMEM;
- }
-
- return status;
-}
-
-celix_status_t dm_destroy(void * userData, bundle_context_pt context, dm_dependency_manager_pt manager) {
- printf("phase3: dm-destroy\n");
-
- struct phase3_activator_struct *act = (struct phase3_activator_struct *)userData;
- if (act->phase3Cmp != NULL) {
- phase3_destroy(act->phase3Cmp);
- }
- free(act);
-
- return CELIX_SUCCESS;
-}
http://git-wip-us.apache.org/repos/asf/celix/blob/1836cf84/examples/dm_example/phase3/private/src/phase3_cmp.c
----------------------------------------------------------------------
diff --git a/examples/dm_example/phase3/private/src/phase3_cmp.c b/examples/dm_example/phase3/private/src/phase3_cmp.c
deleted file mode 100644
index 47cb720..0000000
--- a/examples/dm_example/phase3/private/src/phase3_cmp.c
+++ /dev/null
@@ -1,116 +0,0 @@
-/**
- *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.
- */
-/*
- * publisher.c
- *
- * \date Oct 29, 2015
- * \author <a href="mailto:dev@celix.apache.org">Apache Celix Project Team</a>
- * \copyright Apache License, Version 2.0
- */
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <signal.h>
-
-#include "array_list.h"
-#include "celix_threads.h"
-#include "phase3_cmp.h"
-
-#define SLEEPTIME 2000000
-
-struct phase3_cmp_struct {
- celix_thread_t thread;
- bool running;
- double currentValue;
- array_list_pt phase2Services; //phase2_t *
-};
-
-static void *phase3_thread(void *data);
-
-phase3_cmp_t *phase3_create() {
- phase3_cmp_t *cmp = calloc(1, sizeof(*cmp));
- if (cmp != NULL) {
- cmp->currentValue = 0.0;
- cmp->running = false;
- arrayList_create(&cmp->phase2Services);
- }
- return cmp;
-}
-
-int phase3_init(phase3_cmp_t *cmp) {
- printf("init phase3\n");
- return 0;
-}
-
-int phase3_start(phase3_cmp_t *cmp) {
- printf("start phase3\n");
- cmp->running = true;
- celixThread_create(&cmp->thread, NULL, phase3_thread, cmp);
- return 0;
-}
-
-int phase3_stop(phase3_cmp_t *cmp) {
- printf("stop phase3\n");
- cmp->running = false;
- celixThread_kill(cmp->thread, SIGUSR1);
- celixThread_join(cmp->thread, NULL);
- return 0;
-}
-
-int phase3_deinit(phase3_cmp_t *cmp) {
- printf("deinit phase3\n");
- return 0;
-}
-
-void phase3_destroy(phase3_cmp_t *cmp) {
- arrayList_destroy(cmp->phase2Services);
- free(cmp);
- printf("destroy phase3\n");
-}
-
-int phase3_addPhase2(phase3_cmp_t *cmp, const phase2_t* phase2) {
- arrayList_add(cmp->phase2Services, (void*)phase2);
- return 0;
-}
-
-int phase3_removePhase2(phase3_cmp_t *cmp, const phase2_t *phase2) {
- arrayList_removeElement(cmp->phase2Services, (void*)phase2);
- return 0;
-}
-
-
-static void *phase3_thread(void *data) {
- phase3_cmp_t *cmp = data;
- int size;
- int i;
- double value;
-
- while (cmp->running) {
- size = arrayList_size(cmp->phase2Services);
- for (i = 0; i < size; i += 1) {
- const phase2_t* serv = arrayList_get(cmp->phase2Services, i);
- serv->getData(serv->handle, &value);
- printf("PHASE3: Data from %p is %f\n", serv, value);
- }
- usleep(SLEEPTIME);
- }
-
- celixThread_exit(NULL);
- return NULL;
-}
http://git-wip-us.apache.org/repos/asf/celix/blob/1836cf84/examples/dm_example/phase3/src/phase3_activator.c
----------------------------------------------------------------------
diff --git a/examples/dm_example/phase3/src/phase3_activator.c b/examples/dm_example/phase3/src/phase3_activator.c
new file mode 100644
index 0000000..64b7a0b
--- /dev/null
+++ b/examples/dm_example/phase3/src/phase3_activator.c
@@ -0,0 +1,84 @@
+/**
+ *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.
+ */
+/*
+ * activator.c
+ *
+ * \date Oct 29, 2015
+ * \author <a href="mailto:dev@celix.apache.org">Apache Celix Project Team</a>
+ * \copyright Apache License, Version 2.0
+ */
+#include <stdlib.h>
+
+#include "bundle_activator.h"
+#include "dm_activator.h"
+
+#include "phase2.h"
+#include "phase3_cmp.h"
+
+struct phase3_activator_struct {
+ phase3_cmp_t *phase3Cmp;
+};
+
+celix_status_t dm_create(bundle_context_pt context, void **userData) {
+ printf("phase3: dm_create\n");
+ *userData = calloc(1, sizeof(struct phase3_activator_struct));
+ return *userData != NULL ? CELIX_SUCCESS : CELIX_ENOMEM;
+}
+
+celix_status_t dm_init(void * userData, bundle_context_pt context, dm_dependency_manager_pt manager) {
+ printf("phase3: dm_init\n");
+ celix_status_t status = CELIX_SUCCESS;
+
+ struct phase3_activator_struct *act = (struct phase3_activator_struct *)userData;
+
+ act->phase3Cmp = phase3_create();
+ if (act->phase3Cmp != NULL) {
+
+ dm_component_pt cmp;
+ component_create(context, "PHASE3_PROCESSING_COMPONENT", &cmp);
+ component_setImplementation(cmp, act->phase3Cmp);
+ component_setCallbacksSafe(cmp, phase3_cmp_t *, phase3_init, phase3_start, phase3_stop, phase3_deinit);
+
+ dm_service_dependency_pt dep;
+ serviceDependency_create(&dep);
+ serviceDependency_setService(dep, PHASE2_NAME, NULL, NULL);
+ serviceDependency_setStrategy(dep, DM_SERVICE_DEPENDENCY_STRATEGY_SUSPEND); //SUSPEND Strategy is default
+ serviceDependency_setCallbacksSafe(dep, phase3_cmp_t*, const phase2_t*, NULL, phase3_addPhase2, NULL, phase3_removePhase2, NULL);
+ serviceDependency_setRequired(dep, true);
+ component_addServiceDependency(cmp, dep);
+
+ dependencyManager_add(manager, cmp);
+ } else {
+ status = CELIX_ENOMEM;
+ }
+
+ return status;
+}
+
+celix_status_t dm_destroy(void * userData, bundle_context_pt context, dm_dependency_manager_pt manager) {
+ printf("phase3: dm-destroy\n");
+
+ struct phase3_activator_struct *act = (struct phase3_activator_struct *)userData;
+ if (act->phase3Cmp != NULL) {
+ phase3_destroy(act->phase3Cmp);
+ }
+ free(act);
+
+ return CELIX_SUCCESS;
+}
http://git-wip-us.apache.org/repos/asf/celix/blob/1836cf84/examples/dm_example/phase3/src/phase3_cmp.c
----------------------------------------------------------------------
diff --git a/examples/dm_example/phase3/src/phase3_cmp.c b/examples/dm_example/phase3/src/phase3_cmp.c
new file mode 100644
index 0000000..47cb720
--- /dev/null
+++ b/examples/dm_example/phase3/src/phase3_cmp.c
@@ -0,0 +1,116 @@
+/**
+ *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.
+ */
+/*
+ * publisher.c
+ *
+ * \date Oct 29, 2015
+ * \author <a href="mailto:dev@celix.apache.org">Apache Celix Project Team</a>
+ * \copyright Apache License, Version 2.0
+ */
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <signal.h>
+
+#include "array_list.h"
+#include "celix_threads.h"
+#include "phase3_cmp.h"
+
+#define SLEEPTIME 2000000
+
+struct phase3_cmp_struct {
+ celix_thread_t thread;
+ bool running;
+ double currentValue;
+ array_list_pt phase2Services; //phase2_t *
+};
+
+static void *phase3_thread(void *data);
+
+phase3_cmp_t *phase3_create() {
+ phase3_cmp_t *cmp = calloc(1, sizeof(*cmp));
+ if (cmp != NULL) {
+ cmp->currentValue = 0.0;
+ cmp->running = false;
+ arrayList_create(&cmp->phase2Services);
+ }
+ return cmp;
+}
+
+int phase3_init(phase3_cmp_t *cmp) {
+ printf("init phase3\n");
+ return 0;
+}
+
+int phase3_start(phase3_cmp_t *cmp) {
+ printf("start phase3\n");
+ cmp->running = true;
+ celixThread_create(&cmp->thread, NULL, phase3_thread, cmp);
+ return 0;
+}
+
+int phase3_stop(phase3_cmp_t *cmp) {
+ printf("stop phase3\n");
+ cmp->running = false;
+ celixThread_kill(cmp->thread, SIGUSR1);
+ celixThread_join(cmp->thread, NULL);
+ return 0;
+}
+
+int phase3_deinit(phase3_cmp_t *cmp) {
+ printf("deinit phase3\n");
+ return 0;
+}
+
+void phase3_destroy(phase3_cmp_t *cmp) {
+ arrayList_destroy(cmp->phase2Services);
+ free(cmp);
+ printf("destroy phase3\n");
+}
+
+int phase3_addPhase2(phase3_cmp_t *cmp, const phase2_t* phase2) {
+ arrayList_add(cmp->phase2Services, (void*)phase2);
+ return 0;
+}
+
+int phase3_removePhase2(phase3_cmp_t *cmp, const phase2_t *phase2) {
+ arrayList_removeElement(cmp->phase2Services, (void*)phase2);
+ return 0;
+}
+
+
+static void *phase3_thread(void *data) {
+ phase3_cmp_t *cmp = data;
+ int size;
+ int i;
+ double value;
+
+ while (cmp->running) {
+ size = arrayList_size(cmp->phase2Services);
+ for (i = 0; i < size; i += 1) {
+ const phase2_t* serv = arrayList_get(cmp->phase2Services, i);
+ serv->getData(serv->handle, &value);
+ printf("PHASE3: Data from %p is %f\n", serv, value);
+ }
+ usleep(SLEEPTIME);
+ }
+
+ celixThread_exit(NULL);
+ return NULL;
+}