Bug 50627 - Bug in Tomcat Comet. Event CometEvent.EventType.END is not fired when connection closed.‏
Summary: Bug in Tomcat Comet. Event CometEvent.EventType.END is not fired when connect...
Status: RESOLVED FIXED
Alias: None
Product: Tomcat 7
Classification: Unclassified
Component: Connectors (show other bugs)
Version: 7.0.6
Hardware: PC Windows XP
: P2 major (vote)
Target Milestone: ---
Assignee: Tomcat Developers Mailing List
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2011-01-20 21:08 UTC by goberman
Modified: 2011-01-27 12:42 UTC (History)
0 users



Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description goberman 2011-01-20 21:08:31 UTC
I noticed a problem that did not exist in Tomcat 6: event CometEvent.EventType.END is not fired when client connection is closed.
It is very easy to duplicate. The server and client code is below. You would need to open html page in a browser and press "TEST". This should print "Begin Event" in the server. If you close the browser (close connection), the "End Event" is not printed. It is printed with Tomcat 6.

It is similar to bug https://issues.apache.org/bugzilla/show_bug.cgi?id=50207, that marked as fixed. Not sure if it is related or not.

SERVER:
package test;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;

import org.apache.catalina.comet.CometEvent;
import org.apache.catalina.comet.CometProcessor;

public class TomcatBug extends HttpServlet implements CometProcessor {

    public void event(CometEvent event) throws IOException, ServletException {
        if (event.getEventType() == CometEvent.EventType.BEGIN) {
            System.out.println("Begin Event");
        }
        else if (event.getEventType() == CometEvent.EventType.ERROR) {
            System.out.println("Error Event");
            event.close();
        }
        else if (event.getEventType() == CometEvent.EventType.END) {
            System.out.println("End Event");
            event.close();
        }
    }
}

CLIENT (html):
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd">
<html>
<head>
    <title>test</title>
</head>
<body>
    <input type="button" value="TEST" onclick="test(); return false;" />

    <script type="text/javascript">
        function test() {
            var api = new XMLHttpRequest;
            api.onreadystatechange = onreadystatechange;

            api.open("GET", "http://localhost/Test/Controller", true);

            api.send("");
        }

        function onreadystatechange() {
        }

    </script>

</body>
</html>
Comment 1 Mark Thomas 2011-01-25 12:34:24 UTC
This is fixed for the NIO connector and will be in 7.0.7 onwards. I'll check the APR connector before closing this bug.
Comment 2 Mark Thomas 2011-01-27 12:42:51 UTC
Some APR fixes were also required for comet. These will also be in 7.0.7 onwards.