我尝试让 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 都可供 Web 应用程序使用。这里发生了什么?
当我使用这样的资源时,一切正常:
<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"
...
Tomcat 使用工厂来创建 JNDI 资源。对于有限数量的资源类型(包括 javax.sql.DataSource),Tomcat 知道它可以使用内置工厂。对于未知的资源类型(例如 jcom.jolbox.bonecp.BoneCPDataSource),您需要指定用于创建资源的工厂。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)