为什么使用Tomcat的context.xml文件来声明DBCP资源?

时间:2009-06-09 14:22:08

标签: tomcat apache-commons-dbcp context.xml

我无法理解为什么我会使用context.xml文件来声明资源,在我的例子中是数据库连接池。希望我在以下反对使用context.xml

的参数中直接得到了我的事实
  1. 据我所知,资源 在/META-INF/context.xml中声明 仅限于 上下文,所以没有理由这样做 所以要分享资源。

  2. 声明连接 池资源以这种方式创建一个 依赖于容器 classloader,所以如果我这样做,例如,希望 改变我的数据库驱动程序,我 必须重新启动容器,而不仅仅是 我的背景。

  3. 我也创建了一个依赖 容器之类的东西,比如JNDI 做了一个独立的测试工具。

  4. 最后,我必须跳过 构建时间用于切换资源 在测试和生产之间 资源,例如。

  5. 这些问题都不是无法克服的,但在纸面上看起来更简单,只需创建一个连接池并将其挂钩到我的上下文范围内。

    我想知道在什么情况下context.xml文件是正确的答案?

2 个答案:

答案 0 :(得分:1)

我看到的唯一正当理由是,如果您希望Tomcat能够使用您的连接池进行基本的用户身份验证调用,如果您已将其设置为使用JDBC UserAuth上下文,则可能需要Tomcat有连接池。

答案 1 :(得分:1)

您可能想要使用context.xml的另一个原因是override servlet init parameters which then maybe used to configure任意数量的事情,包括您的DBCP可能会像Spring一样管理。

这可能优于系统属性和/或环境变量,因为您可以在单个容器中部署同一WAR的多个副本,而无需修改WAR,并且它们的配置不会重叠。

By the way the context.xml can live outside of the WAR(请参阅Tomcat关于该文档的文档或下面的代码段):

  

可以明确定义单个上下文元素:

     
      
  • 在应用程序文件中的/META-INF/context.xml中的单个文件中。 (可选)(基于Host的copyXML属性)   这可能会复制到$ CATALINA_BASE / conf / [enginename] / [hostname] /和   重命名为应用程序的基本文件名加上“.xml”扩展名。
  •   
  • 在$ CATALINA_BASE / conf / [enginename] / [hostname] /目录中的单个文件(扩展名为“.xml”)中。上下文   路径和版本将从文件的基本名称派生(   文件名减去.xml扩展名)。此文件将始终采用   优先于Web应用程序中打包的任何context.xml文件   META-INF目录。
  •   
  • 主conf / server.xml中的Host元素。
  •   
     

可以定义适用于多个Web的默认Context元素   应用。单个Web应用程序的配置将覆盖任何内容   配置为其中一个默认值。任何嵌套元素,例如    在默认上下文中定义的元素将是   为默认应用的每个上下文创建一次。他们会的   不在Context元素之间共享。

     
      
  • 在$ CATALINA_BASE / conf / context.xml文件中:所有Web应用程序都将加载Context元素信息。
  •   
  • 在$ CATALINA_BASE / conf / [enginename] / [hostname] /context.xml.default文件中:   Context元素信息将由所有Web应用程序加载   那个主人。
  •