[jboss-cvs] JBossAS SVN: r74511 - projects/aop/trunk/aop/src/main/org/jboss/aop/proxy.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Thu Jun 12 21:56:47 EDT 2008
Author: jason.greene at jboss.com
Date: 2008-06-12 21:56:47 -0400 (Thu, 12 Jun 2008)
New Revision: 74511
Modified:
projects/aop/trunk/aop/src/main/org/jboss/aop/proxy/ClassProxyFactory.java
Log:
Add the ability to replace the implementation of writeReplace() on a proxy
Modified: projects/aop/trunk/aop/src/main/org/jboss/aop/proxy/ClassProxyFactory.java
===================================================================
--- projects/aop/trunk/aop/src/main/org/jboss/aop/proxy/ClassProxyFactory.java 2008-06-13 01:03:02 UTC (rev 74510)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/proxy/ClassProxyFactory.java 2008-06-13 01:56:47 UTC (rev 74511)
@@ -70,7 +70,12 @@
return newInstance(clazz, mixins, new ClassInstanceAdvisor());
}
- private static Class<?> getProxyClass(Class<?> clazz, ProxyMixin[] mixins)
+ public static ClassProxy newInstance(Class<?> clazz, ProxyMixin[] mixins, boolean interceptWriteReplace) throws Exception
+ {
+ return newInstance(clazz, mixins, new ClassInstanceAdvisor(), interceptWriteReplace);
+ }
+
+ private static Class<?> getProxyClass(Class<?> clazz, ProxyMixin[] mixins, boolean interceptWriteReplace)
throws Exception
{
// Don't make a proxy of a proxy !
@@ -99,7 +104,7 @@
}
if (proxyClass == null)
{
- proxyClass = generateProxy(pool, clazz, mixins);
+ proxyClass = generateProxy(pool, clazz, mixins, interceptWriteReplace);
classnameMap.put(clazz.getName(), proxyClass);
proxiesForLoader.put(clazz, new WeakReference<Class<?>>(proxyClass));
HashMap<Long, MethodPersistentReference> map = methodMap(clazz);
@@ -111,7 +116,13 @@
public static ClassProxy newInstance(Class<?> clazz, ProxyMixin[] mixins, InstanceAdvisor advisor) throws Exception
{
- Class<?> proxyClass = getProxyClass(clazz, mixins);
+ return newInstance(clazz, mixins, advisor, false);
+
+ }
+
+ public static ClassProxy newInstance(Class<?> clazz, ProxyMixin[] mixins, InstanceAdvisor advisor, boolean interceptWriteReplace) throws Exception
+ {
+ Class<?> proxyClass = getProxyClass(clazz, mixins, interceptWriteReplace);
ClassProxy proxy = (ClassProxy) proxyClass.newInstance();
proxy.setMixins(mixins);
proxy._setInstanceAdvisor(advisor);
@@ -145,7 +156,7 @@
private static int counter = 0;
- private static CtClass createProxyCtClass(ClassPool pool, ProxyMixin[] mixins, Class<?> clazz)
+ private static CtClass createProxyCtClass(ClassPool pool, ProxyMixin[] mixins, Class<?> clazz, boolean interceptWriteReplace)
throws Exception
{
String classname = "AOPClassProxy$" + counter++;
@@ -206,7 +217,8 @@
proxy.addMethod(setInstanceAdvisor);
proxy.addMethod(dynamicInvoke);
proxy.addMethod(setMixins);
- proxy.addMethod(writeReplace);
+ if (!interceptWriteReplace)
+ proxy.addMethod(writeReplace);
/*
CtMethod writeEx = template.getDeclaredMethod("writeExternal");
@@ -284,7 +296,10 @@
}
HashMap<Long, CtMethod> allMethods = JavassistMethodHashing.getMethodMap(superclass);
-
+
+ if (interceptWriteReplace)
+ allMethods.put(JavassistMethodHashing.methodHash(writeReplace), writeReplace);
+
for (Map.Entry<Long, CtMethod> entry : allMethods.entrySet())
{
CtMethod m = entry.getValue();
@@ -313,9 +328,9 @@
return proxy;
}
- private static Class<?> generateProxy(ClassPool pool, Class<?> clazz, ProxyMixin[] mixins) throws Exception
+ private static Class<?> generateProxy(ClassPool pool, Class<?> clazz, ProxyMixin[] mixins, boolean interceptWriteReplace) throws Exception
{
- CtClass proxy = createProxyCtClass(pool, mixins, clazz);
+ CtClass proxy = createProxyCtClass(pool, mixins, clazz, interceptWriteReplace);
ProtectionDomain pd = clazz.getProtectionDomain();
Class<?> proxyClass = TransformerCommon.toClass(proxy, pd);
Map<Long, MethodPersistentReference> methodmap = ClassProxyFactory.getMethodMap(proxyClass);
More information about the jboss-cvs-commits
mailing list