KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > sapia > ubik > rmi > examples > replication > ReplicatedInvokerImpl


1 package org.sapia.ubik.rmi.examples.replication;
2
3 import org.sapia.ubik.net.Connection;
4 import org.sapia.ubik.net.ServerAddress;
5 import org.sapia.ubik.rmi.examples.Foo;
6 import org.sapia.ubik.rmi.replication.ReplicatedCommand;
7 import org.sapia.ubik.rmi.replication.ReplicatedInvoker;
8 import org.sapia.ubik.rmi.server.transport.Connections;
9 import org.sapia.ubik.rmi.server.transport.TransportManager;
10
11 import java.io.IOException JavaDoc;
12
13 import java.lang.reflect.Method JavaDoc;
14
15 import java.rmi.RemoteException JavaDoc;
16
17 import java.util.Set JavaDoc;
18
19
20 /**
21  * @author Yanick Duchesne
22  * <dl>
23  * <dt><b>Copyright:</b><dd>Copyright &#169; 2002-2004 <a HREF="http://www.sapia-oss.org">Sapia Open Source Software</a>. All Rights Reserved.</dd></dt>
24  * <dt><b>License:</b><dd>Read the license.txt file of the jar or visit the
25  * <a HREF="http://www.sapia-oss.org/license.html">license page</a> at the Sapia OSS web site</dd></dt>
26  * </dl>
27  */

28 public class ReplicatedInvokerImpl implements ReplicatedInvoker {
29   private transient Foo _server;
30   private transient Set JavaDoc _siblings;
31
32   public ReplicatedInvokerImpl() {
33   }
34
35   /**
36    * @see org.sapia.ubik.replication.ReplicatedInvoker#invoke(java.lang.String, java.lang.Class[], java.lang.Object[])
37    */

38   public Object JavaDoc invoke(String JavaDoc methodName, Class JavaDoc[] sig, Object JavaDoc[] params)
39     throws Throwable JavaDoc {
40     System.out.println("Invoking: " + methodName);
41
42     Method JavaDoc m = _server.getClass().getMethod(methodName, sig);
43
44     return m.invoke(_server, params);
45   }
46
47   /**
48    * @see org.sapia.ubik.replication.ReplicatedInvoker#getSiblings()
49    */

50   public Set JavaDoc getSiblings() {
51     return _siblings;
52   }
53
54   void setTargetInstance(Foo server) {
55     _server = server;
56   }
57
58   void setSiblings(Set JavaDoc siblings) {
59     _siblings = siblings;
60   }
61
62   /**
63    * @see org.sapia.ubik.replication.ReplicationContext#dispatch(org.sapia.ubik.replication.ReplicatedCommand, org.sapia.ubik.net.ServerAddress)
64    */

65   public void dispatch(ReplicatedCommand cmd, ServerAddress addr)
66     throws RemoteException JavaDoc {
67     System.out.println("Dispatching replicated command");
68
69     Connections conns = TransportManager.getConnectionsFor(addr);
70     Connection conn = conns.acquire();
71     Object JavaDoc toReturn;
72
73     try {
74       conn.send(cmd);
75       toReturn = conn.receive();
76     } catch (RemoteException JavaDoc e) {
77       conn.close();
78       throw e;
79     } catch (IOException JavaDoc e) {
80       RemoteException JavaDoc re = new RemoteException JavaDoc("Could not send replicated command",
81           e);
82       conn.close();
83       throw re;
84     } catch (ClassNotFoundException JavaDoc e) {
85       RemoteException JavaDoc re = new RemoteException JavaDoc("Could not receive response for replicated command",
86           e);
87       conn.close();
88       throw re;
89     }
90
91     conns.release(conn);
92
93     if (toReturn instanceof Throwable JavaDoc) {
94       if (toReturn instanceof RemoteException JavaDoc) {
95         throw (RemoteException JavaDoc) toReturn;
96       }
97
98       throw new RemoteException JavaDoc("Exception caught dispatching command",
99         (Throwable JavaDoc) toReturn);
100     }
101   }
102 }
103
Popular Tags