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 2010/12/21 22:03:01 UTC
svn commit: r1051651 - in
/incubator/aries/trunk/spi-fly/contrib/pilot_using_weavinghook:
SpiFly/src/org/apache/aries/spifly/ SpiFlyTests/src/org/apache/aries/mytest/
SpiFlyTests/src/org/apache/aries/spifly/
SpiFlyTests/src/org/apache/aries/spifly/impl...
Author: davidb
Date: Tue Dec 21 21:03:00 2010
New Revision: 1051651
URL: http://svn.apache.org/viewvc?rev=1051651&view=rev
Log:
Most of the tests fail now - this is WIP
Added:
incubator/aries/trunk/spi-fly/contrib/pilot_using_weavinghook/SpiFlyTests/src/org/apache/aries/mytest/AltSPI.java
incubator/aries/trunk/spi-fly/contrib/pilot_using_weavinghook/SpiFlyTests/src/org/apache/aries/spifly/AltTestClient.java
incubator/aries/trunk/spi-fly/contrib/pilot_using_weavinghook/SpiFlyTests/src/org/apache/aries/spifly/impl2/AltSPIImpl1.java
incubator/aries/trunk/spi-fly/contrib/pilot_using_weavinghook/SpiFlyTests/src/org/apache/aries/spifly/impl2/META-INF/services/org.apache.aries.mytest.AltSPI
incubator/aries/trunk/spi-fly/contrib/pilot_using_weavinghook/SpiFlyTests/src/org/apache/aries/spifly/impl4/AltSPIImpl2.java
incubator/aries/trunk/spi-fly/contrib/pilot_using_weavinghook/SpiFlyTests/src/org/apache/aries/spifly/impl4/META-INF/services/org.apache.aries.mytest.AltSPI
Modified:
incubator/aries/trunk/spi-fly/contrib/pilot_using_weavinghook/SpiFly/src/org/apache/aries/spifly/Activator.java
incubator/aries/trunk/spi-fly/contrib/pilot_using_weavinghook/SpiFly/src/org/apache/aries/spifly/ClientWeavingHook.java
incubator/aries/trunk/spi-fly/contrib/pilot_using_weavinghook/SpiFly/src/org/apache/aries/spifly/Util.java
incubator/aries/trunk/spi-fly/contrib/pilot_using_weavinghook/SpiFly/src/org/apache/aries/spifly/WeavingData.java
incubator/aries/trunk/spi-fly/contrib/pilot_using_weavinghook/SpiFlyTests/src/org/apache/aries/spifly/ClientWeavingHookTest.java
Modified: incubator/aries/trunk/spi-fly/contrib/pilot_using_weavinghook/SpiFly/src/org/apache/aries/spifly/Activator.java
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/spi-fly/contrib/pilot_using_weavinghook/SpiFly/src/org/apache/aries/spifly/Activator.java?rev=1051651&r1=1051650&r2=1051651&view=diff
==============================================================================
--- incubator/aries/trunk/spi-fly/contrib/pilot_using_weavinghook/SpiFly/src/org/apache/aries/spifly/Activator.java (original)
+++ incubator/aries/trunk/spi-fly/contrib/pilot_using_weavinghook/SpiFly/src/org/apache/aries/spifly/Activator.java Tue Dec 21 21:03:00 2010
@@ -18,9 +18,12 @@
*/
package org.apache.aries.spifly;
+import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
import java.util.SortedMap;
import java.util.TreeMap;
import java.util.concurrent.ConcurrentHashMap;
@@ -39,7 +42,8 @@ import org.osgi.util.tracker.ServiceTrac
public class Activator implements BundleActivator {
static Activator activator;
-
+
+ private BundleContext bundleContext;
private ServiceRegistration<WeavingHook> weavingHookService;
private LogServiceTracker lst;
private List<LogService> logServices = new CopyOnWriteArrayList<LogService>();
@@ -48,10 +52,15 @@ public class Activator implements Bundle
private final ConcurrentMap<String, SortedMap<Long, Bundle>>registeredProviders =
new ConcurrentHashMap<String, SortedMap<Long, Bundle>>();
- private final ConcurrentMap<Bundle, Collection<Bundle>> registeredConsumers =
- new ConcurrentHashMap<Bundle, Collection<Bundle>>();
+ private final ConcurrentMap<Bundle, Collection<String>> consumerProviders =
+ new ConcurrentHashMap<Bundle, Collection<String>>();
+
+ private Map<Bundle, Map<Integer, String>> consumerArgRestrictions =
+ new ConcurrentHashMap<Bundle, Map<Integer,String>>();
public synchronized void start(BundleContext context) throws Exception {
+ bundleContext = context;
+
lst = new LogServiceTracker(context);
lst.open();
@@ -119,15 +128,53 @@ public class Activator implements Bundle
}
// TODO unRegisterProviderBundle();
- public void registerConsumerBundle(Bundle consumer, Collection<Bundle> spiProviders) {
- if (spiProviders == null)
- return;
+ public void registerConsumerBundle(Bundle consumer, Collection<String> spiProviders, String className, String methodName, Map<Integer, String> argRestrictions) {
+ if (spiProviders != null)
+ consumerProviders.put(consumer, spiProviders);
- registeredConsumers.put(consumer, spiProviders);
+ if (className != null) {
+ Map<String, Map<String, Map<Integer, String>>> restrictions = new HashMap<String, Map<String, Map<Integer, String>>>();
+ Map<String, Map<Integer, String>> restriction = null;
+ if (methodName != null) {
+ restriction = new HashMap<String, Map<Integer,String>>();
+ restriction.put(methodName, argRestrictions);
+ }
+ restrictions.put(className, restriction);
+ // TODO consumerRestrictions.put(consumer, restrictions);
+ }
+ if (argRestrictions != null)
+ consumerArgRestrictions.put(consumer, argRestrictions);
}
- public Collection<Bundle> findConsumerRestrictions(Bundle consumer) {
- return registeredConsumers.get(consumer);
+ public Collection<Bundle> findConsumerRestrictions(Bundle consumer, int argIdx, String argVal) {
+ List<Bundle> result = new ArrayList<Bundle>();
+ for (String allowedBundle : findComsumerRestrictions2(consumer, argIdx)) {
+ for (Bundle b : bundleContext.getBundles()) {
+ if (b.getSymbolicName().equals(allowedBundle)) {
+ result.add(b);
+ }
+ }
+ }
+ return result;
+ }
+
+ private Collection<String> findComsumerRestrictions2(Bundle consumer, int argIdx) {
+ Collection<String> providers = consumerProviders.get(consumer);
+ Map<Integer, String> argRestrictions = consumerArgRestrictions.get(consumer);
+
+ if (providers != null) {
+ if (argRestrictions != null) {
+ // Clone providers because we're going to modify it...
+ providers = new ArrayList<String>(providers);
+ providers.retainAll(Collections.singleton(argRestrictions.get(argIdx)));
+ }
+ return providers;
+ } else {
+ if (argRestrictions != null) {
+ return Collections.singleton(argRestrictions.get(argIdx));
+ }
+ return null;
+ }
}
// TODO unRegisterConsumerBundle();
Modified: incubator/aries/trunk/spi-fly/contrib/pilot_using_weavinghook/SpiFly/src/org/apache/aries/spifly/ClientWeavingHook.java
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/spi-fly/contrib/pilot_using_weavinghook/SpiFly/src/org/apache/aries/spifly/ClientWeavingHook.java?rev=1051651&r1=1051650&r2=1051651&view=diff
==============================================================================
--- incubator/aries/trunk/spi-fly/contrib/pilot_using_weavinghook/SpiFly/src/org/apache/aries/spifly/ClientWeavingHook.java (original)
+++ incubator/aries/trunk/spi-fly/contrib/pilot_using_weavinghook/SpiFly/src/org/apache/aries/spifly/ClientWeavingHook.java Tue Dec 21 21:03:00 2010
@@ -19,7 +19,9 @@
package org.apache.aries.spifly;
import java.util.ArrayList;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
import java.util.ServiceLoader;
import org.apache.aries.spifly.HeaderParser.PathElement;
@@ -90,13 +92,15 @@ public class ClientWeavingHook implement
* @return an instance of the {@link WeavingData} class.
*/
private WeavingData parseHeader(Bundle consumerBundle, String consumerHeader) {
- List<Bundle> selectedBundles = new ArrayList<Bundle>();
+ List<String> allowedBundles = new ArrayList<String>();
for (PathElement element : HeaderParser.parseHeader(consumerHeader)) {
String name = element.getName().trim();
String className;
String methodName;
String[] argClasses;
+ Map<Integer, String> argValues = null;
+
int hashIdx = name.indexOf('#');
if (hashIdx > 0) {
className = name.substring(0, hashIdx);
@@ -107,7 +111,25 @@ public class ClientWeavingHook implement
if (closeIdx > 0) {
String classes = name.substring(hashIdx + braceIdx + 1, hashIdx + closeIdx).trim();
if (classes.length() > 0) {
- argClasses = classes.split(",");
+ if (classes.indexOf('[') > 0) {
+ List<String> argClsList = new ArrayList<String>();
+ argValues = new HashMap<Integer, String>();
+ int argNumber = 0;
+ for (String s : classes.split(",")) {
+ int idx = s.indexOf('[');
+ int end = s.indexOf(idx, ']');
+ if (idx > 0 && end > idx) {
+ argClsList.add(s.substring(0, idx));
+ argValues.put(argNumber, s.substring(idx + 1, end));
+ } else {
+ argClsList.add(s);
+ }
+ argNumber++;
+ }
+ argClasses = argClsList.toArray(new String[] {});
+ } else {
+ argClasses = classes.split(",");
+ }
} else {
argClasses = null;
}
@@ -130,30 +152,26 @@ public class ClientWeavingHook implement
String bsn = element.getAttribute("bundle");
if (bsn != null) {
- for (Bundle b : consumerBundle.getBundleContext().getBundles()) {
- if (b.getSymbolicName().equals(bsn)) {
- selectedBundles.add(b);
- break;
- }
- }
+ allowedBundles.add(bsn);
}
+ // TODO bundle version
+
String bid = element.getAttribute("bundleId");
if (bid != null) {
bid = bid.trim();
for (Bundle b : consumerBundle.getBundleContext().getBundles()) {
- if (("" + b.getBundleId()).equals(bid)) {
- selectedBundles.add(b);
+ if (("" + b.getBundleId()).equals(bid)) {
+ allowedBundles.add(b.getSymbolicName());
break;
}
}
}
Activator.activator.log(LogService.LOG_INFO, "Weaving " + className + "#" + methodName + " from bundle " +
- consumerBundle.getSymbolicName() + " to " + (selectedBundles.size() == 0 ? " any provider" : selectedBundles));
-
- if (selectedBundles.size() > 0)
- Activator.activator.registerConsumerBundle(consumerBundle, selectedBundles);
+ consumerBundle.getSymbolicName() + " to " + (allowedBundles.size() == 0 ? " any provider" : allowedBundles));
+
+ Activator.activator.registerConsumerBundle(consumerBundle, allowedBundles, className, methodName, argValues);
// TODO support more than one definition
return new WeavingData(className, methodName, argClasses);
Modified: incubator/aries/trunk/spi-fly/contrib/pilot_using_weavinghook/SpiFly/src/org/apache/aries/spifly/Util.java
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/spi-fly/contrib/pilot_using_weavinghook/SpiFly/src/org/apache/aries/spifly/Util.java?rev=1051651&r1=1051650&r2=1051651&view=diff
==============================================================================
--- incubator/aries/trunk/spi-fly/contrib/pilot_using_weavinghook/SpiFly/src/org/apache/aries/spifly/Util.java (original)
+++ incubator/aries/trunk/spi-fly/contrib/pilot_using_weavinghook/SpiFly/src/org/apache/aries/spifly/Util.java Tue Dec 21 21:03:00 2010
@@ -68,7 +68,7 @@ public class Util {
Collection<Bundle> bundles = new ArrayList<Bundle>(activator.findProviderBundles(cls.getName()));
activator.log(LogService.LOG_DEBUG, "Found bundles providing " + cls + ": " + bundles);
- Collection<Bundle> allowedBundles = activator.findConsumerRestrictions(consumerBundle);
+ Collection<Bundle> allowedBundles = activator.findConsumerRestrictions(consumerBundle, 0, cls.getName());
if (allowedBundles != null) {
for (Iterator<Bundle> it = bundles.iterator(); it.hasNext(); ) {
if (!allowedBundles.contains(it.next())) {
Modified: incubator/aries/trunk/spi-fly/contrib/pilot_using_weavinghook/SpiFly/src/org/apache/aries/spifly/WeavingData.java
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/spi-fly/contrib/pilot_using_weavinghook/SpiFly/src/org/apache/aries/spifly/WeavingData.java?rev=1051651&r1=1051650&r2=1051651&view=diff
==============================================================================
--- incubator/aries/trunk/spi-fly/contrib/pilot_using_weavinghook/SpiFly/src/org/apache/aries/spifly/WeavingData.java (original)
+++ incubator/aries/trunk/spi-fly/contrib/pilot_using_weavinghook/SpiFly/src/org/apache/aries/spifly/WeavingData.java Tue Dec 21 21:03:00 2010
@@ -18,15 +18,17 @@
*/
package org.apache.aries.spifly;
+import java.util.Map;
+
public class WeavingData {
private final String className;
private final String methodName;
private final String[] argClasses;
- public WeavingData(String className, String methodName, String[] argClasses2) {
+ public WeavingData(String className, String methodName, String[] argClasses) {
this.className = className;
this.methodName = methodName;
- this.argClasses = argClasses2;
+ this.argClasses = argClasses;
}
public String getClassName() {
@@ -39,5 +41,5 @@ public class WeavingData {
public String[] getArgClasses() {
return argClasses;
- }
+ }
}
Added: incubator/aries/trunk/spi-fly/contrib/pilot_using_weavinghook/SpiFlyTests/src/org/apache/aries/mytest/AltSPI.java
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/spi-fly/contrib/pilot_using_weavinghook/SpiFlyTests/src/org/apache/aries/mytest/AltSPI.java?rev=1051651&view=auto
==============================================================================
--- incubator/aries/trunk/spi-fly/contrib/pilot_using_weavinghook/SpiFlyTests/src/org/apache/aries/mytest/AltSPI.java (added)
+++ incubator/aries/trunk/spi-fly/contrib/pilot_using_weavinghook/SpiFlyTests/src/org/apache/aries/mytest/AltSPI.java Tue Dec 21 21:03:00 2010
@@ -0,0 +1,5 @@
+package org.apache.aries.mytest;
+
+public interface AltSPI {
+ long square(long l);
+}
Added: incubator/aries/trunk/spi-fly/contrib/pilot_using_weavinghook/SpiFlyTests/src/org/apache/aries/spifly/AltTestClient.java
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/spi-fly/contrib/pilot_using_weavinghook/SpiFlyTests/src/org/apache/aries/spifly/AltTestClient.java?rev=1051651&view=auto
==============================================================================
--- incubator/aries/trunk/spi-fly/contrib/pilot_using_weavinghook/SpiFlyTests/src/org/apache/aries/spifly/AltTestClient.java (added)
+++ incubator/aries/trunk/spi-fly/contrib/pilot_using_weavinghook/SpiFlyTests/src/org/apache/aries/spifly/AltTestClient.java Tue Dec 21 21:03:00 2010
@@ -0,0 +1,17 @@
+package org.apache.aries.spifly;
+
+import java.util.ServiceLoader;
+
+import org.apache.aries.mytest.AltSPI;
+
+public class AltTestClient {
+ public long test(long input) {
+ long result = 0;
+
+ ServiceLoader<AltSPI> loader = ServiceLoader.load(AltSPI.class);
+ for (AltSPI mySPI : loader) {
+ result += mySPI.square(input);
+ }
+ return result;
+ }
+}
Modified: incubator/aries/trunk/spi-fly/contrib/pilot_using_weavinghook/SpiFlyTests/src/org/apache/aries/spifly/ClientWeavingHookTest.java
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/spi-fly/contrib/pilot_using_weavinghook/SpiFlyTests/src/org/apache/aries/spifly/ClientWeavingHookTest.java?rev=1051651&r1=1051650&r2=1051651&view=diff
==============================================================================
--- incubator/aries/trunk/spi-fly/contrib/pilot_using_weavinghook/SpiFlyTests/src/org/apache/aries/spifly/ClientWeavingHookTest.java (original)
+++ incubator/aries/trunk/spi-fly/contrib/pilot_using_weavinghook/SpiFlyTests/src/org/apache/aries/spifly/ClientWeavingHookTest.java Tue Dec 21 21:03:00 2010
@@ -153,6 +153,84 @@ public class ClientWeavingHookTest {
Object result = method.invoke(cls.newInstance(), "hello");
Assert.assertEquals("Only the services from bundle impl2 should be selected", "HELLO5", result);
}
+
+ @Test
+ public void testClientSpecifyingProviderVersion() throws Exception {
+ Dictionary<String, String> headers = new Hashtable<String, String>();
+ headers.put(SpiFlyConstants.SPI_CONSUMER_HEADER, "java.util.ServiceLoader#load(java.lang.Class);bundle=impl2;version=1.2.3");
+
+ Bundle providerBundle1 = mockProviderBundle("impl1", 1, "META-INF/services/org.apache.aries.mytest.MySPI");
+ Bundle providerBundle2 = mockProviderBundle("impl2", 2, "META-INF/services/org.apache.aries.mytest.MySPI");
+ Bundle providerBundle3 = mockProviderBundle("impl2", 3, new Version(1, 2, 3), "META-INF/services/org.apache.aries.mytest.MySPI");
+ Activator.activator.registerProviderBundle("org.apache.aries.mytest.MySPI", providerBundle1);
+ Activator.activator.registerProviderBundle("org.apache.aries.mytest.MySPI", providerBundle2);
+ Activator.activator.registerProviderBundle("org.apache.aries.mytest.MySPI", providerBundle3);
+
+ Bundle consumerBundle = mockConsumerBundle(headers, providerBundle1, providerBundle2, providerBundle3);
+ Bundle spiFlyBundle = mockSpiFlyBundle(consumerBundle, providerBundle1, providerBundle2, providerBundle3);
+ WeavingHook wh = new ClientWeavingHook(spiFlyBundle.getBundleContext());
+
+ // Weave the TestClient class.
+ URL clsUrl = getClass().getResource("TestClient.class");
+ WovenClass wc = new MyWovenClass(clsUrl, "org.apache.aries.spifly.TestClient", consumerBundle);
+ wh.weave(wc);
+
+ // Invoke the woven class and check that it propertly sets the TCCL so that the
+ // META-INF/services/org.apache.aries.mytest.MySPI file from impl2 is visible.
+ Class<?> cls = wc.getDefinedClass();
+ Method method = cls.getMethod("test", new Class [] {String.class});
+ Object result = method.invoke(cls.newInstance(), "hello");
+ Assert.assertEquals("Only the services from bundle impl2 should be selected", "Updated!Hello!Updated", result);
+ }
+
+ @Test
+ public void testClientSpecificProviderLoadArgument() throws Exception {
+ Dictionary<String, String> headers = new Hashtable<String, String>();
+ headers.put(SpiFlyConstants.SPI_CONSUMER_HEADER,
+ "java.util.ServiceLoader#load(java.lang.Class[org.apache.aries.mytest.MySPI])," +
+ "java.util.ServiceLoader#load(java.lang.Class[org.apache.aries.mytest.AltSPI]);bundle=impl4");
+
+ Bundle providerBundle1 = mockProviderBundle("impl1", 1, "META-INF/services/org.apache.aries.mytest.MySPI");
+ Bundle providerBundle2 = mockProviderBundle("impl2", 2, "META-INF/services/org.apache.aries.mytest.MySPI", "META-INF/services/org.apache.aries.mytest.AltSPI");
+ Bundle providerBundle4 = mockProviderBundle("impl4", 4, "META-INF/services/org.apache.aries.mytest.MySPI", "META-INF/services/org.apache.aries.mytest.AltSPI");
+ Activator.activator.registerProviderBundle("org.apache.aries.mytest.MySPI", providerBundle1);
+ Activator.activator.registerProviderBundle("org.apache.aries.mytest.MySPI", providerBundle2);
+ Activator.activator.registerProviderBundle("org.apache.aries.mytest.AltSPI", providerBundle2);
+ Activator.activator.registerProviderBundle("org.apache.aries.mytest.MySPI", providerBundle4);
+ Activator.activator.registerProviderBundle("org.apache.aries.mytest.AltSPI", providerBundle4);
+
+ Bundle consumerBundle = mockConsumerBundle(headers, providerBundle1, providerBundle2, providerBundle4);
+ Bundle spiFlyBundle = mockSpiFlyBundle(consumerBundle, providerBundle1, providerBundle2, providerBundle4);
+ WeavingHook wh = new ClientWeavingHook(spiFlyBundle.getBundleContext());
+
+ // Weave the TestClient class.
+ URL clsUrl = getClass().getResource("TestClient.class");
+ WovenClass wc = new MyWovenClass(clsUrl, "org.apache.aries.spifly.TestClient", consumerBundle);
+ wh.weave(wc);
+
+ // Invoke the woven class and check that it propertly sets the TCCL so that the
+ // META-INF/services/org.apache.aries.mytest.MySPI file from impl2 is visible.
+ Class<?> cls = wc.getDefinedClass();
+ Method method = cls.getMethod("test", new Class [] {String.class});
+ Object result = method.invoke(cls.newInstance(), "hello");
+ Assert.assertEquals("Only the services from bundle impl2 should be selected", "ollehHELLO5", result);
+
+ // Weave the AltTestClient class.
+ URL cls2Url = getClass().getResource("AltTestClient.class");
+ WovenClass wc2 = new MyWovenClass(cls2Url, "org.apache.aries.spifly.AltTestClient", consumerBundle);
+ wh.weave(wc2);
+
+ // Invoke the AltTestClient
+ Class<?> cls2 = wc2.getDefinedClass();
+ Method method2 = cls2.getMethod("test", new Class [] {long.class});
+ Object result2 = method2.invoke(cls2.newInstance(), 4096);
+ Assert.assertEquals("Only the services from bundle impl4 should be selected", 8192, result2);
+ }
+
+ @Test
+ public void testClientSpecifyingTwoDifferentMethodsLimitedToDifferentProviders() {
+ Assert.fail();
+ }
@Test
public void testJAXPClientWantsJREImplementation1() throws Exception {
@@ -267,6 +345,10 @@ public class ClientWeavingHookTest {
}
private Bundle mockProviderBundle(String subdir, long id, String ... resources) {
+ return mockProviderBundle(subdir, id, Version.emptyVersion, resources);
+ }
+
+ private Bundle mockProviderBundle(String subdir, long id, Version version, String ... resources) {
// Set up the classloader that will be used by the ASM-generated code as the TCCL.
// It can load a META-INF/services file
ClassLoader cl = new TestImplClassLoader(subdir, resources);
@@ -280,6 +362,7 @@ public class ClientWeavingHookTest {
EasyMock.expect(providerBundle.adapt(BundleWiring.class)).andReturn(bw);
EasyMock.expect(providerBundle.getSymbolicName()).andReturn(subdir).anyTimes();
EasyMock.expect(providerBundle.getBundleId()).andReturn(id).anyTimes();
+ EasyMock.expect(providerBundle.getVersion()).andReturn(version).anyTimes();
EasyMock.replay(providerBundle);
return providerBundle;
}
Added: incubator/aries/trunk/spi-fly/contrib/pilot_using_weavinghook/SpiFlyTests/src/org/apache/aries/spifly/impl2/AltSPIImpl1.java
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/spi-fly/contrib/pilot_using_weavinghook/SpiFlyTests/src/org/apache/aries/spifly/impl2/AltSPIImpl1.java?rev=1051651&view=auto
==============================================================================
--- incubator/aries/trunk/spi-fly/contrib/pilot_using_weavinghook/SpiFlyTests/src/org/apache/aries/spifly/impl2/AltSPIImpl1.java (added)
+++ incubator/aries/trunk/spi-fly/contrib/pilot_using_weavinghook/SpiFlyTests/src/org/apache/aries/spifly/impl2/AltSPIImpl1.java Tue Dec 21 21:03:00 2010
@@ -0,0 +1,10 @@
+package org.apache.aries.spifly.impl2;
+
+import org.apache.aries.mytest.AltSPI;
+
+public class AltSPIImpl1 implements AltSPI {
+ @Override
+ public long square(long l) {
+ return l * l;
+ }
+}
Added: incubator/aries/trunk/spi-fly/contrib/pilot_using_weavinghook/SpiFlyTests/src/org/apache/aries/spifly/impl2/META-INF/services/org.apache.aries.mytest.AltSPI
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/spi-fly/contrib/pilot_using_weavinghook/SpiFlyTests/src/org/apache/aries/spifly/impl2/META-INF/services/org.apache.aries.mytest.AltSPI?rev=1051651&view=auto
==============================================================================
--- incubator/aries/trunk/spi-fly/contrib/pilot_using_weavinghook/SpiFlyTests/src/org/apache/aries/spifly/impl2/META-INF/services/org.apache.aries.mytest.AltSPI (added)
+++ incubator/aries/trunk/spi-fly/contrib/pilot_using_weavinghook/SpiFlyTests/src/org/apache/aries/spifly/impl2/META-INF/services/org.apache.aries.mytest.AltSPI Tue Dec 21 21:03:00 2010
@@ -0,0 +1 @@
+org.apache.aries.spifly.impl2.AltSPIImpl1
Added: incubator/aries/trunk/spi-fly/contrib/pilot_using_weavinghook/SpiFlyTests/src/org/apache/aries/spifly/impl4/AltSPIImpl2.java
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/spi-fly/contrib/pilot_using_weavinghook/SpiFlyTests/src/org/apache/aries/spifly/impl4/AltSPIImpl2.java?rev=1051651&view=auto
==============================================================================
--- incubator/aries/trunk/spi-fly/contrib/pilot_using_weavinghook/SpiFlyTests/src/org/apache/aries/spifly/impl4/AltSPIImpl2.java (added)
+++ incubator/aries/trunk/spi-fly/contrib/pilot_using_weavinghook/SpiFlyTests/src/org/apache/aries/spifly/impl4/AltSPIImpl2.java Tue Dec 21 21:03:00 2010
@@ -0,0 +1,10 @@
+package org.apache.aries.spifly.impl4;
+
+import org.apache.aries.mytest.AltSPI;
+
+public class AltSPIImpl2 implements AltSPI {
+ @Override
+ public long square(long l) {
+ return -l * l;
+ }
+}
Added: incubator/aries/trunk/spi-fly/contrib/pilot_using_weavinghook/SpiFlyTests/src/org/apache/aries/spifly/impl4/META-INF/services/org.apache.aries.mytest.AltSPI
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/spi-fly/contrib/pilot_using_weavinghook/SpiFlyTests/src/org/apache/aries/spifly/impl4/META-INF/services/org.apache.aries.mytest.AltSPI?rev=1051651&view=auto
==============================================================================
--- incubator/aries/trunk/spi-fly/contrib/pilot_using_weavinghook/SpiFlyTests/src/org/apache/aries/spifly/impl4/META-INF/services/org.apache.aries.mytest.AltSPI (added)
+++ incubator/aries/trunk/spi-fly/contrib/pilot_using_weavinghook/SpiFlyTests/src/org/apache/aries/spifly/impl4/META-INF/services/org.apache.aries.mytest.AltSPI Tue Dec 21 21:03:00 2010
@@ -0,0 +1 @@
+org.apache.aries.spifly.impl4.AltSPIImpl2