我的web.xml配置如下,用的是proxool进行数据库连接:
<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/proxool.xml </param-value>
</init-param>
<load-on-startup> 1 </load-on-startup>
</servlet>
<servlet>
<servlet-name> proxoolAdmin </servlet-name>
<servlet-class> org.logicalcobwebs.proxool.admin.servlet.AdminServlet </servlet-class>
</servlet>
<servlet-mapping>
<servlet-name> proxoolAdmin </servlet-name>
<url-pattern> /proxooladmin </url-pattern>
</servlet-mapping>
<listener>
<listener-class> com.mission.init.SysContextListener </listener-class>
</listener>
在里面配置了一个tomcat监听器,监听器执调用Java的TimerTask执行一个定时任务。未配置监听器的时候tomcat都是可以正常启动,数据库连接池也是建立好了的,但就是配置了这个监听器之后,每次tomcat启动的时候都要报错,出错信息如下:
org.logicalcobwebs.proxool.ProxoolException: Attempt to refer to a unregistered pool by its alias 'Develop '
at org.logicalcobwebs.proxool.ConnectionPoolDefinition.doChange(Connecti
onPoolDefinition.java:250)
at org.logicalcobwebs.proxool.ConnectionPoolDefinition. <init> (Connection
PoolDefinition.java:147)
at org.logicalcobwebs.proxool.ProxoolFacade.registerConnectionPool(Proxo
olFacade.java:96)
at org.logicalcobwebs.proxool.ProxoolDriver.connect(ProxoolDriver.java:7
7)
其中那个Develop是我在proxool.xml中配置的别名,是没有问题的。而且,tomcat也可以启动,也可以正常访问数据库。
经我的分析觉得可能是因为前面那个servlet即数据库连接还没有建立的时候监听器就已经初始化了,因此一直都是报没有注册连接池的错误。
请问这个问题如何解决??tomcat是先执行listner再执行servlet,是这样的么??
------解决方案--------------------
如果是你的分析原因
我记得servlet可以设置优先级的
或许可以把serlet的启动优先级设高一点
让他优先运行
<load-on-startup> 1 </load-on-startup>
也就是这个参数
------解决方案--------------------
把顺序换一换就行了
------解决方案--------------------
在带有监听器的servlet中,执行的顺序是这样的,首先建立servletListerner,然后运行,初始化ServletContext,然后监听ServletContext的变化,最后ServletContext被销毁,加ServletListener的时候不用添加其他的什么配置只在web.xml里面加上监听器就可以了,我不知道是什么错误,供你参考把,
------解决方案--------------------
你把
<listener>
<listener-class> com.mission.init.SysContextListener </listener-class>
</listener>
放到 <servlet> 上面,
标准的写法是 <listener> 在 <servlet> 前面,
再试一试看看行不行~