報告
7月に結婚しました。
試験項目の観点の話合い
話の中で、機能レベルと言う言葉が、ちらほら。
いちいち突っ込んで聞かない。
それが大人。
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に対して常駐接続が張られたらしい。
あぁ。
なんか眠くなってきた。
Oracleのスクロール可能カーソルの実装
S2Pagerを使っていたら大量な検索結果のあるSQLで、OutOfMemoryError。
原因を調べていたら、これ。
http://otndnld.oracle.co.jp/document/products/oracle10g/101/doc_v5/java.101/B13514-02.pdf
via http://otn.oracle.co.jp/forum/thread.jspa?messageID=11006931
P17-5 基礎となるサーバーがスクロール可能なカーソルをサポートしていないので、スクロール可 能性は別のレイヤーでOracle JDBC によって実装する必要があります。 この機能は、スクロール可能な結果セットの行をクライアント側のメモリー・キャッシュに 格納することにより、実現されていることに注意してください。 重要: スクロール可能な結果セットの行はすべて、クライアント側の キャッシュに格納されます。そのため、結果セットに多くの行、多くの列 または非常に大きな列が含まれていると、クライアント側のJava Virtual Machine に障害が発生する可能性があります。大きな結果セットにはスク ロール可能性を指定しないでください。
とりあえず、PagerStatementFactory を使用せずに、BasicStatementFactory を使用するようにすることで対応。