2011年6月20日 星期一

Spring + Proxool 注意

今天把 tomcat 6 的 jdk 從 1.5 換成 1.6 後, 怪事發生了.
一直出現 java.sql.SQLException: org.logicalcobwebs.proxool.ProxoolException: Attempt to refer to a unregistered pool by its alias 'proxool_pool'

這問題之前遇過, 是因為 web.xml 中 servlet load-on-startup 順序沒設定好造成的.
<servlet>
<servlet-name>proxoolServletConfigurator</servlet-name>
<servlet-class>org.logicalcobwebs.proxool.configuration.ServletConfigurator</servlet-class>
<init-param>
    <param-name>xmlFile</param-name>
    <param-value>WEB-INF/config/proxool.xml</param-value>
</init-param>
<load-on-startup>0</load-on-startup>
</servlet>

怎麼只換了個 jdk 又沒改 xml 卻又發生了?




查了半天, 原來 servlet 2.4 之後的規格, listener 的 init 順序需早於 servlet (有些 container 在 servlet 2.3 即已實作, 可參考這篇文章).

那怎麼辦呢 ? 把 Proxool 由 servlet 改成 listener 即可.

Proxool 本身沒提供 listener 的實作. 可參考這邊有實作

web.xml 改為如下即可:
<listener>
    <listener-class>com.example.ProxoolListener</listener-class>
</listener>
<context-param>
    <param-name>xmlFile</param-name>
    <param-value>WEB-INF/config/proxool.xml</param-value>
</context-param>



奇怪的是, 那沒換 jdk 之前怎麼能跑的 ???

沒有留言: