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();