1 package com.ubermq.jms.server.journal.impl; 2 3 import com.ubermq.jms.server.journal.*; 4 import com.ubermq.jms.common.routing.impl.*; 5 import com.ubermq.kernel.*; 6 import java.io.*; 7 import java.util.*; 8 9 14 public abstract class AbstractMultipleArbiter 15 implements DurableConnectionArbiter 16 { 17 private ArrayList nodes; 18 private int n; 19 20 public AbstractMultipleArbiter() 21 { 22 nodes = new ArrayList(); 23 } 24 25 28 protected abstract int chooseNode(int nNodes); 29 30 private DatagramSink doChoice() { 31 return ((DatagramSink)nodes.get(chooseNode(nodes.size()))); 32 } 33 34 public void output(IDatagram d, IOverflowHandler h) 35 throws IOException 36 { 37 DatagramSink sink = doChoice(); 38 try 39 { 40 sink.output(d, h); 41 } 42 catch (IOException e) { 43 disconnect(sink); 46 throw e; 47 } 48 } 49 50 public boolean isOpen() 51 { 52 return (nodes.size() > 0); 53 } 54 55 public void connect(com.ubermq.kernel.DatagramSink cdn) 56 { 57 nodes.add(cdn); 58 } 59 60 public void disconnect(com.ubermq.kernel.DatagramSink cdn) 61 { 62 nodes.remove(cdn); 63 } 64 65 public void disconnectAll() 66 { 67 nodes.clear(); 68 } 69 70 static String getDisplayName(DatagramSink ds) 71 { 72 if (ds instanceof ConnectionDestNode) 73 { 74 return ((ConnectionDestNode)ds).getDisplayName(); 75 } 76 else 77 { 78 return ds.toString(); 79 } 80 } 81 82 public String toHtml() 83 { 84 StringBuffer sb = new StringBuffer (); 85 if (isOpen()) 86 { 87 Iterator iter = nodes.iterator(); 88 while (iter.hasNext()) 89 { 90 sb.append(getDisplayName((DatagramSink)iter.next())); 91 sb.append("<br>"); 92 } 93 } 94 else 95 { 96 sb.append("<i>Disconnected</i>"); 97 } 98 99 return sb.toString(); 100 } 101 } 102 | Popular Tags |