KickJava   Java API By Example, From Geeks To Geeks.

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


1 package org.sapia.ubik.rmi.server.transport.socket;
2
3 import java.io.IOException JavaDoc;
4 import java.io.InputStream JavaDoc;
5 import java.io.ObjectInputStream JavaDoc;
6 import java.io.ObjectOutputStream JavaDoc;
7 import java.io.OutputStream JavaDoc;
8 import java.net.Socket JavaDoc;
9 import java.rmi.RemoteException JavaDoc;
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 /**
20  * A connection over a <code>Socket</code> - the connection uses the
21  * <code>MarshalOutputStream</code> class to serialize outgoing objects.
22  *
23  * @author Yanick Duchesne
24  * <dl>
25  * <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>
26  * <dt><b>License:</b><dd>Read the license.txt file of the jar or visit the
27  * <a HREF="http://www.sapia-oss.org/license.html">license page</a> at the Sapia OSS web site</dd></dt>
28  * </dl>
29  */

30 public class SocketRmiConnection extends SocketConnection
31   implements RmiConnection {
32   /**
33    * Constructor for RMIConnection.
34    * @param sock
35    * @param loader
36    */

37   public SocketRmiConnection(Socket JavaDoc sock, ClassLoader JavaDoc loader) {
38     super(sock, loader);
39     initResetInterval();
40   }
41
42   /**
43    * Constructor for RMIConnection.
44    * @param sock
45    */

46   public SocketRmiConnection(Socket JavaDoc sock) {
47     super(sock);
48     initResetInterval();
49   }
50
51   /**
52    * @see org.sapia.ubik.rmi.server.transport.RmiConnection#send(Object, VmId, String)
53    */

54   public void send(Object JavaDoc o, VmId vmId, String JavaDoc tranportType)
55     throws IOException JavaDoc, RemoteException JavaDoc {
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 JavaDoc e) {
65       throw new RemoteException JavaDoc("communication with server interrupted; server probably disappeared",
66         e);
67     }
68   }
69
70   /**
71    * @see org.sapia.ubik.net.SocketConnection#newOutputStream(OutputStream, ClassLoader)
72    */

73   protected ObjectOutputStream JavaDoc newOutputStream(OutputStream JavaDoc os,
74     ClassLoader JavaDoc loader) throws IOException JavaDoc {
75     return new MarshalOutputStream(os);
76   }
77
78   /**
79    * @see org.sapia.ubik.net.SocketConnection#newInputStream(InputStream, ClassLoader)
80    */

81   protected ObjectInputStream JavaDoc newInputStream(InputStream JavaDoc is, ClassLoader JavaDoc loader)
82     throws IOException JavaDoc {
83     return new MarshalInputStream(is);
84   }
85   
86   private void initResetInterval(){
87     String JavaDoc 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 JavaDoc e){
93         //noop
94
}
95     }
96   }
97 }
98
Popular Tags