Docjar: A Java Source and Docuemnt Enginecom.*    java.*    javax.*    org.*    all    new    plug-in

Quick Search    Search Deep

Source code: com/go/trove/net/LazySocketFactory.java


1   /* ====================================================================
2    * Trove - Copyright (c) 1997-2000 Walt Disney Internet Group
3    * ====================================================================
4    * The Tea Software License, Version 1.1
5    *
6    * Copyright (c) 2000 Walt Disney Internet Group. All rights reserved.
7    *
8    * Redistribution and use in source and binary forms, with or without
9    * modification, are permitted provided that the following conditions
10   * are met:
11   *
12   * 1. Redistributions of source code must retain the above copyright
13   *    notice, this list of conditions and the following disclaimer.
14   *
15   * 2. Redistributions in binary form must reproduce the above copyright
16   *    notice, this list of conditions and the following disclaimer in
17   *    the documentation and/or other materials provided with the
18   *    distribution.
19   *
20   * 3. The end-user documentation included with the redistribution,
21   *    if any, must include the following acknowledgment:
22   *       "This product includes software developed by the
23   *        Walt Disney Internet Group (http://opensource.go.com/)."
24   *    Alternately, this acknowledgment may appear in the software itself,
25   *    if and wherever such third-party acknowledgments normally appear.
26   *
27   * 4. The names "Tea", "TeaServlet", "Kettle", "Trove" and "BeanDoc" must
28   *    not be used to endorse or promote products derived from this
29   *    software without prior written permission. For written
30   *    permission, please contact opensource@dig.com.
31   *
32   * 5. Products derived from this software may not be called "Tea",
33   *    "TeaServlet", "Kettle" or "Trove", nor may "Tea", "TeaServlet",
34   *    "Kettle", "Trove" or "BeanDoc" appear in their name, without prior
35   *    written permission of the Walt Disney Internet Group.
36   *
37   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
38   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
39   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
40   * DISCLAIMED.  IN NO EVENT SHALL THE WALT DISNEY INTERNET GROUP OR ITS
41   * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
42   * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
43   * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 
44   * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
45   * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
46   * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
47   * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
48   * ====================================================================
49   *
50   * For more information about Tea, please see http://opensource.go.com/.
51   */
52  
53  package com.go.trove.net;
54  
55  import java.net.*;
56  
57  /******************************************************************************
58   * A socket implementation that lazily establishs a connection. It only
59   * connects when actually needed. Setting options and getting I/O streams will
60   * not force a connection to be established. As soon as a read or write
61   * operation is performed, a connection is established.
62   * <p>
63   * If the first write operation requires a connection to be established, then a
64   * recycled connection is requested. The connection is tested by writing the
65   * data to it. If this fails, a new connection is requested and the operation
66   * is tried again.
67   * 
68   * @author Brian S O'Neill
69   * @version
70   * <!--$$Revision:--> 4 <!-- $-->, <!--$$JustDate:--> 00/12/05 <!-- $-->
71   */
72  public class LazySocketFactory implements SocketFactory {
73      private final SocketFactory mFactory;
74  
75      public LazySocketFactory(SocketFactory factory) {
76          mFactory = factory;
77      }
78  
79      public InetAddressAndPort getInetAddressAndPort() {
80          return mFactory.getInetAddressAndPort();
81      }
82  
83      public InetAddressAndPort getInetAddressAndPort(Object session) {
84          return mFactory.getInetAddressAndPort(session);
85      }
86      
87      public long getDefaultTimeout() {
88          return mFactory.getDefaultTimeout();
89      }
90  
91      public CheckedSocket createSocket()
92          throws ConnectException, SocketException
93      {
94          return mFactory.createSocket();
95      }
96  
97      public CheckedSocket createSocket(Object session)
98          throws ConnectException, SocketException
99      {
100         return mFactory.createSocket(session);
101     }
102 
103     public CheckedSocket createSocket(long timeout)
104         throws ConnectException, SocketException
105     {
106         return mFactory.createSocket(timeout);
107     }
108 
109     public CheckedSocket createSocket(Object session, long timeout)
110         throws ConnectException, SocketException
111     {
112         return mFactory.createSocket(session, timeout);
113     }
114 
115     /**
116      * Returns a socket that will lazily connect.
117      */    
118     public CheckedSocket getSocket() throws ConnectException, SocketException {
119         return CheckedSocket.check(new LazySocket(mFactory));
120     }
121 
122     /**
123      * Returns a socket that will lazily connect.
124      */    
125     public CheckedSocket getSocket(Object session)
126         throws ConnectException, SocketException
127     {
128         return CheckedSocket.check(new LazySocket(mFactory, session));
129     }
130 
131     /**
132      * Returns a socket that will lazily connect.
133      */    
134     public CheckedSocket getSocket(long timeout)
135         throws ConnectException, SocketException
136     {
137         return CheckedSocket.check(new LazySocket(mFactory, timeout));
138     }
139 
140     /**
141      * Returns a socket that will lazily connect.
142      */    
143     public CheckedSocket getSocket(Object session, long timeout)
144         throws ConnectException, SocketException
145     {
146         return CheckedSocket.check(new LazySocket(mFactory, session, timeout));
147     }
148 
149     public void recycleSocket(CheckedSocket cs)
150         throws SocketException, IllegalArgumentException
151     {
152         if (cs == null) {
153             return;
154         }
155 
156         // Bust through two layers of wrapping to get at actual socket.
157 
158         Socket s = cs.mSocket;
159         if (s instanceof LazySocket) {
160             cs = ((LazySocket)s).recycle();
161             if (cs == null) {
162                 return;
163             }
164         }
165 
166         mFactory.recycleSocket(cs);
167     }
168 
169     public void clear() {
170         mFactory.clear();
171     }
172 
173     public int getAvailableCount(){
174         return mFactory.getAvailableCount();
175     }
176 }