KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > jboss > aspects > remoting > Remoting


1 /*
2   * JBoss, Home of Professional Open Source
3   * Copyright 2005, JBoss Inc., and individual contributors as indicated
4   * by the @authors tag. See the copyright.txt in the distribution for a
5   * full listing of individual contributors.
6   *
7   * This is free software; you can redistribute it and/or modify it
8   * under the terms of the GNU Lesser General Public License as
9   * published by the Free Software Foundation; either version 2.1 of
10   * the License, or (at your option) any later version.
11   *
12   * This software is distributed in the hope that it will be useful,
13   * but WITHOUT ANY WARRANTY; without even the implied warranty of
14   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15   * Lesser General Public License for more details.
16   *
17   * You should have received a copy of the GNU Lesser General Public
18   * License along with this software; if not, write to the Free
19   * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
20   * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
21   */

22 package org.jboss.aspects.remoting;
23
24 import org.jboss.aop.Dispatcher;
25 import org.jboss.aop.InstanceAdvised;
26 import org.jboss.aop.InstanceAdvisor;
27 import org.jboss.aop.advice.Interceptor;
28 import org.jboss.aop.proxy.ClassProxy;
29 import org.jboss.aop.proxy.ClassProxyFactory;
30 import org.jboss.aop.util.PayloadKey;
31 import org.jboss.aspects.security.SecurityClientInterceptor;
32 import org.jboss.aspects.tx.ClientTxPropagationInterceptor;
33 import org.jboss.remoting.InvokerLocator;
34
35 import java.lang.reflect.Proxy JavaDoc;
36
37 /**
38  * @author <a HREF="mailto:bill@jboss.org">Bill Burke</a>
39  * @version $Revision: 37406 $
40  */

41
42 public class Remoting
43 {
44    public static ClassProxy createRemoteProxy(Object JavaDoc objectId, Class JavaDoc clazz, String JavaDoc uri)
45    throws Exception JavaDoc
46    {
47       return createRemoteProxy(objectId, clazz, new InvokerLocator(uri));
48    }
49
50    public static ClassProxy createRemoteProxy(Object JavaDoc objectId, Class JavaDoc clazz, InvokerLocator locator)
51    throws Exception JavaDoc
52    {
53       ClassProxy proxy = ClassProxyFactory.newInstance(clazz);
54       makeRemotable(proxy, locator, objectId);
55
56       return proxy;
57    }
58
59
60    /**
61     * Does'nt propagate security/tx
62     * @param oid
63     * @param interfaces
64     * @param uri
65     * @return
66     * @throws Exception
67     */

68    public static Object JavaDoc createPojiProxy(Object JavaDoc oid, Class JavaDoc[] interfaces, String JavaDoc uri) throws Exception JavaDoc
69    {
70       InvokerLocator locator = new InvokerLocator(uri);
71       Interceptor[] interceptors = {IsLocalInterceptor.singleton, InvokeRemoteInterceptor.singleton};
72       PojiProxy proxy = new PojiProxy(oid, locator, interceptors);
73       return Proxy.newProxyInstance(interfaces[0].getClassLoader(), interfaces, proxy);
74
75    }
76
77    public static void makeRemotable(InstanceAdvised proxy, InvokerLocator locator, Object JavaDoc objectId)
78    {
79       InstanceAdvisor advisor = proxy._getInstanceAdvisor();
80       advisor.insertInterceptor(IsLocalInterceptor.singleton);
81       advisor.insertInterceptor(SecurityClientInterceptor.singleton);
82       advisor.insertInterceptor(ClientTxPropagationInterceptor.singleton);
83       advisor.insertInterceptor(MergeMetaDataInterceptor.singleton);
84       advisor.insertInterceptor(InvokeRemoteInterceptor.singleton);
85       advisor.getMetaData().addMetaData(InvokeRemoteInterceptor.REMOTING,
86       InvokeRemoteInterceptor.INVOKER_LOCATOR,
87       locator,
88       PayloadKey.AS_IS);
89       advisor.getMetaData().addMetaData(InvokeRemoteInterceptor.REMOTING,
90       InvokeRemoteInterceptor.SUBSYSTEM,
91       "AOP",
92       PayloadKey.AS_IS);
93
94       advisor.getMetaData().addMetaData(Dispatcher.DISPATCHER,
95       Dispatcher.OID,
96       objectId,
97       PayloadKey.AS_IS);
98    }
99
100
101 }
102
Popular Tags