部署的Tomcat 6 webapp无法连接到Amazon RDS Oracle实例

时间:2013-05-07 19:36:22

标签: java jdbc amazon-rds oracle11gr2

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

这是我们的堆栈/工具:

  • Tomcat 6
  • Maven 3
  • Spring(mvc,web,orm)3.2.0
  • Hibernate 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:预言:瘦:USER_NAME /密码@本地:2521 / SID *

我们的EC2(登台)实例连接字符串如下所示: * JDBC:预言:瘦:USER_NAME/password@our-rds-instance-name.wercytsdzeszx.us-east-1.rds.amazonaws.com:1521 / SID *

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

我感谢所有反馈。

1 个答案:

答案 0 :(得分:1)

我已经解决了这个问题。

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

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