2011-03-09 80 views
5

我有一個基於Spring的Web應用程序在tomcat 6下運行。現在,我想使用c3p0連接池而不是tomcat的默認DBCP。所以,從c3p0 help醫生,我已經在context.xml類似定義的數據源:使用c3p0連接在Tomcat中池化基於Spring的應用程序

<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工作正常。

任何幫助,將不勝感激。

+0

爲什麼你想這樣做?你自己說過 - 「在tomcat6中的默認連接池工作正常」 – skaffman 2011-03-09 17:17:43

+1

爲什麼不直接在* applicationContext.xml中定義數據源並繞過jndi和命名呢? – 2011-05-17 10:46:37

+0

如果還沒有解決:試試用''或' micfra 2012-03-16 10:50:19

回答

0

您需要的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中的resource-ref。

4

此線程是舊的,所以答案是未來使用 - 我有同樣的問題(這是我如何得到這個線程)。

我在完成一項小型研究後解決了這個問題。 有一些定義,即使用的數據源不支持。 當您刪除這些定義並重命名其他人時,數據源創建時沒有問題 且無需使用上面提到的resourceLink。

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

以下鏈接是對數據源的java文檔。 根據列出的方法,您可以在context.xml文件中配置資源 標記。 http://www.mchange.com/projects/c3p0/apidocs/com/mchange/v2/c3p0/ComboPooledDataSource.html

相關問題