You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by bd...@apache.org on 2009/09/16 19:15:42 UTC
svn commit: r815893 -
/tuscany/branches/sca-java-1.5.1/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/CglibProxyFactory.java
Author: bdaniel
Date: Wed Sep 16 17:15:41 2009
New Revision: 815893
URL: http://svn.apache.org/viewvc?rev=815893&view=rev
Log:
TUSCANY-3278 Create a classloader with access to both cglib and application classes for use by the cglib enhancer
Modified:
tuscany/branches/sca-java-1.5.1/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/CglibProxyFactory.java
Modified: tuscany/branches/sca-java-1.5.1/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/CglibProxyFactory.java
URL: http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.5.1/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/CglibProxyFactory.java?rev=815893&r1=815892&r2=815893&view=diff
==============================================================================
--- tuscany/branches/sca-java-1.5.1/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/CglibProxyFactory.java (original)
+++ tuscany/branches/sca-java-1.5.1/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/CglibProxyFactory.java Wed Sep 16 17:15:41 2009
@@ -56,6 +56,25 @@
return createProxy(serviceReference);
}
+ private class CglibClassLoader extends ClassLoader {
+ private ClassLoader appLoader;
+ private ClassLoader bundleLoader;
+
+ @Override
+ public Class<?> loadClass(String className)
+ throws ClassNotFoundException {
+ try {
+ return appLoader.loadClass(className);
+ } catch (ClassNotFoundException ex ) {
+ return bundleLoader.loadClass(className);
+ }
+ }
+
+ CglibClassLoader(ClassLoader app, ClassLoader bundle) {
+ this.appLoader = app;
+ this.bundleLoader = bundle;
+ }
+ }
/**
* create the proxy with cglib. use the same JDKInvocationHandler as
* JDKProxyService.
@@ -63,6 +82,8 @@
public <T> T createProxy(CallableReference<T> callableReference) throws ProxyCreationException {
Enhancer enhancer = new Enhancer();
Class<T> interfaze = callableReference.getBusinessInterface();
+ ClassLoader cl = new CglibClassLoader(interfaze.getClassLoader(), getClass().getClassLoader());
+ enhancer.setClassLoader(cl);
enhancer.setSuperclass(interfaze);
enhancer.setCallback(new CglibMethodInterceptor<T>(callableReference));
Object proxy = enhancer.create();