KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > sapia > ubik > rmi > server > transport > socket > SocketRmiServer


1 package org.sapia.ubik.rmi.server.transport.socket;
2
3 import java.io.IOException JavaDoc;
4 import java.net.InetAddress JavaDoc;
5 import java.net.ServerSocket JavaDoc;
6 import java.net.SocketException JavaDoc;
7 import java.rmi.RemoteException JavaDoc;
8
9 import org.sapia.ubik.net.DefaultUbikServerSocketFactory;
10 import org.sapia.ubik.net.ServerAddress;
11 import org.sapia.ubik.net.SocketConnectionFactory;
12 import org.sapia.ubik.net.SocketServer;
13 import org.sapia.ubik.net.TCPAddress;
14 import org.sapia.ubik.net.ThreadPool;
15 import org.sapia.ubik.net.UbikServerSocketFactory;
16 import org.sapia.ubik.rmi.server.Log;
17 import org.sapia.ubik.rmi.server.Server;
18 import org.sapia.ubik.util.Localhost;
19
20
21 /**
22  * A standard socket server that listens on a given port for
23  * incoming <code>RMICommand</code> instances.
24  *
25  * @author Yanick Duchesne
26  * <dl>
27  * <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>
28  * <dt><b>License:</b><dd>Read the license.txt file of the jar or visit the
29  * <a HREF="http://www.sapia-oss.org/license.html">license page</a> at the Sapia OSS web site</dd></dt>
30  * </dl>
31  */

32 public class SocketRmiServer extends SocketServer implements Server {
33   private ServerAddress _addr;
34   public SocketRmiServer(int port, int maxThreads) throws IOException JavaDoc {
35     super(port, new SocketRmiConnectionFactory(),
36       new SocketRmiServerThreadPool("ubik.rmi.server.SocketServerThread", true,
37         maxThreads), new DefaultUbikServerSocketFactory());
38     _addr = new TCPAddress(Localhost.getLocalAddress().getHostAddress(), port);
39   }
40
41   public SocketRmiServer(String JavaDoc bindAddr, int port, int maxThreads)
42     throws IOException JavaDoc {
43     super(bindAddr, port, new SocketRmiConnectionFactory(),
44       new SocketRmiServerThreadPool("ubik.rmi.server.SocketServerThread", true,
45         maxThreads), new DefaultUbikServerSocketFactory());
46     _addr = new TCPAddress(InetAddress.getByName(bindAddr).getHostAddress(), port);
47   }
48
49   public SocketRmiServer(int port, int maxThreads,
50     UbikServerSocketFactory factory) throws IOException JavaDoc {
51     super(port, new SocketRmiConnectionFactory(),
52       new SocketRmiServerThreadPool("ubik.rmi.server.SocketServerThread", true,
53         maxThreads), factory);
54     _addr = new TCPAddress(Localhost.getLocalAddress().getHostAddress(), port);
55   }
56
57   public SocketRmiServer(String JavaDoc bindAddr, int port, int maxThreads,
58     UbikServerSocketFactory factory) throws IOException JavaDoc {
59     super(bindAddr, port, new SocketRmiConnectionFactory(),
60       new SocketRmiServerThreadPool("ubik.rmi.server.SocketServerThread", true,
61         maxThreads), factory);
62     _addr = new TCPAddress(InetAddress.getByName(bindAddr).getHostAddress(), port);
63   }
64
65   /**
66    * Creates a new SocketRmiServer instance
67    *
68    * @param tp
69    * @param server
70    * @throws IOException
71    */

72   protected SocketRmiServer(ThreadPool tp, ServerSocket JavaDoc server)
73     throws IOException JavaDoc {
74     super(new SocketRmiConnectionFactory(), tp, server);
75     _addr = new TCPAddress(server.getInetAddress().getHostAddress(), server.getLocalPort());
76   }
77
78   /**
79    * Creates a new SocketRmiServer instance
80    *
81    * @param tp
82    * @param server
83    * @throws IOException
84    */

85   protected SocketRmiServer(int maxThreads, ServerSocket JavaDoc server)
86     throws IOException JavaDoc {
87     super(new SocketRmiConnectionFactory(),
88       new SocketRmiServerThreadPool("ubik.rmi.server.SocketServerThread", true,
89         maxThreads), server);
90     _addr = new TCPAddress(server.getInetAddress().getHostAddress(), server.getLocalPort());
91   }
92
93   /**
94    * Creates a new SocketRmiServer instance.
95    *
96    * @param fac
97    * @param tp
98    * @param server
99    * @throws IOException
100    */

101   protected SocketRmiServer(SocketConnectionFactory fac, ThreadPool tp,
102     ServerSocket JavaDoc server) throws IOException JavaDoc {
103     super(fac, tp, server);
104     _addr = new TCPAddress(server.getInetAddress().getHostAddress(), server.getLocalPort());
105   }
106
107   /**
108    * @see org.sapia.ubik.rmi.server.Server#getServerAddress()()
109    */

110   public ServerAddress getServerAddress() {
111     /*if(_addr == null){
112       try {
113         _addr = new TCPAddress(Localhost.getLocalAddress().getHostAddress(),
114           getPort());
115       } catch (UnknownHostException e) {
116         throw new RemoteRuntimeException("Could not acquire local address", e);
117       }
118     }*/

119     return _addr;
120   }
121
122   /**
123    * @see org.sapia.ubik.rmi.server.Server#start()
124    */

125   public void start() throws RemoteException JavaDoc {
126     Log.debug(this.getClass(), "starting server");
127
128     Thread JavaDoc t = new Thread JavaDoc(this);
129     t.setName("ubik.rmi.server.SocketServer");
130     t.setDaemon(true);
131     t.start();
132
133     try {
134       waitStarted();
135     } catch (InterruptedException JavaDoc e) {
136       RemoteException JavaDoc re = new RemoteException JavaDoc("Thread interrupted during server startup",
137           e);
138       throw re;
139     } catch (SocketException JavaDoc e) {
140       RemoteException JavaDoc re = new RemoteException JavaDoc("Error while starting up", e);
141       throw re;
142     }
143   }
144
145   /**
146    * @see org.sapia.ubik.net.SocketServer#handleError(Throwable)
147    */

148   protected boolean handleError(Throwable JavaDoc t) {
149     Log.error(getClass(), t);
150
151     return false;
152   }
153 }
154
Popular Tags