我对 Tomcat 中的 proxool 和 oracle 驱动程序有疑问。
我使用的 Web 应用程序包含一个使用 Metro 的 Web 服务 jar 文件和一个用于初始化/启动 proxool 池的 servlet。 proxool 池配置有 oracle 连接。当服务被调用时,它从池中获取一个连接,执行一条语句并返回。之后我关闭服务方法中的结果集、语句和连接。
当我现在尝试热取消部署 Web 应用程序时,servlet 通过 ProxoolFacade.shutdown(); 停止 proxool 池;在它的销毁方法中。
问题是,热卸载无法完成,因为无法从提取的 Web 应用程序的文件夹中删除 Oracle 驱动程序 ojdbc5.jar。
对 SQL Server 数据库和 jtds 驱动程序进行同样的尝试,它没有这个问题。
使用过的版本: Apache 汤姆猫 6.0.18 Oracle 11g JDBC 驱动程序 11.1.0.6.0 Proxool 0.9.1
有人有想法吗?
问候蒂莫
最佳答案
您必须将 Oracle 驱动程序添加到 Tomcat 实例并配置 Tomcat JNDI with an Oracle datasoure .
这样,当应用程序终止时,驱动程序将保持事件状态,并且 Tomcat 将控制数据库连接的池化。你的问题的原因是一些数据库驱动程序“ Hook ”到虚拟机中。这意味着 Tomcat 无法在重新部署期间卸载类——周围仍然存在引用。
我什至建议尝试将 proxool 移至 Tomcat 服务器并让 Tomcat 为您管理池。这将使热部署更快、更可靠,即使您泄漏了连接。
关于oracle - 使用 proxool 和 oracle 在 Tomcat 中进行热部署问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/838699/