oracle - 使用 proxool 和 oracle 在 Tomcat 中进行热部署问题

标签 oracle tomcat proxool

我对 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/

相关文章:

sql - Codd 的 'non-subversion rule' 是什么意思?

tomcat - 使用 Tomcat 进行单点登录

tomcat - 内部 CA 的 PKIX 路径构建

java - 使用 proxool 时,是否需要显式关闭每个 getConnection()?

oracle - 重新创建 Oracle DUAL 表

SQL 按最近日期选择具有两个唯一列的行

java - 是内存泄漏吗?为什么 java.lang.ref.Finalizer 吃掉这么多内存

java - Proxool最大连接数

database - 如何从oracle中的一个作业中调用两个程序?

jsp - 如何在 jsp 文件中包含 ember 应用程序并使用 tomcat 提供服务