从本地 GlassFish 连接到 Heroku PostgreSQL 的问题

Issue connecting to Heroku PostgreSQL from local GlassFish

我正在尝试在本地 GlassFish 服务器中设置 JDBC 连接池和资源以连接到 Heroku PostgreSQL 实例。

我已经在 Tomcat 中尝试将其设置为资源,它工作正常,但在 GlassFish 中我遇到了一些问题。

首先,我不得不将 Java 8 的版本降级到 151,以阻止我遇到的一个错误。现在,当我尝试在我的应用程序中执行查询时,我得到:

java.net.ConnectException: Connection refused (Connection refused)

我认为这与必须使用 SSL 的 Heroku PostgreSQL 连接有关,但我不确定我需要在 GlassFish 中做什么来配置它。

有人有这方面的经验吗?

经过大量的摸索和谷歌搜索,我终于开始工作了。上面的例外是红鲱鱼。它抱怨无法连接到作为 GlassFish 默认资源的本地 Derby 数据库。这意味着问题实际上与无法找到我指定的资源有关。

以下是我在 GlassFish 5 中建立连接所需的步骤:

  • 将 JAVA_HOME 设置为 JDK 1.8。0_151(1.8 的任何较新版本都不起作用)GlassFish 需要在此版本上 运行。
  • 在您的 Bean class 中使用 @Resource(mappedName = "jdbc/postgresql")。这是我找到我的 jdbc/postgresql 资源的唯一方法(@Resource(name = "jdbc/postgresql")@Resource(name = "java:comp/env/jdbc/postgresql")@Resource(lookup = "java:comp/env/jdbc/postgresql") 不起作用)。
  • 连接 Url 必须是这样的:jdbc:postgresql://<host>:<port>/<databse>?sslmode=require(原来我有这个 jdbc:postgresql://<host>:<port>/<databse>?ssl=true&amp;sslfactory=org.postgresql.ssl.NonValidatingFactory 在其他地方为我工作)。

所以重点是在资源属性中使用JDK1.8.0_151,mappedNamesslmode=require 在连接字符串中。

生活不应该这么复杂...