[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