1 package org.sapia.ubik.rmi.server.transport; 2 3 import java.rmi.RemoteException ; 4 import java.util.Collections ; 5 import java.util.HashMap ; 6 import java.util.Iterator ; 7 import java.util.Map ; 8 9 import org.sapia.ubik.net.ServerAddress; 10 import org.sapia.ubik.rmi.Consts; 11 import org.sapia.ubik.rmi.server.transport.nio.tcp.NioTcpTransportProvider; 12 import org.sapia.ubik.rmi.server.transport.socket.MultiplexSocketTransportProvider; 13 import org.sapia.ubik.rmi.server.transport.socket.SocketTransportProvider; 14 15 16 29 public class TransportManager { 30 private static Map _providers = Collections.synchronizedMap(new HashMap ()); 31 32 static { 33 TransportProvider provider = new MultiplexSocketTransportProvider(); 34 registerProvider(provider); 35 provider = new NioTcpTransportProvider(); 36 registerProvider(provider); 37 38 39 String [] propNames = (String []) System.getProperties().keySet().toArray(new String [System.getProperties() 40 .size()]); 41 String propName; 42 String className; 43 44 for (int i = 0; i < propNames.length; i++) { 45 propName = (String ) propNames[i]; 46 47 if (propName.startsWith(Consts.TRANSPORT_PROVIDER)) { 48 className = System.getProperty(propName); 49 50 if (className == null) { 51 throw new IllegalStateException ( 52 "No class name defined for transport provider: " + propName); 53 } 54 55 try { 56 provider = (TransportProvider) Class.forName(className).newInstance(); 57 registerProvider(provider); 58 } catch (Throwable e) { 59 e.printStackTrace(); 60 throw new IllegalStateException ( 61 "Could not instantiate transport provider: " + className); 62 } 63 } 64 } 65 } 66 67 76 public static void registerProvider(TransportProvider provider) { 77 if (_providers.containsKey(provider.getTransportType())) { 78 throw new IllegalArgumentException ( 79 "Transport provider already registered for: " + 80 provider.getTransportType()); 81 } 82 83 _providers.put(provider.getTransportType(), provider); 84 } 85 86 94 public static TransportProvider getProviderFor(String type) { 95 TransportProvider provider = (TransportProvider) _providers.get(type); 96 97 if (provider == null) { 98 throw new IllegalArgumentException ("No transport provider for: " + type); 99 } 100 101 return provider; 102 } 103 104 112 public static Connections getConnectionsFor(ServerAddress address) 113 throws RemoteException { 114 return getProviderFor(address.getTransportType()).getPoolFor(address); 115 } 116 117 122 public static SocketTransportProvider getDefaultProvider() { 123 return (SocketTransportProvider) _providers.get(SocketTransportProvider.TRANSPORT_TYPE); 124 } 125 126 public static void shutdown() { 127 TransportProvider provider; 128 Iterator providers; 129 130 synchronized (_providers) { 131 providers = _providers.values().iterator(); 132 133 while (providers.hasNext()) { 134 provider = (TransportProvider) providers.next(); 135 provider.shutdown(); 136 } 137 } 138 } 139 } 140 | Popular Tags |