[jboss-cvs] JBossAS SVN: r59505 - trunk/aspects/src/main/org/jboss/aspects/remoting.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Thu Jan 11 00:43:02 EST 2007


Author: scott.stark at jboss.org
Date: 2007-01-11 00:43:00 -0500 (Thu, 11 Jan 2007)
New Revision: 59505

Modified:
   trunk/aspects/src/main/org/jboss/aspects/remoting/Remoting.java
Log:
Generalize the method to add support for external interceptors and subsystem as well as an interface based proxy method.

Modified: trunk/aspects/src/main/org/jboss/aspects/remoting/Remoting.java
===================================================================
--- trunk/aspects/src/main/org/jboss/aspects/remoting/Remoting.java	2007-01-11 05:19:14 UTC (rev 59504)
+++ trunk/aspects/src/main/org/jboss/aspects/remoting/Remoting.java	2007-01-11 05:43:00 UTC (rev 59505)
@@ -27,28 +27,34 @@
 import org.jboss.aop.advice.Interceptor;
 import org.jboss.aop.proxy.ClassProxy;
 import org.jboss.aop.proxy.ClassProxyFactory;
+import org.jboss.aop.proxy.ProxyFactory;
 import org.jboss.aop.util.PayloadKey;
 import org.jboss.aspects.security.SecurityClientInterceptor;
 import org.jboss.aspects.tx.ClientTxPropagationInterceptor;
 import org.jboss.remoting.InvokerLocator;
+import org.jboss.util.id.GUID;
 
 import java.lang.reflect.Proxy;
+import java.util.ArrayList;
+import java.util.List;
 
 /**
+ * Remoting proxy utility methods.
+ * 
  * @author <a href="mailto:bill at jboss.org">Bill Burke</a>
+ * @author Scott.Stark at jboss.org
  * @version $Revision$
  */
-
 public class Remoting
 {
    public static ClassProxy createRemoteProxy(Object objectId, Class clazz, String uri)
-   throws Exception
+      throws Exception
    {
       return createRemoteProxy(objectId, clazz, new InvokerLocator(uri));
    }
 
    public static ClassProxy createRemoteProxy(Object objectId, Class clazz, InvokerLocator locator)
-   throws Exception
+      throws Exception
    {
       ClassProxy proxy = ClassProxyFactory.newInstance(clazz);
       makeRemotable(proxy, locator, objectId);
@@ -56,6 +62,24 @@
       return proxy;
    }
 
+   /**
+    * 
+    * @param objectId
+    * @param loader
+    * @param ifaces
+    * @param locator
+    * @return
+    * @throws Exception
+    */
+   public static org.jboss.aop.proxy.Proxy createRemoteProxy(Object objectId, ClassLoader loader,
+         Class[] ifaces, InvokerLocator locator)
+      throws Exception
+   {
+      GUID guid = new GUID();
+      org.jboss.aop.proxy.Proxy proxy = ProxyFactory.createInterfaceProxy(guid, loader, ifaces);
+      Remoting.makeRemotable(proxy, locator, objectId);
+      return proxy;
+   }
 
    /**
     * Does'nt propagate security/tx
@@ -74,27 +98,53 @@
 
    }
 
-   public static void makeRemotable(InstanceAdvised proxy, InvokerLocator locator, Object objectId)
+   /**
+    * Create a remote proxy given the advised proxy, locator and Dispatcher.OID.
+    * This uses a default interceptor stack and AOP substem handler.
+    * 
+    * @param proxy
+    * @param locator
+    * @param objectId
+    */
+   public static void makeRemotable(InstanceAdvised proxy, InvokerLocator locator,
+         Object objectId)
    {
+      ArrayList<Interceptor> interceptors = new ArrayList<Interceptor>();
+      interceptors.add(IsLocalInterceptor.singleton);
+      interceptors.add(SecurityClientInterceptor.singleton);
+      interceptors.add(ClientTxPropagationInterceptor.singleton);
+      interceptors.add(MergeMetaDataInterceptor.singleton);
+      interceptors.add(InvokeRemoteInterceptor.singleton);
+      makeRemotable(proxy, locator, objectId, interceptors, "AOP");
+   }
+   /**
+    * Create a remote proxy given the advised proxy, locator, Dispatcher.OID,
+    * interceptors and remoting subystem.
+    * 
+    * @param proxy
+    * @param locator
+    * @param objectId
+    * @param interceptors
+    * @param subsystem
+    */
+   public static void makeRemotable(InstanceAdvised proxy, InvokerLocator locator,
+         Object objectId, List<Interceptor> interceptors, String subsystem)
+   {
       InstanceAdvisor advisor = proxy._getInstanceAdvisor();
-      advisor.insertInterceptor(IsLocalInterceptor.singleton);
-      advisor.insertInterceptor(SecurityClientInterceptor.singleton);
-      advisor.insertInterceptor(ClientTxPropagationInterceptor.singleton);
-      advisor.insertInterceptor(MergeMetaDataInterceptor.singleton);
-      advisor.insertInterceptor(InvokeRemoteInterceptor.singleton);
+      for(Interceptor i : interceptors)
+         advisor.insertInterceptor(i);
       advisor.getMetaData().addMetaData(InvokeRemoteInterceptor.REMOTING,
-      InvokeRemoteInterceptor.INVOKER_LOCATOR,
-      locator,
-      PayloadKey.AS_IS);
+         InvokeRemoteInterceptor.INVOKER_LOCATOR,
+         locator,
+         PayloadKey.AS_IS);
       advisor.getMetaData().addMetaData(InvokeRemoteInterceptor.REMOTING,
-      InvokeRemoteInterceptor.SUBSYSTEM,
-      "AOP",
-      PayloadKey.AS_IS);
-
+         InvokeRemoteInterceptor.SUBSYSTEM,
+         subsystem,
+         PayloadKey.AS_IS);
       advisor.getMetaData().addMetaData(Dispatcher.DISPATCHER,
-      Dispatcher.OID,
-      objectId,
-      PayloadKey.AS_IS);
+         Dispatcher.OID,
+         objectId,
+         PayloadKey.AS_IS);
    }
 
 




More information about the jboss-cvs-commits mailing list