01: package org.jgroups.tests.perf.transports;
02:
03: import org.jgroups.Address;
04: import org.jgroups.Message;
05: import org.jgroups.stack.IpAddress;
06: import org.jgroups.tests.perf.Transport;
07:
08: import java.util.ArrayList;
09: import java.util.List;
10: import java.util.Properties;
11: import java.util.StringTokenizer;
12:
13: /**
14: * Transport with a minimal stack (usually only UDP or TCP transport layer !) and explicit notion of
15: * cluster membership (listed in properties, config.txt)
16: * @author Bela Ban Jan 22
17: * @author 2004
18: * @version $Id: JGroupsClusterTransport.java,v 1.2 2005/11/08 13:58:07 belaban Exp $
19: */
20: public class JGroupsClusterTransport extends JGroupsTransport implements
21: Transport {
22: List members;
23:
24: public JGroupsClusterTransport() {
25: super ();
26: }
27:
28: public void create(Properties properties) throws Exception {
29: super .create(properties);
30: String cluster_def = config.getProperty("cluster");
31: if (cluster_def == null)
32: throw new Exception("property 'cluster' is not defined");
33: members = parseCommaDelimitedList(cluster_def);
34: }
35:
36: public void send(Object destination, byte[] payload)
37: throws Exception {
38: Message msg = new Message((Address) destination, null, payload);
39:
40: if (destination != null)
41: channel.send(msg);
42: else {
43: // we don't know the membership from discovery, so we need to send individually
44: Address mbr;
45: for (int i = 0; i < members.size(); i++) {
46: mbr = (Address) members.get(i);
47: msg.setDest(mbr);
48: channel.send(msg);
49: }
50: }
51: }
52:
53: private List parseCommaDelimitedList(String s) throws Exception {
54: List retval = new ArrayList();
55: StringTokenizer tok;
56: String hostname, tmp;
57: int port;
58: Address addr;
59: int index;
60:
61: if (s == null)
62: return null;
63: tok = new StringTokenizer(s, ",");
64: while (tok.hasMoreTokens()) {
65: tmp = tok.nextToken();
66: index = tmp.indexOf(':');
67: if (index == -1)
68: throw new Exception(
69: "host must be in format <host:port>, was "
70: + tmp);
71: hostname = tmp.substring(0, index);
72: port = Integer.parseInt(tmp.substring(index + 1));
73: addr = new IpAddress(hostname, port);
74: retval.add(addr);
75: }
76: return retval;
77: }
78: }
|