[jboss-cvs] JBossAS SVN: r99926 - projects/interceptors/trunk/jboss-interceptor/src/main/java/org/jboss/interceptor/proxy.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Tue Jan 26 01:16:35 EST 2010


Author: marius.bogoevici
Date: 2010-01-26 01:16:35 -0500 (Tue, 26 Jan 2010)
New Revision: 99926

Modified:
   projects/interceptors/trunk/jboss-interceptor/src/main/java/org/jboss/interceptor/proxy/InterceptorProxyCreator.java
   projects/interceptors/trunk/jboss-interceptor/src/main/java/org/jboss/interceptor/proxy/InterceptorProxyCreatorImpl.java
Log:
support for JBINTER-6

Modified: projects/interceptors/trunk/jboss-interceptor/src/main/java/org/jboss/interceptor/proxy/InterceptorProxyCreator.java
===================================================================
--- projects/interceptors/trunk/jboss-interceptor/src/main/java/org/jboss/interceptor/proxy/InterceptorProxyCreator.java	2010-01-26 03:33:36 UTC (rev 99925)
+++ projects/interceptors/trunk/jboss-interceptor/src/main/java/org/jboss/interceptor/proxy/InterceptorProxyCreator.java	2010-01-26 06:16:35 UTC (rev 99926)
@@ -17,6 +17,8 @@
 
 package org.jboss.interceptor.proxy;
 
+import javassist.util.proxy.MethodHandler;
+
 /**
  * @author <a href="mailto:mariusb at redhat.com">Marius Bogoevici</a>
  */
@@ -26,4 +28,8 @@
     //<T> T createInstrumentedInstance(Class<T> proxyClass, Class<?>[] constructorTypes, Object[] constructorArguments) ;
 
     <T> T createProxyFromInstance(Object target, Class<T> proxyClass) throws IllegalAccessException, InstantiationException;
+
+   <T> T createProxyInstance(Class<T> proxyClass, MethodHandler interceptorMethodHandler);
+
+   <T> MethodHandler getMethodHandler(Object target, Class<T> proxyClass);
 }

Modified: projects/interceptors/trunk/jboss-interceptor/src/main/java/org/jboss/interceptor/proxy/InterceptorProxyCreatorImpl.java
===================================================================
--- projects/interceptors/trunk/jboss-interceptor/src/main/java/org/jboss/interceptor/proxy/InterceptorProxyCreatorImpl.java	2010-01-26 03:33:36 UTC (rev 99925)
+++ projects/interceptors/trunk/jboss-interceptor/src/main/java/org/jboss/interceptor/proxy/InterceptorProxyCreatorImpl.java	2010-01-26 06:16:35 UTC (rev 99926)
@@ -42,7 +42,7 @@
 public class InterceptorProxyCreatorImpl implements InterceptorProxyCreator
 {
 
-   private List<InterceptorRegistry<Class<?>, ?>>  interceptorRegistries;
+   private List<InterceptorRegistry<Class<?>, ?>> interceptorRegistries;
 
    private List<InterceptionHandlerFactory<?>> interceptionHandlerFactories;
 
@@ -54,39 +54,71 @@
 
    public InterceptorProxyCreatorImpl(InterceptorRegistry<Class<?>, ?> interceptorRegistries, InterceptionHandlerFactory<?> interceptionHandlerFactories)
    {
-      this.interceptorRegistries =  Collections.<InterceptorRegistry<Class<?>, ?>>singletonList(interceptorRegistries);
+      this.interceptorRegistries = Collections.<InterceptorRegistry<Class<?>, ?>>singletonList(interceptorRegistries);
       this.interceptionHandlerFactories = Collections.<InterceptionHandlerFactory<?>>singletonList(interceptionHandlerFactories);
    }
 
 
-   public <T> T createProxyFromInstance(final Object target, Class<T> proxyClass, Class<?>[] constructorTypes, Object[] constructorArguments)
+   public <T> T createProxyFromInstance(final Object target, Class<T> proxifiedClass, Class<?>[] constructorTypes, Object[] constructorArguments)
    {
-      ProxyFactory proxyFactory = new ProxyFactory();
-      if (proxyClass != null)
-         proxyFactory.setSuperclass(proxyClass);
+      MethodHandler interceptorMethodHandler = getMethodHandler(target, proxifiedClass);
+      return createProxyInstance(createProxyClassWithHandler(proxifiedClass, interceptorMethodHandler), interceptorMethodHandler);
+   }
 
-      proxyFactory.setInterfaces(new Class<?>[]{LifecycleMixin.class, TargetInstanceProxy.class});
-      InterceptorMethodHandler interceptorMethodHandler = new InterceptorMethodHandler(target, proxyClass, getModelsFor(proxyClass), interceptionHandlerFactories);
-      proxyFactory.setHandler(interceptorMethodHandler);
-
+   public <T> T createProxyInstance(Class<T> proxyClass, MethodHandler interceptorMethodHandler)
+   {
       try
       {
-         Class<T> clazz = proxyFactory.createClass();
          ReflectionFactory reflectionFactory = ReflectionFactory.getReflectionFactory();
-         Constructor<T> c = reflectionFactory.newConstructorForSerialization(clazz, Object.class.getDeclaredConstructor());
+         Constructor<T> c = reflectionFactory.newConstructorForSerialization(proxyClass, Object.class.getDeclaredConstructor());
          T proxyObject = c.newInstance();
-         ((ProxyObject)proxyObject).setHandler(interceptorMethodHandler);
+         if (interceptorMethodHandler != null)
+         {
+            ((ProxyObject) proxyObject).setHandler(interceptorMethodHandler);
+         }
          return proxyObject;
-      } catch (Exception e)
+      }
+      catch (Exception e)
       {
          throw new InterceptorException(e);
       }
    }
 
+   public static <T> Class<T> createProxyClass(Class<T> proxyClass)
+   {
+      ProxyFactory proxyFactory = new ProxyFactory();
+      if (proxyClass != null)
+      {
+         proxyFactory.setSuperclass(proxyClass);
+      }
+      proxyFactory.setInterfaces(new Class<?>[]{LifecycleMixin.class, TargetInstanceProxy.class});
+      Class<T> clazz = proxyFactory.createClass();
+      return clazz;
+   }
+
+   public static <T> Class<T> createProxyClassWithHandler(Class<T> proxyClass, MethodHandler methodHandler)
+   {
+      ProxyFactory proxyFactory = new ProxyFactory();
+      if (proxyClass != null)
+      {
+         proxyFactory.setSuperclass(proxyClass);
+      }
+      proxyFactory.setInterfaces(new Class<?>[]{LifecycleMixin.class, TargetInstanceProxy.class});
+      proxyFactory.setHandler(methodHandler);
+      Class<T> clazz = proxyFactory.createClass();
+      return clazz;
+   }
+
+
+   public <T> MethodHandler getMethodHandler(Object target, Class<T> proxyClass)
+   {
+      return new InterceptorMethodHandler(target, proxyClass, getModelsFor(proxyClass), interceptionHandlerFactories);
+   }
+
    private <T> List<InterceptionModel<Class<?>, ?>> getModelsFor(Class<T> proxyClass)
    {
-      List<InterceptionModel<Class<?>, ?>> interceptionModels = new ArrayList<InterceptionModel<Class<?>,?>>();
-      for (InterceptorRegistry interceptorRegistry: interceptorRegistries)
+      List<InterceptionModel<Class<?>, ?>> interceptionModels = new ArrayList<InterceptionModel<Class<?>, ?>>();
+      for (InterceptorRegistry interceptorRegistry : interceptorRegistries)
       {
          interceptionModels.add(interceptorRegistry.getInterceptionModel(proxyClass));
       }
@@ -119,14 +151,17 @@
    {
       ProxyFactory proxyFactory = new ProxyFactory();
       if (proxyClass != null)
+      {
          proxyFactory.setSuperclass(target.getClass());
+      }
 
       proxyFactory.setHandler(new InterceptorMethodHandler(target, proxyClass, getModelsFor(proxyClass), interceptionHandlerFactories));
 
       try
       {
          return (T) proxyFactory.create(constructorTypes, constructorArguments);
-      } catch (Exception e)
+      }
+      catch (Exception e)
       {
          throw new InterceptorException(e);
       }




More information about the jboss-cvs-commits mailing list