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 2012/02/20 17:44:30 UTC

svn commit: r1291355 - in /aries/trunk/spi-fly: spi-fly-core/src/main/java/org/apache/aries/spifly/ spi-fly-core/src/main/java/org/apache/aries/spifly/api/ spi-fly-core/src/test/java/org/apache/aries/spifly/ spi-fly-dynamic-bundle/ spi-fly-dynamic-bund...

Author: davidb
Date: Mon Feb 20 16:44:29 2012
New Revision: 1291355

URL: http://svn.apache.org/viewvc?rev=1291355&view=rev
Log:
Change Provide-Capability/Require-Capability model to follow latest thinking for the ServiceLoader Mediator spec.

Modified:
    aries/trunk/spi-fly/spi-fly-core/src/main/java/org/apache/aries/spifly/BaseActivator.java
    aries/trunk/spi-fly/spi-fly-core/src/main/java/org/apache/aries/spifly/ConsumerHeaderProcessor.java
    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
    aries/trunk/spi-fly/spi-fly-dynamic-bundle/pom.xml
    aries/trunk/spi-fly/spi-fly-dynamic-bundle/src/test/java/org/apache/aries/spifly/dynamic/ClientWeavingHookGenericCapabilityTest.java
    aries/trunk/spi-fly/spi-fly-examples/spi-fly-example-client2-bundle/pom.xml
    aries/trunk/spi-fly/spi-fly-examples/spi-fly-example-provider2-bundle/pom.xml

Modified: aries/trunk/spi-fly/spi-fly-core/src/main/java/org/apache/aries/spifly/BaseActivator.java
URL: http://svn.apache.org/viewvc/aries/trunk/spi-fly/spi-fly-core/src/main/java/org/apache/aries/spifly/BaseActivator.java?rev=1291355&r1=1291354&r2=1291355&view=diff
==============================================================================
--- aries/trunk/spi-fly/spi-fly-core/src/main/java/org/apache/aries/spifly/BaseActivator.java (original)
+++ aries/trunk/spi-fly/spi-fly-core/src/main/java/org/apache/aries/spifly/BaseActivator.java Mon Feb 20 16:44:29 2012
@@ -230,13 +230,13 @@ public abstract class BaseActivator impl
                 } else if (desc.getFilter() != null) {
                     Hashtable<String, Object> d = new Hashtable<String, Object>();
                     d.put(Constants.BUNDLE_SYMBOLICNAME_ATTRIBUTE, b.getSymbolicName());
-                    d.put(SpiFlyConstants.BUNDLE_VERSION_ATTRIBUTE, b.getVersion());
+                    d.put(Constants.BUNDLE_VERSION_ATTRIBUTE, b.getVersion());
 
                     if (ServiceLoader.class.getName().equals(className) &&
                         "load".equals(methodName)) {
                         String type = args.get(new Pair<Integer, String>(0, Class.class.getName()));
                         if (type != null) {
-                            d.put(SpiFlyConstants.SERVICE_ATTRIBUTE, type);
+                            d.put(SpiFlyConstants.CONSUMED_SPI_CONDITION, type);
                             d.putAll(getCustomBundleAttributes(type, b));
                         }
                     }

Modified: aries/trunk/spi-fly/spi-fly-core/src/main/java/org/apache/aries/spifly/ConsumerHeaderProcessor.java
URL: http://svn.apache.org/viewvc/aries/trunk/spi-fly/spi-fly-core/src/main/java/org/apache/aries/spifly/ConsumerHeaderProcessor.java?rev=1291355&r1=1291354&r2=1291355&view=diff
==============================================================================
--- aries/trunk/spi-fly/spi-fly-core/src/main/java/org/apache/aries/spifly/ConsumerHeaderProcessor.java (original)
+++ aries/trunk/spi-fly/spi-fly-core/src/main/java/org/apache/aries/spifly/ConsumerHeaderProcessor.java Mon Feb 20 16:44:29 2012
@@ -170,27 +170,25 @@ public class ConsumerHeaderProcessor {
 
         List<GenericMetadata> requirements = ManifestHeaderProcessor.parseRequirementString(consumerHeader);
         for (GenericMetadata req : requirements) {
-            if (SpiFlyConstants.SPI_CAPABILITY_NAMESPACE.equals(req.getNamespace())) {
-                if (!"active".equals(req.getDirectives().get("effective"))) {
-                    continue;
-                }
-
-                ArgRestrictions ar = new ArgRestrictions();
-                ar.addRestriction(0, Class.class.getName());
-                MethodRestriction mr = new MethodRestriction("load", ar);
-
-                List<BundleDescriptor> allowedBundles = new ArrayList<BundleDescriptor>();
-                String filterString = req.getDirectives().get("filter");
-                if (filterString != null) {
-                    try {
-                        Filter filter = FrameworkUtil.createFilter(filterString);
-                        allowedBundles.add(new BundleDescriptor(filter));
-                    } catch (InvalidSyntaxException e) {
-                        throw new IllegalArgumentException("Syntax error in filter " + filterString + " which appears in " + consumerHeader);
+            if (SpiFlyConstants.EXTENDER_CAPABILITY_NAMESPACE.equals(req.getNamespace())) {
+                if (SpiFlyConstants.CLIENT_EXTENDER_NAME.equals(req.getAttributes().get(SpiFlyConstants.EXTENDER_CAPABILITY_NAMESPACE))) {
+                    ArgRestrictions ar = new ArgRestrictions();
+                    ar.addRestriction(0, Class.class.getName());
+                    MethodRestriction mr = new MethodRestriction("load", ar);
+
+                    List<BundleDescriptor> allowedBundles = new ArrayList<BundleDescriptor>();
+                    String filterString = req.getDirectives().get(SpiFlyConstants.PROVIDER_FILTER_DIRECTIVE);
+                    if (filterString != null) {
+                        try {
+                            Filter filter = FrameworkUtil.createFilter(filterString);
+                            allowedBundles.add(new BundleDescriptor(filter));
+                        } catch (InvalidSyntaxException e) {
+                            throw new IllegalArgumentException("Syntax error in filter " + filterString + " which appears in " + consumerHeader);
+                        }
                     }
-                }
 
-                weavingData.add(createWeavingData(ServiceLoader.class.getName(), "load", mr, allowedBundles));
+                    weavingData.add(createWeavingData(ServiceLoader.class.getName(), "load", mr, allowedBundles));
+                }
             }
         }
 

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=1291355&r1=1291354&r2=1291355&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 Feb 20 16:44:29 2012
@@ -69,13 +69,8 @@ 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(), 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 (bundle.getHeaders().get(SpiFlyConstants.REQUIRE_CAPABILITY) != null) {
+            providedServices = readRequireCapability(bundle.getHeaders(), directives, customAttributes);
         }
 
         if (providedServices == null && bundle.getHeaders().get(SpiFlyConstants.SPI_PROVIDER_HEADER) != null) {
@@ -156,7 +151,7 @@ public class ProviderBundleTrackerCustom
                         log(LogService.LOG_INFO, "Instantiated SPI provider: " + o);
 
                         Hashtable<String, Object> props = new Hashtable<String, Object>();
-                        props.put(SpiFlyConstants.SPI_PROVIDER_URL, serviceFile);
+                        props.put(SpiFlyConstants.SPI_PROVIDER_URL_PROPERTY, serviceFile);
                         props.putAll(customAttributes);
 
                         if (!"false".equalsIgnoreCase(directives.get(SpiFlyConstants.SERVICE_REGISTRY_DIRECTIVE))) {
@@ -184,33 +179,41 @@ public class ProviderBundleTrackerCustom
     // An empty list returned means 'all SPIs'
     // 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, String> directives, Map<String, Object> customAttributes) {
-        Object capabilityHeader = headers.get(SpiFlyConstants.PROVIDE_CAPABILITY);
+    private List<String> readRequireCapability(Dictionary<?,?> headers, Map<String, String> directives, Map<String, Object> customAttributes) {
+        Object capabilityHeader = headers.get(SpiFlyConstants.REQUIRE_CAPABILITY);
         if (capabilityHeader == null)
             return null;
 
         List<GenericMetadata> capabilities = ManifestHeaderProcessor.parseCapabilityString(capabilityHeader.toString());
         for (GenericMetadata cap : capabilities) {
-            if (!SpiFlyConstants.SPI_CAPABILITY_NAMESPACE.equals(cap.getNamespace()))
+            if (!SpiFlyConstants.EXTENDER_CAPABILITY_NAMESPACE.equals(cap.getNamespace()))
                 continue;
 
-            List<String> serviceNames = new ArrayList<String>();
             for (Map.Entry<String, Object> entry : cap.getAttributes().entrySet()) {
-                if (SpiFlyConstants.SERVICE_ATTRIBUTE.equals(entry.getKey())) {
-                    if (entry.getValue() instanceof String) {
-                        serviceNames.add((String) entry.getValue());
-                    } else if (entry.getValue() instanceof String []) {
-                        serviceNames.addAll(Arrays.asList((String []) entry.getValue()));
-                    } else if (entry.getValue() instanceof List) {
-                        serviceNames.addAll((List<String>) entry.getValue());
+                if (SpiFlyConstants.EXTENDER_CAPABILITY_NAMESPACE.equals(entry.getKey()))
+                    continue;
+
+                customAttributes.put(entry.getKey(), entry.getValue());
+            }
+
+            List<String> serviceNames = new ArrayList<String>();
+            for (Map.Entry<String, String> entry : cap.getDirectives().entrySet()) {
+                if ("filter".equals(entry.getKey()))
+                    continue;
+                if ("resolution".equals(entry.getKey()))
+                    continue;
+
+                if (SpiFlyConstants.PROVIDED_SPI_DIRECTIVE.equals(entry.getKey())) {
+                    if (entry.getValue() != null) {
+                        serviceNames.add(entry.getValue());
+                        // TODO split string
                     }
                 } else {
-                    customAttributes.put(entry.getKey(), entry.getValue());
+                    directives.put(entry.getKey(), entry.getValue());
                 }
             }
 
-            directives.putAll(cap.getDirectives());
+            // 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=1291355&r1=1291354&r2=1291355&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 Feb 20 16:44:29 2012
@@ -20,22 +20,26 @@ package org.apache.aries.spifly.api;
 
 public interface SpiFlyConstants {
     // Not taken from OSGi Constants because this code needs to compile with the 4.2 OSGi classes.
-    String PROVIDE_CAPABILITY = "Provide-Capability";
     String REQUIRE_CAPABILITY = "Require-Capability";
 
     String SPI_CONSUMER_HEADER = "SPI-Consumer";
     String SPI_PROVIDER_HEADER = "SPI-Provider";
 
-    String SPI_CAPABILITY_NAMESPACE = "osgi.spi.provider";
-    String EXTENDER_CAPABILITY_NAMESPACE = "osgi.jse.serviceloader";
+    String EXTENDER_CAPABILITY_NAMESPACE = "osgi.extender";
 
-    String BUNDLE_VERSION_ATTRIBUTE = "bundle-version";
-    String SERVICE_ATTRIBUTE = "service";
+    String CLIENT_EXTENDER_NAME = "spi.consumer.mediator";
+    String PROVIDER_EXTENDER_NAME = "spi.provider.mediator";
 
-    String EFFECTIVE_DIRECTIVE = "effective";
+    String CLIENT_REQUIREMENT = EXTENDER_CAPABILITY_NAMESPACE + "; " + EXTENDER_CAPABILITY_NAMESPACE + "=" + CLIENT_EXTENDER_NAME;
+    String PROVIDER_REQUIREMENT = EXTENDER_CAPABILITY_NAMESPACE + "; " + EXTENDER_CAPABILITY_NAMESPACE + "=" + PROVIDER_EXTENDER_NAME;
+
+    String CONSUMED_SPI_CONDITION = "spi";
+
+    String PROVIDED_SPI_DIRECTIVE = "provided-spi";
+    String PROVIDER_FILTER_DIRECTIVE = "provider-filter";
     String SERVICE_REGISTRY_DIRECTIVE = "service-registry";
 
     String PROCESSED_SPI_CONSUMER_HEADER = "X-SpiFly-Processed-SPI-Consumer";
 
-    String SPI_PROVIDER_URL = "spi.provider.url";
+    String SPI_PROVIDER_URL_PROPERTY = "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=1291355&r1=1291354&r2=1291355&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 Feb 20 16:44:29 2012
@@ -102,7 +102,8 @@ public class ProviderBundleTrackerCustom
         EasyMock.replay(sreg);
 
         BundleContext implBC = mockSPIBundleContext(sreg);
-        Bundle implBundle = mockSPIBundle(implBC, "osgi.spi.provider; effective:=active; service-registry:=true; approval=global");
+        Bundle implBundle = mockSPIBundle(implBC, SpiFlyConstants.PROVIDER_REQUIREMENT +
+                "; service-registry:=true; approval=global");
 
         List<ServiceRegistration> registrations = customizer.addingBundle(implBundle, null);
         assertEquals(1, registrations.size());
@@ -129,12 +130,12 @@ public class ProviderBundleTrackerCustom
 
         BundleContext implBC = mockSPIBundleContext4();
         Bundle implBundle =
-            mockSPIBundle4(implBC, "osgi.spi.provider; effective:=active; service=org.apache.aries.mytest.MySPI; approval=global");
+            mockSPIBundle4(implBC, SpiFlyConstants.PROVIDER_REQUIREMENT + "; " + SpiFlyConstants.PROVIDED_SPI_DIRECTIVE + ":=org.apache.aries.mytest.MySPI; approval=global");
 
         List<ServiceRegistration> registrations = customizer.addingBundle(implBundle, null);
         assertEquals(1, registrations.size());
         assertEquals("org.apache.aries.mytest.MySPI", registrations.iterator().next().getReference().getProperty(Constants.OBJECTCLASS));
-        assertNotNull(registrations.iterator().next().getReference().getProperty(SpiFlyConstants.SPI_PROVIDER_URL));
+        assertNotNull(registrations.iterator().next().getReference().getProperty(SpiFlyConstants.SPI_PROVIDER_URL_PROPERTY));
         assertEquals("global", registrations.iterator().next().getReference().getProperty("approval"));
     }
 
@@ -152,7 +153,7 @@ public class ProviderBundleTrackerCustom
 
         BundleContext implBC = mockSPIBundleContext4();
         Bundle implBundle =
-            mockSPIBundle4(implBC, "osgi.spi.provider; effective:=active");
+            mockSPIBundle4(implBC, SpiFlyConstants.PROVIDER_REQUIREMENT);
 
         List<ServiceRegistration> registrations = customizer.addingBundle(implBundle, null);
         assertEquals(3, registrations.size());
@@ -194,7 +195,7 @@ public class ProviderBundleTrackerCustom
         EasyMock.replay(sreg);
 
         BundleContext implBC = mockSPIBundleContext(sreg);
-        Bundle implBundle = mockSPIBundle(implBC, "osgi.spi.provider; effective:=active; service-registry:=false");
+        Bundle implBundle = mockSPIBundle(implBC, SpiFlyConstants.PROVIDER_REQUIREMENT + "; service-registry:=false");
 
         List<ServiceRegistration> registrations = customizer.addingBundle(implBundle, null);
         assertEquals(0, registrations.size());
@@ -275,7 +276,7 @@ public class ProviderBundleTrackerCustom
         EasyMock.expect(implBundle.getBundleContext()).andReturn(implBC).anyTimes();
 
         Dictionary<String, String> headers = new Hashtable<String, String>();
-        headers.put("Provide-Capability", "osgi.spi.provider; effective:=active;");
+        headers.put(SpiFlyConstants.REQUIRE_CAPABILITY, SpiFlyConstants.PROVIDER_REQUIREMENT);
         headers.put(Constants.BUNDLE_CLASSPATH, ".,non-jar.jar,embedded.jar,embedded2.jar");
         EasyMock.expect(implBundle.getHeaders()).andReturn(headers).anyTimes();
 
@@ -303,7 +304,7 @@ public class ProviderBundleTrackerCustom
 
         assertEquals("Precondition", 0, activator.findProviderBundles("org.apache.aries.mytest.MySPI").size());
         // Call addingBundle();
-        List<ServiceRegistration> registrations = customizer.addingBundle(implBundle, null);
+        customizer.addingBundle(implBundle, null);
         Collection<Bundle> bundles = activator.findProviderBundles("org.apache.aries.mytest.MySPI");
         assertEquals(1, bundles.size());
         assertSame(implBundle, bundles.iterator().next());
@@ -324,7 +325,7 @@ public class ProviderBundleTrackerCustom
     }
 
     private Bundle mockSPIBundle(BundleContext implBC) throws ClassNotFoundException {
-        return mockSPIBundle(implBC, "osgi.spi.provider; effective:=active;");
+        return mockSPIBundle(implBC, SpiFlyConstants.PROVIDER_REQUIREMENT);
     }
 
     private Bundle mockSPIBundle(BundleContext implBC, String spiProviderHeader) throws ClassNotFoundException {
@@ -333,7 +334,7 @@ public class ProviderBundleTrackerCustom
 
         Dictionary<String, String> headers = new Hashtable<String, String>();
         if (spiProviderHeader != null)
-            headers.put("Provide-Capability", spiProviderHeader);
+            headers.put(SpiFlyConstants.REQUIRE_CAPABILITY, spiProviderHeader);
         EasyMock.expect(implBundle.getHeaders()).andReturn(headers).anyTimes();
 
         // List the resources found at META-INF/services in the test bundle
@@ -350,6 +351,7 @@ public class ProviderBundleTrackerCustom
         return implBundle;
     }
 
+    @SuppressWarnings("unchecked")
     private BundleContext mockSPIBundleContext4() {
         BundleContext implBC = EasyMock.createNiceMock(BundleContext.class);
 
@@ -357,7 +359,6 @@ public class ProviderBundleTrackerCustom
             registerService((String) EasyMock.anyObject(), EasyMock.anyObject(), (Dictionary<String,?>)EasyMock.anyObject())).
             andAnswer(new IAnswer<ServiceRegistration>() {
                 @Override
-                @SuppressWarnings("unchecked")
                 public ServiceRegistration answer() throws Throwable {
                     final String className = (String) EasyMock.getCurrentArguments()[0];
                     final Object serviceObject = EasyMock.getCurrentArguments()[1];
@@ -398,7 +399,7 @@ public class ProviderBundleTrackerCustom
 
         Dictionary<String, String> headers = new Hashtable<String, String>();
         if (spiProviderHeader != null)
-            headers.put("Provide-Capability", spiProviderHeader);
+            headers.put(SpiFlyConstants.REQUIRE_CAPABILITY, spiProviderHeader);
         EasyMock.expect(implBundle.getHeaders()).andReturn(headers).anyTimes();
 
         // List the resources found at META-INF/services in the test bundle

Modified: aries/trunk/spi-fly/spi-fly-dynamic-bundle/pom.xml
URL: http://svn.apache.org/viewvc/aries/trunk/spi-fly/spi-fly-dynamic-bundle/pom.xml?rev=1291355&r1=1291354&r2=1291355&view=diff
==============================================================================
--- aries/trunk/spi-fly/spi-fly-dynamic-bundle/pom.xml (original)
+++ aries/trunk/spi-fly/spi-fly-dynamic-bundle/pom.xml Mon Feb 20 16:44:29 2012
@@ -107,6 +107,7 @@ JRE through META-INF/services resources)
                             org.apache.aries.spifly.dynamic
                         </Private-Package>
                         <Embed-Dependency>org.apache.aries.spifly.*;scope=compile;inline=true</Embed-Dependency>
+                        <Provide-Capability>osgi.extender;osgi.extender=spi.consumer.mediator,osgi.extender;osgi.extender=spi.provider.mediator</Provide-Capability>
                     </instructions>
                 </configuration>
             </plugin>

Modified: aries/trunk/spi-fly/spi-fly-dynamic-bundle/src/test/java/org/apache/aries/spifly/dynamic/ClientWeavingHookGenericCapabilityTest.java
URL: http://svn.apache.org/viewvc/aries/trunk/spi-fly/spi-fly-dynamic-bundle/src/test/java/org/apache/aries/spifly/dynamic/ClientWeavingHookGenericCapabilityTest.java?rev=1291355&r1=1291354&r2=1291355&view=diff
==============================================================================
--- aries/trunk/spi-fly/spi-fly-dynamic-bundle/src/test/java/org/apache/aries/spifly/dynamic/ClientWeavingHookGenericCapabilityTest.java (original)
+++ aries/trunk/spi-fly/spi-fly-dynamic-bundle/src/test/java/org/apache/aries/spifly/dynamic/ClientWeavingHookGenericCapabilityTest.java Mon Feb 20 16:44:29 2012
@@ -74,7 +74,7 @@ public class ClientWeavingHookGenericCap
     @Test
     public void testBasicServiceLoaderUsage() throws Exception {
         Dictionary<String, String> consumerHeaders = new Hashtable<String, String>();
-        consumerHeaders.put(SpiFlyConstants.REQUIRE_CAPABILITY, "osgi.spi.provider; effective:=active");
+        consumerHeaders.put(SpiFlyConstants.REQUIRE_CAPABILITY, SpiFlyConstants.CLIENT_REQUIREMENT);
 
         // Register the bundle that provides the SPI implementation.
         Bundle providerBundle = mockProviderBundle("impl1", 1);
@@ -116,7 +116,7 @@ public class ClientWeavingHookGenericCap
         Assert.assertSame("Precondition", cl, Thread.currentThread().getContextClassLoader());
 
         Dictionary<String, String> consumerHeaders = new Hashtable<String, String>();
-        consumerHeaders.put(SpiFlyConstants.REQUIRE_CAPABILITY, "osgi.spi.provider; effective:=active");
+        consumerHeaders.put(SpiFlyConstants.REQUIRE_CAPABILITY, SpiFlyConstants.CLIENT_REQUIREMENT);
 
         // Register the bundle that provides the SPI implementation.
         Bundle providerBundle = mockProviderBundle("impl1", 1);
@@ -162,7 +162,7 @@ public class ClientWeavingHookGenericCap
         Bundle spiFlyBundle = mockSpiFlyBundle();
 
         Dictionary<String, String> headers = new Hashtable<String, String>();
-        headers.put(SpiFlyConstants.REQUIRE_CAPABILITY, "osgi.spi.provider; effective:=active");
+        headers.put(SpiFlyConstants.REQUIRE_CAPABILITY, SpiFlyConstants.CLIENT_REQUIREMENT);
         Bundle consumerBundle = mockConsumerBundle(headers, spiFlyBundle);
 
         WeavingHook wh = new ClientWeavingHook(spiFlyBundle.getBundleContext(), activator);
@@ -194,7 +194,7 @@ public class ClientWeavingHookGenericCap
         Bundle spiFlyBundle = mockSpiFlyBundle();
 
         Dictionary<String, String> headers = new Hashtable<String, String>();
-        headers.put(SpiFlyConstants.REQUIRE_CAPABILITY, "osgi.spi.provider; effective:=active");
+        headers.put(SpiFlyConstants.REQUIRE_CAPABILITY, SpiFlyConstants.CLIENT_REQUIREMENT);
 
         Bundle consumerBundle = mockConsumerBundle(headers, spiFlyBundle);
         activator.addConsumerWeavingData(consumerBundle, SpiFlyConstants.REQUIRE_CAPABILITY);
@@ -224,7 +224,8 @@ public class ClientWeavingHookGenericCap
     @Test
     public void testClientSpecifyingProvider() throws Exception {
         Dictionary<String, String> headers = new Hashtable<String, String>();
-        headers.put(SpiFlyConstants.REQUIRE_CAPABILITY, "osgi.spi.provider; effective:=active; filter:=\"(bundle-symbolic-name=impl2)\"");
+        headers.put(SpiFlyConstants.REQUIRE_CAPABILITY, SpiFlyConstants.CLIENT_REQUIREMENT +
+                "; " + SpiFlyConstants.PROVIDER_FILTER_DIRECTIVE + ":=\"(bundle-symbolic-name=impl2)\"");
 
         Bundle providerBundle1 = mockProviderBundle("impl1", 1);
         Bundle providerBundle2 = mockProviderBundle("impl2", 2);
@@ -253,7 +254,8 @@ public class ClientWeavingHookGenericCap
     @Test
     public void testClientSpecifyingProviderVersion() throws Exception {
         Dictionary<String, String> headers = new Hashtable<String, String>();
-        headers.put(SpiFlyConstants.REQUIRE_CAPABILITY, "osgi.spi.provider; effective:=active; filter:=\"(&(bundle-symbolic-name=impl2)(bundle-version=1.2.3))\"");
+        headers.put(SpiFlyConstants.REQUIRE_CAPABILITY, SpiFlyConstants.CLIENT_REQUIREMENT +
+                "; " + SpiFlyConstants.PROVIDER_FILTER_DIRECTIVE + ":=\"(&(bundle-symbolic-name=impl2)(bundle-version=1.2.3))\"");
 
         Bundle providerBundle1 = mockProviderBundle("impl1", 1);
         Bundle providerBundle2 = mockProviderBundle("impl2", 2);
@@ -283,8 +285,8 @@ public class ClientWeavingHookGenericCap
     @Test
     public void testClientMultipleTargetBundles() throws Exception {
         Dictionary<String, String> headers = new Hashtable<String, String>();
-        headers.put(SpiFlyConstants.REQUIRE_CAPABILITY,
-                "osgi.spi.provider; effective:=active; filter:=\"(|(bundle-symbolic-name=impl1)(bundle-symbolic-name=impl4))\"");
+        headers.put(SpiFlyConstants.REQUIRE_CAPABILITY, SpiFlyConstants.CLIENT_REQUIREMENT +
+                "; " + SpiFlyConstants.PROVIDER_FILTER_DIRECTIVE + ":=\"(|(bundle-symbolic-name=impl1)(bundle-symbolic-name=impl4))\"");
 
         Bundle providerBundle1 = mockProviderBundle("impl1", 1);
         Bundle providerBundle2 = mockProviderBundle("impl2", 2);
@@ -316,9 +318,9 @@ public class ClientWeavingHookGenericCap
     @Test
     public void testServiceFiltering() throws Exception {
         Dictionary<String, String> headers = new Hashtable<String, String>();
-        headers.put(SpiFlyConstants.REQUIRE_CAPABILITY,
-                "osgi.spi.provider; effective:=active; filter:=\"(|(service=org.apache.aries.mytest.MySPI)" +
-                "(&(service=org.apache.aries.mytest.AltSPI)(bundle-symbolic-name=impl4)))\"");
+        headers.put(SpiFlyConstants.REQUIRE_CAPABILITY, SpiFlyConstants.CLIENT_REQUIREMENT +
+                "; " + SpiFlyConstants.PROVIDER_FILTER_DIRECTIVE + ":=\"(|(" + SpiFlyConstants.CONSUMED_SPI_CONDITION + "=org.apache.aries.mytest.MySPI)" +
+                "(&(" + SpiFlyConstants.CONSUMED_SPI_CONDITION + "=org.apache.aries.mytest.AltSPI)(bundle-symbolic-name=impl4)))\"");
 
         Bundle providerBundle1 = mockProviderBundle("impl1", 1);
         Bundle providerBundle2 = mockProviderBundle("impl2", 2);
@@ -362,9 +364,9 @@ public class ClientWeavingHookGenericCap
     @Test
     public void testServiceFilteringAlternative() throws Exception {
         Dictionary<String, String> headers = new Hashtable<String, String>();
-        headers.put(SpiFlyConstants.REQUIRE_CAPABILITY,
-                "osgi.spi.provider; effective:=active; filter:=\"(|(!(service=org.apache.aries.mytest.AltSPI))" +
-                "(&(service=org.apache.aries.mytest.AltSPI)(bundle-symbolic-name=impl4)))\"");
+        headers.put(SpiFlyConstants.REQUIRE_CAPABILITY, SpiFlyConstants.CLIENT_REQUIREMENT +
+                "; " + SpiFlyConstants.PROVIDER_FILTER_DIRECTIVE + ":=\"(|(!(" + SpiFlyConstants.CONSUMED_SPI_CONDITION + "=org.apache.aries.mytest.AltSPI))" +
+                "(&(" + SpiFlyConstants.CONSUMED_SPI_CONDITION + "=org.apache.aries.mytest.AltSPI)(bundle-symbolic-name=impl4)))\"");
 
         Bundle providerBundle1 = mockProviderBundle("impl1", 1);
         Bundle providerBundle2 = mockProviderBundle("impl2", 2);
@@ -408,9 +410,8 @@ public class ClientWeavingHookGenericCap
     @Test
     public void testServiceFilteringNarrow() throws Exception {
         Dictionary<String, String> headers = new Hashtable<String, String>();
-        headers.put(SpiFlyConstants.REQUIRE_CAPABILITY,
-                "osgi.spi.provider; effective:=active; filter:=\"" +
-                "(&(service=org.apache.aries.mytest.AltSPI)(bundle-symbolic-name=impl4))\"");
+        headers.put(SpiFlyConstants.REQUIRE_CAPABILITY, SpiFlyConstants.CLIENT_REQUIREMENT +
+                "; " + SpiFlyConstants.PROVIDER_FILTER_DIRECTIVE + ":=\"(&(" + SpiFlyConstants.CONSUMED_SPI_CONDITION + "=org.apache.aries.mytest.AltSPI)(bundle-symbolic-name=impl4))\"");
 
         Bundle providerBundle1 = mockProviderBundle("impl1", 1);
         Bundle providerBundle2 = mockProviderBundle("impl2", 2);
@@ -454,7 +455,8 @@ public class ClientWeavingHookGenericCap
     @Test
     public void testFilteringCustomAttribute() throws Exception {
         Dictionary<String, String> headers = new Hashtable<String, String>();
-        headers.put(SpiFlyConstants.REQUIRE_CAPABILITY, "osgi.spi.provider; effective:=active; filter:=\"(approval=global)\"");
+        headers.put(SpiFlyConstants.REQUIRE_CAPABILITY, SpiFlyConstants.CLIENT_REQUIREMENT +
+                "; " + SpiFlyConstants.PROVIDER_FILTER_DIRECTIVE + ":=\"(approval=global)\"");
 
         Bundle providerBundle1 = mockProviderBundle("impl1", 1);
         Bundle providerBundle2 = mockProviderBundle("impl2", 2);

Modified: aries/trunk/spi-fly/spi-fly-examples/spi-fly-example-client2-bundle/pom.xml
URL: http://svn.apache.org/viewvc/aries/trunk/spi-fly/spi-fly-examples/spi-fly-example-client2-bundle/pom.xml?rev=1291355&r1=1291354&r2=1291355&view=diff
==============================================================================
--- aries/trunk/spi-fly/spi-fly-examples/spi-fly-example-client2-bundle/pom.xml (original)
+++ aries/trunk/spi-fly/spi-fly-examples/spi-fly-example-client2-bundle/pom.xml Mon Feb 20 16:44:29 2012
@@ -65,7 +65,7 @@
                             org.apache.aries.spifly.examples.client2.impl
                         </Private-Package>
                         <Bundle-Activator>org.apache.aries.spifly.examples.client2.impl.Activator</Bundle-Activator>
-                        <Require-Capability>osgi.spi.provider; effective:=active</Require-Capability>
+                        <Require-Capability>osgi.extender; osgi.extender=spi.consumer.mediator</Require-Capability>
                     </instructions>
                 </configuration>
             </plugin>

Modified: aries/trunk/spi-fly/spi-fly-examples/spi-fly-example-provider2-bundle/pom.xml
URL: http://svn.apache.org/viewvc/aries/trunk/spi-fly/spi-fly-examples/spi-fly-example-provider2-bundle/pom.xml?rev=1291355&r1=1291354&r2=1291355&view=diff
==============================================================================
--- aries/trunk/spi-fly/spi-fly-examples/spi-fly-example-provider2-bundle/pom.xml (original)
+++ aries/trunk/spi-fly/spi-fly-examples/spi-fly-example-provider2-bundle/pom.xml Mon Feb 20 16:44:29 2012
@@ -59,7 +59,7 @@
                         <Private-Package>
                             org.apache.aries.spifly.mysvc.impl2
                         </Private-Package>
-                        <Provide-Capability>osgi.spi.provider; effective:=active</Provide-Capability>
+                        <Require-Capability>osgi.extender; osgi.extender=spi.provider.mediator</Require-Capability>
                     </instructions>
                 </configuration>
             </plugin>