3

我们正在构建一个基于 Java Spring 的 Web 应用程序,该应用程序通过 Hibernate 访问 Oracle 后端。

这是我们的堆栈/工具:

  • 雄猫 6
  • Maven 3
  • Spring (mvc, web, orm) 3.2.0
  • 休眠 4.1.9
  • Oracle 11g 第 2 版
  • Intellij IDEA。

为了从我们的本地机器访问 RDS,我们将 localhost:2521 端口转发到 our-rds-instance-name.wercytsdzeszx.us-east-1.rds.amazonaws.com:1521

我们使用 tomcat6-maven-plugin 运行嵌入式 Tomcat。我们用于测试的 Maven 配置是clean package tomcat6:run-war-only。这会将 WAR 文件部署到http://app.local:8080/our-app-name/并允许我们通过此链接测试站点。

使用 Hibernate,当我们从本地嵌入式 Tomcat 实例运行 Web 应用程序时,我们可以成功连接到 RDS 实例。

但是 - 这是它变得愚蠢的地方 - 当我们将 WAR 文件部署到我们的 EC2 实例(它是可以访问 RDS 实例的安全组的一部分)时,应用程序无法再访问数据库。我们收到此错误:

org.hibernate.exception.GenericJDBCException:无法打开连接

这让我难以置信。我们已经在运行 Tomcat 的 EC2 实例上安装了 SQLPlus,我们可以连接到 RDS 实例,因此 EC2 实例确实有权连接到 RDS 实例。

我们的本地连接字符串看起来像这样: *jdbc:oracle:thin:USER_NAME/password@localhost:2521/sid*

我们的 EC2(暂存)实例连接字符串如下所示:*jdbc:oracle:thin:USER_NAME/password@our-rds-instance-name.wercytsdzeszx.us-east-1.rds.amazonaws.com:1521/sid*

我可以提供更多细节,但我首先想解决主要问题,所以我不会用无用的信息混淆水域。

我感谢所有反馈。

托尼

4

1 回答 1

1

我已经解决了这个问题。

事实证明,罪魁祸首是 Oracle 时区错误(ORA-01882:未找到时区)。我们用于 EC2 AMI 的 Ubuntu 服务器有一个默认时区集,我猜 Java 或 Oracle 无法识别该时区。我已经看到了这个错误,但无知地认为它与数据库连接错误无关。

我们使用dpkg-reconfigure tzdata命令将时区设置为正确的时区并重新启动 Tomcat。这使我们能够成功连接到 Oracle 数据库。

托尼

于 2013-05-08T15:49:02.627 回答