Использование bonecp в качестве источника данных Tomcat 5.5
Я пытаюсь заставить Tomcat использовать BoneCP в качестве пула соединений, потому что DBCP здесь не работает правильно.
Я попытался добавить его в 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
В файле журнала нет ошибок, и все необходимые файлы доступны для веб-приложения. Что здесь происходит?
Все работало, когда я использовал такой ресурс:
<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"
...
1 ответ
Tomcat использует фабрики для создания ресурсов JNDI. Для ограниченного числа типов ресурсов (включая javax.sql.DataSource) Tomcat знает, что он может использовать встроенную фабрику. Для неизвестных типов ресурсов (таких как jcom.jolbox.bonecp.BoneCPDataSource) необходимо указать фабрику, которая будет использоваться для создания ресурса.