2012-03-28 32 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