2

postgres 9.2データベースに接続された jndi プールされたデータソースを使用して、glassfish 3.1.2.2で実行されているgrails 2.2.1プロジェクトに取り組んでいます。アプリケーションを初めてデプロイするとき、問題はなく、すべて正常に動作します。

しかし、アプリケーションをアンデプロイ (または再デプロイ) するたびに、接続プールが機能しなくなります。Glassfish 管理コンソールを使用して ping を実行しようとすると、次のエラーが発生します。

Avertissement: RAR8054: Exception while creating an unpooled [test] connection for pool [ sample ],
Connection could not be allocated because: No suitable driver found for
jdbc:postgresql://localhost:5432/sample?loginTimeout=0&socketTimeout=0&prepareThreshold=5&unknownLength=2147483647&loglevel=0&tcpkeepalive=false
Grave: RestResponse.getResponse() donne FAILURE.
endpoint = http://localhost:4848/management/domain/resources/ping-connection-pool.json ; attrs = {id=sample}'

繰り返しますが、接続プールはデプロイ時に正常に動作します (「/glassfish/lib」に postgresql ドライバーがあり、接続プールが正しく構成されているなど)。問題が発生するのはデプロイを解除するときだけです。このバグは非常に再現性が高く、問題を再現する小さな grails プロジェクトも作成しました。glassfish サーバーの「サンプル」データベース (jndi/sample) に接続された jndi データソースを構成するだけで済みます。

ここに github リンクがあります:
https://github.com/fabier/GlassfishJDBCGrailsPostgresql
そして戦争:
https://www.dropbox.com/s/cb9hmgc6lfabl5x/GlassfishJDBCGrailsPostgresql-0.1.war
と domain.xml ファイル:
https:/ /www.dropbox.com/s/ljealpfp0zxj2r4/domain.xml

Grails 側では、プールへの接続は次のように構成されています。

environments {
    production {
        dataSource {
            dbCreate = "create-drop"
            jndiName = "jdbc/sample"
        }
    }
}

他の webapps または ear 間で共有できる接続プールを強制終了するため、このバグは深刻だと思います。情報については、アンデプロイに関連するある種のクラスアンローダーである可能性があることを感知して、少し調査を行いました。この問題にリンクしている可能性のあるlog4jを見つけたので、試しました:

-Dorg.apache.catalina.loader.WebappClassLoader.ENABLE_CLEAR_REFERENCES=false

しかし、それは役に立ちませんでした。

最後のポイント : 実際、postgresql ドライバーは完全にアンロードされているため、postgresql ドライバーを使用する他の接続プールはアンデプロイ後に使用できません。

Grails メーリング リストの同じ問題へのリンク:
http://grails.1312388.n4.nabble.com/Undeploy-on-Glassfish-causes-connection-pool-to-be-no-more-usable-td4643041.html
へのリンクGlassfish の Jira の同じ問題:
http://java.net/jira/browse/GLASSFISH-20094

ご協力いただきありがとうございます。

4

0 に答える 0