1 package org.sapia.ubik.rmi.server.transport.socket; 2 3 import java.io.IOException ; 4 import java.io.InputStream ; 5 import java.io.ObjectInputStream ; 6 import java.io.ObjectOutputStream ; 7 import java.io.OutputStream ; 8 import java.net.Socket ; 9 import java.rmi.RemoteException ; 10 11 import org.sapia.ubik.net.SocketConnection; 12 import org.sapia.ubik.rmi.Consts; 13 import org.sapia.ubik.rmi.server.VmId; 14 import org.sapia.ubik.rmi.server.transport.MarshalInputStream; 15 import org.sapia.ubik.rmi.server.transport.MarshalOutputStream; 16 import org.sapia.ubik.rmi.server.transport.RmiConnection; 17 18 19 30 public class SocketRmiConnection extends SocketConnection 31 implements RmiConnection { 32 37 public SocketRmiConnection(Socket sock, ClassLoader loader) { 38 super(sock, loader); 39 initResetInterval(); 40 } 41 42 46 public SocketRmiConnection(Socket sock) { 47 super(sock); 48 initResetInterval(); 49 } 50 51 54 public void send(Object o, VmId vmId, String tranportType) 55 throws IOException , RemoteException { 56 try { 57 if (_os == null) { 58 _os = newOutputStream(_sock.getOutputStream(), 59 Thread.currentThread().getContextClassLoader()); 60 } 61 62 ((MarshalOutputStream) _os).setUp(vmId, tranportType); 63 super.send(o); 64 } catch (java.net.SocketException e) { 65 throw new RemoteException ("communication with server interrupted; server probably disappeared", 66 e); 67 } 68 } 69 70 73 protected ObjectOutputStream newOutputStream(OutputStream os, 74 ClassLoader loader) throws IOException { 75 return new MarshalOutputStream(os); 76 } 77 78 81 protected ObjectInputStream newInputStream(InputStream is, ClassLoader loader) 82 throws IOException { 83 return new MarshalInputStream(is); 84 } 85 86 private void initResetInterval(){ 87 String intervalProp = System.getProperty(Consts.CONNECTION_RESET_INTERVAL); 88 if(intervalProp != null){ 89 try{ 90 long interval = Long.parseLong(intervalProp); 91 super.setResetInterval(interval); 92 }catch(NumberFormatException e){ 93 } 95 } 96 } 97 } 98 | Popular Tags |