KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > sapia > ubik > rmi > naming > remote > archie > UbikSyncNode


1 package org.sapia.ubik.rmi.naming.remote.archie;
2
3 import org.sapia.archie.Entry;
4 import org.sapia.archie.NamePart;
5 import org.sapia.archie.ProcessingException;
6 import org.sapia.archie.impl.AttributeNode;
7 import org.sapia.archie.impl.Offer;
8 import org.sapia.archie.sync.SynchronizedNode;
9
10 import org.sapia.ubik.rmi.naming.remote.StubTweaker;
11 import org.sapia.ubik.rmi.server.HealthCheck;
12 import org.sapia.ubik.rmi.server.Stub;
13
14 import java.lang.reflect.InvocationHandler JavaDoc;
15 import java.lang.reflect.Proxy JavaDoc;
16
17 import java.rmi.Remote JavaDoc;
18
19 import java.util.ArrayList JavaDoc;
20 import java.util.HashMap JavaDoc;
21 import java.util.Iterator JavaDoc;
22 import java.util.List JavaDoc;
23
24
25 /**
26  * @author Yanick Duchesne
27  * <dl>
28  * <dt><b>Copyright:</b><dd>Copyright &#169; 2002-2003 <a HREF="http://www.sapia-oss.org">Sapia Open Source Software</a>. All Rights Reserved.</dd></dt>
29  * <dt><b>License:</b><dd>Read the license.txt file of the jar or visit the
30  * <a HREF="http://www.sapia-oss.org/license.html">license page</a> at the Sapia OSS web site</dd></dt>
31  * </dl>
32  */

33 public class UbikSyncNode extends SynchronizedNode implements java.rmi.Remote JavaDoc {
34   public UbikSyncNode(UbikNodeFactory fac) throws ProcessingException {
35     super(new UbikReliableNode(fac));
36   }
37
38   static final class UbikReliableNode extends AttributeNode implements Remote JavaDoc {
39     public UbikReliableNode(UbikNodeFactory fac) throws ProcessingException {
40       super(new HashMap JavaDoc(), new HashMap JavaDoc(), fac);
41     }
42
43     /**
44      * @see org.sapia.archie.impl.MultiValueNode#onWrite(org.sapia.archie.NamePart, java.lang.Object)
45      */

46     protected Object JavaDoc onWrite(NamePart name, Object JavaDoc obj) {
47       Iterator JavaDoc itr = getEntries();
48       List JavaDoc entries = new ArrayList JavaDoc();
49       Entry entry;
50
51       while (itr.hasNext()) {
52         entry = (Entry) itr.next();
53         entries.add(entry.getValue());
54       }
55       
56       return StubTweaker.tweak(entries.iterator(), obj);
57     }
58
59     /**
60      * @see org.sapia.archie.impl.AttributeNode#onSelectOffer(java.util.List)
61      */

62     protected Offer onSelectOffer(List JavaDoc offers) {
63       return super.onSelectOffer(offers);
64     }
65
66     /**
67      * @see org.sapia.archie.impl.AttributeNode#isValid(org.sapia.archie.impl.Offer)
68      */

69     protected boolean isValid(Offer offer) {
70       Object JavaDoc stub = offer.getObject();
71
72       if (stub instanceof Stub && Proxy.isProxyClass(stub.getClass())) {
73         InvocationHandler JavaDoc handler = Proxy.getInvocationHandler(stub);
74
75         if (handler instanceof HealthCheck) {
76           try {
77             return ((HealthCheck) handler).isValid();
78           } catch (Exception JavaDoc e) {
79             return false;
80           }
81         }
82
83         return true;
84       } else if (stub instanceof HealthCheck) {
85         try {
86           boolean valid = ((HealthCheck) stub).isValid();
87
88           return valid;
89         } catch (Exception JavaDoc e) {
90           return false;
91         }
92       } else {
93         return true;
94       }
95     }
96   }
97 }
98
Popular Tags