Tomcat6のcometを試す。

Tomcat6を使ってCometができるようなので試す。
http://www.oki.com/jp/oss/document/tomcat/tomcat60-docs-ja/aio.html

Cometの通信を扱うクラスは、org.apache.catalina.CometProcessorインタフェースをしたサーブレットとして用意する。

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import org.apache.catalina.CometEvent;
import org.apache.catalina.CometProcessor;

public class CometTestServlet extends HttpServlet
                         implements CometProcessor {

	public void event(CometEvent event) 
                 throws IOException, ServletException {

	}

}

まずは、CometEventの中を見たいので、eventメソッドの中に以下のコードを追加。

String eventStr = ToStringBuilder.reflectionToString(event,
			ToStringStyle.MULTI_LINE_STYLE);
System.out.println("Recieve CometEvent ----------------");
System.out.println(eventStr);

Tomcat6を再起動の前に、web.xmlにCometTestServletを登録。

    <servlet>
        <servlet-name>CometTest</servlet-name>
        <servlet-class>comettest.CometTestServlet</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>CometTest</servlet-name>
        <url-pattern>/comet</url-pattern>
    </servlet-mapping>

さらに、server.xmlを以下のように変更。(ちなみに、server.xmlを変更せずにCometTestServletを呼び出すと、405 が返る。)

<!-- default    
    <Connector port="8080" 
               protocol="HTTP/1.1" 
               connectionTimeout="20000" 
               redirectPort="8443" />
-->
    <Connector port="8080" 
               protocol="org.apache.coyote.http11.Http11NioProtocol" 
               connectionTimeout="20000" 
               redirectPort="8443" />

準備ができたので、Tomcatを再起動して http://localhost:8080/cometTest/comet にアクセスする。
と、ブラウザはレスポンス待ちの状態まま待機して、Tomcatには以下のようなログが出力される。

Recieve CometEvent ----------------
org.apache.catalina.connector.CometEventImpl@ecb281[
  request=org.apache.catalina.connector.Request@1315d34
  response=org.apache.catalina.connector.Response@1de256f
  eventType=BEGIN
  eventSubType=<null>
]

これで、ブラウザから、Tomcatに対して常駐接続が張られたらしい。

あぁ。
なんか眠くなってきた。