You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aries.apache.org by da...@apache.org on 2011/11/28 12:04:27 UTC
svn commit: r1207072 - in /aries/trunk/spi-fly/spi-fly-core/src:
main/java/org/apache/aries/spifly/ main/java/org/apache/aries/spifly/api/
test/java/org/apache/aries/spifly/
Author: davidb
Date: Mon Nov 28 11:04:26 2011
New Revision: 1207072
URL: http://svn.apache.org/viewvc?rev=1207072&view=rev
Log:
Handle the service-registry and effective directives.
Modified:
aries/trunk/spi-fly/spi-fly-core/src/main/java/org/apache/aries/spifly/ProviderBundleTrackerCustomizer.java
aries/trunk/spi-fly/spi-fly-core/src/main/java/org/apache/aries/spifly/api/SpiFlyConstants.java
aries/trunk/spi-fly/spi-fly-core/src/test/java/org/apache/aries/spifly/ProviderBundleTrackerCustomizerGenericCapabilityTest.java
Modified: aries/trunk/spi-fly/spi-fly-core/src/main/java/org/apache/aries/spifly/ProviderBundleTrackerCustomizer.java
URL: http://svn.apache.org/viewvc/aries/trunk/spi-fly/spi-fly-core/src/main/java/org/apache/aries/spifly/ProviderBundleTrackerCustomizer.java?rev=1207072&r1=1207071&r2=1207072&view=diff
==============================================================================
--- aries/trunk/spi-fly/spi-fly-core/src/main/java/org/apache/aries/spifly/ProviderBundleTrackerCustomizer.java (original)
+++ aries/trunk/spi-fly/spi-fly-core/src/main/java/org/apache/aries/spifly/ProviderBundleTrackerCustomizer.java Mon Nov 28 11:04:26 2011
@@ -68,9 +68,16 @@ public class ProviderBundleTrackerCustom
List<String> providedServices = null;
Map<String, Object> customAttributes = new HashMap<String, Object>();
+ Map<String, String> directives = new HashMap<String, String>();
if (bundle.getHeaders().get("Provide-Capability") != null) {
- providedServices = readProvideCapability(bundle.getHeaders(), customAttributes);
+ providedServices = readProvideCapability(bundle.getHeaders(), directives, customAttributes);
+
+ if (!"active".equals(directives.get(SpiFlyConstants.EFFECTIVE_DIRECTIVE))) {
+ log(LogService.LOG_INFO, "Effective is not equal to 'active'. Not processing bundle " + bundle.getSymbolicName());
+ return null;
+ }
}
+
if (providedServices == null && bundle.getHeaders().get(SpiFlyConstants.SPI_PROVIDER_HEADER) != null) {
providedServices = new ArrayList<String>();
}
@@ -142,12 +149,15 @@ public class ProviderBundleTrackerCustom
props.put(SpiFlyConstants.SPI_PROVIDER_URL, serviceFile);
props.putAll(customAttributes);
- ServiceRegistration reg = bundle.getBundleContext()
- .registerService(registrationClassName, o, props);
- registrations.add(reg);
+ if (!"false".equalsIgnoreCase(directives.get(SpiFlyConstants.SERVICE_REGISTRY_DIRECTIVE))) {
+ ServiceRegistration reg = bundle.getBundleContext()
+ .registerService(registrationClassName, o, props);
+ registrations.add(reg);
+ log(LogService.LOG_INFO, "Registered service: " + reg);
+ }
activator.registerProviderBundle(registrationClassName, bundle, customAttributes);
- log(LogService.LOG_INFO, "Registered service: " + reg);
+ log(LogService.LOG_INFO, "Registered provider: " + registrationClassName + " in bundle " + bundle.getSymbolicName());
} catch (Exception e) {
log(LogService.LOG_WARNING,
"Could not load SPI implementation referred from " + serviceFile, e);
@@ -165,7 +175,7 @@ public class ProviderBundleTrackerCustom
// A return value of null means no SPIs
// A populated list means: only these SPIs
@SuppressWarnings("unchecked")
- private List<String> readProvideCapability(Dictionary<?,?> headers, Map<String, Object> customAttributes) {
+ private List<String> readProvideCapability(Dictionary<?,?> headers, Map<String, String> directives, Map<String, Object> customAttributes) {
Object capabilityHeader = headers.get(SpiFlyConstants.PROVIDE_CAPABILITY);
if (capabilityHeader == null)
return null;
@@ -189,6 +199,8 @@ public class ProviderBundleTrackerCustom
customAttributes.put(entry.getKey(), entry.getValue());
}
}
+
+ directives.putAll(cap.getDirectives());
return serviceNames;
}
return null;
Modified: aries/trunk/spi-fly/spi-fly-core/src/main/java/org/apache/aries/spifly/api/SpiFlyConstants.java
URL: http://svn.apache.org/viewvc/aries/trunk/spi-fly/spi-fly-core/src/main/java/org/apache/aries/spifly/api/SpiFlyConstants.java?rev=1207072&r1=1207071&r2=1207072&view=diff
==============================================================================
--- aries/trunk/spi-fly/spi-fly-core/src/main/java/org/apache/aries/spifly/api/SpiFlyConstants.java (original)
+++ aries/trunk/spi-fly/spi-fly-core/src/main/java/org/apache/aries/spifly/api/SpiFlyConstants.java Mon Nov 28 11:04:26 2011
@@ -28,9 +28,13 @@ public interface SpiFlyConstants {
String SPI_CAPABILITY_NAMESPACE = "osgi.spi.provider";
String EXTENDER_CAPABILITY_NAMESPACE = "osgi.jse.serviceloader";
+
String BUNDLE_VERSION_ATTRIBUTE = "bundle-version";
String SERVICE_ATTRIBUTE = "service";
+ String EFFECTIVE_DIRECTIVE = "effective";
+ String SERVICE_REGISTRY_DIRECTIVE = "service-registry";
+
String PROCESSED_SPI_CONSUMER_HEADER = "X-SpiFly-Processed-SPI-Consumer";
String SPI_PROVIDER_URL = "spi.provider.url";
Modified: aries/trunk/spi-fly/spi-fly-core/src/test/java/org/apache/aries/spifly/ProviderBundleTrackerCustomizerGenericCapabilityTest.java
URL: http://svn.apache.org/viewvc/aries/trunk/spi-fly/spi-fly-core/src/test/java/org/apache/aries/spifly/ProviderBundleTrackerCustomizerGenericCapabilityTest.java?rev=1207072&r1=1207071&r2=1207072&view=diff
==============================================================================
--- aries/trunk/spi-fly/spi-fly-core/src/test/java/org/apache/aries/spifly/ProviderBundleTrackerCustomizerGenericCapabilityTest.java (original)
+++ aries/trunk/spi-fly/spi-fly-core/src/test/java/org/apache/aries/spifly/ProviderBundleTrackerCustomizerGenericCapabilityTest.java Mon Nov 28 11:04:26 2011
@@ -102,7 +102,7 @@ public class ProviderBundleTrackerCustom
EasyMock.replay(sreg);
BundleContext implBC = mockSPIBundleContext(sreg);
- Bundle implBundle = mockSPIBundle(implBC, "osgi.spi.provider; effective:=active; approval=global");
+ Bundle implBundle = mockSPIBundle(implBC, "osgi.spi.provider; effective:=active; service-registry:=true; approval=global");
List<ServiceRegistration> registrations = customizer.addingBundle(implBundle, null);
assertEquals(1, registrations.size());
@@ -181,7 +181,48 @@ public class ProviderBundleTrackerCustom
@Test
public void testNoServiceRegistration() throws Exception {
+ Bundle spiBundle = EasyMock.createMock(Bundle.class);
+ EasyMock.replay(spiBundle);
+ BaseActivator activator = new BaseActivator() {
+ @Override
+ public void start(BundleContext context) throws Exception {}
+ };
+
+ ProviderBundleTrackerCustomizer customizer = new ProviderBundleTrackerCustomizer(activator, spiBundle);
+ ServiceRegistration sreg = EasyMock.createMock(ServiceRegistration.class);
+ EasyMock.replay(sreg);
+
+ BundleContext implBC = mockSPIBundleContext(sreg);
+ Bundle implBundle = mockSPIBundle(implBC, "osgi.spi.provider; effective:=active; service-registry:=false");
+
+ List<ServiceRegistration> registrations = customizer.addingBundle(implBundle, null);
+ assertEquals(0, registrations.size());
+ Collection<Bundle> bundles = activator.findProviderBundles("org.apache.aries.mytest.MySPI");
+ assertEquals(1, bundles.size());
+ assertSame(implBundle, bundles.iterator().next());
+ }
+
+ @Test
+ public void testNoEffectiveValue() throws Exception {
+ Bundle spiBundle = EasyMock.createMock(Bundle.class);
+ EasyMock.replay(spiBundle);
+ BaseActivator activator = new BaseActivator() {
+ @Override
+ public void start(BundleContext context) throws Exception {}
+ };
+
+ ProviderBundleTrackerCustomizer customizer = new ProviderBundleTrackerCustomizer(activator, spiBundle);
+
+ ServiceRegistration sreg = EasyMock.createMock(ServiceRegistration.class);
+ EasyMock.replay(sreg);
+
+ BundleContext implBC = mockSPIBundleContext(sreg);
+ Bundle implBundle = mockSPIBundle(implBC, "osgi.spi.provider");
+
+ assertNull(customizer.addingBundle(implBundle, null));
+ Collection<Bundle> bundles = activator.findProviderBundles("org.apache.aries.mytest.MySPI");
+ assertEquals(0, bundles.size());
}
@Test