comparison src/org/eclipse/jetty/server/AsyncContinuation.java @ 935:aa7dc1802d29

remove ContinuationListener
author Franklin Schmidt <fschmidt@gmail.com>
date Sun, 09 Oct 2016 21:15:24 -0600
parents fe461f7cfc8e
children 237ace6e8bc2
comparison
equal deleted inserted replaced
934:fe461f7cfc8e 935:aa7dc1802d29
16 // ======================================================================== 16 // ========================================================================
17 // 17 //
18 18
19 package org.eclipse.jetty.server; 19 package org.eclipse.jetty.server;
20 20
21 import javax.servlet.AsyncListener;
22 import javax.servlet.RequestDispatcher; 21 import javax.servlet.RequestDispatcher;
23 import javax.servlet.ServletException; 22 import javax.servlet.ServletException;
24 23
25 import java.util.ArrayList; 24 import java.util.ArrayList;
26 import java.util.List; 25 import java.util.List;
29 import javax.servlet.ServletRequest; 28 import javax.servlet.ServletRequest;
30 import javax.servlet.ServletResponse; 29 import javax.servlet.ServletResponse;
31 import javax.servlet.http.HttpServletRequest; 30 import javax.servlet.http.HttpServletRequest;
32 31
33 import org.eclipse.jetty.continuation.Continuation; 32 import org.eclipse.jetty.continuation.Continuation;
34 import org.eclipse.jetty.continuation.ContinuationListener;
35 import org.eclipse.jetty.io.AsyncEndPoint; 33 import org.eclipse.jetty.io.AsyncEndPoint;
36 import org.eclipse.jetty.io.EndPoint; 34 import org.eclipse.jetty.io.EndPoint;
37 import org.eclipse.jetty.server.handler.ContextHandler; 35 import org.eclipse.jetty.server.handler.ContextHandler;
38 import org.eclipse.jetty.server.handler.ContextHandler.Context; 36 import org.eclipse.jetty.server.handler.ContextHandler.Context;
39 import org.eclipse.jetty.util.URIUtil; 37 import org.eclipse.jetty.util.URIUtil;
42 40
43 /* ------------------------------------------------------------ */ 41 /* ------------------------------------------------------------ */
44 /** Implementation of Continuation interfaces 42 /** Implementation of Continuation interfaces
45 * 43 *
46 */ 44 */
47 public class AsyncContinuation implements Continuation 45 public final class AsyncContinuation implements Continuation
48 { 46 {
49 private static final Logger LOG = LoggerFactory.getLogger(AsyncContinuation.class); 47 private static final Logger LOG = LoggerFactory.getLogger(AsyncContinuation.class);
50 48
51 private final static long DEFAULT_TIMEOUT=30000L; 49 private final static long DEFAULT_TIMEOUT=30000L;
52 50
68 private static final int __UNCOMPLETED=8; // Request is completable 66 private static final int __UNCOMPLETED=8; // Request is completable
69 private static final int __COMPLETED=9; // Request is complete 67 private static final int __COMPLETED=9; // Request is complete
70 68
71 /* ------------------------------------------------------------ */ 69 /* ------------------------------------------------------------ */
72 protected AbstractHttpConnection _connection; 70 protected AbstractHttpConnection _connection;
73 private List<AsyncListener> _asyncListeners;
74 private List<ContinuationListener> _continuationListeners;
75 71
76 /* ------------------------------------------------------------ */ 72 /* ------------------------------------------------------------ */
77 private int _state; 73 private int _state;
78 private volatile long _expireAt; 74 private volatile long _expireAt;
79 75
80 protected AsyncContinuation() 76 AsyncContinuation()
81 { 77 {
82 _state=__IDLE; 78 _state=__IDLE;
83 } 79 }
84 80
85 protected synchronized void setConnection(final AbstractHttpConnection connection) 81 protected synchronized void setConnection(final AbstractHttpConnection connection)
86 { 82 {
87 _connection=connection; 83 _connection=connection;
88 } 84 }
89
90 /* ------------------------------------------------------------ */
91 public void addListener(AsyncListener listener)
92 {
93 synchronized(this)
94 {
95 if (_asyncListeners==null)
96 _asyncListeners=new ArrayList<AsyncListener>();
97 _asyncListeners.add(listener);
98 }
99 }
100
101 /* ------------------------------------------------------------ */
102 public void addListener(AsyncListener listener,ServletRequest request, ServletResponse response)
103 {
104 synchronized(this)
105 {
106 // TODO handle the request/response ???
107 if (_asyncListeners==null)
108 _asyncListeners=new ArrayList<AsyncListener>();
109 _asyncListeners.add(listener);
110 }
111 }
112
113 /* ------------------------------------------------------------ */
114 public void addContinuationListener(ContinuationListener listener)
115 {
116 synchronized(this)
117 {
118 if (_continuationListeners==null)
119 _continuationListeners=new ArrayList<ContinuationListener>();
120 _continuationListeners.add(listener);
121 }
122 }
123
124 85
125 86
126 @Override 87 @Override
127 public String toString() 88 public String toString()
128 { 89 {
149 { 110 {
150 switch(_state) 111 switch(_state)
151 { 112 {
152 case __IDLE: 113 case __IDLE:
153 _state=__DISPATCHED; 114 _state=__DISPATCHED;
154 if (_asyncListeners!=null)
155 _asyncListeners.clear();
156 return; 115 return;
157 116
158 default: 117 default:
159 throw new IllegalStateException(this.getStatusString()); 118 throw new IllegalStateException(this.getStatusString());
160 } 119 }
180 throw new IllegalStateException(this.getStatusString()); 139 throw new IllegalStateException(this.getStatusString());
181 } 140 }
182 } 141 }
183 142
184 143
185 /* ------------------------------------------------------------ */ 144 protected synchronized void doComplete(Throwable ex)
186 /* (non-Javadoc) 145 {
187 * @see javax.servlet.ServletRequest#complete() 146 switch(_state)
188 */ 147 {
189 protected void doComplete(Throwable ex) 148 case __UNCOMPLETED:
190 { 149 _state = __COMPLETED;
191 final List<ContinuationListener> cListeners; 150 break;
192 final List<AsyncListener> aListeners; 151
193 synchronized (this) 152 default:
194 { 153 throw new IllegalStateException(this.getStatusString());
195 switch(_state) 154 }
196 { 155 }
197 case __UNCOMPLETED: 156
198 _state = __COMPLETED; 157 protected synchronized void recycle()
199 cListeners=_continuationListeners; 158 {
200 aListeners=_asyncListeners; 159 switch(_state)
201 break; 160 {
202 161 case __DISPATCHED:
203 default: 162 throw new IllegalStateException(getStatusString());
204 cListeners=null; 163 default:
205 aListeners=null; 164 _state=__IDLE;
206 throw new IllegalStateException(this.getStatusString()); 165 }
207 } 166 cancelTimeout();
208 }
209
210 if (aListeners!=null)
211 {
212 for (AsyncListener listener : aListeners)
213 {
214 try
215 {
216 if (ex!=null)
217 {
218 throw new UnsupportedOperationException();
219 }
220 else
221 listener.onComplete(null);
222 }
223 catch(Exception e)
224 {
225 LOG.warn("",e);
226 }
227 }
228 }
229 if (cListeners!=null)
230 {
231 for (ContinuationListener listener : cListeners)
232 {
233 try
234 {
235 listener.onComplete(this);
236 }
237 catch(Exception e)
238 {
239 LOG.warn("",e);
240 }
241 }
242 }
243 }
244
245 /* ------------------------------------------------------------ */
246 protected void recycle()
247 {
248 synchronized (this)
249 {
250 switch(_state)
251 {
252 case __DISPATCHED:
253 throw new IllegalStateException(getStatusString());
254 default:
255 _state=__IDLE;
256 }
257 cancelTimeout();
258 _continuationListeners=null;
259 }
260 } 167 }
261 168
262 /* ------------------------------------------------------------ */ 169 /* ------------------------------------------------------------ */
263 protected void cancelTimeout() 170 protected void cancelTimeout()
264 { 171 {