启动服务器时,报错:
ERROR [(logicalcobwebs.proxool.ProxoolDriver)] Problem org.logicalcobwebs.proxool.ProxoolException: Attempt to refer to a unregistered pool by its alias 'oracle'
Attempt to refer to a unregistered pool by its alias '**',意思是:试图引用一未注册别名为**的连接池,在网上查阅资料试图找出原因,现将其总结如下:
1、proxool.xml中配置的连接池加载成功,但在用连接池的时候,用自己写的java文件中调用出现的问题,就是写了一个main方法,然后用"java Application"运行,就会报Attempt to refer to a unregistered pool by its alias ‘test’ ,但是在JSP页面里并不会报错。问题的关键就是在这里,连接池的应用本来就是要通过服务器调用的,如果你在java文件中调用,就没有涉及到服务器,这样就会报错了!
如果你在java文件中用下面这种方式加载连接池是可用的:
Class.forName("org.logicalcobwebs.proxool.ProxoolDriver"); Connection conn = DriverManager.getConnection("proxool.别名:driver:url","用户名","密码");
(注意:DriverManager.getConnection中多了几个条件:1、driver。2、url。3、用户名。4、密码。并且分清楚他们之间的冒号和逗号。)
但是这种方式会每次运行的时候加载连接池,用完就会释放。所以大家用连接池的时候,不要在java文件中去测试连接池是否可用,应该写一个jsp页面,问题就此解决!
2、proxool.xml的内容是在其他文件里复制内容过来的,报错,新建一个proxool.xml,完全手写各个配置,然后重启服务。
3、.xml配置文件出现中文,即使已经注释掉。解决办法:将.xml配置文件中的中文注释删净。
4、web.xml中,proxool的配置问题:
<servlet> <servlet-name>ServletConfigurator</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>0</load-on-startup> </servlet>
这里的问题出在<load-on-startup>0</load-on-startup>,我们先来了解一下<load-on-startup>元素,它是用来标记容器是否在启动的时候就加载这个servlet(实例化并调用其init()方法),它的值必须是一个整数,表示servlet应该被载入的顺序,当值为0或者大于0时,表示容器在应用启动时就加载并初始化这个servlet,当值小于0或者没有指定时,则表示容器在该servlet被选择时才会去加载。正数的值越小,该servlet的优先级越高,应用启动时就越先加载。当值相同时,容器就会自己选择顺序来加载。所以,<load-on-startup>x</load-on-startup>,中x的取值1,2,3,4,5代表的是优先级(而非启动延迟时间)。这里将0改为1保证了proxool配置的servlet最先加载即可。
报错原因大致总结为以上四种,若还有其它原因,欢迎大家补充!