1.在整合Struts2, Spring, Hibernate, 的時候連接池用到了 Proxool ,可每次 重啟或者關閉Tomcat服務的時候報異常.
2.異常信息如下:
1?? Exception?in?thread?"Shutdown?Hook"?java.lang.NullPointerException
2?????at?org.logicalcobwebs.proxool.HouseKeeperController.shutdown(HouseKeeperController.java:104)
3?????at?org.logicalcobwebs.proxool.ProxoolFacade.shutdown(ProxoolFacade.java:246)
4?????at?org.logicalcobwebs.proxool.ProxoolFacade.shutdown(ProxoolFacade.java:218)
5?????at?org.logicalcobwebs.proxool.ShutdownHook.run(ShutdownHook.java:95)
6?????at?java.lang.Thread.run(Thread.java:619)
3.解決辦法:
只須要在服務器關閉之前關閉proxool就OK了.
1??? org.logicalcobwebs.proxool.ProxoolFacade.shutdown();
4.代碼
?1?package?alex.pfms.proxool;
?2?
?3?import?org.apache.commons.logging.Log;
?4?import?org.apache.commons.logging.LogFactory;
?5?import?org.logicalcobwebs.proxool.ProxoolFacade;
?6?import?org.logicalcobwebs.proxool.admin.servlet.AdminServlet;
?7?
?8?public?class?ProxoolAdminServlet?extends?AdminServlet?{
?9?????
10?
11?????private?static?final?long?serialVersionUID?=?3205095536164467920L;
12?????private?static?final?Log?LOG?=?LogFactory.getLog(AdminServlet.class);
13?????
14?????@Override
15?????public?void?destroy()?{
16?????????LOG.info("Proxool shoutdown.);
17?????????ProxoolFacade.shutdown();
18?????????super.destroy();
19?????}
20?????
21?}
5.為了減少一段Servlet配置所以繼承了Proxool 的 AdminServlet ,現在只要指定到
ProxoolAdminServlet類即可.?1?<!--?proxool?連接池Admin配置?-->
?2?????<servlet>
?3?????????<description>org.logicalcobwebs.proxool.admin.servlet.AdminServlet</description>
?4?????????<servlet-name>proxoolAdmin</servlet-name>
?5?????????<servlet-class>alex.pfms.proxool.ProxoolAdminServlet</servlet-class>
?6?????????<load-on-startup>1</load-on-startup>
?7?????</servlet>
?8?????<servlet-mapping>
?9?????????<servlet-name>proxoolAdmin</servlet-name>
10?????????<url-pattern>/proxoolAdmin.servlet</url-pattern>
11?????</servlet-mapping>