5

我有一个在 tomcat 6 下运行的基于 Spring 的 Web 应用程序。现在,我想使用 c3p0 连接池而不是 tomcat 的默认 DBCP。因此,从c3p0 帮助文档中,我将数据源定义为context.xml

<Resource name="jdbc/sample" auth="Container"
     driverClassName="oracle.jdbc.driver.OracleDriver"
     url="jdbc:oracle:thin:@someServer:1551:xyz"
     username="userName"
     password="pwd"
     validationQuery="SELECT 1 FROM dual"
     testOnBorrow="true"
     testWhileIdle="true"
     factory="org.apache.naming.factory.BeanFactory" 
     type="com.mchange.v2.c3p0.ComboPooledDataSource" 
     maxPoolSize="20" 
     minPoolSize="5" 
     acquireIncrement="1" 
   />

现在,文档说,我应该在以下内容中包含以下内容web.xml

<resource-ref>
  <res-ref-name>jdbc/sample</res-ref-name>
  <res-type>javax.sql.DataSource</res-type>
  <res-auth>Container</res-auth>
</resource-ref> 

我还有以下内容applicationContext.xml

<jee:jndi-lookup id="sampleDataSource" resource-ref="true"
    jndi-name="jdbc/sample" />

当我启动tomcat时,我得到

javax.naming.NameNotFoundException:名称 jdbc 未绑定在此上下文中

没有 c3p0 并在 tomcat6 中使用默认连接池可以正常工作。

任何帮助,将不胜感激。

4

2 回答 2

4

这个线程很旧,所以答案是为了将来使用 - 我有同样的问题(这就是我如何找到这个线程)。

我在进行了一项小型研究后解决了这个问题。有一些定义,使用的数据源不支持。当您删除这些定义并重命名其他定义时,将毫无问题地创建数据源,并且不需要上面提到的 resourceLink。

在以下链接中,您可以找到支持的定义列表。 http://www.mchange.com/projects/c3p0/#tomcat-specific

以下链接指向数据源的 java doc。根据那里列出的方法,您可以在 context.xml 文件中配置资源标签。 http://www.mchange.com/projects/c3p0/apidocs/com/mchange/v2/c3p0/ComboPooledDataSource.html

于 2013-07-08T08:32:30.020 回答
1

您还需要在 context.xml 中输入一个条目,例如:

<Context antiJARLocking="true" swallowOutput="true">

    <ResourceLink
     global="jdbc/sample"
     name="jdbc/sample"
     type="javax.sql.DataSource" />
</Context>

我同意 J2EE 有太多的间接级别。请注意,context.xml 可以驻留在 Tomcat 的“conf”目录中,也可以驻留在 webapp 的 META-INF 目录中(取决于您希望数据源用于所有 Web 应用程序还是仅用于特定的一个)。使用 context.xml 条目,您不需要 web.xml 中的资源引用。

于 2012-04-24T21:33:39.020 回答