KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > sapia > ubik > rmi > server > EventChannelSingleton


1 package org.sapia.ubik.rmi.server;
2
3 import java.io.IOException JavaDoc;
4 import java.util.HashMap JavaDoc;
5 import java.util.Iterator JavaDoc;
6 import java.util.Map JavaDoc;
7
8 import org.sapia.ubik.mcast.EventChannel;
9 import org.sapia.ubik.rmi.Consts;
10 import org.sapia.ubik.rmi.RemoteRuntimeException;
11
12
13 /**
14  * Keeps event channels on a per-domain basis.
15  *
16  * @author Yanick Duchesne
17  *
18  * <dl>
19  * <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>
20  * <dt><b>License:</b><dd>Read the license.txt file of the jar or visit the
21  * <a HREF="http://www.sapia-oss.org/license.html">license page</a> at the Sapia OSS web site</dd></dt>
22  * </dl>
23  */

24 class EventChannelSingleton {
25   private static Map JavaDoc _channels = new HashMap JavaDoc();
26   private static String JavaDoc _mcastAddress = Consts.DEFAULT_MCAST_ADDR;
27   private static int _mcastPort = Consts.DEFAULT_MCAST_PORT;
28
29   static {
30     try {
31       if (System.getProperty(org.sapia.ubik.rmi.Consts.MCAST_PORT_KEY) != null) {
32         _mcastPort = Integer.parseInt(System.getProperty(
33               org.sapia.ubik.rmi.Consts.MCAST_PORT_KEY));
34       }
35     } catch (NumberFormatException JavaDoc e) {
36       // noop: using default
37
}
38
39     if (System.getProperty(org.sapia.ubik.rmi.Consts.MCAST_ADDR_KEY) != null) {
40       _mcastAddress = System.getProperty(org.sapia.ubik.rmi.Consts.MCAST_ADDR_KEY);
41     }
42   }
43
44   /**
45    * Returns an event channel corresponding to the given domain.
46    *
47    * @param domain a domain name.
48    * @return an <code>EventChannel</code>.
49    * @throws RemoteRuntimeException if a channel could not be returned/created.
50    */

51   static synchronized EventChannel getEventChannelFor(String JavaDoc domain)
52     throws RemoteRuntimeException {
53     return getEventChannelFor(domain, _mcastAddress, _mcastPort);
54   }
55
56   /**
57    * Returns an event channel corresponding to the given domain.
58    *
59    * @param domain a domain name.
60    * @return an <code>EventChannel</code>.
61    * @throws RemoteRuntimeException if a channel could not be returned/created.
62    */

63   static synchronized EventChannel getEventChannelFor(String JavaDoc domain,
64     String JavaDoc mcastAddress, int mcastPort) throws RemoteRuntimeException {
65     EventChannel channel;
66
67     String JavaDoc key = domain + ":" + mcastAddress + ":" + mcastPort;
68
69     if ((channel = (EventChannel) _channels.get(key)) == null) {
70       try {
71         channel = new EventChannel(domain, mcastAddress, mcastPort);
72         channel.start();
73       } catch (IOException JavaDoc e) {
74         throw new RemoteRuntimeException(
75           "Could not create event channel for domain: " + domain, e);
76       }
77
78       _channels.put(key, channel);
79     }
80
81     return channel;
82   }
83
84   /**
85    * Shuts down all event channels that this instance keeps.
86    */

87   static synchronized void shutdown() {
88     EventChannel channel;
89
90     for (Iterator JavaDoc iter = _channels.values().iterator(); iter.hasNext();) {
91       channel = (EventChannel) iter.next();
92       channel.close();
93     }
94
95     _channels.clear();
96   }
97 }
98
Popular Tags