You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aries.apache.org by no...@apache.org on 2010/09/21 01:14:41 UTC

svn commit: r999157 - in /incubator/aries/trunk/jndi/jndi-url: ./ src/main/java/org/apache/aries/jndi/services/

Author: not
Date: Mon Sep 20 23:14:41 2010
New Revision: 999157

URL: http://svn.apache.org/viewvc?rev=999157&view=rev
Log:
ARIES-415 Filter out classes from JdkProxyFactory and mark CGLib as being optionally imported.

Modified:
    incubator/aries/trunk/jndi/jndi-url/pom.xml
    incubator/aries/trunk/jndi/jndi-url/src/main/java/org/apache/aries/jndi/services/CgLibProxyFactory.java
    incubator/aries/trunk/jndi/jndi-url/src/main/java/org/apache/aries/jndi/services/JdkProxyFactory.java
    incubator/aries/trunk/jndi/jndi-url/src/main/java/org/apache/aries/jndi/services/ProxyFactory.java
    incubator/aries/trunk/jndi/jndi-url/src/main/java/org/apache/aries/jndi/services/ServiceHelper.java

Modified: incubator/aries/trunk/jndi/jndi-url/pom.xml
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/jndi/jndi-url/pom.xml?rev=999157&r1=999156&r2=999157&view=diff
==============================================================================
--- incubator/aries/trunk/jndi/jndi-url/pom.xml (original)
+++ incubator/aries/trunk/jndi/jndi-url/pom.xml Mon Sep 20 23:14:41 2010
@@ -41,6 +41,10 @@
         <aries.osgi.activator>
             org.apache.aries.jndi.url.Activator
         </aries.osgi.activator>
+        <aries.osgi.import.pkg>
+          net.sf.cglib.proxy;resolution:=optional,
+          *
+        </aries.osgi.import.pkg>
     </properties>
 
     <dependencies>

Modified: incubator/aries/trunk/jndi/jndi-url/src/main/java/org/apache/aries/jndi/services/CgLibProxyFactory.java
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/jndi/jndi-url/src/main/java/org/apache/aries/jndi/services/CgLibProxyFactory.java?rev=999157&r1=999156&r2=999157&view=diff
==============================================================================
--- incubator/aries/trunk/jndi/jndi-url/src/main/java/org/apache/aries/jndi/services/CgLibProxyFactory.java (original)
+++ incubator/aries/trunk/jndi/jndi-url/src/main/java/org/apache/aries/jndi/services/CgLibProxyFactory.java Mon Sep 20 23:14:41 2010
@@ -19,6 +19,7 @@
 package org.apache.aries.jndi.services;
 
 import java.util.HashSet;
+import java.util.List;
 import java.util.Set;
 import java.util.concurrent.Callable;
 
@@ -31,7 +32,7 @@ import org.osgi.framework.Bundle;
 public class CgLibProxyFactory implements ProxyFactory {
 
     public Object createProxy(final Bundle bundle,
-                              final Class[] classes,
+                              final List<Class<?>> classes,
                               final Callable<Object> dispatcher) {
         Enhancer e = new Enhancer();
         e.setClassLoader(new CgLibClassLoader(bundle));
@@ -47,7 +48,7 @@ public class CgLibProxyFactory implement
         return e.create();
     }
 
-    private static Class<?>[] getInterfaces(Class<?>[] classes) {
+    private static Class<?>[] getInterfaces(List<Class<?>> classes) {
         Set<Class<?>> interfaces = new HashSet<Class<?>>();
         for (Class<?> clazz : classes) {
             if (clazz.isInterface()) {
@@ -57,7 +58,7 @@ public class CgLibProxyFactory implement
         return interfaces.toArray(new Class[interfaces.size()]);
     }
 
-    protected Class<?> getTargetClass(Class<?>[] interfaceNames) {
+    protected Class<?> getTargetClass(List<Class<?>> interfaceNames) {
         // Only allow class proxying if specifically asked to
         Class<?> root = Object.class;
         for (Class<?> clazz : interfaceNames) {

Modified: incubator/aries/trunk/jndi/jndi-url/src/main/java/org/apache/aries/jndi/services/JdkProxyFactory.java
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/jndi/jndi-url/src/main/java/org/apache/aries/jndi/services/JdkProxyFactory.java?rev=999157&r1=999156&r2=999157&view=diff
==============================================================================
--- incubator/aries/trunk/jndi/jndi-url/src/main/java/org/apache/aries/jndi/services/JdkProxyFactory.java (original)
+++ incubator/aries/trunk/jndi/jndi-url/src/main/java/org/apache/aries/jndi/services/JdkProxyFactory.java Mon Sep 20 23:14:41 2010
@@ -22,6 +22,8 @@ import java.lang.reflect.InvocationHandl
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
 import java.lang.reflect.Proxy;
+import java.util.Iterator;
+import java.util.List;
 import java.util.concurrent.Callable;
 
 import org.apache.aries.util.BundleToClassLoaderAdapter;
@@ -30,9 +32,15 @@ import org.osgi.framework.Bundle;
 public class JdkProxyFactory implements ProxyFactory {
 
     public Object createProxy(final Bundle bundle,
-                              final Class[] classes,
+                              final List<Class<?>> classes,
                               final Callable<Object> dispatcher) {
-        return Proxy.newProxyInstance(new BundleToClassLoaderAdapter(bundle), classes,
+      
+        Iterator<Class<?>> it = classes.iterator();
+        while (it.hasNext()) {
+            if (it.next().isInterface()) it.remove();
+        }
+        
+        return Proxy.newProxyInstance(new BundleToClassLoaderAdapter(bundle), classes.toArray(new Class[classes.size()]),
                 new InvocationHandler() {
                     public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
                         try {

Modified: incubator/aries/trunk/jndi/jndi-url/src/main/java/org/apache/aries/jndi/services/ProxyFactory.java
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/jndi/jndi-url/src/main/java/org/apache/aries/jndi/services/ProxyFactory.java?rev=999157&r1=999156&r2=999157&view=diff
==============================================================================
--- incubator/aries/trunk/jndi/jndi-url/src/main/java/org/apache/aries/jndi/services/ProxyFactory.java (original)
+++ incubator/aries/trunk/jndi/jndi-url/src/main/java/org/apache/aries/jndi/services/ProxyFactory.java Mon Sep 20 23:14:41 2010
@@ -18,12 +18,13 @@
  */
 package org.apache.aries.jndi.services;
 
+import java.util.List;
 import java.util.concurrent.Callable;
 
 import org.osgi.framework.Bundle;
 
 public interface ProxyFactory {
 
-    Object createProxy(Bundle bundle, Class[] classes, Callable<Object> dispatcher);
+    Object createProxy(Bundle bundle, List<Class<?>> classes, Callable<Object> dispatcher);
 
 }

Modified: incubator/aries/trunk/jndi/jndi-url/src/main/java/org/apache/aries/jndi/services/ServiceHelper.java
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/jndi/jndi-url/src/main/java/org/apache/aries/jndi/services/ServiceHelper.java?rev=999157&r1=999156&r2=999157&view=diff
==============================================================================
--- incubator/aries/trunk/jndi/jndi-url/src/main/java/org/apache/aries/jndi/services/ServiceHelper.java (original)
+++ incubator/aries/trunk/jndi/jndi-url/src/main/java/org/apache/aries/jndi/services/ServiceHelper.java Mon Sep 20 23:14:41 2010
@@ -334,9 +334,8 @@ public final class ServiceHelper
     // wrapping the service provider bundle. The class is actually defined
     // on this adapter.
 
-    Class[] classArray = clazz.toArray(new Class[clazz.size()]);
     try {
-      return proxyFactory.createProxy(serviceProviderBundle, classArray, ih);
+      return proxyFactory.createProxy(serviceProviderBundle, clazz, ih);
     } catch (IllegalArgumentException e) {
       throw e;
     } catch (RuntimeException e) {
@@ -434,7 +433,7 @@ public final class ServiceHelper
       try {
         // Try load load a cglib class (to make sure it's actually available
         // then create the cglib factory
-        ServiceHelper.class.getClassLoader().loadClass("net.sf.cglib.proxy.Enhancer");
+        Class.forName("net.sf.cglib.proxy.Enhancer");
         proxyFactory = new CgLibProxyFactory();
       } catch (Throwable t) {
         proxyFactory = new JdkProxyFactory();