You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aries.apache.org by gn...@apache.org on 2010/09/26 23:05:53 UTC
svn commit: r1001515 - in /incubator/aries/trunk/blueprint: ./
blueprint-annotation-itest/ blueprint-bundle/ blueprint-core/
blueprint-core/src/main/java/org/apache/aries/blueprint/container/
blueprint-core/src/main/java/org/apache/aries/blueprint/prox...
Author: gnodet
Date: Sun Sep 26 21:05:52 2010
New Revision: 1001515
URL: http://svn.apache.org/viewvc?rev=1001515&view=rev
Log:
[ARIES-427] get rid of cglib
Removed:
incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/proxy/CgLibInterceptorWrapper.java
incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/proxy/WrapperedObject.java
incubator/aries/trunk/blueprint/blueprint-core/src/test/java/org/apache/aries/blueprint/container/AbstractServiceReferenceTest.java
incubator/aries/trunk/blueprint/blueprint-itests/src/test/java/org/apache/aries/blueprint/itests/MultiBundleWithCgLibTest.java
Modified:
incubator/aries/trunk/blueprint/blueprint-annotation-itest/pom.xml
incubator/aries/trunk/blueprint/blueprint-bundle/pom.xml
incubator/aries/trunk/blueprint/blueprint-core/pom.xml
incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/AbstractServiceReferenceRecipe.java
incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/BeanRecipe.java
incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/ReferenceRecipe.java
incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/ServiceRecipe.java
incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/proxy/AsmInterceptorWrapper.java
incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/proxy/Collaborator.java
incubator/aries/trunk/blueprint/blueprint-core/src/test/java/org/apache/aries/blueprint/proxy/ProxySubclassGeneratorTest.java
incubator/aries/trunk/blueprint/blueprint-itests/pom.xml
incubator/aries/trunk/blueprint/blueprint-itests/src/test/java/org/apache/aries/blueprint/itests/AbstractIntegrationTest.java
incubator/aries/trunk/blueprint/blueprint-itests/src/test/java/org/apache/aries/blueprint/itests/MultiBundleWithAsmTest.java
incubator/aries/trunk/blueprint/blueprint-itests/src/test/java/org/apache/aries/blueprint/itests/QuiesceBlueprintTest.java
incubator/aries/trunk/blueprint/blueprint-sample/src/main/java/org/apache/aries/blueprint/sample/Foo.java
incubator/aries/trunk/blueprint/pom.xml
Modified: incubator/aries/trunk/blueprint/blueprint-annotation-itest/pom.xml
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/blueprint/blueprint-annotation-itest/pom.xml?rev=1001515&r1=1001514&r2=1001515&view=diff
==============================================================================
--- incubator/aries/trunk/blueprint/blueprint-annotation-itest/pom.xml (original)
+++ incubator/aries/trunk/blueprint/blueprint-annotation-itest/pom.xml Sun Sep 26 21:05:52 2010
@@ -128,11 +128,6 @@
<scope>test</scope>
</dependency>
<dependency>
- <groupId>org.apache.servicemix.bundles</groupId>
- <artifactId>org.apache.servicemix.bundles.cglib</artifactId>
- <scope>test</scope>
- </dependency>
- <dependency>
<groupId>asm</groupId>
<artifactId>asm-all</artifactId>
<scope>test</scope>
Modified: incubator/aries/trunk/blueprint/blueprint-bundle/pom.xml
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/blueprint/blueprint-bundle/pom.xml?rev=1001515&r1=1001514&r2=1001515&view=diff
==============================================================================
--- incubator/aries/trunk/blueprint/blueprint-bundle/pom.xml (original)
+++ incubator/aries/trunk/blueprint/blueprint-bundle/pom.xml Sun Sep 26 21:05:52 2010
@@ -40,10 +40,9 @@
<aries.osgi.import>
!org.apache.aries.blueprint*,
!org.osgi.service.blueprint*,
+ !org.objectweb.asm*;version="[3.1,4)";resolution:=optional,
org.osgi.service.event*;resolution:=optional,
org.osgi.service.framework;resolution:=optional,
- net.sf.cglib*;resolution:=optional,
- org.objectweb.asm*;version="[3.1,4)";resolution:=optional,
org.osgi.service.cm;version="[1.2.0,2.0.0)",
org.apache.aries.blueprint.annotation.service;resolution:=optional,
org.apache.aries.quiesce.manager;version="[0.2,1.0)";resolution:=optional,
@@ -59,6 +58,8 @@
</aries.osgi.export>
<aries.osgi.private.pkg>
org.apache.aries.util.tracker,
+ org.objectweb.asm,
+ org.objectweb.asm.commons,
OSGI-INF*
</aries.osgi.private.pkg>
<aries.osgi.export.service>
@@ -90,11 +91,6 @@
<artifactId>org.apache.aries.blueprint.cm</artifactId>
</dependency>
<dependency>
- <groupId>org.apache.servicemix.bundles</groupId>
- <artifactId>org.apache.servicemix.bundles.cglib</artifactId>
- <optional>true</optional>
- </dependency>
- <dependency>
<groupId>asm</groupId>
<artifactId>asm-all</artifactId>
<optional>true</optional>
Modified: incubator/aries/trunk/blueprint/blueprint-core/pom.xml
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/blueprint/blueprint-core/pom.xml?rev=1001515&r1=1001514&r2=1001515&view=diff
==============================================================================
--- incubator/aries/trunk/blueprint/blueprint-core/pom.xml (original)
+++ incubator/aries/trunk/blueprint/blueprint-core/pom.xml Sun Sep 26 21:05:52 2010
@@ -85,11 +85,6 @@
<scope>provided</scope>
</dependency>
<dependency>
- <groupId>org.apache.servicemix.bundles</groupId>
- <artifactId>org.apache.servicemix.bundles.cglib</artifactId>
- <optional>true</optional>
- </dependency>
- <dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</dependency>
Modified: incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/AbstractServiceReferenceRecipe.java
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/AbstractServiceReferenceRecipe.java?rev=1001515&r1=1001514&r2=1001515&view=diff
==============================================================================
--- incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/AbstractServiceReferenceRecipe.java (original)
+++ incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/AbstractServiceReferenceRecipe.java Sun Sep 26 21:05:52 2010
@@ -37,9 +37,6 @@ import java.util.Set;
import java.util.concurrent.Callable;
import java.util.concurrent.atomic.AtomicBoolean;
-import net.sf.cglib.proxy.Dispatcher;
-import net.sf.cglib.proxy.Enhancer;
-
import org.apache.aries.blueprint.BlueprintConstants;
import org.apache.aries.blueprint.ExtendedBlueprintContainer;
import org.apache.aries.blueprint.ExtendedReferenceListMetadata;
@@ -47,6 +44,7 @@ import org.apache.aries.blueprint.Extend
import org.apache.aries.blueprint.di.AbstractRecipe;
import org.apache.aries.blueprint.di.CollectionRecipe;
import org.apache.aries.blueprint.di.Recipe;
+import org.apache.aries.blueprint.proxy.AsmInterceptorWrapper;
import org.apache.aries.blueprint.utils.BundleDelegatingClassLoader;
import org.apache.aries.blueprint.utils.ReflectionUtils;
import org.osgi.framework.Bundle;
@@ -327,10 +325,10 @@ public abstract class AbstractServiceRef
}
}
try {
- // Try load load a cglib class (to make sure it's actually available
- // then create the cglib factory
- getClass().getClassLoader().loadClass("net.sf.cglib.proxy.Enhancer");
- proxyFactory = new CgLibProxyFactory();
+ // Try load load a asm class (to make sure it's actually available
+ // then create the asm factory
+ getClass().getClassLoader().loadClass("org.objectweb.asm.ClassVisitor");
+ proxyFactory = new AsmProxyFactory();
} catch (Throwable t) {
if (proxyClass) {
throw new ComponentDefinitionException("Class proxying has been enabled but cglib can not be used", t);
@@ -639,38 +637,10 @@ public abstract class AbstractServiceRef
}
- public static class CgLibProxyFactory implements ProxyFactory {
+ public static class AsmProxyFactory implements ProxyFactory {
public Object createProxy(final ClassLoader classLoader, final Class[] classes, final Callable<Object> dispatcher) {
- Enhancer e = new Enhancer();
- e.setClassLoader(classLoader);
- e.setSuperclass(getTargetClass(classes));
- e.setInterfaces(getInterfaces(classes));
- e.setInterceptDuringConstruction(false);
- e.setCallback(new Dispatcher() {
- public Object loadObject() throws Exception {
- return dispatcher.call();
- }
- });
- e.setUseFactory(false);
- return e.create();
- }
-
- protected Class<?> getTargetClass(Class<?>[] interfaceNames) {
- // Only allow class proxying if specifically asked to
- Class<?> root = Object.class;
- for (Class<?> clazz : interfaceNames) {
- if (!clazz.isInterface()) {
- if (root.isAssignableFrom(clazz)) {
- root = clazz;
- } else if (clazz.isAssignableFrom(root)) {
- //nothing to do, root is correct
- } else {
- throw new ComponentDefinitionException("Classes " + root.getClass().getName() + " and " + clazz.getName() + " are not in the same hierarchy");
- }
- }
- }
- return root;
+ return AsmInterceptorWrapper.createProxyObject(classLoader, null, null, dispatcher, classes);
}
}
Modified: incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/BeanRecipe.java
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/BeanRecipe.java?rev=1001515&r1=1001514&r2=1001515&view=diff
==============================================================================
--- incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/BeanRecipe.java (original)
+++ incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/BeanRecipe.java Sun Sep 26 21:05:52 2010
@@ -32,6 +32,7 @@ import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
+import java.util.concurrent.Callable;
import org.apache.aries.blueprint.BeanProcessor;
import org.apache.aries.blueprint.ComponentDefinitionRegistry;
@@ -40,7 +41,6 @@ import org.apache.aries.blueprint.Interc
import org.apache.aries.blueprint.di.AbstractRecipe;
import org.apache.aries.blueprint.di.Recipe;
import org.apache.aries.blueprint.proxy.AsmInterceptorWrapper;
-import org.apache.aries.blueprint.proxy.CgLibInterceptorWrapper;
import org.apache.aries.blueprint.utils.ReflectionUtils;
import org.apache.aries.blueprint.utils.ReflectionUtils.PropertyDescriptor;
import org.osgi.service.blueprint.container.ComponentDefinitionException;
@@ -676,42 +676,22 @@ public class BeanRecipe extends Abstract
.getComponentDefinitionRegistry();
List<Interceptor> interceptors = reg.getInterceptors(interceptorLookupKey);
if (interceptors != null && interceptors.size() > 0) {
- boolean asmAvailable = false;
try {
// Try load load an asm class (to make sure it's actually
// available)
getClass().getClassLoader().loadClass(
"org.objectweb.asm.ClassVisitor");
LOGGER.debug("asm available for interceptors");
- asmAvailable = true;
} catch (Throwable t) {
- try {
- // Try load load a cglib class (to make sure it's actually
- // available)
- getClass().getClassLoader().loadClass(
- "net.sf.cglib.proxy.Enhancer");
- } catch (Throwable u) {
- throw new ComponentDefinitionException(
- "Interceptors have been configured but neither asm nor cglib are available",
- u);
- }
- }
- if (asmAvailable) {
- // if asm is available we can proxy the original object with the
- // AsmInterceptorWrapper
- intercepted = AsmInterceptorWrapper.createProxyObject(original
- .getClass().getClassLoader(), interceptorLookupKey, interceptors,
- original, original.getClass());
- } else {
- LOGGER.debug("cglib available for interceptors");
- // otherwise we're using cglib and need to use the interfaces
- // with the CgLibInterceptorWrapper
- intercepted = CgLibInterceptorWrapper.createProxyObject(
- original.getClass().getClassLoader(), interceptorLookupKey,
- interceptors, original, original.getClass()
- .getInterfaces());
- }
-
+ throw new ComponentDefinitionException(
+ "Interceptors have been configured but asm is not available",
+ t);
+ }
+ // if asm is available we can proxy the original object with the
+ // AsmInterceptorWrapper
+ intercepted = AsmInterceptorWrapper.createProxyObject(original
+ .getClass().getClassLoader(), interceptorLookupKey, interceptors,
+ AsmInterceptorWrapper.passThrough(original), original.getClass());
} else {
intercepted = original;
}
Modified: incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/ReferenceRecipe.java
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/ReferenceRecipe.java?rev=1001515&r1=1001514&r2=1001515&view=diff
==============================================================================
--- incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/ReferenceRecipe.java (original)
+++ incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/ReferenceRecipe.java Sun Sep 26 21:05:52 2010
@@ -18,7 +18,6 @@
*/
package org.apache.aries.blueprint.container;
-import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.ArrayList;
Modified: incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/ServiceRecipe.java
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/ServiceRecipe.java?rev=1001515&r1=1001514&r2=1001515&view=diff
==============================================================================
--- incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/ServiceRecipe.java (original)
+++ incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/ServiceRecipe.java Sun Sep 26 21:05:52 2010
@@ -22,9 +22,11 @@ import java.util.Collections;
import java.util.Dictionary;
import java.util.HashSet;
import java.util.Hashtable;
+import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
+import java.util.concurrent.Callable;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicReference;
@@ -38,7 +40,6 @@ import org.apache.aries.blueprint.di.Map
import org.apache.aries.blueprint.di.Recipe;
import org.apache.aries.blueprint.di.Repository;
import org.apache.aries.blueprint.proxy.AsmInterceptorWrapper;
-import org.apache.aries.blueprint.proxy.CgLibInterceptorWrapper;
import org.apache.aries.blueprint.utils.JavaUtils;
import org.apache.aries.blueprint.utils.ReflectionUtils;
import org.osgi.framework.Bundle;
@@ -421,9 +422,7 @@ public class ServiceRecipe extends Abstr
Object original = ServiceRecipe.this.getService(bundle,
registration);
LOGGER.debug(LOG_ENTRY, "getService", original);
- Object intercepted = null;
- boolean asmAvailable = false;
- boolean cglibAvailable = false;
+ Object intercepted;
if (interceptor == null) {
interceptor = new QuiesceInterceptor(serviceRecipe);
@@ -438,59 +437,38 @@ public class ServiceRecipe extends Abstr
getClass().getClassLoader().loadClass(
"org.objectweb.asm.ClassVisitor");
LOGGER.debug("asm available for interceptors");
- asmAvailable = true;
} catch (Throwable t) {
- try {
- // Try load load a cglib class (to make sure it's actually
- // available)
- getClass().getClassLoader().loadClass(
- "net.sf.cglib.proxy.Enhancer");
- cglibAvailable = true;
- } catch (Throwable u) {
- LOGGER
- .info("A problem occurred trying to create a proxy object. Returning the original object instead.");
- LOGGER.debug(LOG_EXIT, "getService", original);
- return original;
- }
+ LOGGER
+ .info("A problem occurred trying to create a proxy object. Returning the original object instead.");
+ LOGGER.debug(LOG_EXIT, "getService", original);
+ return original;
}
try {
- if (asmAvailable) {
- List<String> interfaces = sm.getInterfaces();
-
- // check for the case where interfaces is null or empty
- if (interfaces == null || interfaces.isEmpty()) {
- intercepted = AsmInterceptorWrapper.createProxyObject(
- original.getClass().getClassLoader(), cm,
- interceptors, original, original.getClass());
- LOGGER.debug(LOG_EXIT, "getService", intercepted);
- return intercepted;
- }
- Class[] classesToProxy = new Class[interfaces.size()];
- for (int i = 0; i < interfaces.size(); i++) {
- classesToProxy[i] = Class.forName(interfaces.get(i),
- true, original.getClass().getClassLoader());
- }
+ Set<String> interfaces = getClasses();
- // if asm is available we can proxy the original object with
- // the
- // AsmInterceptorWrapper
+ // check for the case where interfaces is null or empty
+ if (interfaces == null || interfaces.isEmpty()) {
intercepted = AsmInterceptorWrapper.createProxyObject(
original.getClass().getClassLoader(), cm,
- interceptors, original, classesToProxy);
- } else if (cglibAvailable) {
- LOGGER.debug("cglib available for interceptors");
- // otherwise we're using cglib and need to use the
- // interfaces
- // with the CgLibInterceptorWrapper
- intercepted = CgLibInterceptorWrapper.createProxyObject(
- original.getClass().getClassLoader(), cm,
- interceptors, original, original.getClass()
- .getInterfaces());
- } else {
- LOGGER.debug(LOG_EXIT, "getService", original);
- return original;
+ interceptors, AsmInterceptorWrapper.passThrough(original),
+ original.getClass());
+ LOGGER.debug(LOG_EXIT, "getService", intercepted);
+ return intercepted;
+ }
+ Class[] classesToProxy = new Class[interfaces.size()];
+ Iterator<String> it = interfaces.iterator();
+ for (int i = 0; i < interfaces.size(); i++) {
+ classesToProxy[i] = Class.forName(it.next(),
+ true, original.getClass().getClassLoader());
}
+
+ // if asm is available we can proxy the original object with
+ // the AsmInterceptorWrapper
+ intercepted = AsmInterceptorWrapper.createProxyObject(
+ original.getClass().getClassLoader(), cm,
+ interceptors, AsmInterceptorWrapper.passThrough(original),
+ classesToProxy);
} catch (Throwable u) {
LOGGER
.info("A problem occurred trying to create a proxy object. Returning the original object instead.");
Modified: incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/proxy/AsmInterceptorWrapper.java
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/proxy/AsmInterceptorWrapper.java?rev=1001515&r1=1001514&r2=1001515&view=diff
==============================================================================
--- incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/proxy/AsmInterceptorWrapper.java (original)
+++ incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/proxy/AsmInterceptorWrapper.java Sun Sep 26 21:05:52 2010
@@ -24,6 +24,7 @@ import java.lang.reflect.Proxy;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
+import java.util.concurrent.Callable;
import org.apache.aries.blueprint.Interceptor;
import org.osgi.service.blueprint.container.ComponentDefinitionException;
@@ -39,7 +40,7 @@ public class AsmInterceptorWrapper
final static String LOG_EXCEPTION = "Caught exception";
public static Object createProxyObject(ClassLoader cl, ComponentMetadata cm,
- List<Interceptor> interceptors, Object delegate, Class<?>... classesToProxy)
+ List<Interceptor> interceptors, Callable<Object> delegate, Class<?>... classesToProxy)
{
LOGGER.debug(LOG_ENTRY, "createProxyObject", new Object[] { cl, cm, interceptors, delegate,
@@ -148,13 +149,13 @@ public class AsmInterceptorWrapper
throw new ComponentDefinitionException("Unable to proxy bean for interceptors: " + e);
}
- LOGGER.debug(LOG_EXIT, "createProxyObject", proxyObject);
+// LOGGER.debug(LOG_EXIT, "createProxyObject", proxyObject);
return proxyObject;
}
private static Object createSubclassProxy(Class<?> classToProxy, ComponentMetadata cm,
- List<Interceptor> interceptors, Object delegate) throws UnableToProxyException
+ List<Interceptor> interceptors, Callable<Object> delegate) throws UnableToProxyException
{
LOGGER.debug(LOG_ENTRY, "createSubclassProxy", new Object[] { classToProxy, cm, interceptors,
delegate });
@@ -163,8 +164,8 @@ public class AsmInterceptorWrapper
Object proxyObject = ProxySubclassGenerator.newProxySubclassInstance(classToProxy,
new Collaborator(cm, interceptors, delegate));
- LOGGER.debug("Generated subclass proxy object: {}", proxyObject);
- LOGGER.debug(LOG_EXIT, "createSubclassProxy", proxyObject);
+// LOGGER.debug("Generated subclass proxy object: {}", proxyObject);
+// LOGGER.debug(LOG_EXIT, "createSubclassProxy", proxyObject);
return proxyObject;
} catch (UnableToProxyException e) {
LOGGER.debug(LOG_EXCEPTION, e);
@@ -182,7 +183,7 @@ public class AsmInterceptorWrapper
return isProxyObject;
}
- static Object unwrapObject(Object o)
+ static Object unwrapObject(Object o) throws Exception
{
LOGGER.debug(LOG_ENTRY, "unwrapObject", new Object[] { o });
InvocationHandler ih = null;
@@ -193,10 +194,23 @@ public class AsmInterceptorWrapper
ih = Proxy.getInvocationHandler(o);
}
if (ih instanceof Collaborator) {
- unwrappedObject = ((Collaborator) ih).object;
+ unwrappedObject = ((Collaborator) ih).object.call();
}
- LOGGER.debug(LOG_EXIT, "unwrapObject", unwrappedObject);
+// LOGGER.debug(LOG_EXIT, "unwrapObject", unwrappedObject);
return unwrappedObject;
}
+ public static <T> Callable<T> passThrough(T t) {
+ return new PassThrough<T>(t);
+ }
+
+ public static class PassThrough<T> implements Callable<T> {
+ private final T t;
+ public PassThrough(T t) {
+ this.t = t;
+ }
+ public T call() throws Exception {
+ return t;
+ }
+ }
}
Modified: incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/proxy/Collaborator.java
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/proxy/Collaborator.java?rev=1001515&r1=1001514&r2=1001515&view=diff
==============================================================================
--- incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/proxy/Collaborator.java (original)
+++ incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/proxy/Collaborator.java Sun Sep 26 21:05:52 2010
@@ -24,6 +24,7 @@ import java.lang.reflect.InvocationTarge
import java.lang.reflect.Method;
import java.util.List;
import java.util.Stack;
+import java.util.concurrent.Callable;
import org.apache.aries.blueprint.Interceptor;
import org.osgi.service.blueprint.reflect.ComponentMetadata;
@@ -44,14 +45,14 @@ class Collaborator implements Invocation
/** The invocation handler to call */
final InvocationHandler delegate;
- final Object object;
+ final Callable<?> object;
private transient List<Interceptor> interceptors = null;
private transient ComponentMetadata cm = null;
private transient boolean sorted = false;
Collaborator(ComponentMetadata cm, List<Interceptor> interceptors,
- final Object delegateObj) {
+ final Callable<?> delegateObj) {
this.cm = cm;
this.object = delegateObj;
this.delegate = new InvocationHandler() {
@@ -63,7 +64,7 @@ class Collaborator implements Invocation
throws Throwable {
Object result;
try {
- result = method.invoke(object, args);
+ result = method.invoke(object.call(), args);
} catch (InvocationTargetException ite) {
// We are invisible, so unwrap and throw the cause as
// though we called the method directly.
@@ -117,20 +118,10 @@ class Collaborator implements Invocation
throws Throwable {
Object toReturn = null;
- // Added method to unwrap from the collaborator.
- if (method.getName().equals("unwrapObject")
- && method.getDeclaringClass() == WrapperedObject.class) {
- toReturn = object;
- } else
// Unwrap calls for equals
if (method.getName().equals("equals")
&& method.getDeclaringClass() == Object.class) {
- // replace the wrapper with the unwrapped object, to
- // enable object identity etc to function.
- if (args[0] instanceof WrapperedObject) {
- // unwrap in the WrapperedObject case
- args[0] = ((WrapperedObject) args[0]).unwrapObject();
- } else if (AsmInterceptorWrapper.isProxyClass(args[0].getClass())) {
+ if (AsmInterceptorWrapper.isProxyClass(args[0].getClass())) {
// unwrap in the asm case
args[0] = AsmInterceptorWrapper.unwrapObject(args[0]);
}
@@ -282,4 +273,5 @@ class Collaborator implements Invocation
}
}
+
}
\ No newline at end of file
Modified: incubator/aries/trunk/blueprint/blueprint-core/src/test/java/org/apache/aries/blueprint/proxy/ProxySubclassGeneratorTest.java
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/blueprint/blueprint-core/src/test/java/org/apache/aries/blueprint/proxy/ProxySubclassGeneratorTest.java?rev=1001515&r1=1001514&r2=1001515&view=diff
==============================================================================
--- incubator/aries/trunk/blueprint/blueprint-core/src/test/java/org/apache/aries/blueprint/proxy/ProxySubclassGeneratorTest.java (original)
+++ incubator/aries/trunk/blueprint/blueprint-core/src/test/java/org/apache/aries/blueprint/proxy/ProxySubclassGeneratorTest.java Sun Sep 26 21:05:52 2010
@@ -319,11 +319,11 @@ public class ProxySubclassGeneratorTest
public void testObjectEquality() throws Exception
{
Object delegate = TEST_CLASS.newInstance();
- InvocationHandler collaborator = new Collaborator(null, null, delegate);
+ InvocationHandler collaborator = new Collaborator(null, null, AsmInterceptorWrapper.passThrough(delegate));
Object o = ProxySubclassGenerator.newProxySubclassInstance(TEST_CLASS, collaborator);
//Calling equals on the proxy with an arg of the unwrapped object should be true
assertTrue("The proxy object should be equal to its delegate",o.equals(delegate));
- InvocationHandler collaborator2 = new Collaborator(null, null, delegate);
+ InvocationHandler collaborator2 = new Collaborator(null, null, AsmInterceptorWrapper.passThrough(delegate));
Object o2 = ProxySubclassGenerator.newProxySubclassInstance(TEST_CLASS, collaborator2);
//The proxy of a delegate should equal another proxy of the same delegate
assertTrue("The proxy object should be equal to another proxy instance of the same delegate", o2.equals(o));
@@ -341,7 +341,7 @@ public class ProxySubclassGeneratorTest
@Test
public void testFinalizeNotCalled() throws Exception {
ProxyTestOverridesFinalize testObj = new ProxyTestOverridesFinalize();
- InvocationHandler ih = new Collaborator(null, null, testObj);
+ InvocationHandler ih = new Collaborator(null, null, AsmInterceptorWrapper.passThrough(testObj));
Object o = ProxySubclassGenerator.newProxySubclassInstance(ProxyTestOverridesFinalize.class, ih);
Method m = o.getClass().getDeclaredMethod("finalize");
Modified: incubator/aries/trunk/blueprint/blueprint-itests/pom.xml
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/blueprint/blueprint-itests/pom.xml?rev=1001515&r1=1001514&r2=1001515&view=diff
==============================================================================
--- incubator/aries/trunk/blueprint/blueprint-itests/pom.xml (original)
+++ incubator/aries/trunk/blueprint/blueprint-itests/pom.xml Sun Sep 26 21:05:52 2010
@@ -122,11 +122,6 @@
<scope>test</scope>
</dependency>
<dependency>
- <groupId>org.apache.servicemix.bundles</groupId>
- <artifactId>org.apache.servicemix.bundles.cglib</artifactId>
- <scope>test</scope>
- </dependency>
- <dependency>
<groupId>asm</groupId>
<artifactId>asm-all</artifactId>
<scope>test</scope>
Modified: incubator/aries/trunk/blueprint/blueprint-itests/src/test/java/org/apache/aries/blueprint/itests/AbstractIntegrationTest.java
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/blueprint/blueprint-itests/src/test/java/org/apache/aries/blueprint/itests/AbstractIntegrationTest.java?rev=1001515&r1=1001514&r2=1001515&view=diff
==============================================================================
--- incubator/aries/trunk/blueprint/blueprint-itests/src/test/java/org/apache/aries/blueprint/itests/AbstractIntegrationTest.java (original)
+++ incubator/aries/trunk/blueprint/blueprint-itests/src/test/java/org/apache/aries/blueprint/itests/AbstractIntegrationTest.java Sun Sep 26 21:05:52 2010
@@ -259,7 +259,7 @@ public abstract class AbstractIntegratio
obj = getOsgiService(bc == null ? bundleContext : bc, Foo.class, null, 5000);
assertNotNull(obj);
- assertSame(foo, obj);
+ assertEquals(obj, foo);
obj = blueprintContainer.getComponentInstance("accountOne");
assertNotNull(obj);
Modified: incubator/aries/trunk/blueprint/blueprint-itests/src/test/java/org/apache/aries/blueprint/itests/MultiBundleWithAsmTest.java
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/blueprint/blueprint-itests/src/test/java/org/apache/aries/blueprint/itests/MultiBundleWithAsmTest.java?rev=1001515&r1=1001514&r2=1001515&view=diff
==============================================================================
--- incubator/aries/trunk/blueprint/blueprint-itests/src/test/java/org/apache/aries/blueprint/itests/MultiBundleWithAsmTest.java (original)
+++ incubator/aries/trunk/blueprint/blueprint-itests/src/test/java/org/apache/aries/blueprint/itests/MultiBundleWithAsmTest.java Sun Sep 26 21:05:52 2010
@@ -50,7 +50,6 @@ public class MultiBundleWithAsmTest exte
// Bundles
mavenBundle("org.apache.aries", "org.apache.aries.util"),
- mavenBundle("org.apache.servicemix.bundles", "org.apache.servicemix.bundles.cglib"),
mavenBundle("asm","asm-all"),
mavenBundle("org.apache.aries.blueprint", "org.apache.aries.blueprint"),
mavenBundle("org.apache.aries.blueprint", "org.apache.aries.blueprint.testbundlea").noStart(),
Modified: incubator/aries/trunk/blueprint/blueprint-itests/src/test/java/org/apache/aries/blueprint/itests/QuiesceBlueprintTest.java
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/blueprint/blueprint-itests/src/test/java/org/apache/aries/blueprint/itests/QuiesceBlueprintTest.java?rev=1001515&r1=1001514&r2=1001515&view=diff
==============================================================================
--- incubator/aries/trunk/blueprint/blueprint-itests/src/test/java/org/apache/aries/blueprint/itests/QuiesceBlueprintTest.java (original)
+++ incubator/aries/trunk/blueprint/blueprint-itests/src/test/java/org/apache/aries/blueprint/itests/QuiesceBlueprintTest.java Sun Sep 26 21:05:52 2010
@@ -110,7 +110,6 @@ public class QuiesceBlueprintTest extend
// Bundles
mavenBundle("asm","asm-all"),
- mavenBundle("org.apache.servicemix.bundles", "org.apache.servicemix.bundles.cglib"),
mavenBundle("org.apache.aries.quiesce", "org.apache.aries.quiesce.api"),
mavenBundle("org.apache.aries", "org.apache.aries.util"),
Modified: incubator/aries/trunk/blueprint/blueprint-sample/src/main/java/org/apache/aries/blueprint/sample/Foo.java
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/blueprint/blueprint-sample/src/main/java/org/apache/aries/blueprint/sample/Foo.java?rev=1001515&r1=1001514&r2=1001515&view=diff
==============================================================================
--- incubator/aries/trunk/blueprint/blueprint-sample/src/main/java/org/apache/aries/blueprint/sample/Foo.java (original)
+++ incubator/aries/trunk/blueprint/blueprint-sample/src/main/java/org/apache/aries/blueprint/sample/Foo.java Sun Sep 26 21:05:52 2010
@@ -102,5 +102,6 @@ public class Foo implements Serializable
public Map<String, Object> getProps() {
return props;
}
+
}
Modified: incubator/aries/trunk/blueprint/pom.xml
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/blueprint/pom.xml?rev=1001515&r1=1001514&r2=1001515&view=diff
==============================================================================
--- incubator/aries/trunk/blueprint/pom.xml (original)
+++ incubator/aries/trunk/blueprint/pom.xml Sun Sep 26 21:05:52 2010
@@ -106,13 +106,6 @@
<artifactId>org.apache.aries.util</artifactId>
<version>0.3-incubating-SNAPSHOT</version>
</dependency>
- <!-- Use an OSGi enabled cglib version, so that BND can find the version information
- and we can use it in integration tests -->
- <dependency>
- <groupId>org.apache.servicemix.bundles</groupId>
- <artifactId>org.apache.servicemix.bundles.cglib</artifactId>
- <version>2.1_3_4</version>
- </dependency>
<!-- TODO: We need felix 2.0.0 which is not supported by pax exam yet,
so tests are only enabled on equinox for now
<dependency>