2

Tomcat 6 で実行されている Java Web アプリケーションがあり、永続化のために jar を呼び出しています。この jar は tomcat lib フォルダーにあり、tomcat データソースを使用します。

<Resource name="jdbc/mydatasource"
          auth="Container"
          type="javax.sql.DataSource"
          username="USER"
          password="PASSWORD"
          driverClassName="org.postgresql.Driver"
          url="jdbc:postgresql://HOST:5432/DATABASE"/>

jar は、ORM に hibernate 3.5.6-Final を使用する Java プロジェクトのバイナリです。休止状態の構成は次のとおりです。

    <property name="hibernate.c3p0.min_size">5</property>
    <property name="hibernate.c3p0.max_size">20</property>
    <property name="hibernate.c3p0.timeout">1800</property>
    <property name="hibernate.c3p0.max_statements">50</property>
    <property name="hibernate.connection.datasource">java:jdbc/mydatasource</property> 
    <property name="dialect">org.hibernate.dialect.PostgreSQLDialect</property> 

最初は、hibernate-c3p0 バンドルをアプリケーションに含めていなかったため、c3p0 設定は使用されませんでした。そして、アプリケーション全体がこのようにうまく動作します。

プーリング管理を改善するために、hibernate-c3p0 バンドルを追加しました。そのため、このバンドルは永続化のために jar に埋め込まれています。

しかし、現在、このエラーが発生しています (weba アプリケーションが永続化 jar からデータを取得しようとすると、各起動後に表示されます)。

[Task-Thread-for-com.mchange.v2.async.ThreadPerTaskAsynchronousRunner@eafa5f] 13 :46:22 WARN - BasicResourcePool$AcquireTask: () com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask@b321c1 -- 取得の試み失敗した!!!保留中の取得をクリアします。必要な新しいリソースを取得しようとしているときに、許可されている最大取得試行回数 (30 回) を超えて成功しませんでした。最後の取得試行の例外: java.lang.NullPointerException at sun.jdbc.odbc.JdbcOdbcDriver.getProtocol(JdbcOdbcDriver.java:507) at sun.jdbc.odbc.JdbcOdbcDriver.knownURL(JdbcOdbcDriver.java:476) at sun.jdbc. odbc.JdbcOdbcDriver.acceptsURL(JdbcOdbcDriver.java:307) at java.sql.DriverManager.getDriver(DriverManager.java:253) at com.mchange.v2.c3p0.DriverManagerDataSource.

データソースで定義されている postgresql ドライバーの代わりに Ojdbc ドライバーが使用されているように見えるため、これは間違っているようです。

このエラーが表示される原因と解決方法を知っていますか?

休止状態の構成でさまざまなことを試しましたが、stackoverflow とさまざまなフォーラムで見つけましたが、問題は解決しません。

<property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>

    <property name="hibernate.connection.driver_class">org.postgresql.Driver</property>
    <property name="driverClass">org.postgresql.Driver</property>
    <property name="hibernate.c3p0.driverClass">org.postgresql.Driver</property>

パーシスタンスと tomcat のインストールに使用される jar のみを制御できることを明確にする必要があります。jar を呼び出している Web アプリケーションを変更することはできません。

4

1 に答える 1

1

たぶん、あなたのアプリはTomcatで構成されたデータソースにまったくアクセスせず、休止状態で動作しているだけですか? Resource XML をスキップして (これは c3p0 DataSource にはまったく適切ではありません)、c3p0 用に休止状態を構成してみましたか?

<!-- add these -->
<property name="hibernate.connection.driver_class">org.postgresql.Driver</property>
<property name="hibernate.connection.url">jdbc:postgresql://HOST:5432/DATABASE</property>
<property name="hibernate.connection.username">USER</property>
<property name="hibernate.connection.password">PASSWORD</property>

<!-- same as before -->
<property name="hibernate.c3p0.min_size">5</property>
<property name="hibernate.c3p0.max_size">20</property>
<property name="hibernate.c3p0.timeout">1800</property>
<property name="hibernate.c3p0.max_statements">50</property>
<property name="dialect">org.hibernate.dialect.PostgreSQLDialect</property> 

<!-- REMOVE THIS! -->
<!-- <property name="hibernate.connection.datasource">java:jdbc/mydatasource</property> --> 
于 2013-04-04T12:39:53.830 に答える