1 17 18 package org.apache.geronimo.clustering; 19 20 import java.util.Collections ; 21 import java.util.Iterator ; 22 import java.util.List ; 23 import java.util.Vector ; 24 25 import org.apache.commons.logging.Log; 26 import org.apache.commons.logging.LogFactory; 27 28 35 public class 36 LocalCluster 37 extends Cluster 38 { 39 protected Log _log=LogFactory.getLog(LocalCluster.class); 40 protected List _members=new Vector (); 41 42 public List getMembers(){synchronized (_members){return Collections.unmodifiableList(_members);}} 43 44 46 52 protected void 53 notifyMembershipChanged(List members) 54 { 55 for (Iterator i=members.iterator(); i.hasNext();) 56 try 57 { 58 Object member=i.next(); 59 if (member instanceof MetaDataListener) 60 ((MetaDataListener)member).setMetaData(members); 61 } 62 catch (Exception e) 63 { 64 _log.warn("problem notifying membership changed", e); 65 } 66 } 67 68 public void 69 join(Object member) 70 { 71 synchronized (_members) 73 { 74 _members.add(member); 75 notifyMembershipChanged(_members); 76 } 77 } 78 79 public void 80 leave(Object member) 81 { 82 synchronized (_members) 83 { 84 _members.remove(member); 85 notifyMembershipChanged(_members); 86 } 87 88 } 90 91 93 99 public synchronized Data 100 getData() 101 { 102 105 synchronized (_members) 106 { 107 if (_members.isEmpty()) 108 return null; 109 else 110 { 111 for (Iterator i=_members.iterator(); i.hasNext();) 112 { 113 Object member=i.next(); 114 if (member instanceof DataListener) 117 return ((DataListener)member).getData(); 118 } 119 return null; 120 } 121 } 122 } 123 124 131 public void 132 notifyDataDelta(DataDeltaListener l, DataDelta delta) 133 { 134 synchronized (_members) 135 { 136 for (Iterator i=_members.iterator(); i.hasNext();) 137 { 138 Object member=i.next(); 139 if (member != l && member instanceof DataDeltaListener) 140 ((DataDeltaListener)member).applyDataDelta(delta); 141 } 142 } 143 } 144 153 } 154 | Popular Tags |