Datanucleus + Postgres 9.3 + Amazon RDS 失败

Datanucleus + Postgres 9.3 + Amazon RDS failure

标题几乎说明了一切。

我正在开发 Java 网络应用程序,托管在 Elastic Beanstalk 使用 Datanucleus 4.0.6postgresql 9.3 数据库通信。数据库位于 Amazon RDS.

我已经尝试了所有我能想到的设置组合:

无论我做什么,在尝试开始与数据库通信时都会收到以下错误消息。

 No suitable driver found for jdbc:postgresql://myvalidurl.com:5432/ebdb

如果我使 myvalidurl 绝对无效,我会得到同样的错误,所以我无法判断我是否根本无法 "see" 数据库,或者端口是否已关闭,或者它是否以某种方式关闭'说出预期的 postgres 类型。

最后,我可以 运行 使用本地数据库,一切正常。

有人知道我在配置 Elastic BeanstalkRDS 通话时可能遗漏了什么吗?

当 postgre-jdbc.jar 在 your.war#WEB-APP/lib/ 文件夹中时,会发生这种错误。从那里删除它并将其放入 $CATALINA_HOME/lib/ 文件夹中,它将正常工作。

问题出在 DriverManager class 使用的 classloader 中。

原来 Elastic Beanstalk 的默认 Tomcat 8 安装包括 commons-poolsdbcpDatanucleus 正在使用 dbcp 实现连接到数据库,但出于某种原因,完整的 jdbc URI 并未一直沿调用链向下传递。

我确定这是某种 persistence.xml 类型配置问题,但就我的目的而言,解决方案很简单:

<property name="datanucleus.connectionPoolingType" value="None"/>