2012-03-28 86 views
4

我嘗試讓Tomcat使用BoneCP作爲連接池,因爲DBCP在這裏無法正常工作。使用bonecp作爲Tomcat 5.5數據源

我試着將它添加到定義這樣我的web應用程序context.xml中:

<Context path="/reports" privileged="true" crossContext="true"> 

    <Resource name="jdbc/IKOffice" 
      type="com.jolbox.bonecp.BoneCPDataSource" 
      auth="Container" 

      username="ik" 
      password="******" 
      jdbcUrl="jdbc:postgresql://localhost:5434/IKOffice_Core" 

      lazyInit="true" 
      partitionCount="1" 
      ... more properties ... 
      logStatementsEnabled="false" /> 

</Context> 

但是當我嘗試訪問該資源,它總是說:

javax.naming.NamingException: Cannot create resource instance 

有日誌文件中沒有錯誤,並且所有必需的jar都可用於webapp。這裏發生了什麼?

一切工作時我用這樣的資源:

 <Resource name="jdbc/IKOffice" 
      auth="Container" 
      type="javax.sql.DataSource" 
      username="ik" 
      password="******" 
      driverClassName="org.postgresql.Driver" 
      url="jdbc:postgresql://localhost:5434/IKOffice_Core" 
      maxActive="8" 
      maxIdle="4" /> 

SOLUTION:

您必須指定一個BeanFactory,像這樣(3號線):

<Resource name="jdbc/IKOffice" 
      type="jcom.jolbox.bonecp.BoneCPDataSource" 
      factory="org.apache.naming.factory.BeanFactory" 
      auth="Container" 
      ... 

回答

4

Tomcat使用工廠來創建JNDI資源。對於有限數量的資源類型(包括javax.sql.DataSource),Tomcat知道它可以使用內置工廠。對於未知的資源類型(例如jcom.jolbox.bonecp.BoneCPDataSource),您需要指定用於創建資源的工廠。

+0

那是對的,我不得不指定org.apache.naming.factory.BeanFactory! – Daniel 2012-04-01 10:27:00

+0

標記你讓我的一天!多謝兄弟! (http://stackoverflow.com/q/37968073/1564910) – MTurPash 2016-06-22 14:19:30