Added an extra parameter to resource adapters to specify a handler to invoke life cycle callbacks on. Experimental bit of API for now.
git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@931178 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/dependencymanager/core/src/main/java/org/apache/felix/dm/DependencyActivatorBase.java b/dependencymanager/core/src/main/java/org/apache/felix/dm/DependencyActivatorBase.java
index 71fd6e9..359996d 100644
--- a/dependencymanager/core/src/main/java/org/apache/felix/dm/DependencyActivatorBase.java
+++ b/dependencymanager/core/src/main/java/org/apache/felix/dm/DependencyActivatorBase.java
@@ -171,11 +171,11 @@
return m_manager.createAdapterService(serviceInterface, serviceFilter, adapterInterface, adapterImplementation, adapterProperties);
}
- public Service createResourceAdapter(String resourceFilter, String adapterInterface, Dictionary adapterProperties, Object adapterImplementation, boolean propagate) {
- return m_manager.createResourceAdapterService(resourceFilter, adapterInterface, adapterProperties, adapterImplementation, propagate);
+ public Service createResourceAdapter(String resourceFilter, Object adapterHandler, String adapterInterface, Dictionary adapterProperties, Object adapterImplementation, boolean propagate) {
+ return m_manager.createResourceAdapterService(resourceFilter, adapterHandler, adapterInterface, adapterProperties, adapterImplementation, propagate);
}
- public Service createResourceAdapter(String resourceFilter, String[] adapterInterface, Dictionary adapterProperties, Object adapterImplementation, boolean propagate) {
- return m_manager.createResourceAdapterService(resourceFilter, adapterInterface, adapterProperties, adapterImplementation, propagate);
+ public Service createResourceAdapter(String resourceFilter, Object adapterHandler, String[] adapterInterface, Dictionary adapterProperties, Object adapterImplementation, boolean propagate) {
+ return m_manager.createResourceAdapterService(resourceFilter, adapterHandler, adapterInterface, adapterProperties, adapterImplementation, propagate);
}
public Service createBundleAdapterService(int bundleStateMask, String bundleFilter, Object adapterImplementation, String adapterInterface, Dictionary adapterProperties, boolean propagate) {
diff --git a/dependencymanager/core/src/main/java/org/apache/felix/dm/DependencyManager.java b/dependencymanager/core/src/main/java/org/apache/felix/dm/DependencyManager.java
index 040ca85..7b91dd3 100644
--- a/dependencymanager/core/src/main/java/org/apache/felix/dm/DependencyManager.java
+++ b/dependencymanager/core/src/main/java/org/apache/felix/dm/DependencyManager.java
@@ -252,6 +252,8 @@
* service as a member it will be injected.
*
* @param resourceFilter the filter condition to use with the resource
+ * @param adapterHandler a handler to invoke life cycle methods on for the adapter instance, or <code>null</code>
+ * if you want to invoke these methods on the instance
* @param adapterInterface the interface to use when registering adapters
* @param adapterProperties additional properties to use with the adapter service registration
* @param adapterImplementation the implementation of the adapter
@@ -259,18 +261,18 @@
* @return a service that acts as a factory for generating resource adapters
* @see Resource
*/
- public Service createResourceAdapterService(String resourceFilter, String adapterInterface, Dictionary adapterProperties, Object adapterImplementation, boolean propagate) {
+ public Service createResourceAdapterService(String resourceFilter, Object adapterHandler, String adapterInterface, Dictionary adapterProperties, Object adapterImplementation, boolean propagate) {
return createService()
- .setImplementation(new ResourceAdapterImpl(resourceFilter, adapterImplementation, adapterInterface, adapterProperties, propagate))
+ .setImplementation(new ResourceAdapterImpl(resourceFilter, adapterHandler, adapterImplementation, adapterInterface, adapterProperties, propagate))
.add(createResourceDependency()
.setFilter(resourceFilter)
.setAutoConfig(false)
.setCallbacks("added", "removed")
);
}
- public Service createResourceAdapterService(String resourceFilter, String[] adapterInterface, Dictionary adapterProperties, Object adapterImplementation, boolean propagate) {
+ public Service createResourceAdapterService(String resourceFilter, Object adapterHandler, String[] adapterInterface, Dictionary adapterProperties, Object adapterImplementation, boolean propagate) {
return createService()
- .setImplementation(new ResourceAdapterImpl(resourceFilter, adapterImplementation, adapterInterface, adapterProperties, propagate))
+ .setImplementation(new ResourceAdapterImpl(resourceFilter, adapterHandler, adapterImplementation, adapterInterface, adapterProperties, propagate))
.add(createResourceDependency()
.setFilter(resourceFilter)
.setAutoConfig(false)
diff --git a/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/ResourceAdapterImpl.java b/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/ResourceAdapterImpl.java
index 1f1f5fd..6d52f89 100644
--- a/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/ResourceAdapterImpl.java
+++ b/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/ResourceAdapterImpl.java
@@ -33,17 +33,20 @@
private final Object m_adapterInterface;
private final Dictionary m_adapterProperties;
private final boolean m_propagate;
+ private final Object m_adapterHandler;
- public ResourceAdapterImpl(String resourceFilter, Object adapterImplementation, String adapterInterface, Dictionary adapterProperties, boolean propagate) {
+ public ResourceAdapterImpl(String resourceFilter, Object adapterHandler, Object adapterImplementation, String adapterInterface, Dictionary adapterProperties, boolean propagate) {
m_resourceFilter = resourceFilter;
+ m_adapterHandler = adapterHandler;
m_adapterImplementation = adapterImplementation;
m_adapterInterface = adapterInterface;
m_adapterProperties = adapterProperties;
m_propagate = propagate;
}
- public ResourceAdapterImpl(String resourceFilter, Object adapterImplementation, String[] adapterInterfaces, Dictionary adapterProperties, boolean propagate) {
+ public ResourceAdapterImpl(String resourceFilter, Object adapterHandler, Object adapterImplementation, String[] adapterInterfaces, Dictionary adapterProperties, boolean propagate) {
m_resourceFilter = resourceFilter;
+ m_adapterHandler = adapterHandler;
m_adapterImplementation = adapterImplementation;
m_adapterInterface = adapterInterfaces;
m_adapterProperties = adapterProperties;
@@ -68,6 +71,7 @@
return m_manager.createService()
.setInterface((String) m_adapterInterface, props)
.setImplementation(m_adapterImplementation)
+ .setCallbacks(m_adapterHandler, "init", "start", "stop", "destroy")
.add(dependencies)
.add(m_manager.createResourceDependency()
.setResource(resource)
@@ -81,6 +85,7 @@
return m_manager.createService()
.setInterface((String[]) m_adapterInterface, props)
.setImplementation(m_adapterImplementation)
+ .setCallbacks(m_adapterHandler, "init", "start", "stop", "destroy")
.add(dependencies)
.add(m_manager.createResourceDependency()
.setResource(resource)
diff --git a/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/ComponentManager.java b/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/ComponentManager.java
index 7bfc0b1..31356c2 100644
--- a/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/ComponentManager.java
+++ b/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/ComponentManager.java
@@ -411,7 +411,7 @@
Class<?> serviceClass = b.loadClass(service);
Dictionary<String, String> properties = parser.getDictionary(DescriptorParam.properties, null);
boolean propagate = "true".equals(parser.getString(DescriptorParam.propagate, "false"));
- Service srv = dm.createResourceAdapterService(filter, serviceClass.getName(), properties, impl, propagate);
+ Service srv = dm.createResourceAdapterService(filter, null, serviceClass.getName(), properties, impl, propagate);
setCommonServiceParams(srv, parser);
return srv;
}