Author: remm Date: Sat Sep 9 14:18:08 2006 New Revision: 441860 URL: http://svn.apache.org/viewvc?view=rev&rev=441860 Log: - Add the new CometEvent interface, as discussed. - Merge my comments from CometProcessor.
Added: tomcat/tc6.0.x/trunk/java/org/apache/catalina/CometEvent.java (with props) Added: tomcat/tc6.0.x/trunk/java/org/apache/catalina/CometEvent.java URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/catalina/CometEvent.java?view=auto&rev=441860 ============================================================================== --- tomcat/tc6.0.x/trunk/java/org/apache/catalina/CometEvent.java (added) +++ tomcat/tc6.0.x/trunk/java/org/apache/catalina/CometEvent.java Sat Sep 9 14:18:08 2006 @@ -0,0 +1,131 @@ +/* + * Copyright 2006 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +package org.apache.catalina; + +import java.io.IOException; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +/** + * The CometEvent interface. + * + * @author Filip Hanik + */ +public interface CometEvent { + + /** + * Enumeration describing the major events that the container can invoke + * the CometProcessors event() method with + * BEGIN - will be called by the main service method of the servlet at the beginning + * of the processing of the connection. It can be used to initialize any relevant + * fields using the request and response objects. Between the end of the processing + * of this event, and the beginning of the processing of the end or error events, + * it is possible to use the response object to write data on the open connection. + * Note that the response object and depedent OutputStream and Writer are still + * not synchronized, so when they are accessed by multiple threads, + * synchronization is mandatory. + * READ - This indicates that input data is available, and that one read can be made + * without blocking. The available and ready methods of the InputStream or + * Reader may be used to determine if there is a risk of blocking: the servlet + * should read while data is reported available, and can make one additional read + * without blocking. When encountering a read error or an EOF, the servlet MUST + * report it by either returning false or throwing an exception such as an + * IOException. This will cause the error event to be invoked, and the connection + * will be closed. It is not allowed to attempt reading data from the request object + * outside of the execution of this method. + * END - End may be called to end the processing of the request. Fields that have + * been initialized in the begin method should be reset. After this event has + * been processed, the request and response objects, as well as all their dependent + * objects will be recycled and used to process other requests. + * ERROR - Error will be called by the container in the case where an IO exception + * or a similar unrecoverable error occurs on the connection. Fields that have + * been initialized in the begin method should be reset. After this event has + * been processed, the request and response objects, as well as all their dependent + * objects will be recycled and used to process other requests. + */ + enum EventType {BEGIN, READ, END, ERROR} + + + /** + * Event details + * TIMEOUT - the connection timed out (sub type of ERROR) + * CLIENT_DISCONNECT - the client connection was closed (sub type of ERROR) + * IOEXCEPTION - an IO exception occurred, such as invalid content, for example, an invalid chunk block (sub type of ERROR) + * WEBAPP_RELOAD - the webapplication is being reloaded (sub type of END) + * SERVER_SHUTDOWN - the server is shutting down (sub type of END) + * SESSION_END - the servlet ended the session (sub type of END) + */ + enum EventSubType { TIMEOUT, CLIENT_DISCONNECT, IOEXCEPTION, WEBAPP_RELOAD, SERVER_SHUTDOWN, SESSION_END } + + + /** + * Returns the HttpServletRequest or the last HttpServletRequestWrapper if a filter was applied + * @return HttpServletRequest + */ + public HttpServletRequest getHttpServletRequest(); + + /** + * Returns the HttpServletResponse or the last HttpServletResponseWrapper + * @return HttpServletResponse + */ + public HttpServletResponse getHttpServletResponse(); + + /** + * Returns the event type + * @return EventType + */ + public EventType getEventType(); + + /** + * Returns + * @return EventSubType + */ + public EventSubType getEventSubType(); + + /** + * Ends the Comet session. This signals to the container that + * the container wants to end the comet session. + * The container may invoke event(CometEvent.END) synchronously or asynchronously + * @throws IOException if an IO exception occurs + */ + public void close() throws IOException; + + /** + * Sets the timeout for this Comet connection. Please NOTE, that the implementation + * of a per connection timeout is OPTIONAL and MAY NOT be implemented.<br/> + * This method sets the timeout in milliseconds of idle time on the connection. + * The timeout is reset every time data is received from the connection or data is flushed + * using <code>response.flushBuffer()</code>. If a timeout occurs, the + * <code>error(HttpServletRequest, HttpServletResponse)</code> method is invoked. The + * web application SHOULD NOT attempt to reuse the request and response objects after a timeout + * as the <code>error(HttpServletRequest, HttpServletResponse)</code> method indicates.<br/> + * This method should not be called asynchronously, as that will have no effect. + * @param timeout The timeout in milliseconds for this connection, must be a positive value, larger than 0 + * @throws IOException An IOException may be thrown to indicate an IO error, + * or that the EOF has been reached on the connection + * @throws ServletException An exception has occurred, as specified by the root + * cause + * @throws UnsupportedOperationException if per connection timeout is not supported, either at all or at this phase + * of the invocation. + */ + public void setTimeout(int timeout) + throws IOException, ServletException, UnsupportedOperationException; + +} Propchange: tomcat/tc6.0.x/trunk/java/org/apache/catalina/CometEvent.java ------------------------------------------------------------------------------ svn:eol-style = native --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]