Tomcat与proxool和oracle的热部署问题
我在 Tomcat 中遇到了有关 proxool 和 oracle 驱动程序的问题。
我使用的Web应用程序包含一个使用metro的Web服务jar文件和一个servlet来初始化/启动proxool池。 proxool池配置有oracle连接。 当服务被调用时,它从池中获取连接,执行语句并返回。 之后我关闭服务方法中的结果集、语句和连接。
当我现在尝试热取消部署 Web 应用程序时,servlet 通过 ProxoolFacade.shutdown() 停止 proxool 池; 在它的 destroy 方法中。
问题是,热取消部署无法完成,因为无法从提取的 Web 应用程序的文件夹中删除 Oracle 驱动程序 ojdbc5.jar。
对 SQL Server 数据库和 jtds 驱动程序进行相同的尝试,它可以正常工作而不会出现此问题。
使用的版本: 阿帕奇汤姆猫 6.0.18 Oracle 11g JDBC 驱动程序 11.1.0.6.0 Proxool 0.9.1
有人有想法吗?
问候蒂莫
I have a problem concerning with proxool and oracle driver in Tomcat.
The web application I use contains a webservice jar file using metro and a servlet to initialize / start the proxool pool. The proxool pool is configured with an oracle connection. When the service is called, it fetches a connection from the pool, executes a statement and returns. I close the resultset, the statement and the connection in the service method afterwards.
When I now try to hot undeploy the web application, the servlet stops proxool pool by ProxoolFacade.shutdown(); in it's destroy method.
The problem is, that the hot undeploy can not finish because the Oracle driver ojdbc5.jar can not be deleted from the folder of the extracted web application.
Trying the same with a SQL server database and the jtds driver it works without this problem.
Used versions:
Apache Tomcat 6.0.18
Oracle 11g JDBC driver 11.1.0.6.0
Proxool 0.9.1
Anyone has an idea?
Regards Timo
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您必须将 Oracle 驱动程序添加到 Tomcat 实例并配置 Tomcat JNDI使用 Oracle 数据源。
这样,当应用程序终止时,驱动程序将保持活动状态,并且 Tomcat 将控制数据库连接的池化。 您的问题的原因是某些数据库驱动程序“挂钩”到虚拟机中。 这意味着 Tomcat 在重新部署期间无法卸载这些类——仍然存在引用。
我什至建议尝试将 proxool 移动到 Tomcat 服务器中,并让 Tomcat 为您管理池。 即使您泄漏连接,这也会使热部署更快、更可靠。
You must add the Oracle driver to the Tomcat instance and configure Tomcat JNDI with an Oracle datasoure.
This way, the driver will stay alive when the app is terminated and Tomcat will control the pooling of the DB connections. The reason for your problem is that some DB drivers "hook" into the VM. This means that Tomcat can't unload the classes during redeploy -- there are still references around.
I'd even suggest to try to move proxool into the Tomcat server and have Tomcat manage the pools for you. That would make hot deploy much faster and more reliable, even if you leak connections.