一尘不染

使用bonecp作为Tomcat 5.5数据源

tomcat

我试图让Tomcat使用BoneCP作为连接池,因为DBCP在这里不能正常工作。

我试图将其添加到定义我的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" />

解:

您必须指定一个BeanFactory,如下所示(第3行):

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

阅读 210

收藏
2020-06-16

共1个答案

一尘不染

Tomcat使用工厂创建JNDI资源。对于有限数量的资源类型(包括javax.sql.DataSource),Tomcat知道可以使用内置工厂。对于未知资源类型(例如jcom.jolbox.bonecp.BoneCPDataSource),您需要指定用于创建资源的工厂。

2020-06-16