【问题标题】:Cannot create PoolableConnectionFactory error while starting application in Bluemix在 Bluemix 中启动应用程序时无法创建 PoolableConnectionFactory 错误
【发布时间】:2015-06-17 05:13:16
【问题描述】:

我将 Java 应用程序部署到 IBM Bluemix 后,由于此错误,它无法创建初始数据库连接:

构建新的 Hibernate SessionFactory 2015-04-11 14:24:04 [main] 错误 o.h.util.JDBCExceptionReporter - 无法创建 PoolableConnectionFactory(通信链路故障最后一个数据包 成功发送到服务器是 0 毫秒前。司机有 没有收到来自服务器的任何数据包。)

我尝试将“hibernate.current_session_context_class”设置为“thread”(当我将相同的应用程序部署到 Google Application Engine 时解决了这个问题),但这对 Websphere Liberty Profile 没有帮助:

<prop key="hibernate.current_session_context_class" >
        thread
 </prop>

有什么想法吗?

UPDATE 1 --- 这是真正的根本原因。 Bluemix 提供 ClearDB MySQL 服务,但它的管道无法连接到它:(

构建新的 Hibernate SessionFactory 2015-04-11 15:04:49 [main] 错误 o.h.util.JDBCExceptionReporter - 通信链路故障

最后一个成功发送到服务器的数据包是 0 毫秒 前。驱动没有收到服务器发来的任何数据包。

更新 2 --- 如果尝试从管道机器进行连接,即使是实验性 MySQL 数据库也是禁止访问的:

o.h.util.JDBCExceptionReporter - 无法创建 PoolableConnectionFactory(通讯链路故障

最后一个成功发送到服务器的数据包是 0 毫秒 前。驱动程序没有收到来自服务器的任何数据包。) org.hibernate.exception.GenericJDBCException:无法打开连接 在 org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:140) 在 org.hibe 在 org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:115) 在 org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:75) 引起:org.apache.commons.dbcp.SQLNestedException:无法创建 PoolableConnectionFactory(通讯链路故障

最后一个成功发送到服务器的数据包是 0 毫秒 前。驱动程序没有收到来自服务器的任何数据包。)在 org.apache.commons.dbcp.BasicDataSource.createPoolableConnectionFactory(BasicDataSource.java:1549) 在 org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1388) 在 org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1044) 在 org.springframework.orm.hibernate3.LocalDataSourceConnectionProvider.getConnection(LocalDataSourceConnectionProvider.java:81) 在 org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:446) ... 40 更多原因: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: 通讯链路故障

如果您有任何想法,请告诉我。

【问题讨论】:

  • 不确定“它的管道无法连接到它”是什么意思。您是在谈论 DevOps 构建/测试/部署管道吗?您是否在管道的某个特定部分发现了此问题?
  • 管道的第一步(构建阶段)运行单元测试,它尝试连接到托管在 Bluemix 外部的 MySQL 数据库(即 ClearDB)。如果我尝试使用“cf push”直接部署应用程序甚至不会启动,因为存在“spring-core.jar”并触发错误:javax.servlet.ServletContainerInitializer: Provider org.cloudfoundry.reconfiguration.spring .AutoReconfigurationServletContainerInitializer 无法实例化.. 原因:java.lang.NoClassDefFoundError: org.springframework.context.ApplicationContextInitializer。问题太多了..
  • 我确实在我的 pom.xml 中声明了“spring-context”。看起来“Starter Code”应用程序与管道配合得很好,因为战争是通过“ant”产生的,它将存档文件夹设置为“输出”,我不太确定,但 Maven 构建和部署不可配置直观的方式,我现在使用“-DskipTests”标志只是为了看看我是否可以通过管道进行部署,但到目前为止还没有运气......“部署阶段”继续错过工件(即我的.war),看起来就像它们没有从“build-slave”机器中检索并复制到“deploy-slave”机器中一样。有什么想法???

标签: java hibernate ibm-cloud


【解决方案1】:

嗯,好的。之所以会发生这种情况,是因为 Liberty buildpack 在部署到 Bluemix 期间会为您自动装配 JDBC 连接。对于单元测试,您需要向您的应用提供此连接信息。

【讨论】:

  • 问题是,对于这个练习(学术研究),我必须使用 MySQL 数据库,而且我们知道,在 Bluemix atm 中,我们有 Experimental MySQL 和 ClearDB MySQL(托管在 Bluemix 的基础架构之外),当我发布这个问题时,我试图通过管道运行单元测试以连接 ClearDB,所以我猜管道机器对任何外部通信都是关闭的,这在这种情况下阻止了我。所以我决定使用 IBM 的 MySQL,创建了一个 PHP 应用程序,纯粹是为了使用 PHPMyAdmin 来设置我的数据库。目前我真的很想让“部署阶段”识别我的 .war 工件。
  • ClearDB 托管在公共互联网上。您实际上可以从本地计算机访问它。登录到 Bluemix 并单击您的应用程序。您将看到 ClearDB 的框。将有一个按钮显示“显示凭据”。单击它,您可以获得连接信息。另请查看这篇文章stackoverflow.com/questions/29550468/…,了解如何使用命令行。
猜你喜欢
  • 2020-09-29
  • 2016-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多