我正在使用连接到 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驱动程序,我的连接池配置正确,等等),只有当我取消部署时才会遇到麻烦。 这个bug是高度可重复的,我甚至做了一个重现问题的小grails项目,你只需要在glassfish服务器上配置连接到“sample”数据库(jndi / sample)的jndi数据源。
这是github链接:
的 https://github.com/fabier/GlassfishJDBCGrailsPostgresql
战争:
的 https://www.dropbox.com/s/cb9hmgc6lfabl5x/GlassfishJDBCGrailsPostgresql-0.1.war
和domains.xml文件:
的 https://www.dropbox.com/s/ljealpfp0zxj2r4/domain.xml
在Grails方面,我与池的连接是这样配置的:
environments {
production {
dataSource {
dbCreate = "create-drop"
jndiName = "jdbc/sample"
}
}
}
我认为这个错误很严重,因为它会杀死一个可以在其他web应用程序或耳朵之间共享的连接池。 有关信息,我做了一些研究,感觉它可能是与取消部署相关的某种类卸载器,我发现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
感谢您的帮助。