1 package org.sapia.ubik.rmi.server.transport.socket; 2 3 import java.io.IOException ; 4 import java.net.InetAddress ; 5 import java.net.ServerSocket ; 6 import java.net.SocketException ; 7 import java.rmi.RemoteException ; 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 32 public class SocketRmiServer extends SocketServer implements Server { 33 private ServerAddress _addr; 34 public SocketRmiServer(int port, int maxThreads) throws IOException { 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 bindAddr, int port, int maxThreads) 42 throws IOException { 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 { 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 bindAddr, int port, int maxThreads, 58 UbikServerSocketFactory factory) throws IOException { 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 72 protected SocketRmiServer(ThreadPool tp, ServerSocket server) 73 throws IOException { 74 super(new SocketRmiConnectionFactory(), tp, server); 75 _addr = new TCPAddress(server.getInetAddress().getHostAddress(), server.getLocalPort()); 76 } 77 78 85 protected SocketRmiServer(int maxThreads, ServerSocket server) 86 throws IOException { 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 101 protected SocketRmiServer(SocketConnectionFactory fac, ThreadPool tp, 102 ServerSocket server) throws IOException { 103 super(fac, tp, server); 104 _addr = new TCPAddress(server.getInetAddress().getHostAddress(), server.getLocalPort()); 105 } 106 107 110 public ServerAddress getServerAddress() { 111 119 return _addr; 120 } 121 122 125 public void start() throws RemoteException { 126 Log.debug(this.getClass(), "starting server"); 127 128 Thread t = new Thread (this); 129 t.setName("ubik.rmi.server.SocketServer"); 130 t.setDaemon(true); 131 t.start(); 132 133 try { 134 waitStarted(); 135 } catch (InterruptedException e) { 136 RemoteException re = new RemoteException ("Thread interrupted during server startup", 137 e); 138 throw re; 139 } catch (SocketException e) { 140 RemoteException re = new RemoteException ("Error while starting up", e); 141 throw re; 142 } 143 } 144 145 148 protected boolean handleError(Throwable t) { 149 Log.error(getClass(), t); 150 151 return false; 152 } 153 } 154 | Popular Tags |