[jboss-cvs] JBossAS SVN: r72014 - in projects/jboss-aspects/trunk/remoting: src/main/java/org/jboss/aspects/remoting and 1 other directory.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Fri Apr 11 07:12:05 EDT 2008
Author: ALRubinger
Date: 2008-04-11 07:12:04 -0400 (Fri, 11 Apr 2008)
New Revision: 72014
Added:
projects/jboss-aspects/trunk/remoting/src/main/java/org/jboss/aspects/remoting/IsLocalInterceptor.java
projects/jboss-aspects/trunk/remoting/src/main/java/org/jboss/aspects/remoting/MergeMetaDataInterceptor.java
projects/jboss-aspects/trunk/remoting/src/main/java/org/jboss/aspects/remoting/PojiProxy.java
projects/jboss-aspects/trunk/remoting/src/main/java/org/jboss/aspects/remoting/Remoting.java
Modified:
projects/jboss-aspects/trunk/remoting/pom.xml
Log:
[JBAS-5394] Added additional support from jbossas/trunk/aspects
Modified: projects/jboss-aspects/trunk/remoting/pom.xml
===================================================================
--- projects/jboss-aspects/trunk/remoting/pom.xml 2008-04-11 10:43:52 UTC (rev 72013)
+++ projects/jboss-aspects/trunk/remoting/pom.xml 2008-04-11 11:12:04 UTC (rev 72014)
@@ -38,5 +38,22 @@
<groupId>org.jboss.aop</groupId>
<artifactId>jboss-aop</artifactId>
</dependency>
+
+ <!-- JBAS-5409
+
+ Dependencies below this line should be removed
+
+ -->
+ <dependency>
+ <groupId>org.jboss.aspects</groupId>
+ <artifactId>jboss-transaction-aspects</artifactId>
+ <version>1.0.0-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.jboss.aspects</groupId>
+ <artifactId>jboss-security-aspects</artifactId>
+ <version>1.0.0-SNAPSHOT</version>
+ </dependency>
+
</dependencies>
</project>
Copied: projects/jboss-aspects/trunk/remoting/src/main/java/org/jboss/aspects/remoting/IsLocalInterceptor.java (from rev 72003, trunk/aspects/src/main/org/jboss/aspects/remoting/IsLocalInterceptor.java)
===================================================================
--- projects/jboss-aspects/trunk/remoting/src/main/java/org/jboss/aspects/remoting/IsLocalInterceptor.java (rev 0)
+++ projects/jboss-aspects/trunk/remoting/src/main/java/org/jboss/aspects/remoting/IsLocalInterceptor.java 2008-04-11 11:12:04 UTC (rev 72014)
@@ -0,0 +1,50 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.aspects.remoting;
+
+import org.jboss.aop.Dispatcher;
+/**
+ * Checks to see if this object is local in VM
+ *
+ * @author <a href="mailto:bill at jboss.org">Bill Burke</a>
+ * @version $Revision$
+ */
+public class IsLocalInterceptor implements org.jboss.aop.advice.Interceptor, java.io.Serializable
+{
+ private static final long serialVersionUID = 8067347185395345001L;
+
+ public static final IsLocalInterceptor singleton = new IsLocalInterceptor();
+
+ public String getName() { return "IsLocalInterceptor"; }
+
+ public Object invoke(org.jboss.aop.joinpoint.Invocation invocation) throws Throwable
+ {
+ Object oid = invocation.getMetaData(Dispatcher.DISPATCHER, Dispatcher.OID);
+ if (Dispatcher.singleton.isRegistered(oid))
+ {
+ org.jboss.aop.joinpoint.InvocationResponse response = Dispatcher.singleton.invoke(invocation);
+ invocation.setResponseContextInfo(response.getContextInfo());
+ return response.getResponse();
+ }
+ return invocation.invokeNext();
+ }
+}
Copied: projects/jboss-aspects/trunk/remoting/src/main/java/org/jboss/aspects/remoting/MergeMetaDataInterceptor.java (from rev 72003, trunk/aspects/src/main/org/jboss/aspects/remoting/MergeMetaDataInterceptor.java)
===================================================================
--- projects/jboss-aspects/trunk/remoting/src/main/java/org/jboss/aspects/remoting/MergeMetaDataInterceptor.java (rev 0)
+++ projects/jboss-aspects/trunk/remoting/src/main/java/org/jboss/aspects/remoting/MergeMetaDataInterceptor.java 2008-04-11 11:12:04 UTC (rev 72014)
@@ -0,0 +1,76 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.aspects.remoting;
+
+import org.jboss.aop.joinpoint.Invocation;
+import org.jboss.aop.joinpoint.InvocationBase;
+import org.jboss.aop.metadata.MetaDataResolver;
+import org.jboss.aop.metadata.SimpleMetaData;
+/**
+ * Prepare Metadata to be marshalled across the wire.
+ * This interceptor iterates through an Invocation's
+ * metadata resolver list to pull out transportable
+ * metadata and stuff it into the invocation
+ *
+ * @author <a href="mailto:bill at jboss.org">Bill Burke</a>
+ * @version $Revision$
+ */
+public class MergeMetaDataInterceptor implements org.jboss.aop.advice.Interceptor, java.io.Serializable
+{
+ private static final long serialVersionUID = 2424149906770308705L;
+
+ public static final MergeMetaDataInterceptor singleton = new MergeMetaDataInterceptor();
+
+ public String getName() { return "MergeMetaDataInterceptor"; }
+
+ protected org.jboss.aop.metadata.SimpleMetaData merge(Invocation invocation, MetaDataResolver resolver, SimpleMetaData merged)
+ {
+ if (resolver == null) return merged;
+ org.jboss.aop.metadata.SimpleMetaData metadata = resolver.getAllMetaData(invocation);
+ if (metadata == null) return merged;
+ if (merged == null)
+ {
+ merged = new org.jboss.aop.metadata.SimpleMetaData();
+ }
+ merged.mergeIn(metadata);
+ return merged;
+ }
+
+ public Object invoke(Invocation invocation) throws Throwable
+ {
+ org.jboss.aop.metadata.SimpleMetaData merged = null;
+ merged = merge(invocation, ((InvocationBase)invocation).getInstanceResolver(), merged);
+
+ org.jboss.aop.metadata.MetaDataResolver threadMetaData = org.jboss.aop.metadata.ThreadMetaData.instance().getAllMetaData(invocation);
+ merged = merge(invocation, threadMetaData, merged);
+
+ if (merged != null)
+ {
+ // Invocation data should override all merged data
+ merged.mergeIn(invocation.getMetaData());
+
+ // replace invocation's metadata with merged
+ invocation.setMetaData(merged);
+ }
+ return invocation.invokeNext();
+ }
+}
Copied: projects/jboss-aspects/trunk/remoting/src/main/java/org/jboss/aspects/remoting/PojiProxy.java (from rev 72003, trunk/aspects/src/main/org/jboss/aspects/remoting/PojiProxy.java)
===================================================================
--- projects/jboss-aspects/trunk/remoting/src/main/java/org/jboss/aspects/remoting/PojiProxy.java (rev 0)
+++ projects/jboss-aspects/trunk/remoting/src/main/java/org/jboss/aspects/remoting/PojiProxy.java 2008-04-11 11:12:04 UTC (rev 72014)
@@ -0,0 +1,63 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.aspects.remoting;
+
+import java.lang.reflect.InvocationHandler;
+import java.lang.reflect.Method;
+import org.jboss.aop.Dispatcher;
+import org.jboss.aop.advice.Interceptor;
+import org.jboss.aop.joinpoint.MethodInvocation;
+import org.jboss.aop.util.MethodHashing;
+import org.jboss.aop.util.PayloadKey;
+import org.jboss.remoting.InvokerLocator;
+
+/**
+ * comment
+ *
+ * @author <a href="mailto:bill at jboss.org">Bill Burke</a>
+ */
+public class PojiProxy implements java.io.Serializable, InvocationHandler
+{
+ private static final long serialVersionUID = 8054816523858555978L;
+
+ private Object oid;
+ private InvokerLocator uri;
+ private Interceptor[] interceptors;
+
+ public PojiProxy(Object oid, InvokerLocator uri, Interceptor[] interceptors)
+ {
+ this.oid = oid;
+ this.uri = uri;
+ this.interceptors = interceptors;
+ }
+
+ public Object invoke(Object proxy, Method method, Object[] args) throws Throwable
+ {
+ long hash = MethodHashing.calculateHash(method);
+ MethodInvocation sri = new MethodInvocation(interceptors, hash, method, method, null);
+ sri.setArguments(args);
+ sri.getMetaData().addMetaData(Dispatcher.DISPATCHER, Dispatcher.OID, oid, PayloadKey.AS_IS);
+ sri.getMetaData().addMetaData(InvokeRemoteInterceptor.REMOTING, InvokeRemoteInterceptor.INVOKER_LOCATOR, uri, PayloadKey.AS_IS);
+ sri.getMetaData().addMetaData(InvokeRemoteInterceptor.REMOTING, InvokeRemoteInterceptor.SUBSYSTEM, "AOP", PayloadKey.AS_IS);
+ return sri.invokeNext();
+ }
+}
Copied: projects/jboss-aspects/trunk/remoting/src/main/java/org/jboss/aspects/remoting/Remoting.java (from rev 72003, trunk/aspects/src/main/org/jboss/aspects/remoting/Remoting.java)
===================================================================
--- projects/jboss-aspects/trunk/remoting/src/main/java/org/jboss/aspects/remoting/Remoting.java (rev 0)
+++ projects/jboss-aspects/trunk/remoting/src/main/java/org/jboss/aspects/remoting/Remoting.java 2008-04-11 11:12:04 UTC (rev 72014)
@@ -0,0 +1,191 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.aspects.remoting;
+
+import org.jboss.aop.Dispatcher;
+import org.jboss.aop.InstanceAdvised;
+import org.jboss.aop.InstanceAdvisor;
+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
+ {
+ return createRemoteProxy(objectId, clazz, new InvokerLocator(uri));
+ }
+
+ public static ClassProxy createRemoteProxy(Object objectId, Class clazz, InvokerLocator locator)
+ throws Exception
+ {
+ ClassProxy proxy = ClassProxyFactory.newInstance(clazz);
+ makeRemotable(proxy, locator, objectId);
+
+ return proxy;
+ }
+
+ /**
+ * Create a remote proxy for the given ifaces, Dispatch.OID, locator.
+ * @param objectId
+ * @param loader
+ * @param ifaces
+ * @param locator
+ * @return the remote enabled proxy
+ * @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;
+ }
+ /**
+ * Create a remote proxy for the given ifaces, Dispatch.OID, locator, interceptors
+ * and subsystem.
+ *
+ * @param objectId
+ * @param loader
+ * @param ifaces
+ * @param locator
+ * @param interceptors
+ * @param subsystem
+ * @return the remote enabled proxy
+ * @throws Exception
+ */
+ public static org.jboss.aop.proxy.Proxy createRemoteProxy(Object objectId, ClassLoader loader,
+ Class[] ifaces, InvokerLocator locator,
+ List<Interceptor> interceptors, String subsystem)
+ throws Exception
+ {
+ GUID guid = new GUID();
+ org.jboss.aop.proxy.Proxy proxy = ProxyFactory.createInterfaceProxy(guid, loader, ifaces);
+ Remoting.makeRemotable(proxy, locator, objectId, interceptors, subsystem);
+ return proxy;
+ }
+
+ /**
+ * Does'nt propagate security/tx
+ * @param oid
+ * @param interfaces
+ * @param uri
+ * @return
+ * @throws Exception
+ */
+ public static Object createPojiProxy(Object oid, Class[] interfaces, String uri) throws Exception
+ {
+ InvokerLocator locator = new InvokerLocator(uri);
+ Interceptor[] interceptors = {IsLocalInterceptor.singleton, InvokeRemoteInterceptor.singleton};
+ PojiProxy proxy = new PojiProxy(oid, locator, interceptors);
+ return Proxy.newProxyInstance(interfaces[0].getClassLoader(), interfaces, proxy);
+
+ }
+
+ /**
+ *
+ * @param oid
+ * @param interfaces
+ * @param uri
+ * @return
+ * @throws Exception
+ */
+ public static Object createPojiProxy(Object oid, Class[] interfaces, String uri, Interceptor[] interceptors) throws Exception
+ {
+ InvokerLocator locator = new InvokerLocator(uri);
+ PojiProxy proxy = new PojiProxy(oid, locator, interceptors);
+ return Proxy.newProxyInstance(interfaces[0].getClassLoader(), interfaces, proxy);
+
+ }
+
+
+ /**
+ * 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();
+ for(Interceptor i : interceptors)
+ advisor.insertInterceptor(i);
+ advisor.getMetaData().addMetaData(InvokeRemoteInterceptor.REMOTING,
+ InvokeRemoteInterceptor.INVOKER_LOCATOR,
+ locator,
+ PayloadKey.AS_IS);
+ advisor.getMetaData().addMetaData(InvokeRemoteInterceptor.REMOTING,
+ InvokeRemoteInterceptor.SUBSYSTEM,
+ subsystem,
+ PayloadKey.AS_IS);
+ advisor.getMetaData().addMetaData(Dispatcher.DISPATCHER,
+ Dispatcher.OID,
+ objectId,
+ PayloadKey.AS_IS);
+ }
+
+
+}
More information about the jboss-cvs-commits
mailing list