blob: bf1a26138ba143fea1c58ce79daaaf71d935e144 [file] [log] [blame]
/*
*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.
*/
/**
*
* @defgroup BundleActivator BundleActivator
* @ingroup framework
* @{
* \brief Customizes the starting and stopping of a bundle.
* \details \ref BundleActivator is a header that must be implemented by every
* bundle. The Framework creates/starts/stops/destroys activator instances using the
* functions described in this header. If the bundleActivator_start()
* function executes successfully, it is guaranteed that the same instance's
* bundleActivator_stop() function will be called when the bundle is
* to be stopped. The same applies to the bundleActivator_create() and
* bundleActivator_destroy() functions.
* The Framework must not concurrently call the activator functions.
* \author <a href="mailto:dev@celix.apache.org">Apache Celix Project Team</a>
* \date March 18, 2010
* \copyright Apache License, Version 2.0
*/
#ifndef BUNDLE_ACTIVATOR_H_
#define BUNDLE_ACTIVATOR_H_
#include "bundle_context.h"
#include "framework_exports.h"
/**
* Called when this bundle is started so the bundle can create an instance for its activator.
* The framework does not assume any type for the activator instance, this is implementation specific.
* The activator instance is handle as a void pointer by the framework, the implementation must cast it to the
* implementation specific type.
*
* @param context The execution context of the bundle being started.
* @param[out] userData A pointer to the specific activator instance used by this bundle.
*
* @return Status code indication failure or success:
* - CELIX_SUCCESS when no errors are encountered.
* - Any other status code will mark the bundle as stopped and the framework will remove this
* bundle's listeners, unregister all services, and release all services used by this bundle.
*/
ACTIVATOR_EXPORT celix_status_t bundleActivator_create(bundle_context_pt context_ptr, void **userData);
/**
* Called when this bundle is started so the Framework can perform the bundle-specific activities necessary
* to start this bundle. This method can be used to register services or to allocate any resources that this
* bundle needs.
*
* <p>
* This method must complete and return to its caller in a timely manner.
*
* @param userData The activator instance to be used.
* @param context The execution context of the bundle being started.
*
* @return Status code indication failure or success:
* - CELIX_SUCCESS when no errors are encountered.
* - Any other status code will mark the bundle as stopped and the framework will remove this
* bundle's listeners, unregister all services, and release all services used by this bundle.
*/
ACTIVATOR_EXPORT celix_status_t bundleActivator_start(void *userData, bundle_context_pt context);
/**
* Called when this bundle is stopped so the Framework can perform the bundle-specific activities necessary
* to stop the bundle. In general, this method should undo the work that the <code>bundleActivator_start()</code>
* function started. There should be no active threads that were started by this bundle when this bundle returns.
* A stopped bundle must not call any Framework objects.
*
* <p>
* This method must complete and return to its caller in a timely manner.
*
* @param userData The activator instance to be used.
* @param context The execution context of the bundle being stopped.
*
* @return Status code indication failure or success:
* - CELIX_SUCCESS when no errors are encountered.
* - Any other status code will mark the bundle as stopped and the framework will remove this
* bundle's listeners, unregister all services, and release all services used by this bundle.
*/
ACTIVATOR_EXPORT celix_status_t bundleActivator_stop(void *userData, bundle_context_pt context);
/**
* Called when this bundle is stopped so the bundle can destroy the instance of its activator. In general, this
* method should undo the work that the <code>bundleActivator_create()</code> function initialized.
*
* <p>
* This method must complete and return to its caller in a timely manner.
*
* @param userData The activator instance to be used.
* @param context The execution context of the bundle being stopped.
*
* @return Status code indication failure or success:
* - CELIX_SUCCESS when no errors are encountered.
* - Any other status code will mark the bundle as stopped and the framework will remove this
* bundle's listeners, unregister all services, and release all services used by this bundle.
*/
ACTIVATOR_EXPORT celix_status_t bundleActivator_destroy(void *userData, bundle_context_pt __attribute__((unused)) __attribute__((unused)) context);
#endif /* BUNDLE_ACTIVATOR_H_ */
/**
* @}
*/