4

ここではDBCPが正しく機能しないため、TomcatにBoneCPを接続プールとして使用させようとしています。

次のように、webapp を定義する 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"
          ...
4

1 に答える 1

4

Tomcat はファクトリを使用して JNDI リソースを作成します。限られた数のリソース タイプ (javax.sql.DataSource を含む) について、Tomcat は組み込みファクトリを使用できることを認識しています。不明なリソース タイプ (jcom.jolbox.bonecp.BoneCPDataSource など) の場合、リソースの作成に使用するファクトリを指定する必要があります。

于 2012-03-31T19:12:20.637 に答える